Merge pull request #140 from hussainnaqvee/patch-1
[awesomized/libmemcached] / CMake / _Include.cmake
1 include(_Configure)
2 configure_init(${CMAKE_BINARY_DIR}/mem_config.h)
3
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})
8
9 if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
10 include(CTest)
11 endif()
12
13 include(CMakePushCheckState)
14 include(CMakePackageConfigHelpers)
15
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})
20 endmacro()
21
22 include(CheckCCompilerFlag)
23 macro(check_flag FLAG HAVE)
24 configure_define(${HAVE})
25 check_c_compiler_flag("${FLAG}" ${HAVE})
26 endmacro()
27 include(CheckCXXCompilerFlag)
28 macro(check_cxx_flag FLAG HAVE)
29 configure_define(${HAVE})
30 check_cxx_compiler_flag("${FLAG}" ${HAVE})
31 endmacro()
32 include(CheckSymbolExists)
33 macro(check_symbol NAME HEADER)
34 make_have_identifier(${NAME} HAVE)
35 configure_define(${HAVE})
36 cmake_push_check_state()
37 if(${ARGC} GREATER 1)
38 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGV2}")
39 endif()
40 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
41 check_symbol_exists(${NAME} ${HEADER} ${HAVE})
42 cmake_pop_check_state()
43 endmacro()
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()
49 if(${ARGC} GREATER 1)
50 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
51 endif()
52 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
53 check_cxx_symbol_exists(${NAME} ${HEADER} ${HAVE})
54 cmake_pop_check_state()
55 endmacro()
56 include(CheckIncludeFile)
57 macro(check_include HEADER)
58 make_have_identifier(${HEADER} HAVE)
59 configure_define(${HAVE})
60 cmake_push_check_state()
61 if(${ARGC} GREATER 1)
62 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
63 endif()
64 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
65 check_include_file(${HEADER} ${HAVE})
66 cmake_pop_check_state()
67 endmacro()
68 include(CheckIncludeFileCXX)
69 macro(check_cxx_include HEADER)
70 make_have_identifier(${HEADER} HAVE)
71 configure_define(${HAVE})
72 cmake_push_check_state()
73 if(${ARGC} GREATER 1)
74 string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
75 endif()
76 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
77 check_include_file_cxx(${HEADER} ${HAVE})
78 cmake_pop_check_state()
79 endmacro()
80 include(CheckTypeSize)
81 macro(check_type TYPE)
82 make_have_identifier(${TYPE} HAVE)
83 configure_define(${HAVE})
84 cmake_push_check_state()
85 if(${ARGC} GREATER 1)
86 list(APPEND CMAKE_EXTRA_INCLUDE_FILES ${ARGN})
87 endif()
88 list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
89 check_type_size(${TYPE} ${HAVE})
90 cmake_pop_check_state()
91 endmacro()
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()
99 endmacro()
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()
107 endmacro()
108
109 include(CheckBacktrace)
110 include(CheckByteswap)
111 include(CheckDependency)
112 include(CheckDtrace)
113 include(CheckPkgconf)
114 include(CheckDebug)
115 include(CheckThreads)
116 include(CheckVisibility)
117 include(InstallPublicHeaders)
118
119 function(pkgconfig_export VAR VAL)
120 get_property(PREV GLOBAL PROPERTY PKGCONFIG_${VAR})
121 set_property(GLOBAL PROPERTY PKGCONFIG_${VAR} "${PREV} ${VAL}")
122 endfunction()
123 macro(pkgconfig_import VAR)
124 get_property(PKGCONFIG_${VAR} GLOBAL PROPERTY PKGCONFIG_${VAR})
125 endmacro()
126
127 ## sasl
128 configure_define_01(LIBMEMCACHED_WITH_SASL_SUPPORT)
129 if(ENABLE_SASL)
130 check_dependency(LIBSASL sasl2)
131 if(HAVE_LIBSASL)
132 set(LIBMEMCACHED_WITH_SASL_SUPPORT 1)
133 pkgconfig_export(REQUIRES libsasl2)
134 cmake_push_check_state()
135 set(CMAKE_REQUIRED_INCLUDES "${LIBSASL_INCLUDEDIR}")
136 set(CMAKE_REQUIRED_LIBRARIES "${LIBSASL_LIBRARIES}")
137 check_symbol(sasl_client_done sasl/sasl.h)
138 cmake_pop_check_state()
139 endif()
140 endif()
141
142 ## hashes
143 configure_set(HAVE_FNV64_HASH ${ENABLE_HASH_FNV64})
144 configure_set(HAVE_MURMUR_HASH ${ENABLE_HASH_MURMUR})
145 configure_set(HAVE_HSIEH_HASH ${ENABLE_HASH_HSIEH})
146
147 check_include(alloca.h)
148 check_include(arpa/inet.h)
149 check_include(dlfcn.h)
150 check_include(getopt.h)
151 check_include(libgen.h)
152 check_include(netdb.h)
153 check_include(netinet/in.h)
154 check_include(netinet/tcp.h)
155 check_include(poll.h)
156 check_include(strings.h)
157 check_include(sys/poll.h)
158 check_include(sys/socket.h)
159 check_include(sys/time.h)
160 check_include(sys/un.h)
161 check_include(unistd.h)
162
163 check_type(in_port_t netinet/in.h)
164 check_type(pid_t sys/types.h)
165 check_type(ssize_t sys/types.h)
166 check_type("struct msghdr" sys/socket.h)
167 check_type("struct timespec" time.h)
168
169 check_cxx_symbol(abi::__cxa_demangle cxxabi.h)
170 check_symbol(CLOCK_MONOTONIC time.h)
171 check_symbol(clock_gettime time.h)
172 check_symbol(ERESTART errno.h)
173 check_symbol(fcntl fcntl.h)
174 check_symbol(gettimeofday sys/time.h)
175 check_symbol(htonll arpa/inet.h)
176 check_symbol(index strings.h)
177 check_symbol(MSG_DONTWAIT sys/socket.h)
178 check_symbol(MSG_MORE sys/socket.h)
179 check_symbol(MSG_NOSIGNAL sys/socket.h)
180 check_symbol(SO_RCVTIMEO sys/socket.h)
181 check_symbol(SO_SNDTIMEO sys/socket.h)
182 check_symbol(rand stdlib.h)
183 check_symbol(random stdlib.h)
184 check_symbol(realpath stdlib.h)
185 check_symbol(sendmsg sys/socket.h)
186 check_symbol(setenv stdlib.h)
187 check_symbol(strerror_r string.h)
188 check_c_source("
189 #include <string.h>
190 int main() {
191 char x;
192 return *strerror_r(0, &x, 1);
193 }"
194 HAVE_STRERROR_R_CHAR_P
195 )
196
197 if(WIN32)
198 check_include(io.h)
199 check_include(winsock2.h)
200 check_include(ws2tcpip.h)
201
202 check_symbol(htonll winsock2.h)
203 endif()