mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Merge topic 'more-CMAKE_REQUIRED_FLAGS-fixes' into release-4.4
a72e241200Check*: Restore more toleration of `;-W...` in CMAKE_REQUIRED_FLAGS7644d557dfCheck*: Refactor variable handling Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !12303
This commit is contained in:
@@ -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}")
|
||||
|
||||
@@ -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})
|
||||
|
||||
@@ -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})
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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()
|
||||
@@ -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}")
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user