X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=CMake%2F_Include.cmake;h=a419d8dfdc0b023fff9106e7b3ef8635807764f9;hb=2f289c64f625962d945ec3bee80f36bc5c61ee35;hp=0f25ab4875a6eb363f298ade9b2c5646a51ae3ea;hpb=c3526f7547e7a69204a25982f6764afdab663252;p=m6w6%2Flibmemcached diff --git a/CMake/_Include.cmake b/CMake/_Include.cmake index 0f25ab48..a419d8df 100644 --- a/CMake/_Include.cmake +++ b/CMake/_Include.cmake @@ -1,101 +1,168 @@ -set(THREADS_PREFER_PTHREAD_FLAG ON) +include(_Configure) +configure_init(${CMAKE_BINARY_DIR}/mem_config.h) -# globals -include(CTest) -include(GNUInstallDirs) - -find_package(PkgConfig) -find_package(Threads REQUIRED) - -# locals -include(InstallPublicHeaders) -include(SafeString) -include(CheckDebug) -include(CheckDecl) -include(CheckDependency) -include(CheckHeader) -include(CheckType) -include(CheckStdatomic) - -# configuration +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) + include(CTest) +endif() -## debug -check_debug() +include(CMakePushCheckState) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) -## memaslap -if(ENABLE_MEMASLAP) - check_stdatomic() - check_dependency(LIBEVENT event event.h) - check_decl(getline stdio.h) -endif() +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() -## dtrace -if(ENABLE_DTRACE) - set(HAVE_DTRACE 1) -endif() +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() -##uuid -if(BUILD_TESTING) - check_dependency(LIBUUID uuid uuid/uuid.h) -endif() +include(CheckBacktrace) +include(CheckByteswap) +include(CheckDependency) +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_HASH_FNV64) - set(HAVE_FNV64_HASH 1) -endif() -if(ENABLE_HASH_MURMUR) - set(HAVE_MURMUR_HASH 1) -endif() -if(ENABLE_HASH_HSIEH) - set(HAVE_HSIEH_HASH 1) -endif() +configure_set(HAVE_FNV64_HASH ${ENABLE_HASH_FNV64}) +configure_set(HAVE_MURMUR_HASH ${ENABLE_HASH_MURMUR}) +configure_set(HAVE_HSIEH_HASH ${ENABLE_HASH_HSIEH}) -# system checks +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(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) -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_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_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_cxx_symbol(abi::__cxa_demangle cxxabi.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(" + #include + int main() { + char x; + return *strerror_r(0, &x, 1); + }" + HAVE_STRERROR_R_CHAR_P +) -check_type(in_port_t netinet/in.h) +if(WIN32) + check_include(io.h) + check_include(winsock2.h) + check_include(ws2tcpip.h) -check_header(cstdint) -check_header(cinttypes) + check_symbol(htonll winsock2.h) +endif()