Merge topic 'more-CMAKE_REQUIRED_FLAGS-fixes' into release-4.4

a72e241200 Check*: Restore more toleration of `;-W...` in CMAKE_REQUIRED_FLAGS
7644d557df Check*: Refactor variable handling

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !12303
This commit is contained in:
Brad King
2026-07-22 10:55:44 -04:00
committed by Kitware Robot
11 changed files with 224 additions and 342 deletions
+14 -33
View File
@@ -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}")
+12 -27
View File
@@ -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})
+12 -27
View File
@@ -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})
+13 -27
View File
@@ -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")
+14 -24
View File
@@ -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)
+10 -34
View File
@@ -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()
+10 -31
View File
@@ -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")
+6 -11
View File
@@ -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.
+119
View File
@@ -0,0 +1,119 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
# Do NOT include this module directly into any of your code. It is meant as
# a library for Check*CompilerFlag.cmake and Check*LinkerFlag.cma modules.
# It's content may change in any way between releases.
include_guard(GLOBAL)
macro(CMAKE_CHECK_COMMON_INIT_COMPILE_FLAGS _PREFIX)
set(${_PREFIX}_EXTRA_CMAKE_ARGUMENTS)
string(REPLACE "\\;" "\\\\;" CMAKE_REQUIRED_FLAGS
"${CMAKE_REQUIRED_FLAGS}")
#[[
cmake_polify(GET CMP0999 ${_PREFIX}_CMP0999)
if(${_PREFIX}_CMP0999 STREQUAL "NEW")
# Join multiple list arguments into the space-separated string that we
# want. This ensures that the entirety of the value gets passed as
# compile arguments, which is what the user almost surely intended.
#
# FIXME(#27901): This needs a policy to be implemented. This will be
# available in a future version of CMake.
list(JOIN CMAKE_REQUIRED_FLAGS " " CMAKE_REQUIRED_FLAGS)
else()
#]]
# If CMAKE_REQUIRED_FLAGS contains an unescaped semicolon, anything after
# gets passed as flags to 'cmake' itself. This is probably not intended,
# but we preserve it for compatibility.
set(${_PREFIX}_EXTRA_CMAKE_ARGUMENTS "${CMAKE_REQUIRED_FLAGS}")
list(POP_FRONT ${_PREFIX}_EXTRA_CMAKE_ARGUMENTS CMAKE_REQUIRED_FLAGS)
if(NOT ${_PREFIX}_EXTRA_CMAKE_ARGUMENTS STREQUAL "")
# cmake_policy(ISSUE_WARNING CMP0999) TODO
# There are known instances of users accidentally passing '-W' arguments
# intended for the compiler as arguments to CMake. Since CMake complains
# about unknown '-W' arguments starting with CMake 4.4, we need to strip
# these for compatibility.
string(REPLACE "\\;" "\\\\;" ${_PREFIX}_EXTRA_CMAKE_ARGUMENTS
"${${_PREFIX}_EXTRA_CMAKE_ARGUMENTS}")
list(FILTER ${_PREFIX}_EXTRA_CMAKE_ARGUMENTS EXCLUDE REGEX "^-W")
endif()
#endif()
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_INCLUDE_DIRECTORIES _PREFIX)
if(CMAKE_REQUIRED_INCLUDES)
if(${ARGC} GREATER 1)
set(${_PREFIX}_INCLUDE_DIRECTORIES
"-DINCLUDE_DIRECTORIES:STRING=${ARGN};${CMAKE_REQUIRED_INCLUDES}")
else()
set(${_PREFIX}_INCLUDE_DIRECTORIES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
endif()
elseif(${ARGC} GREATER 1)
set(${_PREFIX}_INCLUDE_DIRECTORIES
"-DINCLUDE_DIRECTORIES:STRING=${ARGN}")
else()
set(${_PREFIX}_INCLUDE_DIRECTORIES)
endif()
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_LINK_OPTIONS _PREFIX)
if(CMAKE_REQUIRED_LINK_OPTIONS OR ${ARGC} GREATER 1)
set(${_PREFIX}_ADD_LINK_OPTIONS
LINK_OPTIONS ${ARGN} ${CMAKE_REQUIRED_LINK_OPTIONS})
else()
set(${_PREFIX}_ADD_LINK_OPTIONS)
endif()
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_LINK_LIBRARIES _PREFIX)
if(CMAKE_REQUIRED_LIBRARIES OR ${ARGC} GREATER 1)
set(${_PREFIX}_ADD_LINK_LIBRARIES
LINK_LIBRARIES ${ARGN} ${CMAKE_REQUIRED_LIBRARIES})
else()
set(${_PREFIX}_ADD_LINK_LIBRARIES)
endif()
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_LINK_DIRECTORIES _PREFIX)
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
if(${ARGC} GREATER 1)
set(${_PREFIX}_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${ARGN};${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(${_PREFIX}_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
endif()
elseif(${ARGC} GREATER 1)
set(${_PREFIX}_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${ARGN}")
else()
set(${_PREFIX}_LINK_DIRECTORIES)
endif()
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_COMPILE_ARGS _PREFIX)
cmake_check_common_init_compile_flags(${_PREFIX})
cmake_check_common_init_include_directories(${_PREFIX})
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_LINK_ARGS _PREFIX)
cmake_check_common_init_link_options(${_PREFIX})
cmake_check_common_init_link_libraries(${_PREFIX})
cmake_check_common_init_link_directories(${_PREFIX})
endmacro()
macro(CMAKE_CHECK_COMMON_INIT_ARGS _PREFIX)
cmake_check_common_init_compile_args(${_PREFIX})
cmake_check_common_init_link_args(${_PREFIX})
endmacro()
macro(CMAKE_CHECK_COMMON_CLEANUP _PREFIX)
unset(${_PREFIX}_ADD_LINK_OPTIONS)
unset(${_PREFIX}_ADD_LINK_LIBRARIES)
unset(${_PREFIX}_LINK_DIRECTORIES)
unset(${_PREFIX}_INCLUDE_DIRECTORIES)
unset(${_PREFIX}_EXTRA_CMAKE_ARGUMENTS)
endmacro()
+6 -64
View File
@@ -2,6 +2,7 @@
# file LICENSE.rst or https://cmake.org/licensing for details.
include_guard(GLOBAL)
include(Internal/CheckCommon)
function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
if(NOT DEFINED "${_var}")
@@ -71,65 +72,7 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
set(_SRC_EXT ${_lang_ext})
endif()
if(CMAKE_REQUIRED_LINK_OPTIONS)
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
else()
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
endif()
if(CMAKE_REQUIRED_LIBRARIES)
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
else()
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CSC_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CSC_LINK_DIRECTORIES)
endif()
if(CMAKE_REQUIRED_INCLUDES)
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
else()
set(CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES)
endif()
set(_CSC_EXTRA_CMAKE_ARGUMENTS)
string(REPLACE "\\;" "\\\\;" CMAKE_REQUIRED_FLAGS
"${CMAKE_REQUIRED_FLAGS}")
#[[
cmake_polify(GET CMP0999 _CSC_CMP0999)
if(_CSC_CMP0999 STREQUAL "NEW")
# Join multiple list arguments into the space-separated string that we
# want. This ensures that the entirety of the value gets passed as
# compile arguments, which is what the user almost surely intended.
#
# FIXME(#27901): This needs a policy to be implemented. This will be
# available in a future version of CMake.
list(JOIN CMAKE_REQUIRED_FLAGS " " CMAKE_REQUIRED_FLAGS)
else()
#]]
# If CMAKE_REQUIRED_FLAGS contains an unescaped semicolon, anything after
# gets passed as flags to 'cmake' itself. This is probably not intended,
# but we preserve it for compatibility.
set(_CSC_EXTRA_CMAKE_ARGUMENTS "${CMAKE_REQUIRED_FLAGS}")
list(POP_FRONT _CSC_EXTRA_CMAKE_ARGUMENTS CMAKE_REQUIRED_FLAGS)
#[[
if(NOT CMAKE_REQUIRED_FLAGS STREQUAL "")
cmake_policy(ISSUE_WARNING CMP0999) TODO
endif()
#]]
# There is at least one known instance of users accidentally passing
# '-W' arguments intended for the compiler as arguments to CMake. Since
# CMake complains about unknown '-W' arguments starting with CMake 4.4,
# we need to strip these for compatibility.
string(REPLACE "\\;" "\\\\;" _CSC_EXTRA_CMAKE_ARGUMENTS
"${_CSC_EXTRA_CMAKE_ARGUMENTS}")
list(FILTER _CSC_EXTRA_CMAKE_ARGUMENTS EXCLUDE REGEX "^-W")
#endif()
cmake_check_common_init_args(_CSC)
if(NOT CMAKE_REQUIRED_QUIET)
message(CHECK_START "Performing Test ${_var}")
@@ -138,15 +81,14 @@ function(CMAKE_CHECK_SOURCE_COMPILES _lang _source _var)
try_compile(${_var}
SOURCE_FROM_VAR "${_lang_filename}.${_SRC_EXT}" _source
COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
${CHECK_${LANG}_SOURCE_COMPILES_ADD_LIBRARIES}
${_CSC_ADD_LINK_OPTIONS}
${_CSC_ADD_LINK_LIBRARIES}
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
${_CSC_EXTRA_CMAKE_ARGUMENTS}
"${CHECK_${LANG}_SOURCE_COMPILES_ADD_INCLUDES}"
"${_CSC_LINK_DIRECTORIES}"
"${_CSC_INCLUDE_DIRECTORIES}"
"${_CSC_LINK_DIRECTORIES}"
OUTPUT_VARIABLE OUTPUT)
unset(_CSC_LINK_DIRECTORIES)
foreach(_regex ${_FAIL_REGEX})
if("${OUTPUT}" MATCHES "${_regex}")
+8 -64
View File
@@ -2,6 +2,7 @@
# file LICENSE.rst or https://cmake.org/licensing for details.
include_guard(GLOBAL)
include(Internal/CheckCommon)
function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
if(NOT DEFINED "${_var}")
@@ -63,64 +64,7 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
set(_SRC_EXT ${_lang_ext})
endif()
if(CMAKE_REQUIRED_LINK_OPTIONS)
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS
LINK_OPTIONS ${CMAKE_REQUIRED_LINK_OPTIONS})
else()
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS)
endif()
if(CMAKE_REQUIRED_LIBRARIES)
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES
LINK_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
else()
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES)
endif()
if(CMAKE_REQUIRED_LINK_DIRECTORIES)
set(_CSR_LINK_DIRECTORIES
"-DLINK_DIRECTORIES:STRING=${CMAKE_REQUIRED_LINK_DIRECTORIES}")
else()
set(_CSR_LINK_DIRECTORIES)
endif()
if(CMAKE_REQUIRED_INCLUDES)
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES
"-DINCLUDE_DIRECTORIES:STRING=${CMAKE_REQUIRED_INCLUDES}")
else()
set(CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES)
endif()
set(_CSR_EXTRA_CMAKE_ARGUMENTS)
string(REPLACE "\\;" "\\\\;" CMAKE_REQUIRED_FLAGS
"${CMAKE_REQUIRED_FLAGS}")
#[[
cmake_polify(GET CMP0999 _CSR_CMP0999)
if(_CSR_CMP0999 STREQUAL "NEW")
# Join multiple list arguments into the space-separated string that we
# want. This ensures that the entirety of the value gets passed as
# compile arguments, which is what the user almost surely intended.
#
# FIXME(#27901): This needs a policy to be implemented. This will be
# available in a future version of CMake.
list(JOIN CMAKE_REQUIRED_FLAGS " " CMAKE_REQUIRED_FLAGS)
else()
#]]
# If CMAKE_REQUIRED_FLAGS contains an unescaped semicolon, anything after
# gets passed as flags to 'cmake' itself. This is probably not intended,
# but we preserve it for compatibility.
set(_CSR_EXTRA_CMAKE_ARGUMENTS "${CMAKE_REQUIRED_FLAGS}")
list(POP_FRONT _CSR_EXTRA_CMAKE_ARGUMENTS CMAKE_REQUIRED_FLAGS)
#[[
if(NOT CMAKE_REQUIRED_FLAGS STREQUAL "")
cmake_policy(ISSUE_WARNING CMP0999) TODO
endif()
#]]
# There is at least one known instance of users accidentally passing
# '-W' arguments intended for the compiler as arguments to CMake. Since
# CMake complains about unknown '-W' arguments starting with CMake 4.4,
# we need to strip these for compatibility.
string(REPLACE "\\;" "\\\\;" _CSR_EXTRA_CMAKE_ARGUMENTS
"${_CSR_EXTRA_CMAKE_ARGUMENTS}")
list(FILTER _CSR_EXTRA_CMAKE_ARGUMENTS EXCLUDE REGEX "^-W")
#endif()
cmake_check_common_init_args(_CSR)
if(NOT CMAKE_REQUIRED_QUIET)
message(CHECK_START "Performing Test ${_var}")
@@ -129,16 +73,16 @@ function(CMAKE_CHECK_SOURCE_RUNS _lang _source _var)
try_run(${_var}_EXITCODE ${_var}_COMPILED
SOURCE_FROM_VAR "src.${_SRC_EXT}" _source
COMPILE_DEFINITIONS -D${_var} ${CMAKE_REQUIRED_DEFINITIONS}
${CHECK_${_lang}_SOURCE_COMPILES_ADD_LINK_OPTIONS}
${CHECK_${_lang}_SOURCE_COMPILES_ADD_LIBRARIES}
${_CSR_ADD_LINK_OPTIONS}
${_CSR_ADD_LINK_LIBRARIES}
CMAKE_FLAGS
-DCOMPILE_DEFINITIONS:STRING=${CMAKE_REQUIRED_FLAGS}
${_CSR_EXTRA_CMAKE_ARGUMENTS}
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
"${CHECK_${_lang}_SOURCE_COMPILES_ADD_INCLUDES}"
"${_CSR_LINK_DIRECTORIES}"
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
"${_CSR_INCLUDE_DIRECTORIES}"
"${_CSR_LINK_DIRECTORIES}"
)
unset(_CSR_LINK_DIRECTORIES)
# if it did not compile make the return value fail code of 1
if(NOT ${_var}_COMPILED)
set(${_var}_EXITCODE 1)