cmake: build&run tests (sortof)
[m6w6/libmemcached] / Include.cmake
1
2 set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake)
3
4 function(set_test_target TARGET2)
5 foreach(TEST IN LISTS TESTS)
6 add_custom_command(TARGET ${TARGET2} POST_BUILD COMMAND ${TEST})
7 endforeach()
8 endfunction()
9
10 include(CheckTypeSize)
11 include(CheckCSourceRuns)
12 include(CheckIncludeFileCXX)
13 include(CheckCXXSymbolExists)
14 include(CheckCXXCompilerFlag)
15 include(CheckCXXSourceRuns)
16
17 function(safe_string STRING OUTPUT)
18 string(REGEX REPLACE "[^0-9a-zA-Z_]" "_" HEADER_SAFE ${STRING})
19 string(TOUPPER "${HEADER_SAFE}" HEADER_DEFN)
20 set(${OUTPUT} ${HEADER_DEFN} PARENT_SCOPE)
21 endfunction(safe_string)
22
23 function(define_cpp DEF)
24 safe_string(${DEF} CNST)
25 add_compile_definitions(HAVE_${CNST}=1)
26 endfunction(define_cpp)
27
28 function(check_header HEADER_PATH)
29 safe_string(${HEADER_PATH} HEADER_CONST)
30 check_include_file_cxx(${HEADER_PATH} HAVE_${HEADER_CONST})
31 endfunction(check_header)
32
33 function(check_decl DECL HEADER)
34 safe_string(${DECL} DECL_CONST)
35 check_cxx_symbol_exists(${DECL} ${HEADER} HAVE_${DECL_CONST})
36 endfunction(check_decl)
37
38 function(check_type TYPE HEADER)
39 safe_string(${TYPE} TYPE_CONST)
40 SET(CMAKE_EXTRA_INCLUDE_FILES ${HEADER})
41 check_type_size(${TYPE} ${TYPE_CONST} LANGUAGE CXX)
42 SET(CMAKE_EXTRA_INCLUDE_FILES)
43 endfunction(check_type)
44
45 function(check_debug)
46 if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
47 add_compile_definitions(DEBUG=1)
48 add_compile_options(-Wall -Wextra)
49 endif()
50 endfunction(check_debug)
51
52 function(check_stdatomic)
53 check_cxx_source_runs(
54 "#include <atomic>
55 int main() {
56 std::atomic<int> i(0);
57 return atomic_fetch_add(&i,1);
58 }"
59 HAVE_CXX_STDATOMIC)
60 check_c_source_runs(
61 "#include <stdatomic.h>
62 int main() {
63 atomic_int i;
64 atomic_init(&i, 0);
65 return atomic_fetch_add(&i,1);
66 }"
67 HAVE_C_STDATOMIC)
68 endfunction(check_atomic_builtins)