X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=CMake%2F_Include.cmake;h=6a5598d9235edae1ef476d3aa609fdd797ce15d8;hb=01c5e0ed8d3d9c72ea192792d1c49a50e756d635;hp=9e73358ab354a0dd8d7cb4a4eb71cf9911893a2f;hpb=cbec7a4b9613b8ae3807539fae3a29ed8aff4984;p=m6w6%2Flibmemcached diff --git a/CMake/_Include.cmake b/CMake/_Include.cmake index 9e73358a..6a5598d9 100644 --- a/CMake/_Include.cmake +++ b/CMake/_Include.cmake @@ -1,102 +1,154 @@ -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake) +include(_Configure) +configure_init(${CMAKE_BINARY_DIR}/mem_config.h) -set(THREADS_PREFER_PTHREAD_FLAG ON) +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) + include(CTest) +endif() -# globals -include(CTest) +include(CMakePushCheckState) include(GNUInstallDirs) - -find_package(PkgConfig) -find_package(Threads REQUIRED) - -# locals -include(SafeString) -include(CheckDebug) -include(CheckDecl) +include(CMakePackageConfigHelpers) + +macro(make_have_identifier NAME ID) + string(MAKE_C_IDENTIFIER ${NAME} _make_have_identifier) + string(TOUPPER ${_make_have_identifier} _make_have_identifier) + set(${ID} HAVE_${_make_have_identifier}) +endmacro() + +include(CheckCCompilerFlag) +macro(check_flag FLAG HAVE) + configure_define(${HAVE}) + check_c_compiler_flag("${FLAG}" ${HAVE}) +endmacro() +include(CheckCXXCompilerFlag) +macro(check_cxx_flag FLAG HAVE) + configure_define(${HAVE}) + check_cxx_compiler_flag("${FLAG}" ${HAVE}) +endmacro() +include(CheckSymbolExists) +macro(check_symbol NAME HEADER) + make_have_identifier(${NAME} HAVE) + configure_define(${HAVE}) + cmake_push_check_state() + if(${ARGC} GREATER 1) + string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGV2}") + endif() + check_symbol_exists(${NAME} ${HEADER} ${HAVE}) + cmake_pop_check_state() +endmacro() +include(CheckCXXSymbolExists) +macro(check_cxx_symbol NAME HEADER) + make_have_identifier(${NAME} HAVE) + configure_define(${HAVE}) + cmake_push_check_state() + if(${ARGC} GREATER 1) + string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}") + endif() + check_cxx_symbol_exists(${NAME} ${HEADER} ${HAVE}) + cmake_pop_check_state() +endmacro() +include(CheckIncludeFile) +macro(check_include HEADER) + make_have_identifier(${HEADER} HAVE) + configure_define(${HAVE}) + cmake_push_check_state() + if(${ARGC} GREATER 1) + string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}") + endif() + check_include_file(${HEADER} ${HAVE}) + cmake_pop_check_state() +endmacro() +include(CheckIncludeFileCXX) +macro(check_cxx_include HEADER) + make_have_identifier(${HEADER} HAVE) + configure_define(${HAVE}) + cmake_push_check_state() + if(${ARGC} GREATER 1) + string(APPEND CMAKE_REQUIRED_FLAGS " ${ARGN}") + endif() + check_include_file_cxx(${HEADER} ${HAVE}) + cmake_pop_check_state() +endmacro() +include(CheckTypeSize) +macro(check_type TYPE) + make_have_identifier(${TYPE} HAVE) + configure_define(${HAVE}) + cmake_push_check_state() + if(${ARGC} GREATER 1) + list(APPEND CMAKE_EXTRA_INCLUDE_FILES ${ARGN}) + endif() + check_type_size(${TYPE} ${HAVE}) + cmake_pop_check_state() +endmacro() +include(CheckCSourceCompiles) +macro(check_c_source SOURCE HAVE) + configure_define(${HAVE}) + check_c_source_compiles("${SOURCE}" ${HAVE}) +endmacro() +include(CheckCXXSourceCompiles) +macro(check_cxx_source SOURCE HAVE) + configure_define(${HAVE}) + check_cxx_source_compiles("${SOURCE}" ${HAVE}) +endmacro() + +include(CheckBacktrace) +include(CheckByteswap) include(CheckDependency) -include(CheckHeader) -include(CheckType) -include(CheckStdatomic) - -# configuration - -## debug -check_debug() - -## memaslap -if(ENABLE_MEMASLAP) - check_stdatomic() - check_dependency(LIBEVENT event event.h) - check_decl(getline stdio.h) -endif() - -## dtrace -if(ENABLE_DTRACE) - set(HAVE_DTRACE 1) -endif() - -##uuid -if(BUILD_TESTING) - check_dependency(LIBUUID uuid uuid/uuid.h) -endif() +include(CheckDtrace) +include(CheckPkgconf) +include(CheckDebug) +include(CheckThreads) +include(CheckVisibility) +include(InstallPublicHeaders) ## sasl +configure_define_01(LIBMEMCACHED_WITH_SASL_SUPPORT) if(ENABLE_SASL) - check_dependency(LIBSASL sasl2 sasl/sasl.h) - if(LIBSASL) + check_dependency(LIBSASL sasl2) + if(HAVE_LIBSASL) set(LIBMEMCACHED_WITH_SASL_SUPPORT 1) endif() endif() ## hashes -if(ENABLE_FNV64_HASH) - set(HAVE_FNV64_HASH 1) +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(arpa/inet.h) +check_include(dlfcn.h) +check_include(netdb.h) +check_include(poll.h) +check_include(strings.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() -if(ENABLE_MURMUR_HASH) - set(HAVE_MURMUR_HASH 1) -endif() -if(ENABLE_HSIEH_HASH) - set(HAVE_HSIEH_HASH 1) -endif() - -# system checks - -check_header(arpa/inet.h) -check_header(dlfcn.h) -check_header(errno.h) -check_header(execinfo.h) -check_header(fcntl.h) -check_header(io.h) -check_header(limits.h) -check_header(netdb.h) -check_header(poll.h) -check_header(stddef.h) -check_header(stdlib.h) -check_header(strings.h) -check_header(sys/socket.h) -check_header(sys/time.h) -check_header(sys/types.h) -check_header(sys/un.h) -check_header(sys/wait.h) -check_header(time.h) -check_header(umem.h) -check_header(unistd.h) -check_header(winsock2.h) -check_header(ws2tcpip.h) - -check_decl(fcntl fcntl.h) -check_decl(htonll arpa/inet.h) -check_decl(MSG_DONTWAIT sys/socket.h) -check_decl(MSG_MORE sys/socket.h) -check_decl(MSG_NOSIGNAL sys/socket.h) -check_decl(rcvtimeo sys/socket.h) -check_decl(sndtimeo sys/socket.h) -check_decl(strerror_r string.h) -check_decl(strerror string.h) -check_decl(abi::__cxa_demangle cxxabi.h) -set(HAVE_GCC_ABI_DEMANGLE ${HAVE_ABI____CXA_DEMANGLE}) check_type(in_port_t netinet/in.h) -check_header(cstdint) -check_header(cinttypes) +check_cxx_symbol(abi::__cxa_demangle cxxabi.h) +check_symbol(fcntl fcntl.h) +check_symbol(htonll arpa/inet.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(setenv stdlib.h) +check_symbol(strerror_r string.h) +check_c_source(" + #include + int main() { + char x; + return *strerror_r(0, &x, 1); + }" + HAVE_STRERROR_R_CHAR_P +)