blob: 1de98e76103b06b6a8088900ead751c6331a6767 [file] [edit]
# 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()