Author: brane Date: Mon Jun 30 23:39:48 2025 New Revision: 1926878 URL: http://svn.apache.org/viewvc?rev=1926878&view=rev Log: In the CMake build, set define flags per target. As with warnings, this simplifies the manipulation because we don't have to override inherited directory properties any more.
* CMakeLists.txt (SERF_C_DEFINES): Use this list instead of add_compile_definitions(). (serf_shared, serf_static): Set per-target compile definitions. * build/SerfChecks.cmake: Update SERF_C_DEFINES. * test/CMakeLists.txt: Add per-target compile definitions. * test/MockHTTPinC/CMakeLists.txt: Likewise, modified for MockHTTPinC. Modified: serf/trunk/CMakeLists.txt serf/trunk/build/SerfChecks.cmake serf/trunk/test/CMakeLists.txt serf/trunk/test/MockHTTPinC/CMakeLists.txt Modified: serf/trunk/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1926878&r1=1926877&r2=1926878&view=diff ============================================================================== --- serf/trunk/CMakeLists.txt (original) +++ serf/trunk/CMakeLists.txt Mon Jun 30 23:39:48 2025 @@ -222,7 +222,7 @@ if(SERF_WINDOWS) "secur32.lib" "ws2_32.lib" ) - add_compile_definitions("SERF_HAVE_SSPI") + list(APPEND SERF_C_DEFINES "SERF_HAVE_SSPI") endif() # Process build options for dependency search @@ -242,10 +242,10 @@ find_package(APR REQUIRED) find_package(APRUtil REQUIRED) # We do not want or need OpenSSL's compatibility macros. -add_compile_definitions("OPENSSL_NO_DEPRECATED") +list(APPEND SERF_C_DEFINES "OPENSSL_NO_DEPRECATED") # Hide OpenSSL's _fp() API. -add_compile_definitions("OPENSSL_NO_STDIO") +list(APPEND SERF_C_DEFINES "OPENSSL_NO_STDIO") # Find optional dependencies find_package(Brotli) @@ -265,7 +265,7 @@ if(Brotli_FOUND) list(APPEND SERF_PRIVATE_TARGETS Brotli::Decode) endif() if(GSSAPI_FOUND) - add_compile_definitions("SERF_HAVE_GSSAPI") + list(APPEND SERF_C_DEFINES "SERF_HAVE_GSSAPI") list(APPEND SERF_PRIVATE_TARGETS KRB5::GSSAPI) endif() @@ -325,8 +325,7 @@ CheckType("OSSL_HANDSHAKE_STATE" "openss if(Brotli_FOUND) CheckType("BrotliDecoderResult" "brotli/decode.h" "SERF_HAVE_BROTLI_DECODER_RESULT" ${BROTLI_INCLUDES}) # 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) + if("SERF_HAVE_BROTLI_DECODER_RESULT" IN_LIST SERF_C_DEFINES) CheckFunction("BrotliDecoderTakeOutput" "NULL, NULL" "SERF_HAVE_BROTLI" "brotli/decode.h" ${BROTLI_INCLUDES} Brotli::Decode ${SERF_STANDARD_LIBRARIES}) @@ -339,15 +338,15 @@ endif() # Process other build options if(DEBUG) - add_compile_definitions("DEBUG" "_DEBUG") + list(APPEND SERF_C_DEFINES "DEBUG" "_DEBUG") endif() if(DISABLE_LOGGING) - add_compile_definitions("SERF_DISABLE_LOGGING") + list(APPEND SERF_C_DEFINES "SERF_DISABLE_LOGGING") endif() if(ENABLE_SLOW_TESTS) - add_compile_definitions("SERF_TEST_DEFLATE_4GBPLUS_BUCKETS") + list(APPEND SERF_C_DEFINES "SERF_TEST_DEFLATE_4GBPLUS_BUCKETS") endif() # Set common compiler flags @@ -383,14 +382,14 @@ else() # 'function' undefined; assuming extern returning int list(APPEND SERF_C_WARNINGS "/we4013") - add_compile_definitions( + list(APPEND SERF_C_DEFINES "WIN32" "WIN32_LEAN_AND_MEAN" "NOUSER" "NOGDI" "NONLS" "NOCRYPT" "_CRT_SECURE_NO_WARNINGS" "_CRT_NONSTDC_NO_WARNINGS" ) if(SERF_WIN64) - add_compile_definitions("WIN64") + list(APPEND SERF_C_DEFINES "WIN64") endif() set(CMAKE_IMPORT_LIBRARY_PREFIX "${SERF_INSTALL_LIBRARIES}") @@ -403,6 +402,7 @@ if(NOT SKIP_SHARED) target_compile_options(serf_shared PUBLIC ${APR_CFLAGS} PRIVATE ${SERF_C_WARNINGS}) + target_compile_definitions(serf_shared PRIVATE ${SERF_C_DEFINES}) target_include_directories(serf_shared PUBLIC ${SERF_SOURCE_DIR}) target_link_libraries(serf_shared PRIVATE ${SERF_PRIVATE_TARGETS} @@ -436,6 +436,7 @@ if(NOT SKIP_STATIC) target_compile_options(serf_static PUBLIC ${APR_CFLAGS} PRIVATE ${SERF_C_WARNINGS}) + target_compile_definitions(serf_static PRIVATE ${SERF_C_DEFINES}) target_include_directories(serf_static PUBLIC ${SERF_SOURCE_DIR}) target_link_libraries(serf_static ${SERF_PRIVATE_TARGETS} @@ -529,14 +530,13 @@ if(DOT_CLANGD) set(_gen_dot_clangd ON) endif() -get_directory_property(_cdef COMPILE_DEFINITIONS) -if("SERF_HAVE_BROTLI" IN_LIST _cdef) +if("SERF_HAVE_BROTLI" IN_LIST SERF_C_DEFINES) set(_have_brotli ON) endif() -if("SERF_HAVE_GSSAPI" IN_LIST _cdef) +if("SERF_HAVE_GSSAPI" IN_LIST SERF_C_DEFINES) set(_have_gssapi ON) endif() -if("SERF_HAVE_SSPI" IN_LIST _cdef) +if("SERF_HAVE_SSPI" IN_LIST SERF_C_DEFINES) set(_have_sspi ON) endif() Modified: serf/trunk/build/SerfChecks.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/SerfChecks.cmake?rev=1926878&r1=1926877&r2=1926878&view=diff ============================================================================== --- serf/trunk/build/SerfChecks.cmake (original) +++ serf/trunk/build/SerfChecks.cmake Mon Jun 30 23:39:48 2025 @@ -21,10 +21,7 @@ include(CheckCSourceCompiles) include(CheckIncludeFile) include(CheckTypeSize) - -# CMake doesn't use current directory properties in the compile checks. -get_directory_property(cdef_ COMPILE_DEFINITIONS) -list(TRANSFORM cdef_ PREPEND "-D") +list(TRANSFORM SERF_C_DEFINES PREPEND "-D" OUTPUT_VARIABLE cdef_) function(_CheckFunction var_ name_ args_ header_ includes_ libraries_) set(CMAKE_REQUIRED_DEFINITIONS ${cdef_}) @@ -74,7 +71,7 @@ macro(CheckFunction name_ args_ symbol_ _CheckFunction("serf_feature_CheckFunction_${name_}_" "${name_}" "${args_}" "${header_}" "${includes_}" "${ARGN}") if("${serf_feature_CheckFunction_${name_}_}") - add_compile_definitions("${symbol_}") + list(APPEND SERF_C_DEFINES "${symbol_}") endif() endmacro(CheckFunction) @@ -82,7 +79,7 @@ macro(CheckNotFunction name_ args_ symbo _CheckFunction("serf_feature_CheckNotFunction_${name_}_" "${name_}" "${args_}" "${header_}" "${includes_}" "${ARGN}") if(NOT "${serf_feature_CheckNotFunction_${name_}_}") - add_compile_definitions("${symbol_}") + list(APPEND SERF_C_DEFINES "${symbol_}") endif() endmacro(CheckNotFunction) @@ -108,7 +105,7 @@ endfunction(_CheckHeader) macro(CheckHeader name_ symbol_) _CheckHeader("serf_feature_CheckHeader_${name_}_" "${name_}" "${ARGN}") if("${serf_feature_CheckHeader_${name_}_}") - add_compile_definitions("${symbol_}") + list(APPEND SERF_C_DEFINES "${symbol_}") endif() endmacro(CheckHeader) @@ -141,6 +138,6 @@ endfunction(_CheckType) macro(CheckType name_ header_ symbol_) _CheckType("serf_feature_CheckType_${name_}_" "${name_}" "${header_}" "${ARGN}") if("${serf_feature_CheckType_${name_}_}") - add_compile_definitions("${symbol_}") + list(APPEND SERF_C_DEFINES "${symbol_}") endif() endmacro(CheckType) Modified: serf/trunk/test/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/test/CMakeLists.txt?rev=1926878&r1=1926877&r2=1926878&view=diff ============================================================================== --- serf/trunk/test/CMakeLists.txt (original) +++ serf/trunk/test/CMakeLists.txt Mon Jun 30 23:39:48 2025 @@ -54,6 +54,7 @@ set(SIMPLE_TEST_TARGETS foreach(TEST_TARGET ${SIMPLE_TEST_TARGETS}) add_executable(${TEST_TARGET} "${TEST_TARGET}.c") add_dependencies(${TEST_TARGET} serf_static) + target_compile_definitions(${TEST_TARGET} PRIVATE ${SERF_C_DEFINES}) target_compile_options(${TEST_TARGET} PRIVATE ${SERF_C_WARNINGS}) target_link_libraries(${TEST_TARGET} serf_static) endforeach() @@ -61,6 +62,7 @@ endforeach() add_executable(test_all ${TEST_ALL_SOURCES}) add_dependencies(test_all serf_static mockhttpinc) target_compile_options(test_all PRIVATE ${SERF_C_WARNINGS}) +target_compile_definitions(test_all PRIVATE ${SERF_C_DEFINES}) target_include_directories(test_all SYSTEM BEFORE PRIVATE ${SERF_DEPENDENCY_INCLUDES}) target_link_libraries(test_all serf_static mockhttpinc) Modified: serf/trunk/test/MockHTTPinC/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/test/MockHTTPinC/CMakeLists.txt?rev=1926878&r1=1926877&r2=1926878&view=diff ============================================================================== --- serf/trunk/test/MockHTTPinC/CMakeLists.txt (original) +++ serf/trunk/test/MockHTTPinC/CMakeLists.txt Mon Jun 30 23:39:48 2025 @@ -46,12 +46,13 @@ endif() mark_as_advanced(SHOW_MockHTTPinC_WARNINGS) # MockHTTP needs deprecated OpenSSL APIs -get_directory_property(_cdef COMPILE_DEFINITIONS) -list(REMOVE_ITEM _cdef "OPENSSL_NO_DEPRECATED") -set_directory_properties(PROPERTIES COMPILE_DEFINITIONS "${_cdef}") +set(MockHTTPinC_DEFINES ${SERF_C_DEFINES}) +list(REMOVE_ITEM MockHTTPinC_DEFINES "OPENSSL_NO_DEPRECATED") add_library(mockhttpinc STATIC ${MockHTTPinC_SOURCES}) target_compile_options(mockhttpinc PRIVATE ${MockHTTPinC_WARNINGS}) -target_compile_definitions(mockhttpinc PUBLIC "MOCKHTTP_OPENSSL") +target_compile_definitions(mockhttpinc + PUBLIC "MOCKHTTP_OPENSSL" + PRIVATE ${MockHTTPinC_DEFINES}) target_include_directories(mockhttpinc SYSTEM BEFORE PRIVATE ${APR_INCLUDES} ${APRUTIL_INCLUDES})