1
1
cmake_minimum_required (VERSION 2.8)
2
2
project (cmetrics C)
3
+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
4
+
5
+ # Define macro to identify Windows system (without Cygwin)
6
+ if (CMAKE_SYSTEM_NAME MATCHES "Windows" )
7
+ set (CMT_SYSTEM_WINDOWS On )
8
+ add_definitions (-DCMT_SYSTEM_WINDOWS)
9
+ endif ()
3
10
4
11
# CMetrics Version
5
12
set (CMT_VERSION_MAJOR 0)
@@ -10,10 +17,12 @@ set(CMT_VERSION_STR "${CMT_VERSION_MAJOR}.${CMT_VERSION_MINOR}.${CMT_VERSION_PAT
10
17
# Include helpers
11
18
include (cmake/macros .cmake)
12
19
include (CheckCSourceCompiles)
20
+ include (GNUInstallDirs)
13
21
14
22
# Configuration options
15
- option (CMT_DEV "Enable development mode" No )
16
- option (CMT_TESTS "Enable unit testing" No )
23
+ option (CMT_DEV "Enable development mode" No )
24
+ option (CMT_TESTS "Enable unit testing" No )
25
+ option (CMT_INSTALL_TARGETS "Enable subdirectory library installations" Yes )
17
26
18
27
if (CMT_DEV)
19
28
set (CMT_TESTS Yes )
@@ -37,6 +46,30 @@ if(CMT_HAVE_TIMESPEC_GET)
37
46
CMT_DEFINITION(CMT_HAVE_TIMESPEC_GET)
38
47
endif ()
39
48
49
+ # gmtime_r() support
50
+ check_c_source_compiles("
51
+ #include <time.h>
52
+ int main() {
53
+ struct tm tm;
54
+ struct timespec tms;
55
+ return gmtime_r(&tms.tv_sec, &tm);
56
+ }" CMT_HAVE_GMTIME_R)
57
+ if (CMT_HAVE_GMTIME_R)
58
+ CMT_DEFINITION(CMT_HAVE_GMTIME_R)
59
+ endif ()
60
+
61
+ # gmtime_s() support
62
+ check_c_source_compiles("
63
+ #include <time.h>
64
+ int main() {
65
+ struct tm tm;
66
+ struct timespec tms;
67
+ return gmtime_s(&tm, &tms.tv_sec);
68
+ }" CMT_HAVE_GMTIME_S)
69
+ if (CMT_HAVE_GMTIME_S)
70
+ CMT_DEFINITION(CMT_HAVE_GMTIME_S)
71
+ endif ()
72
+
40
73
# clock_get_time() support for macOS.
41
74
check_c_source_compiles("
42
75
#include <mach/clock.h>
@@ -66,26 +99,141 @@ configure_file(
66
99
"${PROJECT_SOURCE_DIR} /include/cmetrics/cmt_info.h"
67
100
)
68
101
102
+ # Installation Directories
103
+ # ========================
104
+ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" )
105
+ set (CMT_INSTALL_LIBDIR "lib" )
106
+ set (CMT_INSTALL_INCLUDEDIR "include" )
107
+ else ()
108
+ set (CMT_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX} /${CMAKE_INSTALL_LIBDIR} " )
109
+ set (CMT_INSTALL_INCLUDEDIR "${CMAKE_INSTALL_PREFIX} /include" )
110
+ endif ()
111
+
69
112
# xxHash
70
113
if (NOT TARGET xxhash)
71
114
# Do something when target found
72
115
set (XXHASH_BUILD_ENABLE_INLINE_API OFF )
73
116
set (XXHASH_BUILD_XXHSUM OFF )
74
117
set (BUILD_SHARED_LIBS OFF )
75
118
add_subdirectory (lib/xxHash-0.8.0/cmake_unofficial EXCLUDE_FROM_ALL )
119
+
120
+ if (CMT_INSTALL_TARGETS)
121
+ install (TARGETS xxhash
122
+ RUNTIME DESTINATION ${CMT_INSTALL_BINDIR}
123
+ LIBRARY DESTINATION ${CMT_INSTALL_LIBDIR}
124
+ ARCHIVE DESTINATION ${CMT_INSTALL_LIBDIR}
125
+ COMPONENT library)
126
+ endif ()
76
127
endif ()
77
128
78
129
# mpack
79
130
if (NOT TARGET mpack-static )
80
131
include_directories (lib/mpack/src/)
81
132
add_subdirectory (lib/mpack EXCLUDE_FROM_ALL )
133
+
134
+ if (CMT_INSTALL_TARGETS)
135
+ install (TARGETS mpack-static
136
+ RUNTIME DESTINATION ${CMT_INSTALL_BINDIR}
137
+ LIBRARY DESTINATION ${CMT_INSTALL_LIBDIR}
138
+ ARCHIVE DESTINATION ${CMT_INSTALL_LIBDIR}
139
+ COMPONENT library)
140
+
141
+ install (FILES lib/mpack/src/mpack/mpack.h
142
+ DESTINATION ${CMT_INSTALL_INCLUDEDIR} /mpack
143
+ COMPONENT headers
144
+ PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
145
+ endif ()
82
146
endif ()
83
147
84
148
# Source code
149
+ add_subdirectory (include )
85
150
add_subdirectory (src)
151
+ add_subdirectory (lib/monkey/include )
86
152
87
153
# Tests
88
154
if (CMT_TESTS)
89
155
enable_testing ()
90
156
add_subdirectory (tests)
91
157
endif ()
158
+
159
+ # Installer Generation (Cpack)
160
+ # ============================
161
+
162
+ set (CPACK_PACKAGE_VERSION ${CMT_VERSION_STR} )
163
+ set (CPACK_PACKAGE_NAME "cmetrics" )
164
+ set (CPACK_PACKAGE_RELEASE 1)
165
+ set (CPACK_PACKAGE_CONTACT
"Eduardo Silva <[email protected] >" )
166
+ set (CPACK_PACKAGE_VENDOR "Calyptia" )
167
+ set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR} /LICENSE" )
168
+ set (CPACK_PACKAGING_INSTALL_PREFIX "/" )
169
+
170
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME} -${CPACK_PACKAGE_VERSION} -${CPACK_PACKAGE_RELEASE} .${CMAKE_SYSTEM_PROCESSOR} " )
171
+
172
+ if (CMT_SYSTEM_WINDOWS)
173
+ set (CPACK_GENERATOR "ZIP" )
174
+
175
+ if (CMAKE_SIZEOF_VOID_P EQUAL 8)
176
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME} -${CPACK_PACKAGE_VERSION} -win64" )
177
+ else ()
178
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME} -${CPACK_PACKAGE_VERSION} -win32" )
179
+ endif ()
180
+ endif ()
181
+
182
+
183
+ # Enable components
184
+ set (CPACK_DEB_COMPONENT_INSTALL ON )
185
+ set (CPACK_RPM_COMPONENT_INSTALL ON )
186
+ set (CPACK_COMPONENTS_ALL ${CPACK_COMPONENTS_ALL} binary library headers)
187
+ set (CPACK_COMPONENTS_GROUPING "ONE_PER_GROUP" )
188
+
189
+ set (CPACK_COMPONENT_BINARY_GROUP "RUNTIME" )
190
+ set (CPACK_COMPONENT_LIBRARY_GROUP "RUNTIME" )
191
+
192
+ # Debian package setup and name sanitizer
193
+ set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON )
194
+
195
+ find_program (DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems" )
196
+ if (DPKG_PROGRAM)
197
+ execute_process (
198
+ COMMAND ${DPKG_PROGRAM} --print-architecture
199
+ OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
200
+ OUTPUT_STRIP_TRAILING_WHITESPACE
201
+ )
202
+
203
+ set (CPACK_DEBIAN_HEADERS_FILE_NAME "${CPACK_PACKAGE_NAME} _${CPACK_PACKAGE_VERSION} _${CPACK_DEBIAN_PACKAGE_ARCHITECTURE} -headers.deb" )
204
+ set (CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME} " )
205
+ set (CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_PACKAGE_NAME} _${CPACK_PACKAGE_VERSION} _${CPACK_DEBIAN_PACKAGE_ARCHITECTURE} .deb" )
206
+ set (CPACK_DEBIAN_RUNTIME_PACKAGE_CONTROL_EXTRA
207
+ ${CMAKE_CURRENT_SOURCE_DIR} /debian/conffiles
208
+ )
209
+ endif ()
210
+
211
+ # RPM Generation information
212
+ set (CPACK_RPM_PACKAGE_GROUP "System Environment/Daemons" )
213
+ set (CPACK_RPM_PACKAGE_LICENSE "Apache v2.0" )
214
+ set (CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} )
215
+ set (CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR} /cpack/description" )
216
+ set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Fast data collector for Linux" )
217
+ set (CPACK_RPM_SPEC_MORE_DEFINE "%define ignore \# " )
218
+ set (CPACK_RPM_USER_FILELIST
219
+ "%ignore /lib"
220
+ "%ignore /lib64"
221
+ "%ignore /lib64/pkgconfig"
222
+ "%ignore /usr/local"
223
+ "%ignore /usr/local/bin" )
224
+
225
+ set (CPACK_RPM_PACKAGE_AUTOREQ ON )
226
+ set (CPACK_RPM_RUNTIME_PACKAGE_NAME "${CPACK_PACKAGE_NAME} " )
227
+ set (CPACK_RPM_HEADERS_FILE_NAME "${CPACK_PACKAGE_NAME} -${CPACK_PACKAGE_VERSION} -${CPACK_PACKAGE_RELEASE} .${CMAKE_SYSTEM_PROCESSOR} -headers.rpm" )
228
+ set (CPACK_RPM_RUNTIME_FILE_NAME "${CPACK_PACKAGE_NAME} -${CPACK_PACKAGE_VERSION} -${CPACK_PACKAGE_RELEASE} .${CMAKE_SYSTEM_PROCESSOR} .rpm" )
229
+
230
+ # CPack: DEB
231
+ set (CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON )
232
+
233
+ # CPack: Windows System
234
+ if (CPACK_GENERATOR MATCHES "ZIP" )
235
+ set (CPACK_MONOLITHIC_INSTALL 1)
236
+ set (CPACK_PACKAGE_INSTALL_DIRECTORY "cmetrics" )
237
+ endif ()
238
+
239
+ include (CPack)
0 commit comments