2 configure_init(${CMAKE_BINARY_DIR}/mem_config.h)
4 add_compile_definitions(${GLOBAL_DEFINITIONS})
5 # list(TRANSFORM) requires >=3.12
6 string(REPLACE ";" " -D" GLOBAL_DEFINITION_FLAGS "${GLOBAL_DEFINITIONS}")
7 set(GLOBAL_DEFINITION_FLAGS -D${GLOBAL_DEFINITION_FLAGS})
9 if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
13 include(CMakePushCheckState)
14 include(CMakePackageConfigHelpers)
16 macro(make_have_identifier NAME ID)
17 string(MAKE_C_IDENTIFIER ${NAME} _make_have_identifier)
18 string(TOUPPER ${_make_have_identifier} _make_have_identifier)
19 set(${ID} HAVE_${_make_have_identifier})
22 include(CheckCCompilerFlag)
23 macro(check_flag FLAG HAVE)
24 configure_define(${HAVE})
25 check_c_compiler_flag("${FLAG}" ${HAVE})
27 include(CheckCXXCompilerFlag)
28 macro(check_cxx_flag FLAG HAVE)
29 configure_define(${HAVE})
30 check_cxx_compiler_flag("${FLAG}" ${HAVE})
32 include(CheckSymbolExists)
33 macro(check_symbol NAME HEADER)
34 make_have_identifier(${NAME} HAVE)
35 configure_define(${HAVE})
36 cmake_push_check_state()
38 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGV2}")
40 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
41 check_symbol_exists(${NAME} ${HEADER} ${HAVE})
42 cmake_pop_check_state()
44 include(CheckCXXSymbolExists)
45 macro(check_cxx_symbol NAME HEADER)
46 make_have_identifier(${NAME} HAVE)
47 configure_define(${HAVE})
48 cmake_push_check_state()
50 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
52 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
53 check_cxx_symbol_exists(${NAME} ${HEADER} ${HAVE})
54 cmake_pop_check_state()
56 include(CheckIncludeFile)
57 macro(check_include HEADER)
58 make_have_identifier(${HEADER} HAVE)
59 configure_define(${HAVE})
60 cmake_push_check_state()
62 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
64 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
65 check_include_file(${HEADER} ${HAVE})
66 cmake_pop_check_state()
68 include(CheckIncludeFileCXX)
69 macro(check_cxx_include HEADER)
70 make_have_identifier(${HEADER} HAVE)
71 configure_define(${HAVE})
72 cmake_push_check_state()
74 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
76 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
77 check_include_file_cxx(${HEADER} ${HAVE})
78 cmake_pop_check_state()
80 include(CheckTypeSize)
81 macro(check_type TYPE)
82 make_have_identifier(${TYPE} HAVE)
83 configure_define(${HAVE})
84 cmake_push_check_state()
86 list(APPEND CMAKE_EXTRA_INCLUDE_FILES ${ARGN})
88 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
89 check_type_size(${TYPE} ${HAVE})
90 cmake_pop_check_state()
92 include(CheckCSourceCompiles)
93 macro(check_c_source SOURCE HAVE)
94 configure_define(${HAVE})
95 cmake_push_check_state()
96 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
97 check_c_source_compiles("${SOURCE}" ${HAVE})
98 cmake_pop_check_state()
100 include(CheckCXXSourceCompiles)
101 macro(check_cxx_source SOURCE HAVE)
102 configure_define(${HAVE})
103 cmake_push_check_state()
104 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
105 check_cxx_source_compiles("${SOURCE}" ${HAVE})
106 cmake_pop_check_state()
109 include(CheckBacktrace)
110 include(CheckByteswap)
111 include(CheckDependency)
113 include(CheckPkgconf)
115 include(CheckThreads)
116 include(CheckVisibility)
117 include(InstallPublicHeaders)
119 function(pkgconfig_export VAR VAL)
120 get_property(PREV GLOBAL PROPERTY PKGCONFIG_${VAR})
121 set_property(GLOBAL PROPERTY PKGCONFIG_${VAR} "${PREV} ${VAL}")
123 macro(pkgconfig_import VAR)
124 get_property(PKGCONFIG_${VAR} GLOBAL PROPERTY PKGCONFIG_${VAR})
128 configure_define_01(LIBMEMCACHED_WITH_SASL_SUPPORT)
130 check_dependency(LIBSASL sasl2)
132 set(LIBMEMCACHED_WITH_SASL_SUPPORT 1)
133 pkgconfig_export(REQUIRES libsasl2)
138 configure_set(HAVE_FNV64_HASH ${ENABLE_HASH_FNV64})
139 configure_set(HAVE_MURMUR_HASH ${ENABLE_HASH_MURMUR})
140 configure_set(HAVE_HSIEH_HASH ${ENABLE_HASH_HSIEH})
142 check_include(alloca.h)
143 check_include(arpa/inet.h)
144 check_include(dlfcn.h)
145 check_include(getopt.h)
146 check_include(libgen.h)
147 check_include(netdb.h)
148 check_include(netinet/in.h)
149 check_include(netinet/tcp.h)
150 check_include(poll.h)
151 check_include(strings.h)
152 check_include(sys/poll.h)
153 check_include(sys/socket.h)
154 check_include(sys/time.h)
155 check_include(sys/un.h)
156 check_include(unistd.h)
158 check_type(in_port_t netinet/in.h)
159 check_type(pid_t sys/types.h)
160 check_type(ssize_t sys/types.h)
161 check_type("struct msghdr" sys/socket.h)
162 check_type("struct timespec" time.h)
164 check_cxx_symbol(abi::__cxa_demangle cxxabi.h)
165 check_symbol(CLOCK_MONOTONIC time.h)
166 check_symbol(clock_gettime time.h)
167 check_symbol(ERESTART errno.h)
168 check_symbol(fcntl fcntl.h)
169 check_symbol(gettimeofday sys/time.h)
170 check_symbol(htonll arpa/inet.h)
171 check_symbol(index strings.h)
172 check_symbol(MSG_DONTWAIT sys/socket.h)
173 check_symbol(MSG_MORE sys/socket.h)
174 check_symbol(MSG_NOSIGNAL sys/socket.h)
175 check_symbol(SO_RCVTIMEO sys/socket.h)
176 check_symbol(SO_SNDTIMEO sys/socket.h)
177 check_symbol(rand stdlib.h)
178 check_symbol(random stdlib.h)
179 check_symbol(realpath stdlib.h)
180 check_symbol(sendmsg sys/socket.h)
181 check_symbol(setenv stdlib.h)
182 check_symbol(strerror_r string.h)
187 return *strerror_r(0, &x, 1);
189 HAVE_STRERROR_R_CHAR_P
194 check_include(winsock2.h)
195 check_include(ws2tcpip.h)
197 check_symbol(htonll winsock2.h)