summaryrefslogtreecommitdiff
blob: 79597233030321ec7ec343464a0b1ae2ae903748 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
* 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