From a72e241200c9fcb1873ef7246dcc43093d782bf7 Mon Sep 17 00:00:00 2001 From: Matthew Woehlke Date: Tue, 21 Jul 2026 14:20:03 -0400 Subject: [PATCH] Check*: Restore more toleration of `;-W...` in CMAKE_REQUIRED_FLAGS Commit 5abaf65154 (Check*: Restore toleration of `;-W...` in CMAKE_REQUIRED_FLAGS, 2026-06-24, v4.4.0-rc3~2^2) introduced logic to prevent `-W*` arguments in `CMAKE_REQUIRED_FLAGS` from being passed as CMake arguments in the `check[_]_source_{compiles,runs}` family of utilities. However, several other related modules are also affected. Update those to also use the new logic, and to have more uniform implementations, making use of the refactoring from the previous commit. Fixes: #27961 --- Modules/CheckFunctionExists.cmake | 47 ++++++++------------------ Modules/CheckIncludeFile.cmake | 39 +++++++-------------- Modules/CheckIncludeFileCXX.cmake | 39 +++++++-------------- Modules/CheckIncludeFiles.cmake | 40 +++++++--------------- Modules/CheckLibraryExists.cmake | 38 ++++++++------------- Modules/CheckPrototypeDefinition.cmake | 44 ++++++------------------ Modules/CheckSymbolExists.cmake | 41 ++++++---------------- Modules/CheckTypeSize.cmake | 17 ++++------ 8 files changed, 91 insertions(+), 214 deletions(-) diff --git a/Modules/CheckFunctionExists.cmake b/Modules/CheckFunctionExists.cmake index 5d13f2b627..899e937ae5 100644 --- a/Modules/CheckFunctionExists.cmake +++ b/Modules/CheckFunctionExists.cmake @@ -123,38 +123,15 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}") - set(MACRO_CHECK_FUNCTION_DEFINITIONS - "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_START "Looking for ${FUNCTION}") endif() - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS - LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - else() - set(CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS) - endif() - if(CMAKE_REQUIRED_LIBRARIES) - set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES - LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) - else() - set(CHECK_FUNCTION_EXISTS_ADD_LIBRARIES) - endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CFE_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CFE_LINK_DIRECTORIES) - endif() - if(CMAKE_REQUIRED_INCLUDES) - set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CHECK_FUNCTION_EXISTS_ADD_INCLUDES) - endif() + + cmake_check_common_init_args(_CFE) if(CMAKE_C_COMPILER_LOADED) set(_cfe_source CheckFunctionExists.c) @@ -166,15 +143,19 @@ macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE) try_compile(${VARIABLE} SOURCE_FROM_FILE "${_cfe_source}" "${CMAKE_ROOT}/Modules/CheckFunctionExists.c" - COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${CHECK_FUNCTION_EXISTS_ADD_LINK_OPTIONS} - ${CHECK_FUNCTION_EXISTS_ADD_LIBRARIES} - CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} - "${CHECK_FUNCTION_EXISTS_ADD_INCLUDES}" - "${_CFE_LINK_DIRECTORIES}" + COMPILE_DEFINITIONS + -DCHECK_FUNCTION_EXISTS=${FUNCTION} + ${CMAKE_REQUIRED_DEFINITIONS} + ${_CFE_ADD_LINK_OPTIONS} + ${_CFE_ADD_LINK_LIBRARIES} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + ${_CSC_EXTRA_CMAKE_ARGUMENTS} + "${_CFE_INCLUDE_DIRECTORIES}" + "${_CFE_LINK_DIRECTORIES}" ) unset(_cfe_source) - unset(_CFE_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CFE) if(${VARIABLE}) set(${VARIABLE} 1 CACHE INTERNAL "Have function ${FUNCTION}") diff --git a/Modules/CheckIncludeFile.cmake b/Modules/CheckIncludeFile.cmake index 8acd6cf26b..056979652c 100644 --- a/Modules/CheckIncludeFile.cmake +++ b/Modules/CheckIncludeFile.cmake @@ -116,15 +116,10 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE) if(NOT DEFINED "${VARIABLE}") - if(CMAKE_REQUIRED_INCLUDES) - set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CHECK_INCLUDE_FILE_C_INCLUDE_DIRS) - endif() - set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS}) set(CHECK_INCLUDE_FILE_VAR ${INCLUDE}) file(READ ${CMAKE_ROOT}/Modules/CheckIncludeFile.c.in _CIF_SOURCE_CONTENT) string(CONFIGURE "${_CIF_SOURCE_CONTENT}" _CIF_SOURCE_CONTENT) @@ -136,18 +131,17 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE) string(APPEND CMAKE_C_FLAGS " ${ARGV2}") endif() - set(_CIF_LINK_OPTIONS) - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - endif() + cmake_check_common_init_compile_args(_CIF) + cmake_check_common_init_link_options(_CIF) + cmake_check_common_init_link_directories(_CIF) - set(_CIF_LINK_LIBRARIES "") + set(_CIF_ADD_LINK_LIBRARIES "") if(CMAKE_REQUIRED_LIBRARIES) cmake_policy(GET CMP0075 _CIF_CMP0075 PARENT_SCOPE # undocumented, do not use outside of CMake ) if("x${_CIF_CMP0075}x" STREQUAL "xNEWx") - set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(_CIF_ADD_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx") elseif(NOT _CIF_CMP0075_WARNED) set(_CIF_CMP0075_WARNED 1) @@ -160,26 +154,17 @@ macro(CHECK_INCLUDE_FILE INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CIF_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CIF_LINK_DIRECTORIES) - endif() - try_compile(${VARIABLE} SOURCE_FROM_VAR CheckIncludeFile.c _CIF_SOURCE_CONTENT COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${_CIF_LINK_OPTIONS} - ${_CIF_LINK_LIBRARIES} + ${_CIF_ADD_LINK_OPTIONS} + ${_CIF_ADD_LINK_LIBRARIES} CMAKE_FLAGS - -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} - "${CHECK_INCLUDE_FILE_C_INCLUDE_DIRS}" - "${_CIF_LINK_DIRECTORIES}" + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + "${_CIF_INCLUDE_DIRECTORIES}" + "${_CIF_LINK_DIRECTORIES}" ) - unset(_CIF_LINK_OPTIONS) - unset(_CIF_LINK_LIBRARIES) - unset(_CIF_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CIF) if(${ARGC} EQUAL 3) set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS_SAVE}) diff --git a/Modules/CheckIncludeFileCXX.cmake b/Modules/CheckIncludeFileCXX.cmake index 9dade6be78..bea5f08ceb 100644 --- a/Modules/CheckIncludeFileCXX.cmake +++ b/Modules/CheckIncludeFileCXX.cmake @@ -85,15 +85,10 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}") - if(CMAKE_REQUIRED_INCLUDES) - set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS) - endif() - set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS}) set(CHECK_INCLUDE_FILE_VAR ${INCLUDE}) file(READ ${CMAKE_ROOT}/Modules/CheckIncludeFile.cxx.in _CIF_SOURCE_CONTENT) string(CONFIGURE "${_CIF_SOURCE_CONTENT}" _CIF_SOURCE_CONTENT) @@ -105,18 +100,17 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) string(APPEND CMAKE_CXX_FLAGS " ${ARGV2}") endif() - set(_CIF_LINK_OPTIONS) - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - endif() + cmake_check_common_init_compile_args(_CIF) + cmake_check_common_init_link_options(_CIF) + cmake_check_common_init_link_directories(_CIF) - set(_CIF_LINK_LIBRARIES "") + set(_CIF_ADD_LINK_LIBRARIES "") if(CMAKE_REQUIRED_LIBRARIES) cmake_policy(GET CMP0075 _CIF_CMP0075 PARENT_SCOPE # undocumented, do not use outside of CMake ) if("x${_CIF_CMP0075}x" STREQUAL "xNEWx") - set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(_CIF_ADD_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx") elseif(NOT _CIF_CMP0075_WARNED) set(_CIF_CMP0075_WARNED 1) @@ -129,26 +123,17 @@ macro(CHECK_INCLUDE_FILE_CXX INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CIF_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CIF_LINK_DIRECTORIES) - endif() - try_compile(${VARIABLE} SOURCE_FROM_VAR CheckIncludeFile.cxx _CIF_SOURCE_CONTENT COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${_CIF_LINK_OPTIONS} - ${_CIF_LINK_LIBRARIES} + ${_CIF_ADD_LINK_OPTIONS} + ${_CIF_ADD_LINK_LIBRARIES} CMAKE_FLAGS - -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILE_FLAGS} - "${CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS}" - "${_CIF_LINK_DIRECTORIES}" + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + "${_CIF_INCLUDE_DIRECTORIES}" + "${_CIF_LINK_DIRECTORIES}" ) - unset(_CIF_LINK_OPTIONS) - unset(_CIF_LINK_LIBRARIES) - unset(_CIF_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CIF) if(${ARGC} EQUAL 3) set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE}) diff --git a/Modules/CheckIncludeFiles.cmake b/Modules/CheckIncludeFiles.cmake index 00fce8c47b..57e6beda66 100644 --- a/Modules/CheckIncludeFiles.cmake +++ b/Modules/CheckIncludeFiles.cmake @@ -106,6 +106,7 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) if(NOT DEFINED "${VARIABLE}") @@ -136,13 +137,7 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) message(FATAL_ERROR "Unknown language:\n ${_lang}\nSupported languages: C, CXX.\n") endif() - if(CMAKE_REQUIRED_INCLUDES) - set(CHECK_INCLUDE_FILES_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CHECK_INCLUDE_FILES_INCLUDE_DIRS) - endif() set(CHECK_INCLUDE_FILES_CONTENT "/* */\n") - set(MACRO_CHECK_INCLUDE_FILES_FLAGS ${CMAKE_REQUIRED_FLAGS}) foreach(FILE ${INCLUDE}) string(APPEND _src_content "#include <${FILE}>\n") @@ -160,18 +155,17 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) set(_description "include file ${_INCLUDE}") endif() - set(_CIF_LINK_OPTIONS) - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(_CIF_LINK_OPTIONS LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - endif() + cmake_check_common_init_compile_args(_CIF) + cmake_check_common_init_link_options(_CIF) + cmake_check_common_init_link_directories(_CIF) - set(_CIF_LINK_LIBRARIES "") + set(_CIF_ADD_LINK_LIBRARIES "") if(CMAKE_REQUIRED_LIBRARIES) cmake_policy(GET CMP0075 _CIF_CMP0075 PARENT_SCOPE # undocumented, do not use outside of CMake ) if("x${_CIF_CMP0075}x" STREQUAL "xNEWx") - set(_CIF_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) + set(_CIF_ADD_LINK_LIBRARIES LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) elseif("x${_CIF_CMP0075}x" STREQUAL "xOLDx") elseif(NOT _CIF_CMP0075_WARNED) set(_CIF_CMP0075_WARNED 1) @@ -184,29 +178,21 @@ macro(CHECK_INCLUDE_FILES INCLUDE VARIABLE) unset(_CIF_CMP0075) endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CIF_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CIF_LINK_DIRECTORIES) - endif() - if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_START "Looking for ${_description}") endif() try_compile(${VARIABLE} SOURCE_FROM_VAR "${src}" _src_content COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${_CIF_LINK_OPTIONS} - ${_CIF_LINK_LIBRARIES} + ${_CIF_ADD_LINK_OPTIONS} + ${_CIF_ADD_LINK_LIBRARIES} CMAKE_FLAGS - -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_INCLUDE_FILES_FLAGS} - "${CHECK_INCLUDE_FILES_INCLUDE_DIRS}" - "${_CIF_LINK_DIRECTORIES}" + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + "${_CIF_INCLUDE_DIRECTORIES}" + "${_CIF_LINK_DIRECTORIES}" ) - unset(_CIF_LINK_OPTIONS) - unset(_CIF_LINK_LIBRARIES) - unset(_CIF_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CIF) + if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_PASS "found") diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake index bd75bd1f6f..4864908bad 100644 --- a/Modules/CheckLibraryExists.cmake +++ b/Modules/CheckLibraryExists.cmake @@ -118,30 +118,18 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) if(NOT DEFINED "${VARIABLE}") - set(MACRO_CHECK_LIBRARY_EXISTS_DEFINITION - "-DCHECK_FUNCTION_EXISTS=${FUNCTION} ${CMAKE_REQUIRED_FLAGS}") if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_START "Looking for ${FUNCTION} in ${LIBRARY}") endif() - set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS) - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(CHECK_LIBRARY_EXISTS_LINK_OPTIONS - LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - endif() - set(CHECK_LIBRARY_EXISTS_LIBRARIES ${LIBRARY}) - if(CMAKE_REQUIRED_LIBRARIES) - set(CHECK_LIBRARY_EXISTS_LIBRARIES - ${CHECK_LIBRARY_EXISTS_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES}) - endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CLE_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${LOCATION};${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CLE_LINK_DIRECTORIES "-DLINK_DIRECTORIES:STRING=${LOCATION}") - endif() + + cmake_check_common_init_compile_flags(_CLE) + cmake_check_common_init_link_options(_CLE) + cmake_check_common_init_link_libraries(_CLE "${LIBRARY}") + cmake_check_common_init_link_directories(_CLE "${LOCATION}") if(CMAKE_C_COMPILER_LOADED) set(_cle_source CheckFunctionExists.c) @@ -153,15 +141,17 @@ macro(CHECK_LIBRARY_EXISTS LIBRARY FUNCTION LOCATION VARIABLE) try_compile(${VARIABLE} SOURCE_FROM_FILE "${_cle_source}" "${CMAKE_ROOT}/Modules/CheckFunctionExists.c" - COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${CHECK_LIBRARY_EXISTS_LINK_OPTIONS} - LINK_LIBRARIES ${CHECK_LIBRARY_EXISTS_LIBRARIES} + COMPILE_DEFINITIONS + -DCHECK_FUNCTION_EXISTS=${FUNCTION} + ${CMAKE_REQUIRED_DEFINITIONS} + ${_CLE_ADD_LINK_OPTIONS} + ${_CLE_ADD_LINK_LIBRARIES} CMAKE_FLAGS - -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_LIBRARY_EXISTS_DEFINITION} - "${_CLE_LINK_DIRECTORIES}" + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + "${_CLE_LINK_DIRECTORIES}" ) unset(_cle_source) - unset(_CLE_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CLE) if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) diff --git a/Modules/CheckPrototypeDefinition.cmake b/Modules/CheckPrototypeDefinition.cmake index d77e81cede..84f0b6d858 100644 --- a/Modules/CheckPrototypeDefinition.cmake +++ b/Modules/CheckPrototypeDefinition.cmake @@ -94,6 +94,7 @@ expected prototype: #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIABLE) @@ -103,33 +104,6 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB endif() set(CHECK_PROTOTYPE_DEFINITION_CONTENT "/* */\n") - set(CHECK_PROTOTYPE_DEFINITION_FLAGS ${CMAKE_REQUIRED_FLAGS}) - if (CMAKE_REQUIRED_LINK_OPTIONS) - set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS - LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - else() - set(CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS) - endif() - if (CMAKE_REQUIRED_LIBRARIES) - set(CHECK_PROTOTYPE_DEFINITION_LIBS - LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) - else() - set(CHECK_PROTOTYPE_DEFINITION_LIBS) - endif() - if (CMAKE_REQUIRED_INCLUDES) - set(CMAKE_SYMBOL_EXISTS_INCLUDES - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CMAKE_SYMBOL_EXISTS_INCLUDES) - endif() - - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CPD_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CPD_LINK_DIRECTORIES) - endif() - foreach(_FILE ${_HEADER}) string(APPEND CHECK_PROTOTYPE_DEFINITION_HEADER "#include <${_FILE}>\n") @@ -142,16 +116,19 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB file(READ ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/CheckPrototypeDefinition.c.in _SOURCE) string(CONFIGURE "${_SOURCE}" _SOURCE @ONLY) + cmake_check_common_init_args(_CPD) + try_compile(${_VARIABLE} SOURCE_FROM_VAR CheckPrototypeDefinition.c _SOURCE COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${CHECK_PROTOTYPE_DEFINITION_LINK_OPTIONS} - ${CHECK_PROTOTYPE_DEFINITION_LIBS} - CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${CHECK_PROTOTYPE_DEFINITION_FLAGS} - "${CMAKE_SYMBOL_EXISTS_INCLUDES}" - "${_CPD_LINK_DIRECTORIES}" + ${_CPD_ADD_LINK_OPTIONS} + ${_CPD_ADD_LINK_LIBRARIES} + CMAKE_FLAGS + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + ${_CPD_EXTRA_CMAKE_ARGUMENTS} + "${_CPD_INCLUDE_DIRECTORIES}" + "${_CPD_LINK_DIRECTORIES}" ) - unset(_CPD_LINK_DIRECTORIES) if (${_VARIABLE}) set(${_VARIABLE} 1 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") @@ -165,5 +142,4 @@ function(check_prototype_definition _FUNCTION _PROTOTYPE _RETURN _HEADER _VARIAB set(${_VARIABLE} 0 CACHE INTERNAL "Have correct prototype for ${_FUNCTION}") endif () endif() - endfunction() diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake index 46d1ab33f7..ab5a73b669 100644 --- a/Modules/CheckSymbolExists.cmake +++ b/Modules/CheckSymbolExists.cmake @@ -91,6 +91,7 @@ See Also #]=======================================================================] include_guard(GLOBAL) +include(Internal/CheckCommon) macro(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE) if(CMAKE_C_COMPILER_LOADED) @@ -134,32 +135,7 @@ endmacro() macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE) if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}") set(_CSE_SOURCE "/* */\n") - set(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS}) - if(CMAKE_REQUIRED_LINK_OPTIONS) - set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS - LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS}) - else() - set(CHECK_SYMBOL_EXISTS_LINK_OPTIONS) - endif() - if(CMAKE_REQUIRED_LIBRARIES) - set(CHECK_SYMBOL_EXISTS_LIBS - LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) - else() - set(CHECK_SYMBOL_EXISTS_LIBS) - endif() - if(CMAKE_REQUIRED_INCLUDES) - set(CMAKE_SYMBOL_EXISTS_INCLUDES - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}") - else() - set(CMAKE_SYMBOL_EXISTS_INCLUDES) - endif() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CSE_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CSE_LINK_DIRECTORIES) - endif() foreach(FILE ${FILES}) string(APPEND _CSE_SOURCE "#include <${FILE}>\n") @@ -187,20 +163,23 @@ int main(int argc, char** argv) }\n") unset(_CSE_CHECK_NON_MACRO) + cmake_check_common_init_args(_CSE) + if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_START "Looking for ${SYMBOL}") endif() try_compile(${VARIABLE} SOURCE_FROM_VAR "${SOURCEFILE}" _CSE_SOURCE COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - ${CHECK_SYMBOL_EXISTS_LINK_OPTIONS} - ${CHECK_SYMBOL_EXISTS_LIBS} + ${_CSE_ADD_LINK_OPTIONS} + ${_CSE_ADD_LINK_LIBRARIES} CMAKE_FLAGS - -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_SYMBOL_EXISTS_FLAGS} - "${CMAKE_SYMBOL_EXISTS_INCLUDES}" - "${_CSE_LINK_DIRECTORIES}" + -DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH} + "${_CSE_INCLUDE_DIRECTORIES}" + "${_CSE_LINK_DIRECTORIES}" ) - unset(_CSE_LINK_DIRECTORIES) + cmake_check_common_cleanup(_CSE) + if(${VARIABLE}) if(NOT CMAKE_REQUIRED_QUIET) message(CHECK_PASS "found") diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake index 1f5a622839..c0c9dbb319 100644 --- a/Modules/CheckTypeSize.cmake +++ b/Modules/CheckTypeSize.cmake @@ -282,6 +282,7 @@ include(CheckIncludeFile) include(CheckIncludeFileCXX) include_guard(GLOBAL) +include(Internal/CheckCommon) block(SCOPE_FOR POLICIES) cmake_policy(SET CMP0140 NEW) @@ -334,12 +335,7 @@ function(__check_type_size_impl type var result_var map builtin language) string(APPEND headers "#include \"${h}\"\n") endforeach() - if(CMAKE_REQUIRED_LINK_DIRECTORIES) - set(_CTS_LINK_DIRECTORIES - "-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}") - else() - set(_CTS_LINK_DIRECTORIES) - endif() + cmake_check_common_init_args(_CTS) # Perform the check. set(bin ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CheckTypeSize/${var}.bin) @@ -347,15 +343,14 @@ function(__check_type_size_impl type var result_var map builtin language) string(CONFIGURE "${src_content}" src_content @ONLY) try_compile(${result_var} SOURCE_FROM_VAR "${src}" src_content COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS} - LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} + ${_CTS_ADD_LINK_OPTIONS} + ${_CTS_ADD_LINK_LIBRARIES} CMAKE_FLAGS - "-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}" - "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}" + -DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS} + "${_CTS_INCLUDE_DIRECTORIES}" "${_CTS_LINK_DIRECTORIES}" COPY_FILE ${bin} ) - unset(_CTS_LINK_DIRECTORIES) if(${result_var}) # The check compiled. Load information from the binary.