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