Author: brane Date: Mon Jun 25 06:23:33 2018 New Revision: 1834279 URL: http://svn.apache.org/viewvc?rev=1834279&view=rev Log: Make the CMake build more like the current SCons build.
* CMakeLists.txt: Add build options with names like the SCons options. Add missing config checks and set compiler debug and warning flags. * test/CMakeLists.txt: Force C99 compilation mode if the top-level project forced C89 mode. * build/SerfChecks.cmake: Make the feature tests use a more strict environment. Modified: serf/trunk/CMakeLists.txt serf/trunk/build/SerfChecks.cmake serf/trunk/test/CMakeLists.txt Modified: serf/trunk/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1834279&r1=1834278&r2=1834279&view=diff ============================================================================== --- serf/trunk/CMakeLists.txt (original) +++ serf/trunk/CMakeLists.txt Mon Jun 25 06:23:33 2018 @@ -30,12 +30,28 @@ message(WARNING "has not been tested on many supported platforms.") +# Build options +option(PREFIX "Installation root directory" OFF) +option(LIBDIR "Indstall directory for architecture-dependent libraries" OFF) +option(APR "Path to APR's install area" OFF) +option(APU "Path to APR-Util's install area" OFF) +option(OPENSSL "Path to OpenSSL's install area" OFF) +option(ZLIB "Path to zlib's install area" OFF) +option(GSSAPI "Path to GSSAPI's install area" OFF) +option(BROTLI "Path to Brotli's install area" OFF) +option(DEBUG "Enable debugging info and strict compile warnings" OFF) +option(DISABLE_LOGGING "Disable the logging framework at compile time" OFF) +option(ENABLE_SLOW_TESTS "Enable long-running unit tests" OFF) + + +# Public headers set(HEADERS "serf.h" "serf_bucket_types.h" "serf_bucket_util.h" ) +# Serf library source files set(SOURCES "src/config_store.c" "src/context.c" @@ -91,27 +107,38 @@ if(WINDOWS) endif(WINDOWS) +# Process build options for dependency search +if(APR) + set(APR_ROOT ${APR}) +endif() + +if(APU) + set(APRUTIL_ROOT ${APU}) +endif() + +if(OPENSSL) + set(OPENSSL_ROOT_DIR ${OPENSSL}) +endif() + +if(ZLIB) + set(ZLIB_ROOT ${ZLIB}) +endif() + +if(GSSAPI) + message(WARNING "option GSSAPI is not implemented yet") +endif() + +if(BROTLI) + message(WARNING "option BROTLI is not implemented yet") +endif() + + +# Find dependencies find_package(OpenSSL) find_package(ZLib) find_package(APR) find_package(APRUtil) -# Feature tests -include(SerfChecks) -CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS" ${OPENSSL_LIBRARIES}) -CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS" ${OPENSSL_LIBRARIES}) -CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE" ${OPENSSL_LIBRARIES}) -CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER" ${OPENSSL_LIBRARIES}) -CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN" ${OPENSSL_LIBRARIES}) -CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA" ${OPENSSL_LIBRARIES}) -CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS" ${OPENSSL_LIBRARIES}) -CheckFunction("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT" ${OPENSSL_LIBRARIES}) -CheckFunction("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT" ${OPENSSL_LIBRARIES}) -CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM" ${OPENSSL_LIBRARIES}) -CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN" ${OPENSSL_LIBRARIES}) -CheckHeader("openssl/applink.c" "SERF_HAVE_OPENSSL_APPLINK_C" ${OPENSSL_INCLUDE_DIR}) -CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h" "SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR}) - set(DEPENDENCY_INCLUDES ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} @@ -135,6 +162,78 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${AP include_directories(BEFORE SYSTEM ${DEPENDENCY_INCLUDES}) include_directories(${CMAKE_SOURCE_DIR}) + +# Feature tests +include(SerfChecks) +CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER" ${OPENSSL_LIBRARIES}) +CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN" ${OPENSSL_LIBRARIES}) +CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA" ${OPENSSL_LIBRARIES}) +CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS" ${OPENSSL_LIBRARIES}) +CheckFunction("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT" ${OPENSSL_LIBRARIES}) +CheckFunction("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT" ${OPENSSL_LIBRARIES}) +CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM" ${OPENSSL_LIBRARIES}) +CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN" ${OPENSSL_LIBRARIES}) +CheckHeader("openssl/applink.c" "SERF_HAVE_OPENSSL_APPLINK_C" ${OPENSSL_INCLUDE_DIR}) +CheckHeader("stdbool.h" "HAVE_STDBOOL_H=1") +CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h" "SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR}) + +if(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) + set(CC_LIKE_GNUC TRUE) +endif() + +# Process other build options +if(PREFIX) + set(CMAKE_INSTALL_PREFIX ${PREFIX}) +endif() + +if(LIBDIR) + message(WARNING "option LIBDIR is not implemented yet") +endif() + +if(NOT MSVC) + if(CC_LIKE_GNUC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdeclaration-after-statement") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wmissing-prototypes") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89") + endif() + + if(DEBUG) + add_definitions("-DDEBUG" "-D_DEBUG") + if(CC_LIKE_GNUC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -g") + endif() + else() + add_definitions("-DNDEBUG") + if(CC_LIKE_GNUC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") + endif() + endif() +else() + # Warning level 4, no unused argument warnings + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4 /wd4100") + # Conditional expression is constant + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4127") + # Assignment within conditional expression + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4706") + + set(CMAKE_C_FLAGS_Debug "/Od /MDd /DDEBUG /D_DEBUG") + set(CMAKE_C_FLAGS_Release "/O2 /MD /DNDEBUG") + set(CMAKE_SHARED_LINKER_FLAGS_Release "/RELEASE") +endif(NOT MSVC) + +if(DISABLE_LOGGING) + add_definitions("-DSERF_DISABLE_LOGGING") +endif() + +if(ENABLE_SLOW_TESTS) + add_definitions("-DSERF_TEST_DEFLATE_4GBPLUS_BUCKETS") +endif() + + add_library(serf SHARED ${SOURCES} ${SHARED_SOURCES}) target_link_libraries(serf ${DEPENDENCY_LIBRARIES}) Modified: serf/trunk/build/SerfChecks.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/SerfChecks.cmake?rev=1834279&r1=1834278&r2=1834279&view=diff ============================================================================== --- serf/trunk/build/SerfChecks.cmake (original) +++ serf/trunk/build/SerfChecks.cmake Mon Jun 25 06:23:33 2018 @@ -22,7 +22,12 @@ include(CheckIncludeFile) include(CheckTypeSize) function(_CheckFunction var_ name_ libraries_) - set(CMAKE_REQUIRED_LIBRARIES "${libraries_}") + if(libraries_) + set(CMAKE_REQUIRED_LIBRARIES "${libraries_}") + else() + unset(CMAKE_REQUIRED_LIBRARIES) + endif() + check_function_exists("${name_}" "serf_foundit_${name_}_") if(${serf_foundit_${name_}_}) set("${var_}" TRUE PARENT_SCOPE) @@ -48,7 +53,12 @@ endmacro(CheckNotFunction) function(_CheckHeader var_ name_ includes_) - set(CMAKE_REQUIRED_INCLUDES "${includes_}") + if(includes_) + set(CMAKE_REQUIRED_INCLUDES "${includes_}") + else() + unset(CMAKE_REQUIRED_INCLUDES) + endif() + check_include_file("${name_}" "serf_foundit_${name_}_") if(${serf_foundit_${name_}_}) set("${var_}" TRUE PARENT_SCOPE) @@ -67,8 +77,18 @@ endmacro(CheckHeader) function(_CheckType var_ name_ header_ includes_) - set(CMAKE_REQUIRED_INCLUDES "${includes_}") - set(CMAKE_EXTRA_INCLUDE_FILES "${header_}") + if(includes_) + set(CMAKE_REQUIRED_INCLUDES "${includes_}") + else() + unset(CMAKE_REQUIRED_INCLUDES) + endif() + + if(header_) + set(CMAKE_EXTRA_INCLUDE_FILES "${header_}") + else() + unset(CMAKE_EXTRA_INCLUDE_FILES) + endif() + check_type_size("${name_}" "serf_foundit_${name_}_") if(${HAVE_serf_foundit_${name_}_}) set("${var_}" TRUE PARENT_SCOPE) Modified: serf/trunk/test/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/test/CMakeLists.txt?rev=1834279&r1=1834278&r2=1834279&view=diff ============================================================================== --- serf/trunk/test/CMakeLists.txt (original) +++ serf/trunk/test/CMakeLists.txt Mon Jun 25 06:23:33 2018 @@ -43,6 +43,11 @@ set(SIMPLE_TEST_TARGETS "serf_bwtp" ) +if(CC_LIKE_GNUC) + # MockHTTP requires C99 standard, so use it for the test suite. + string(REPLACE "-std=c89" "-std=c99" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) +endif() + add_definitions("-DMOCKHTTP_OPENSSL") foreach(TEST_TARGET ${SIMPLE_TEST_TARGETS})