-
Notifications
You must be signed in to change notification settings - Fork 103
/
CMakeLists.txt
148 lines (121 loc) · 5.28 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
IF(NOT GTEST_ZIP_PATH)
SET(GTEST_ZIP_PATH "${SOURCE_ROOT}/gtest-1.7.0.zip")
ENDIF()
INCLUDE(../cmake/Modules/FindCouchbaseGtest.cmake)
# For Windows+GCC we need to link statically
MESSAGE(STATUS "Will use gtest from ${GTEST_ROOT}")
IF (NOT (WIN32 AND CMAKE_COMPILER_IS_GNUCC))
SET(gtest_force_shared_crt ON CACHE BOOL "" )
SET(BUILD_SHARED_LIBS ON)
ENDIF()
ADD_SUBDIRECTORY(${GTEST_ROOT} gtest)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
ADD_EXECUTABLE(check-all EXCLUDE_FROM_ALL
check-all.cc $<TARGET_OBJECTS:cliopts> mocksupport/procutil.c)
SET_PROPERTY(TARGET check-all
APPEND PROPERTY INCLUDE_DIRECTORIES
${lcb_plat_includes}
${SOURCE_ROOT})
TARGET_LINK_LIBRARIES(check-all couchbaseS)
FILE(GLOB T_BASIC_SRC basic/*.cc)
FILE(GLOB T_MC_SRC mc/*.cc)
FILE(GLOB T_RDB_SRC rdb/*.cc)
FILE(GLOB T_SOCK_SRC socktests/*.cc)
FILE(GLOB T_IOSERVER_SRC ioserver/*.cc)
FILE(GLOB T_MOCKSUPPORT_SRC mocksupport/*.c mocksupport/*.cc)
FILE(GLOB T_VBTEST_SRC vbucket/*.cc)
ADD_LIBRARY(ioserver OBJECT EXCLUDE_FROM_ALL ${T_IOSERVER_SRC})
IF(NOT LCB_NO_SSL)
GET_TARGET_PROPERTY(_ioserver_includes ioserver INCLUDE_DIRECTORIES)
SET_TARGET_PROPERTIES(ioserver PROPERTIES INCLUDE_DIRECTORIES "${_ioserver_includes};${OPENSSL_INCLUDE_DIR}")
ENDIF()
ADD_EXECUTABLE(nonio-tests EXCLUDE_FROM_ALL nonio_tests.cc ${T_BASIC_SRC})
ADD_EXECUTABLE(mc-tests EXCLUDE_FROM_ALL nonio_tests.cc ${T_MC_SRC}
$<TARGET_OBJECTS:mcreq> $<TARGET_OBJECTS:netbuf> $<TARGET_OBJECTS:vbucket>)
ADD_EXECUTABLE(mc-malloc-tests EXCLUDE_FROM_ALL nonio_tests.cc ${T_MC_SRC}
$<TARGET_OBJECTS:mcreq> $<TARGET_OBJECTS:netbuf-malloc> $<TARGET_OBJECTS:vbucket>)
ADD_EXECUTABLE(netbuf-tests
EXCLUDE_FROM_ALL nonio_tests.cc basic/t_netbuf.cc $<TARGET_OBJECTS:netbuf>)
ADD_EXECUTABLE(rdb-tests EXCLUDE_FROM_ALL nonio_tests.cc
${T_RDB_SRC} $<TARGET_OBJECTS:rdb> ${SOURCE_ROOT}/src/list.c)
ADD_EXECUTABLE(sock-tests EXCLUDE_FROM_ALL nonio_tests.cc
${T_SOCK_SRC} $<TARGET_OBJECTS:ioserver>)
ADD_EXECUTABLE(vbucket-tests EXCLUDE_FROM_ALL nonio_tests.cc ${T_VBTEST_SRC})
ADD_EXECUTABLE(htparse-tests EXCLUDE_FROM_ALL nonio_tests.cc htparse/t_basic.cc)
FILE(GLOB T_IO_SRC iotests/*.cc)
IF(LCB_NO_MOCK)
ADD_EXECUTABLE(unit-tests EXCLUDE_FROM_ALL unit_tests.cc)
SET_TARGET_PROPERTIES(unit-tests PROPERTIES COMPILE_DEFINITIONS NO_COUCHBASEMOCK)
ELSE()
ADD_LIBRARY(mocksupport OBJECT EXCLUDE_FROM_ALL ${T_MOCKSUPPORT_SRC})
ADD_EXECUTABLE(unit-tests EXCLUDE_FROM_ALL ${T_IO_SRC} unit_tests.cc $<TARGET_OBJECTS:mocksupport>)
ENDIF()
IF(CMAKE_COMPILER_IS_GNUCXX)
SET_TARGET_PROPERTIES(unit-tests
PROPERTIES
COMPILE_FLAGS "-Wno-sign-compare -Wno-missing-field-initializers")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
IF(NOT EXISTS ${PROJECT_SOURCE_DIR}/tests/CouchbaseMock.jar AND NOT LCB_NO_MOCK)
DOWNLOAD_LCB_DEP("${COUCHBASE_MOCK_DLSERVER}/${COUCHBASE_MOCK_VERSION}"
"${PROJECT_SOURCE_DIR}/tests/CouchbaseMock.jar")
ENDIF(NOT EXISTS ${PROJECT_SOURCE_DIR}/tests/CouchbaseMock.jar AND NOT LCB_NO_MOCK)
# We're a library using the shared CRT. Don't use the static one
INCLUDE_DIRECTORIES(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
TARGET_LINK_LIBRARIES(unit-tests couchbaseS gtest)
TARGET_LINK_LIBRARIES(nonio-tests couchbaseS gtest)
TARGET_LINK_LIBRARIES(mc-tests gtest ${LCB_SNAPPY_LINK})
TARGET_LINK_LIBRARIES(mc-malloc-tests
gtest ${LCB_SNAPPY_LINK})
TARGET_LINK_LIBRARIES(netbuf-tests gtest)
TARGET_LINK_LIBRARIES(rdb-tests gtest)
TARGET_LINK_LIBRARIES(sock-tests couchbaseS gtest)
TARGET_LINK_LIBRARIES(vbucket-tests gtest couchbaseS)
TARGET_LINK_LIBRARIES(htparse-tests gtest couchbaseS)
IF(WIN32)
TARGET_LINK_LIBRARIES(mc-tests ws2_32.lib)
TARGET_LINK_LIBRARIES(mc-malloc-tests ws2_32.lib)
ENDIF()
ADD_CUSTOM_TARGET(alltests DEPENDS check-all unit-tests nonio-tests
rdb-tests sock-tests vbucket-tests mc-tests htparse-tests)
ADD_TEST(NAME BUILD-TESTS COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target alltests)
MACRO(DEFINE_MOCKTEST plugin test)
ADD_TEST(
NAME
check-${plugin}-${test}
COMMAND
$<TARGET_FILE:check-all>
--srcdir "${PROJECT_SOURCE_DIR}"
--testdir "$<TARGET_FILE_DIR:check-all>"
--libdir "$<TARGET_FILE_DIR:couchbase>"
--plugins ${plugin}
--tests ${test}
--verbose
--
--gtest_print_time=1
--gtest_output=xml:"${PROJECT_BINARY_DIR}/REPORT_${plugin}_${test}.xml")
ENDMACRO()
# Since we need a plugin name, we'll use 'select'. However none of these
# actually do any I/O
DEFINE_MOCKTEST("select" "nonio-tests")
DEFINE_MOCKTEST("select" "rdb-tests")
DEFINE_MOCKTEST("select" "vbucket-tests")
DEFINE_MOCKTEST("select" "mc-tests")
DEFINE_MOCKTEST("select" "htparse-tests")
DEFINE_MOCKTEST("select" "unit-tests")
DEFINE_MOCKTEST("select" "sock-tests")
IF(WIN32)
DEFINE_MOCKTEST("iocp" "unit-tests")
DEFINE_MOCKTEST("iocp" "sock-tests")
ENDIF()
IF(HAVE_LIBEVENT AND LCB_BUILD_LIBEVENT)
DEFINE_MOCKTEST("libevent" "unit-tests")
DEFINE_MOCKTEST("libevent" "sock-tests")
ENDIF()
IF(HAVE_LIBEV AND LCB_BUILD_LIBEV)
DEFINE_MOCKTEST("libev" "unit-tests")
DEFINE_MOCKTEST("libev" "sock-tests")
ENDIF()
IF(HAVE_LIBUV AND LCB_BUILD_LIBUV)
DEFINE_MOCKTEST("libuv" "unit-tests")
DEFINE_MOCKTEST("libuv" "sock-tests")
ENDIF()