You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sci-biology/bamtools/files/bamtools-2.4.1-fix-build-sy...

210 lines
7.4 KiB

* Unbundle jsoncpp
* Remove forcing C++98
* Remove forcing CMAKE_BUILD_TYPE
* Remove -fPIC globally
* Fix LFS macro definitions
* Make building static library optional
* Use GNUInstallDirs conventions
* Install .pc file
See also: https://bugs.gentoo.org/show_bug.cgi?id=550144
Taken from https://github.com/pezmaster31/bamtools/pull/139
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,14 @@
project( BamTools )
# Cmake requirements
-cmake_minimum_required( VERSION 2.6.4 )
+cmake_minimum_required( VERSION 3.0 )
+
+# on macOS, MACOSX_RPATH is enabled by default on more recent versions
+# of CMake. Disable this behaviour, and let user enable it if need be.
+cmake_policy( SET CMP0042 OLD )
+
+# Adhere to GNU filesystem layout conventions
+include( GNUInstallDirs )
# Force the build directory to be different from source directory
macro( ENSURE_OUT_OF_SOURCE_BUILD MSG )
@@ -34,18 +41,21 @@
set( BamTools_VERSION_MINOR 4 )
set( BamTools_VERSION_BUILD 1 )
-# set our library and executable destination dirs
-set( EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin" )
-set( LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib" )
-
# define compiler flags for all code
-set( CMAKE_BUILD_TYPE Release )
-set( CMAKE_CXX_FLAGS_RELEASE "-std=c++98 ${CMAKE_CXX_FLAGS_RELEASE}" )
-add_definitions( -Wall -D_FILE_OFFSET_BITS=64 )
+add_definitions( -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE )
+add_compile_options( -Wall )
# -----------------------------------------------
# handle platform-/environment-specific defines
+# Make building the static library optional
+option( BUILD_STATIC "Build static libbamtools archive" OFF )
+if( BUILD_STATIC )
+ set( BAMTOOLS_CMD_LDFLAGS BamTools-static )
+else()
+ set( BAMTOOLS_CMD_LDFLAGS BamTools )
+endif()
+
# If planning to run in Node.js environment, run:
# cmake -DEnableNodeJS=true
if( EnableNodeJS )
@@ -57,6 +67,11 @@
add_definitions( -DSUN_OS )
endif()
+# find system JsonCpp
+find_package( PkgConfig )
+pkg_search_module( JSONCPP jsoncpp>=1 )
+
+
# -------------------------------------------
# add our includes root path
--- a/src/api/CMakeLists.txt
+++ b/src/api/CMakeLists.txt
@@ -10,7 +10,6 @@
# add compiler definitions
add_definitions( -DBAMTOOLS_API_LIBRARY ) # (for proper exporting of library symbols)
-add_definitions( -fPIC ) # (attempt to force PIC compiling on CentOS, not being set on shared libs by CMake)
# fetch all internal source files
add_subdirectory( internal )
@@ -31,18 +30,6 @@
${InternalSources}
)
-# create main BamTools API shared library
-add_library( BamTools SHARED ${BamToolsAPISources} )
-set_target_properties( BamTools PROPERTIES
- SOVERSION "2.4.1"
- OUTPUT_NAME "bamtools" )
-
-# create main BamTools API static library
-add_library( BamTools-static STATIC ${BamToolsAPISources} )
-set_target_properties( BamTools-static PROPERTIES
- OUTPUT_NAME "bamtools"
- PREFIX "lib" )
-
# link libraries automatically with zlib (and Winsock2, if applicable)
if( WIN32 )
set( APILibs z ws2_32 )
@@ -50,12 +37,23 @@
set( APILibs z )
endif()
-target_link_libraries( BamTools ${APILibs} )
-target_link_libraries( BamTools-static ${APILibs} )
+# create main BamTools API shared library
+add_library( BamTools SHARED ${BamToolsAPISources} )
+set_target_properties( BamTools PROPERTIES
+ SOVERSION "2.4.1"
+ OUTPUT_NAME "bamtools" )
+target_link_libraries( BamTools ${APILibs} )
+install( TARGETS BamTools LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" )
-# set library install destinations
-install( TARGETS BamTools LIBRARY DESTINATION "lib/bamtools" RUNTIME DESTINATION "bin")
-install( TARGETS BamTools-static ARCHIVE DESTINATION "lib/bamtools")
+# create main BamTools API static library
+if( BUILD_STATIC )
+ add_library( BamTools-static STATIC ${BamToolsAPISources} )
+ set_target_properties( BamTools-static PROPERTIES
+ OUTPUT_NAME "bamtools"
+ PREFIX "lib" )
+ target_link_libraries( BamTools-static ${APILibs} )
+ install( TARGETS BamTools-static ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" )
+endif()
# export API headers
include(../ExportHeader.cmake)
--- a/src/bamtools.pc.in
+++ b/src/bamtools.pc.in
@@ -0,0 +1,11 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
+includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+
+Name: BamTools
+Description: BamTools is a C++ library for reading and manipulating BAM files
+Version: @BamTools_VERSION_MAJOR@.@BamTools_VERSION_MINOR@.@BamTools_VERSION_BUILD@
+
+Libs: -L${libdir} -lbamtools
+Cflags: -I${includedir}
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,3 +14,7 @@
include( ExportHeader.cmake )
set( SharedIncludeDir "shared" )
ExportHeader( SharedHeaders shared/bamtools_global.h ${SharedIncludeDir} )
+
+# configure and install pkg-config file
+configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/bamtools.pc.in ${CMAKE_CURRENT_BINARY_DIR}/bamtools-1.pc @ONLY )
+install( FILES ${CMAKE_CURRENT_BINARY_DIR}/bamtools-1.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig )
--- a/src/ExportHeader.cmake
+++ b/src/ExportHeader.cmake
@@ -18,10 +18,10 @@
add_custom_command( TARGET ${MODULE} COMMAND
${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_CURRENT_SOURCE_DIR}/${FILE}"
- "${CMAKE_SOURCE_DIR}/include/${DEST}/${FILENAME}" )
+ "${CMAKE_CURRENT_BINARY_DIR}/include/${DEST}/${FILENAME}" )
# make sure files are properly 'installed'
- install( FILES "${FILE}" DESTINATION "include/bamtools/${DEST}" )
+ install( FILES "${FILE}" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/bamtools/${DEST}" )
endfunction( ExportHeader )
--- a/src/third_party/CMakeLists.txt
+++ b/src/third_party/CMakeLists.txt
@@ -5,5 +5,3 @@
# src/third-party/
# ==========================
-# list third-party subdirectories to build in
-add_subdirectory( jsoncpp )
--- a/src/toolkit/CMakeLists.txt
+++ b/src/toolkit/CMakeLists.txt
@@ -35,10 +35,14 @@
OUTPUT_NAME "bamtools"
)
# make version info available in application
-configure_file( bamtools_version.h.in ${BamTools_SOURCE_DIR}/src/toolkit/bamtools_version.h )
+configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/bamtools_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/bamtools_version.h )
+include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
+
+# set include paths for system JsonCpp
+target_include_directories( bamtools_cmd PRIVATE ${JSONCPP_INCLUDE_DIRS} )
# define libraries to link
-target_link_libraries( bamtools_cmd BamTools BamTools-utils jsoncpp )
+target_link_libraries( bamtools_cmd BamTools-utils ${BAMTOOLS_CMD_LDFLAGS} ${JSONCPP_LDFLAGS} )
# set application install destinations
-install( TARGETS bamtools_cmd DESTINATION "bin")
+install( TARGETS bamtools_cmd DESTINATION "${CMAKE_INSTALL_BINDIR}" )
--- a/src/utils/CMakeLists.txt
+++ b/src/utils/CMakeLists.txt
@@ -8,9 +8,8 @@
# list include paths
include_directories( ${BamTools_SOURCE_DIR}/src/api )
-# add compiler definitions
+# add compiler definitions
add_definitions( -DBAMTOOLS_UTILS_LIBRARY ) # (for proper exporting of library symbols)
-add_definitions( -fPIC ) # (attempt to force PIC compiling on CentOS, not being set on shared libs by CMake)
# create BamTools utils library
add_library( BamTools-utils STATIC