Author: brane
Date: Sun Jun 8 03:50:03 2025
New Revision: 1926231
URL: http://svn.apache.org/viewvc?rev=1926231&view=rev
Log:
Another step towards SCons/CMake build feature parity: in the CMake build,
check for functions by actually compiling and linking code, just like SCons.
SCons and CMake now get the same result from feature checks, even with
"functions" that are actually compatibility macros.
* build/SerfChecks.cmake
(CheckCSourceCompiles): Include this instead of CheckFunctionExists.
(CheckSymbolExists): Remove unused module
(_CheckFunction, CheckFunction, CheckNotFunction): Reimpplement these
tests to verify the result of compiling and linking some test code --
which is similare to what we have in build/scons_extras.py.
(_CheckSymbol): Remove.
(_CheckHeader, _CheckType): Make internal names consistent.
* CMakeLists.txt: Update CheckFunction/CheckNotFunction tests. Replace
CheckFunctionMacro with CheckFunction.
Modified:
serf/trunk/CMakeLists.txt
serf/trunk/build/SerfChecks.cmake
Modified: serf/trunk/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1926231&r1=1926230&r2=1926231&view=diff
==============================================================================
--- serf/trunk/CMakeLists.txt (original)
+++ serf/trunk/CMakeLists.txt Sun Jun 8 03:50:03 2025
@@ -277,19 +277,39 @@ endif(APR_STATIC)
# Feature tests
include(SerfChecks)
-CheckNotFunction("BIO_set_init" "SERF_NO_SSL_BIO_WRAPPERS"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckNotFunction("X509_STORE_get0_param" "SERF_NO_SSL_X509_STORE_WRAPPERS"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckNotFunction("X509_get0_notBefore" "SERF_NO_SSL_X509_GET0_NOTBEFORE"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckNotFunction("X509_get0_notAfter" "SERF_NO_SSL_X509_GET0_NOTAFTER"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckNotFunction("X509_STORE_CTX_get0_chain" "SERF_NO_SSL_X509_GET0_CHAIN"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckNotFunction("ASN1_STRING_get0_data" "SERF_NO_SSL_ASN1_STRING_GET0_DATA"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckFunction("CRYPTO_set_locking_callback" "SERF_HAVE_SSL_LOCKING_CALLBACKS"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckFunction("OpenSSL_version_num" "SERF_HAVE_OPENSSL_VERSION_NUM"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckFunction("SSL_set_alpn_protos" "SERF_HAVE_OPENSSL_ALPN"
${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
-CheckFunctionMacro("OPENSSL_malloc_init" "SERF_HAVE_OPENSSL_MALLOC_INIT"
"openssl/crypto.h"
- "${OPENSSL_INCLUDE_DIR}" ${OPENSSL_LIBRARIES}
${SERF_STANDARD_LIBRARIES})
-CheckFunctionMacro("SSL_library_init" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT"
"openssl/ssl.h"
- "${OPENSSL_INCLUDE_DIR}" ${OPENSSL_LIBRARIES}
${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("BIO_set_init" "NULL, 0" "SERF_NO_SSL_BIO_WRAPPERS"
+ "openssl/bio.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("X509_STORE_get0_param" "NULL"
"SERF_NO_SSL_X509_STORE_WRAPPERS"
+ "openssl/x509.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("X509_get0_notBefore" "NULL" "SERF_NO_SSL_X509_GET0_NOTBEFORE"
+ "openssl/x509.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("X509_get0_notAfter" "NULL" "SERF_NO_SSL_X509_GET0_NOTAFTER"
+ "openssl/x509.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("X509_STORE_CTX_get0_chain" "NULL"
"SERF_NO_SSL_X509_GET0_CHAIN"
+ "openssl/x509.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckNotFunction("ASN1_STRING_get0_data" "NULL"
"SERF_NO_SSL_ASN1_STRING_GET0_DATA"
+ "openssl/asn1.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckFunction("CRYPTO_set_locking_callback" "NULL"
"SERF_HAVE_SSL_LOCKING_CALLBACKS"
+ "openssl/crypto.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckFunction("SSL_set_alpn_protos" "NULL, NULL, 0" "SERF_HAVE_OPENSSL_ALPN"
+ "openssl/ssl.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckFunction("OpenSSL_version_num" "" "SERF_HAVE_OPENSSL_VERSION_NUM"
+ "openssl/ssl.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckFunction("OPENSSL_malloc_init" "" "SERF_HAVE_OPENSSL_MALLOC_INIT"
+ "openssl/ssl.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
+CheckFunction("SSL_library_init" "" "SERF_HAVE_OPENSSL_SSL_LIBRARY_INIT"
+ "openssl/ssl.h" "${OPENSSL_INCLUDE_DIR}"
+ ${OPENSSL_LIBRARIES} ${SERF_STANDARD_LIBRARIES})
CheckHeader("stdbool.h" "HAVE_STDBOOL_H=1")
CheckType("OSSL_HANDSHAKE_STATE" "openssl/ssl.h"
"SERF_HAVE_OSSL_HANDSHAKE_STATE" ${OPENSSL_INCLUDE_DIR})
if(Brotli_FOUND)
@@ -297,7 +317,9 @@ if(Brotli_FOUND)
# Check for the function only if the type check succeeded.
get_directory_property(_cdef COMPILE_DEFINITIONS)
if("SERF_HAVE_BROTLI_DECODER_RESULT" IN_LIST _cdef)
- CheckFunction("BrotliDecoderTakeOutput" "SERF_HAVE_BROTLI" Brotli::Decode
${SERF_STANDARD_LIBRARIES})
+ CheckFunction("BrotliDecoderTakeOutput" "NULL, NULL" "SERF_HAVE_BROTLI"
+ "brotli/decode.h" ${BROTLI_INCLUDES}
+ Brotli::Decode ${SERF_STANDARD_LIBRARIES})
endif()
endif()
Modified: serf/trunk/build/SerfChecks.cmake
URL:
http://svn.apache.org/viewvc/serf/trunk/build/SerfChecks.cmake?rev=1926231&r1=1926230&r2=1926231&view=diff
==============================================================================
--- serf/trunk/build/SerfChecks.cmake (original)
+++ serf/trunk/build/SerfChecks.cmake Sun Jun 8 03:50:03 2025
@@ -17,71 +17,69 @@
# under the License.
# ===================================================================
-include(CheckFunctionExists)
+include(CheckCSourceCompiles)
include(CheckIncludeFile)
-include(CheckSymbolExists)
include(CheckTypeSize)
-function(_CheckFunction var_ name_ libraries_)
+function(_CheckFunction var_ name_ args_ header_ includes_ 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_}_)
+ if(includes_)
+ set(CMAKE_REQUIRED_INCLUDES "${includes_}")
+ else()
+ unset(CMAKE_REQUIRED_INCLUDES)
+ endif()
+
+ set(source_
+ "#include <${header_}>"
+ ""
+ "#if _MSC_VER && !__INTEL_COMPILER"
+ " #pragma function(${name_})"
+ "#endif"
+ ""
+ "int main(void) {"
+ "#if defined (__stub_${name_}) || defined (__stub___${name_})"
+ " #error \"${name_} has a GNU stub, cannot check\""
+ "#else"
+ " ${name_}(${args_})\\;"
+ "#endif"
+ " return 0\\;"
+ "}"
+ "")
+ list(JOIN source_ "\n" source_)
+
+ check_c_source_compiles("${source_}" "check_function_${name_}")
+ if(${check_function_${name_}})
set("${var_}" TRUE PARENT_SCOPE)
else()
set("${var_}" FALSE PARENT_SCOPE)
endif()
+
+ unset(CMAKE_REQUIRED_INCLUDES)
unset(CMAKE_REQUIRED_LIBRARIES)
endfunction(_CheckFunction)
-macro(CheckFunction name_ symbol_)
- _CheckFunction("serf_feature_CheckFunction_${name_}_" "${name_}" "${ARGN}")
+macro(CheckFunction name_ args_ symbol_ header_ includes_)
+ _CheckFunction("serf_feature_CheckFunction_${name_}_"
+ "${name_}" "${args_}" "${header_}" "${includes_}" "${ARGN}")
if("${serf_feature_CheckFunction_${name_}_}")
add_compile_definitions("${symbol_}")
endif()
endmacro(CheckFunction)
-macro(CheckNotFunction name_ symbol_)
- _CheckFunction("serf_feature_CheckNotFunction_${name_}_" "${name_}"
"${ARGN}")
+macro(CheckNotFunction name_ args_ symbol_ header_ includes_)
+ _CheckFunction("serf_feature_CheckNotFunction_${name_}_"
+ "${name_}" "${args_}" "${header_}" "${includes_}" "${ARGN}")
if(NOT "${serf_feature_CheckNotFunction_${name_}_}")
add_compile_definitions("${symbol_}")
endif()
endmacro(CheckNotFunction)
-function(_CheckSymbol var_ name_ header_ includes_)
- if(includes_)
- set(CMAKE_REQUIRED_INCLUDES "${includes_}")
- else()
- unset(CMAKE_REQUIRED_INCLUDES)
- endif()
-
- check_symbol_exists("${name_}" "${header_}" "serf_foundit_symbol_${name_}_")
- if(serf_foundit_symbol_${name_}_)
- set("${var_}" TRUE PARENT_SCOPE)
- else()
- set("${var_}" FALSE PARENT_SCOPE)
- endif()
- unset(CMAKE_REQUIRED_INCLUDES)
-endfunction(_CheckSymbol)
-
-macro(CheckFunctionMacro name_ symbol_ header_ includes_)
- _CheckFunction("serf_feature_CheckFunctionMacro_${name_}_" "${name_}"
"${ARGN}")
- if("${serf_feature_CheckFunctionMacro_${name_}_}")
- add_compile_definitions("${symbol_}")
- else()
- _CheckSymbol("serf_feature_CheckFunctionMacro_${name_}_" "${name_}"
"${header_}" "${includes_}")
- if("${serf_feature_CheckFunctionMacro_${name_}_}")
- add_compile_definitions("${symbol_}")
- endif()
- endif()
-endmacro(CheckFunctionMacro)
-
-
function(_CheckHeader var_ name_ includes_)
if(includes_)
set(CMAKE_REQUIRED_INCLUDES "${includes_}")
@@ -89,8 +87,8 @@ function(_CheckHeader var_ name_ include
unset(CMAKE_REQUIRED_INCLUDES)
endif()
- check_include_file("${name_}" "serf_foundit_${name_}_")
- if(${serf_foundit_${name_}_})
+ check_include_file("${name_}" "check_symbol_${name_}")
+ if(${check_symbol_${name_}})
set("${var_}" TRUE PARENT_SCOPE)
else()
set("${var_}" FALSE PARENT_SCOPE)
@@ -119,8 +117,8 @@ function(_CheckType var_ name_ header_ i
unset(CMAKE_EXTRA_INCLUDE_FILES)
endif()
- check_type_size("${name_}" "serf_foundit_${name_}_")
- if(${HAVE_serf_foundit_${name_}_})
+ check_type_size("${name_}" "check_type_${name_}")
+ if(${HAVE_check_type_${name_}})
set("${var_}" TRUE PARENT_SCOPE)
else()
set("${var_}" FALSE PARENT_SCOPE)