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.
210 lines
7.4 KiB
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
|