@@ -12,21 +12,49 @@ enable_language(C)
12
12
enable_testing ()
13
13
14
14
set (SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR} " )
15
- set (BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR} " )
16
15
17
16
########################################################################
18
17
# determine version
19
18
########################################################################
20
19
foreach (which MAJOR MINOR PATCH )
21
- file (STRINGS "${SOURCE_DIR} /include/filemq_library.h" FILEMQ_VERSION_STRING REGEX "#define FILEMQ_VERSION_${which} " )
22
- string (REGEX MATCH "#define FILEMQ_VERSION_${which} ([0-9_]+)" FILEMQ_REGEX_MATCH "${FILEMQ_VERSION_STRING} " )
20
+ file (
21
+ STRINGS
22
+ "${SOURCE_DIR} /include/filemq_library.h"
23
+ FILEMQ_VERSION_STRING REGEX
24
+ "#define FILEMQ_VERSION_${which} "
25
+ )
26
+ string (
27
+ REGEX MATCH
28
+ "#define FILEMQ_VERSION_${which} ([0-9_]+)"
29
+ FILEMQ_REGEX_MATCH
30
+ "${FILEMQ_VERSION_STRING} "
31
+ )
23
32
if (NOT FILEMQ_REGEX_MATCH )
24
- message (FATAL_ERROR "failed to parse FILEMQ_VERSION_${which} from filemq.h" )
33
+ message (
34
+ FATAL_ERROR
35
+ "failed to parse FILEMQ_VERSION_${which} from filemq.h"
36
+ )
25
37
endif ()
26
38
set (FILEMQ_${which}_VERSION ${CMAKE_MATCH_1} )
27
39
endforeach (which )
28
40
29
- set (FILEMQ_VERSION ${FILEMQ_MAJOR_VERSION} .${FILEMQ_MINOR_VERSION}.${FILEMQ_PATCH_VERSION} )
41
+ set (
42
+ FILEMQ_VERSION
43
+ ${FILEMQ_MAJOR_VERSION} .${FILEMQ_MINOR_VERSION}.${FILEMQ_PATCH_VERSION}
44
+ )
45
+
46
+ ########################################################################
47
+ # options
48
+ ########################################################################
49
+ if (EXISTS ".git" )
50
+ OPTION (WITH_DRAFTS "Build and install draft classes and methods" ON )
51
+ else ()
52
+ OPTION (WITH_DRAFTS "Build and install draft classes and methods" OFF )
53
+ endif ()
54
+
55
+ IF (WITH_DRAFTS )
56
+ ADD_DEFINITIONS (-DWITH_DRAFTS )
57
+ ENDIF (WITH_DRAFTS )
30
58
31
59
########################################################################
32
60
# platform.h
@@ -45,22 +73,25 @@ if (NOT HAVE_NET_IF_H)
45
73
CHECK_INCLUDE_FILE ("net/if.h" HAVE_NET_IF_H )
46
74
endif ()
47
75
48
- file (WRITE "${BINARY_DIR} /platform.h.in" "
76
+ file (WRITE "${SOURCE_DIR} /src /platform.h.in" "
49
77
#cmakedefine HAVE_LINUX_WIRELESS_H
50
78
#cmakedefine HAVE_NET_IF_H
51
79
#cmakedefine HAVE_NET_IF_MEDIA_H
52
80
#cmakedefine HAVE_GETIFADDRS
53
81
#cmakedefine HAVE_FREEIFADDRS
54
82
" )
55
83
56
- configure_file ("${BINARY_DIR} / platform.h.in" "${BINARY_DIR} /platform.h" )
84
+ configure_file ("${SOURCE_DIR} /src/ platform.h.in" "${SOURCE_DIR} /src /platform.h" )
57
85
58
86
#The MSVC C compiler is too out of date,
59
87
#so the sources have to be compiled as c++
60
88
if (MSVC )
61
89
enable_language (CXX )
62
90
file (GLOB sources "${SOURCE_DIR} /src/*.c" )
63
- set_source_files_properties (${sources} PROPERTIES LANGUAGE CXX )
91
+ set_source_files_properties (
92
+ ${sources}
93
+ PROPERTIES LANGUAGE CXX
94
+ )
64
95
set (MORE_LIBRARIES ws2_32 Rpcrt4 Iphlpapi )
65
96
endif ()
66
97
@@ -75,50 +106,89 @@ if (CYGWIN)
75
106
endif ()
76
107
77
108
list (APPEND CMAKE_MODULE_PATH "${SOURCE_DIR} " )
109
+ set (OPTIONAL_LIBRARIES )
78
110
79
111
########################################################################
80
- # ZMQ dependency
112
+ # LIBSODIUM dependency
81
113
########################################################################
82
- find_package (ZeroMQ REQUIRED )
83
- include_directories (${ZEROMQ_INCLUDE_DIRS} )
84
- list (APPEND MORE_LIBRARIES ${ZEROMQ_LIBRARIES} )
114
+ find_package (libsodium )
115
+ IF (LIBSODIUM_FOUND )
116
+ include_directories (${LIBSODIUM_INCLUDE_DIRS} )
117
+ list (APPEND MORE_LIBRARIES ${LIBSODIUM_LIBRARIES} )
118
+ add_definitions (-DHAVE_LIBSODIUM )
119
+ list (APPEND OPTIONAL_LIBRARIES ${LIBSODIUM_LIBRARIES} )
120
+ ENDIF (LIBSODIUM_FOUND )
121
+
122
+ ########################################################################
123
+ # LIBZMQ dependency
124
+ ########################################################################
125
+ find_package (libzmq REQUIRED )
126
+ IF (LIBZMQ_FOUND )
127
+ include_directories (${LIBZMQ_INCLUDE_DIRS} )
128
+ list (APPEND MORE_LIBRARIES ${LIBZMQ_LIBRARIES} )
129
+ ELSE (LIBZMQ_FOUND )
130
+ message ( FATAL_ERROR "libzmq not found." )
131
+ ENDIF (LIBZMQ_FOUND )
85
132
86
133
########################################################################
87
134
# CZMQ dependency
88
135
########################################################################
89
- find_package (CZMQ REQUIRED )
90
- include_directories (${CZMQ_INCLUDE_DIRS} )
91
- list (APPEND MORE_LIBRARIES ${CZMQ_LIBRARIES} )
136
+ find_package (czmq REQUIRED )
137
+ IF (CZMQ_FOUND )
138
+ include_directories (${CZMQ_INCLUDE_DIRS} )
139
+ list (APPEND MORE_LIBRARIES ${CZMQ_LIBRARIES} )
140
+ ELSE (CZMQ_FOUND )
141
+ message ( FATAL_ERROR "czmq not found." )
142
+ ENDIF (CZMQ_FOUND )
92
143
93
144
########################################################################
94
145
# includes
95
146
########################################################################
96
147
set (filemq_headers
97
148
include /filemq_library.h
98
149
include /filemq.h
150
+ )
151
+
152
+ IF (WITH_DRAFTS )
153
+ list (APPEND filemq_headers
99
154
include /fmq_msg.h
100
155
include /fmq_server.h
101
156
include /fmq_client.h
102
157
)
158
+ ENDIF (WITH_DRAFTS )
159
+
103
160
source_group ("Header Files" FILES ${filemq_headers} )
104
161
install (FILES ${filemq_headers} DESTINATION include )
105
162
106
163
########################################################################
107
164
# library
108
165
########################################################################
109
- include_directories ("${BINARY_DIR} " "${SOURCE_DIR} /include" )
166
+ include_directories ("${SOURCE_DIR} /src " "${SOURCE_DIR} /include" )
110
167
set (filemq_sources
168
+ )
169
+
170
+ IF (WITH_DRAFTS )
171
+ list (APPEND filemq_sources
111
172
src/fmq_msg.c
112
173
src/fmq_server.c
113
174
src/fmq_client.c
114
175
)
115
- source_group ("Source Files" FILES ${filemq_sources} )
176
+ ENDIF (WITH_DRAFTS )
177
+
178
+ source_group ("Source Files" FILES ${filemq_sources} )
116
179
if (NOT DEFINED BUILD_SHARED_LIBS )
117
180
SET (BUILD_SHARED_LIBS ON )
118
181
endif ()
119
182
add_library (filemq ${filemq_sources} )
120
- set_target_properties (filemq PROPERTIES DEFINE_SYMBOL "LIBFILEMQ_EXPORTS" )
121
- target_link_libraries (filemq ${ZEROMQ_LIBRARIES} ${MORE_LIBRARIES} )
183
+ set_target_properties (filemq
184
+ PROPERTIES DEFINE_SYMBOL "LIBFILEMQ_EXPORTS"
185
+ )
186
+ set_target_properties (filemq
187
+ PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${SOURCE_DIR} /src"
188
+ )
189
+ target_link_libraries (filemq
190
+ ${ZEROMQ_LIBRARIES} ${MORE_LIBRARIES}
191
+ )
122
192
123
193
install (TARGETS filemq
124
194
LIBRARY DESTINATION "lib${LIB_SUFFIX} " # .so file
@@ -134,22 +204,98 @@ set(prefix "${CMAKE_INSTALL_PREFIX}")
134
204
set (exec_prefix "\$ {prefix}" )
135
205
set (libdir "\$ {prefix}/lib${LIB_SUFFIX} " )
136
206
set (includedir "\$ {prefix}/include" )
207
+ IF (WITH_DRAFTS )
208
+ set (pkg_config_defines "-DWITH_DRAFTS=1" )
209
+ ELSE (WITH_DRAFTS )
210
+ set (pkg_config_defines "" )
211
+ ENDIF (WITH_DRAFTS )
137
212
configure_file (
138
213
"${SOURCE_DIR} /src/libfilemq.pc.in"
139
- "${BINARY_DIR} /libfilemq.pc"
214
+ "${SOURCE_DIR} /src /libfilemq.pc"
140
215
@ONLY )
141
216
142
217
install (
143
- FILES "${BINARY_DIR} /libfilemq.pc"
218
+ FILES "${SOURCE_DIR} /src /libfilemq.pc"
144
219
DESTINATION "lib${LIB_SUFFIX} /pkgconfig"
145
220
)
146
221
222
+ ########################################################################
223
+ # executables
224
+ ########################################################################
225
+ add_executable (
226
+ filemq_server
227
+ "${SOURCE_DIR} /src/filemq_server.c"
228
+ )
229
+ target_link_libraries (
230
+ filemq_server
231
+ filemq
232
+ ${LIBZMQ_LIBRARIES}
233
+ ${CZMQ_LIBRARIES}
234
+ ${OPTIONAL_LIBRARIES}
235
+ )
236
+ set_target_properties (
237
+ filemq_server
238
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${SOURCE_DIR} /src"
239
+ )
240
+ add_executable (
241
+ filemq_client
242
+ "${SOURCE_DIR} /src/filemq_client.c"
243
+ )
244
+ target_link_libraries (
245
+ filemq_client
246
+ filemq
247
+ ${LIBZMQ_LIBRARIES}
248
+ ${CZMQ_LIBRARIES}
249
+ ${OPTIONAL_LIBRARIES}
250
+ )
251
+ set_target_properties (
252
+ filemq_client
253
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${SOURCE_DIR} /src"
254
+ )
255
+ add_executable (
256
+ filemq_selftest
257
+ "${SOURCE_DIR} /src/filemq_selftest.c"
258
+ )
259
+ target_link_libraries (
260
+ filemq_selftest
261
+ filemq
262
+ ${LIBZMQ_LIBRARIES}
263
+ ${CZMQ_LIBRARIES}
264
+ ${OPTIONAL_LIBRARIES}
265
+ )
266
+ set_target_properties (
267
+ filemq_selftest
268
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${SOURCE_DIR} /src"
269
+ )
270
+
147
271
########################################################################
148
272
# tests
149
273
########################################################################
150
- add_executable (filemq_selftest "${SOURCE_DIR} /src/filemq_selftest.c" )
151
- target_link_libraries (filemq_selftest filemq ${ZEROMQ_LIBRARIES} )
152
- add_test (filemq_selftest filemq_selftest )
274
+ set (CLASSTEST_TIMEOUT 5 CACHE STRING "Timeout of the selftest of a class" )
275
+ set (TOTAL_TIMEOUT 20 CACHE STRING "Timout of the total testsuite" )
276
+
277
+ set (TEST_CLASSES
278
+ )
279
+
280
+ IF (WITH_DRAFTS )
281
+ list (APPEND TEST_CLASSES
282
+ fmq_msg
283
+ fmq_server
284
+ fmq_client
285
+ )
286
+ ENDIF (WITH_DRAFTS )
287
+
288
+ foreach (TEST_CLASS ${TEST_CLASSES} )
289
+ add_test (
290
+ NAME ${TEST_CLASS}
291
+ COMMAND filemq_selftest --continue --verbose --test ${TEST_CLASS}
292
+ )
293
+ set_tests_properties (
294
+ ${TEST_CLASS}
295
+ PROPERTIES TIMEOUT ${CLASSTEST_TIMEOUT}
296
+ )
297
+ endforeach (TEST_CLASS )
298
+
153
299
154
300
########################################################################
155
301
# summary
0 commit comments