/
CMakeLists.txt
313 lines (268 loc) · 13.3 KB
/
CMakeLists.txt
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
PROJECT(Memcached)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
#
# Set the include path
#
SET(INCLUDE_DIRS ${DEPS_INCLUDE_DIR}
${LIBEVENT_INCLUDE_DIR}
${SNAPPY_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${CMAKE_INSTALL_PREFIX}/include
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/../platform/include
${CMAKE_CURRENT_SOURCE_DIR}/../libvbucket/include)
IF (TCMALLOC_FOUND)
SET(INCLUDE_DIRS ${INCLUDE_DIRS} ${TCMALLOC_INCLUDE_DIR})
ENDIF (TCMALLOC_FOUND)
EXECUTE_PROCESS(COMMAND git describe
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE MEMCACHED_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
CHECK_INCLUDE_FILE_CXX("atomic" HAVE_ATOMIC)
CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/config.cmake.h
${CMAKE_CURRENT_BINARY_DIR}/config.h)
INCLUDE_DIRECTORIES(BEFORE ${INCLUDE_DIRS})
IF (WIN32)
INCLUDE_DIRECTORIES(AFTER ${CMAKE_CURRENT_SOURCE_DIR}/../platform/include/win32)
ELSE (WIN32)
ADD_LIBRARY(file_logger SHARED extensions/loggers/file_logger.c)
TARGET_LINK_LIBRARIES(file_logger platform z)
SET_TARGET_PROPERTIES(file_logger PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(file_logger PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
INSTALL(TARGETS file_logger
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/memcached
ARCHIVE DESTINATION lib/memcached)
ADD_EXECUTABLE(mcbasher programs/mcbasher.cc)
TARGET_LINK_LIBRARIES(mcbasher platform ${COUCHBASE_NETWORK_LIBS})
ADD_EXECUTABLE(timedrun programs/timedrun.c)
ENDIF (WIN32)
#
# Use TCMalloc if we have it
#
IF (TCMALLOC_FOUND)
SET(TCMALLOC_LIBRARY ${TCMALLOC_LIBRARIES})
ELSE(TCMALLOC_FOUND)
ADD_DEFINITIONS(-DDONT_HAVE_TCMALLOC=1)
ENDIF(TCMALLOC_FOUND)
#
# Add all of the libraries
#
ADD_LIBRARY(mcd_util SHARED
utilities/config_parser.c
utilities/engine_loader.c
utilities/extension_loggers.c
utilities/util.c)
ADD_LIBRARY(default_engine SHARED
engines/default_engine/assoc.c
engines/default_engine/default_engine.c
engines/default_engine/items.c
engines/default_engine/slabs.c)
ADD_LIBRARY(bucket_engine SHARED
engines/bucket_engine/bucket_engine.c
engines/bucket_engine/topkeys.c
engines/bucket_engine/genhash.c)
ADD_LIBRARY(basic_engine_testsuite SHARED testsuite/basic_engine_testsuite.c)
ADD_LIBRARY(blackhole_logger SHARED extensions/loggers/blackhole_logger.c)
ADD_LIBRARY(fragment_rw_ops SHARED extensions/protocol/fragment_rw.c)
ADD_LIBRARY(stdin_term_handler SHARED extensions/daemon/stdin_check.c)
ADD_LIBRARY(tap_mock_engine SHARED engines/tap_mock_engine/tap_mock_engine.cc)
ADD_LIBRARY(bucket_engine_mock_engine SHARED
engines/bucket_engine/mock_engine.c
engines/bucket_engine/genhash.c)
SET_TARGET_PROPERTIES(default_engine PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(bucket_engine PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(basic_engine_testsuite PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(blackhole_logger PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(fragment_rw_ops PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(stdin_term_handler PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(tap_mock_engine PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(bucket_engine_mock_engine PROPERTIES PREFIX "")
#
# All of the binaries we're building
#
ADD_EXECUTABLE(bucket_engine_testapp
engines/bucket_engine/testapp.c
engines/bucket_engine/genhash.c)
ADD_EXECUTABLE(engine_testapp programs/engine_testapp/engine_testapp.c
programs/engine_testapp/mock_server.c
programs/engine_testapp/mock_server.h)
ADD_EXECUTABLE(cbsasladm programs/cbsasladm.c
programs/utilities.c
programs/utilities.h)
ADD_EXECUTABLE(mcstat programs/mcstat.c
programs/utilities.c
programs/utilities.h)
ADD_EXECUTABLE(mctimings programs/mctimings.c
programs/utilities.c
programs/utilities.h
utilities/protocol2text.c)
ADD_EXECUTABLE(mchello programs/mchello.c
programs/utilities.c
programs/utilities.h)
ADD_EXECUTABLE(memcached_sizes tests/sizes.c)
ADD_EXECUTABLE(memcached
daemon/alloc_hooks.c
daemon/cache.c
daemon/config_util.c
daemon/config_util.h
daemon/config_parse.c
daemon/daemon.c
daemon/hash.c
daemon/memcached.c
daemon/privileges.c
daemon/stats.c
daemon/thread.c
daemon/timings.cc)
ADD_EXECUTABLE(memcached_config_test tests/config_test.c
daemon/config_util.c daemon/config_util.h)
TARGET_LINK_LIBRARIES(memcached_config_test cJSON)
ADD_EXECUTABLE(ssltest tests/ssltest.c
programs/utilities.c
programs/utilities.h)
ADD_EXECUTABLE(memcached_testapp tests/testapp.c daemon/cache.c)
SET(CBSASL_SOURCES include/cbsasl/cbsasl.h include/cbsasl/visibility.h
cbsasl/client.c cbsasl/common.c cbsasl/cram-md5/cram-md5.c
cbsasl/cram-md5/cram-md5.h cbsasl/cram-md5/hmac.c
cbsasl/cram-md5/hmac.h cbsasl/cram-md5/md5.c
cbsasl/cram-md5/md5.h cbsasl/hash.c cbsasl/hash.h
cbsasl/plain/plain.c cbsasl/plain/plain.h cbsasl/pwfile.c
cbsasl/pwfile.h cbsasl/server.c cbsasl/strcmp.c cbsasl/util.h)
ADD_LIBRARY(cbsasl SHARED ${CBSASL_SOURCES})
SET_TARGET_PROPERTIES(cbsasl PROPERTIES SOVERSION 1.1.1)
SET_TARGET_PROPERTIES(cbsasl PROPERTIES COMPILE_FLAGS -DBUILDING_CBSASL=1)
SET_TARGET_PROPERTIES(cbsasl PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib)
ADD_EXECUTABLE(cbsasl_hmac_test tests/cbsasl/hmac_test.c
cbsasl/cram-md5/hmac.c
cbsasl/cram-md5/hmac.h
cbsasl/cram-md5/md5.c
cbsasl/cram-md5/md5.h)
ADD_EXECUTABLE(cbsasl_pwfile_test tests/cbsasl/pwfile_test.c
cbsasl/pwfile.c
cbsasl/pwfile.h
cbsasl/hash.c
cbsasl/hash.h)
# We're using an "internal api" of the library in the test so we can't
# use the library we just built
ADD_EXECUTABLE(sasl_test tests/cbsasl/sasl_server_test.c ${CBSASL_SOURCES})
SET_TARGET_PROPERTIES(sasl_test PROPERTIES COMPILE_FLAGS -DBUILDING_CBSASL=1)
ADD_EXECUTABLE(cbsasl_test tests/cbsasl/cbsasl_test.c
include/cbsasl/cbsasl.h
include/cbsasl/visibility.h)
TARGET_LINK_LIBRARIES(cbsasl_test cbsasl)
TARGET_LINK_LIBRARIES(cbsasl platform)
TARGET_LINK_LIBRARIES(cbsasl_pwfile_test platform)
TARGET_LINK_LIBRARIES(sasl_test platform)
ADD_EXECUTABLE(cbsasl_strcmp_test tests/cbsasl/strcmp_test.c
include/cbsasl/cbsasl.h
include/cbsasl/visibility.h
cbsasl/strcmp.c)
#
# Add linker flags to all of the binaries
#
TARGET_LINK_LIBRARIES(bucket_engine mcd_util platform ${COUCHBASE_NETWORK_LIBS} ${COUCHBASE_MATH_LIBS})
TARGET_LINK_LIBRARIES(default_engine mcd_util platform ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(basic_engine_testsuite mcd_util platform ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(stdin_term_handler platform)
TARGET_LINK_LIBRARIES(fragment_rw_ops mcd_util platform ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(engine_testapp mcd_util platform ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(bucket_engine_testapp mcd_util platform ${COUCHBASE_NETWORK_LIBS} ${COUCHBASE_MATH_LIBS})
TARGET_LINK_LIBRARIES(cbsasladm platform ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(mcstat platform ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(mctimings cJSON platform ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(mchello platform ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(ssltest platform ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(tap_mock_engine platform ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(mcd_util platform)
TARGET_LINK_LIBRARIES(memcached mcd_util cbsasl platform cJSON ${SNAPPY_LIBRARIES} ${TCMALLOC_LIBRARY} ${LIBEVENT_LIBRARIES} ${OPENSSL_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
TARGET_LINK_LIBRARIES(memcached_testapp mcd_util cJSON platform ${SNAPPY_LIBRARIES} ${LIBEVENT_LIBRARIES} ${COUCHBASE_NETWORK_LIBS})
IF(WIN32)
SET_TARGET_PROPERTIES(memcached PROPERTIES
LINK_FLAGS "/LIBPATH:${DEPS_LIB_DIR}")
SET_TARGET_PROPERTIES(memcached_testapp PROPERTIES
LINK_FLAGS "/LIBPATH:${DEPS_LIB_DIR}")
ELSE(WIN32)
SET_TARGET_PROPERTIES(memcached PROPERTIES
LINK_FLAGS "-L${DEPS_LIB_DIR}")
SET_TARGET_PROPERTIES(memcached_testapp PROPERTIES
LINK_FLAGS "-L${DEPS_LIB_DIR}")
ENDIF(WIN32)
IF (INSTALL_HEADER_FILES)
INSTALL (FILES include/memcached/allocator_hooks.h
include/memcached/callback.h
include/memcached/config_parser.h
include/memcached/engine.h
include/memcached/engine_common.h
include/memcached/engine_testapp.h
include/memcached/extension.h
include/memcached/extension_loggers.h
include/memcached/protocol_binary.h
include/memcached/protocol_plugin.h
include/memcached/server_api.h
include/memcached/types.h
include/memcached/upr.h
include/memcached/util.h
include/memcached/vbucket.h
include/memcached/visibility.h
DESTINATION include/memcached)
INSTALL(FILES
include/cbsasl/cbsasl.h
include/cbsasl/visibility.h
DESTINATION include/cbsasl)
ENDIF(INSTALL_HEADER_FILES)
SET_TARGET_PROPERTIES(mcd_util PROPERTIES SOVERSION 1.0.0)
INSTALL(TARGETS mcd_util default_engine bucket_engine blackhole_logger fragment_rw_ops stdin_term_handler
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib/memcached
ARCHIVE DESTINATION lib/memcached)
SET_TARGET_PROPERTIES(mcd_util PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
SET_TARGET_PROPERTIES(default_engine PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
SET_TARGET_PROPERTIES(bucket_engine PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
SET_TARGET_PROPERTIES(blackhole_logger PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
SET_TARGET_PROPERTIES(fragment_rw_ops PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
SET_TARGET_PROPERTIES(stdin_term_handler PROPERTIES INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib/memcached)
INSTALL(TARGETS engine_testapp cbsasladm mcstat mctimings memcached
RUNTIME DESTINATION bin)
INSTALL(TARGETS cbsasl
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
ADD_TEST(memcached-config memcached_config_test)
ADD_TEST(memcached-sizes memcached_sizes)
ADD_TEST(memcached-basic-unit-tests memcached_testapp)
ADD_TEST(memcached-bucket_engine-unit-tests bucket_engine_testapp)
ADD_TEST(memcached-basic-engine-tests engine_testapp -E default_engine.so -T basic_engine_testsuite.so)
IF(${COUCHBASE_PYTHON})
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_breakdancer_testsuite.c
COMMAND
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testsuite/breakdancer/engine_test.py > ${CMAKE_CURRENT_BINARY_DIR}/generated_breakdancer_testsuite.c
DEPENDS
testsuite/breakdancer/breakdancer.py
testsuite/breakdancer/engine_test.py
COMMENT "Generating the test suite")
ADD_LIBRARY(breakdancer_testsuite SHARED
testsuite/breakdancer/suite_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/generated_breakdancer_testsuite.c)
SET_TARGET_PROPERTIES(breakdancer_testsuite PROPERTIES PREFIX "")
ADD_TEST(memcached-breakdancer-engine-tests engine_testapp -E default_engine.so -T breakdancer_testsuite.so)
ENDIF(${COUCHBASE_PYTHON})
ADD_TEST(cbsasl-hmac cbsasl_hmac_test)
ADD_TEST(cbsasl-pwfile cbsasl_pwfile_test)
ADD_TEST(cbsasl-sasl sasl_test)
ADD_TEST(cbsasl-client-server cbsasl_test)
ADD_TEST(cbsasl-strcmp cbsasl_strcmp_test)
ADD_CUSTOM_TARGET(memcached-manpage
COMMAND a2x -L --doctype manpage --format manpage
${CMAKE_CURRENT_SOURCE_DIR}/man/man4/memcached.json.4.txt
COMMAND a2x -L --doctype manpage --format pdf
${CMAKE_CURRENT_SOURCE_DIR}/man/man4/memcached.json.4.txt
VERBATIM)
IF (NOT WIN32)
INSTALL(FILES man/man4/memcached.json.4
DESTINATION man/man4)
ENDIF(NOT WIN32)
INSTALL(FILES man/man4/memcached.json.4.pdf
DESTINATION doc)