Merge pull request #140 from hussainnaqvee/patch-1
[awesomized/libmemcached] / CMake / _Include.cmake
index 6a5598d9235edae1ef476d3aa609fdd797ce15d8..7466b4cab006a29244b316b50c24ab5d7d642016 100644 (file)
@@ -1,12 +1,16 @@
 include(_Configure)
 configure_init(${CMAKE_BINARY_DIR}/mem_config.h)
 
+add_compile_definitions(${GLOBAL_DEFINITIONS})
+# list(TRANSFORM) requires >=3.12
+string(REPLACE ";" " -D" GLOBAL_DEFINITION_FLAGS "${GLOBAL_DEFINITIONS}")
+set(GLOBAL_DEFINITION_FLAGS -D${GLOBAL_DEFINITION_FLAGS})
+
 if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
     include(CTest)
 endif()
 
 include(CMakePushCheckState)
-include(GNUInstallDirs)
 include(CMakePackageConfigHelpers)
 
 macro(make_have_identifier NAME ID)
@@ -33,6 +37,7 @@ macro(check_symbol NAME HEADER)
     if(${ARGC} GREATER 1)
         string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGV2}")
     endif()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_symbol_exists(${NAME} ${HEADER} ${HAVE})
     cmake_pop_check_state()
 endmacro()
@@ -44,6 +49,7 @@ macro(check_cxx_symbol NAME HEADER)
     if(${ARGC} GREATER 1)
         string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
     endif()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_cxx_symbol_exists(${NAME} ${HEADER} ${HAVE})
     cmake_pop_check_state()
 endmacro()
@@ -55,6 +61,7 @@ macro(check_include HEADER)
     if(${ARGC} GREATER 1)
         string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
     endif()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_include_file(${HEADER} ${HAVE})
     cmake_pop_check_state()
 endmacro()
@@ -66,6 +73,7 @@ macro(check_cxx_include HEADER)
     if(${ARGC} GREATER 1)
         string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}")
     endif()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_include_file_cxx(${HEADER} ${HAVE})
     cmake_pop_check_state()
 endmacro()
@@ -77,18 +85,25 @@ macro(check_type TYPE)
     if(${ARGC} GREATER 1)
         list(APPEND CMAKE_EXTRA_INCLUDE_FILES ${ARGN})
     endif()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_type_size(${TYPE} ${HAVE})
     cmake_pop_check_state()
 endmacro()
 include(CheckCSourceCompiles)
 macro(check_c_source SOURCE HAVE)
     configure_define(${HAVE})
+    cmake_push_check_state()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_c_source_compiles("${SOURCE}" ${HAVE})
+    cmake_pop_check_state()
 endmacro()
 include(CheckCXXSourceCompiles)
 macro(check_cxx_source SOURCE HAVE)
     configure_define(${HAVE})
+    cmake_push_check_state()
+    list(APPEND CMAKE_REQUIRED_DEFINITIONS ${GLOBAL_DEFINITION_FLAGS})
     check_cxx_source_compiles("${SOURCE}" ${HAVE})
+    cmake_pop_check_state()
 endmacro()
 
 include(CheckBacktrace)
@@ -101,12 +116,26 @@ include(CheckThreads)
 include(CheckVisibility)
 include(InstallPublicHeaders)
 
+function(pkgconfig_export VAR VAL)
+    get_property(PREV GLOBAL PROPERTY PKGCONFIG_${VAR})
+    set_property(GLOBAL PROPERTY PKGCONFIG_${VAR} "${PREV} ${VAL}")
+endfunction()
+macro(pkgconfig_import VAR)
+    get_property(PKGCONFIG_${VAR} GLOBAL PROPERTY PKGCONFIG_${VAR})
+endmacro()
+
 ## sasl
 configure_define_01(LIBMEMCACHED_WITH_SASL_SUPPORT)
 if(ENABLE_SASL)
     check_dependency(LIBSASL sasl2)
     if(HAVE_LIBSASL)
         set(LIBMEMCACHED_WITH_SASL_SUPPORT 1)
+        pkgconfig_export(REQUIRES libsasl2)
+        cmake_push_check_state()
+        set(CMAKE_REQUIRED_INCLUDES "${LIBSASL_INCLUDEDIR}")
+        set(CMAKE_REQUIRED_LIBRARIES "${LIBSASL_LIBRARIES}")
+        check_symbol(sasl_client_done sasl/sasl.h)
+        cmake_pop_check_state()
     endif()
 endif()
 
@@ -115,33 +144,45 @@ configure_set(HAVE_FNV64_HASH ${ENABLE_HASH_FNV64})
 configure_set(HAVE_MURMUR_HASH ${ENABLE_HASH_MURMUR})
 configure_set(HAVE_HSIEH_HASH ${ENABLE_HASH_HSIEH})
 
-# most of the following checks are due to mingw or msvc; see gnulib
+check_include(alloca.h)
 check_include(arpa/inet.h)
 check_include(dlfcn.h)
+check_include(getopt.h)
+check_include(libgen.h)
 check_include(netdb.h)
+check_include(netinet/in.h)
+check_include(netinet/tcp.h)
 check_include(poll.h)
 check_include(strings.h)
+check_include(sys/poll.h)
 check_include(sys/socket.h)
 check_include(sys/time.h)
 check_include(sys/un.h)
 check_include(unistd.h)
 
-if(WIN32)
-    check_include(io.h)
-    check_include(winsock2.h)
-    check_include(ws2tcpip.h)
-endif()
-
 check_type(in_port_t netinet/in.h)
+check_type(pid_t sys/types.h)
+check_type(ssize_t sys/types.h)
+check_type("struct msghdr" sys/socket.h)
+check_type("struct timespec" time.h)
 
 check_cxx_symbol(abi::__cxa_demangle cxxabi.h)
+check_symbol(CLOCK_MONOTONIC time.h)
+check_symbol(clock_gettime time.h)
+check_symbol(ERESTART errno.h)
 check_symbol(fcntl fcntl.h)
+check_symbol(gettimeofday sys/time.h)
 check_symbol(htonll arpa/inet.h)
+check_symbol(index strings.h)
 check_symbol(MSG_DONTWAIT sys/socket.h)
 check_symbol(MSG_MORE sys/socket.h)
 check_symbol(MSG_NOSIGNAL sys/socket.h)
 check_symbol(SO_RCVTIMEO sys/socket.h)
 check_symbol(SO_SNDTIMEO sys/socket.h)
+check_symbol(rand stdlib.h)
+check_symbol(random stdlib.h)
+check_symbol(realpath stdlib.h)
+check_symbol(sendmsg sys/socket.h)
 check_symbol(setenv stdlib.h)
 check_symbol(strerror_r string.h)
 check_c_source("
@@ -152,3 +193,11 @@ check_c_source("
         }"
         HAVE_STRERROR_R_CHAR_P
 )
+
+if(WIN32)
+    check_include(io.h)
+    check_include(winsock2.h)
+    check_include(ws2tcpip.h)
+
+    check_symbol(htonll winsock2.h)
+endif()