efc3e70874ac759eb73ba2228e46a8841afc27b0
[awesomized/libmemcached] / test / CMakeLists.txt
1 if(NOT BUILD_TESTING OR NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
2 return()
3 endif()
4
5 configure_init(${CMAKE_CURRENT_BINARY_DIR}/conf.h)
6 configure_append("#define MEMCACHED_BINARY getenv_else(\"MEMCACHED_BINARY\", \"@MEMCACHED_BINARY@\")\n")
7 configure_define_string(TESTING_ROOT)
8 configure_define_string(SOURCES_ROOT)
9 configure_define_string(LIBMEMCACHED_WITH_SASL_PWDB)
10 configure_define_string(LIBMEMCACHED_WITH_SASL_CONF)
11
12 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
13 include(Catch)
14
15 check_symbol(pipe2 unistd.h)
16 check_symbol(SOCK_NONBLOCK sys/socket.h)
17 check_symbol(SOCK_CLOEXEC sys/socket.h)
18 check_include(sys/wait.h)
19 check_symbol(waitid sys/wait.h)
20 if(HAVE_WAITID)
21 check_c_source("
22 #include <sys/types.h>
23 #include <sys/wait.h>
24 int main() {
25 siginfo_t s;
26 return waitid(P_ALL, 0, &s, WNOWAIT|WEXITED);
27 }"
28 HAVE_WAITID_NOWAIT
29 )
30 endif()
31 if(NOT HAVE_SYS_WAIT_H)
32 message(SEND_ERROR "Could not find header <sys/wait.h>")
33 set(ENV{INVALID_CONFIGURATION} 1)
34 endif()
35
36 # memcached(1)
37 if(NOT MEMCACHED_BINARY)
38 find_package(Memcached)
39 set(MEMCACHED_BINARY ${MEMCACHED_EXECUTABLE})
40 endif()
41 if(NOT MEMCACHED_BINARY)
42 message(SEND_ERROR "Could not find memcached(1) binary")
43 set(ENV{INVALID_CONFIGURATION} 1)
44 endif()
45
46 add_executable(timeout timeout.c)
47 target_include_directories(timeout PRIVATE ${CMAKE_BINARY_DIR})
48
49 file(GLOB_RECURSE TESTING_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
50 set(TESTING_ROOT "${CMAKE_CURRENT_BINARY_DIR}")
51 set(SOURCES_ROOT "${CMAKE_SOURCE_DIR}")
52 set_source_files_properties(main.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
53 add_executable(runtests ${TESTING_SRC})
54 set_target_properties(runtests PROPERTIES CXX_STANDARD 17)
55 target_include_directories(runtests PRIVATE
56 ${CMAKE_SOURCE_DIR}
57 ${CMAKE_BINARY_DIR}
58 ${CMAKE_SOURCE_DIR}/src
59 ${CMAKE_BINARY_DIR}/src)
60 target_link_libraries(runtests PRIVATE libhashkit libmemcachedinternal libmemcachedutil)
61
62 # parallelism
63 if(NOT (thread IN_LIST ENABLE_SANITIZERS))
64 include(CheckCpp17Parallelism)
65 if(HAVE_CPP17_PARALLELISM)
66 target_link_libraries(runtests PRIVATE cpp17::parallelism)
67 endif()
68 endif()
69
70 add_dependencies(runtests ${CLIENTS} timeout)
71 if(TARGET memaslap)
72 configure_set(HAVE_MEMASLAP 1)
73 add_dependencies(runtests memaslap)
74 endif()
75
76 configure_file(${CONFIGURE_FILE_IN} ${CONFIGURE_FILE_OUT} @ONLY)
77
78 catch_discover_tests(runtests TEST_SPEC "lib*,hashkit*,memcached*,bin/*")