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})


Reply via email to