summaryrefslogtreecommitdiffstats
path: root/Modules/CheckSymbolExists.cmake
diff options
context:
space:
mode:
authorTimo Röhling <roehling@debian.org>2021-10-22 13:47:14 (GMT)
committerTimo Röhling <roehling@debian.org>2021-10-22 13:48:51 (GMT)
commit1ab7c3cd28b27ca162c4559e1026e5cad1898ade (patch)
tree47eea29a594e89ed481780d320cb8b1483d1e377 /Modules/CheckSymbolExists.cmake
parentca3e83250f43285fa3c9a0f5e062a3fd94a097e0 (diff)
downloadCMake-1ab7c3cd28b27ca162c4559e1026e5cad1898ade.zip
CMake-1ab7c3cd28b27ca162c4559e1026e5cad1898ade.tar.gz
CMake-1ab7c3cd28b27ca162c4559e1026e5cad1898ade.tar.bz2
CheckSymbolExists: Work around GCC failure with -pedantic-errors option
GCC mistakenly issues the pedantic warning "ISO C forbids conversion of function pointer to object pointer type". With -pedantic-errors in the compile flags, that diagnostic prevents check_symbol_exists() from detecting function symbols. The solution is to filter out -pedantic-errors (and -Werror, just to be future proof) before invoking try_compile(). Fixes: #13208
Diffstat (limited to 'Modules/CheckSymbolExists.cmake')
-rw-r--r--Modules/CheckSymbolExists.cmake15
1 files changed, 15 insertions, 0 deletions
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake
index 48ee3c4..a7139af 100644
--- a/Modules/CheckSymbolExists.cmake
+++ b/Modules/CheckSymbolExists.cmake
@@ -67,14 +67,29 @@ cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced
macro(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
if(CMAKE_C_COMPILER_LOADED)
+ __CHECK_SYMBOL_EXISTS_FILTER_FLAGS(C)
__CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.c" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+ __CHECK_SYMBOL_EXISTS_RESTORE_FLAGS(C)
elseif(CMAKE_CXX_COMPILER_LOADED)
+ __CHECK_SYMBOL_EXISTS_FILTER_FLAGS(CXX)
__CHECK_SYMBOL_EXISTS_IMPL("${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/CheckSymbolExists.cxx" "${SYMBOL}" "${FILES}" "${VARIABLE}" )
+ __CHECK_SYMBOL_EXISTS_RESTORE_FLAGS(CXX)
else()
message(FATAL_ERROR "CHECK_SYMBOL_EXISTS needs either C or CXX language enabled")
endif()
endmacro()
+macro(__CHECK_SYMBOL_EXISTS_FILTER_FLAGS LANG)
+ set(__CMAKE_${LANG}_FLAGS_SAVED "${CMAKE_${LANG}_FLAGS}")
+ string(REGEX REPLACE "(^| )-Werror([= ][^ ]*)?( |$)" " " CMAKE_${LANG}_FLAGS "${CMAKE_${LANG}_FLAGS}")
+ string(REGEX REPLACE "(^| )-pedantic-errors( |$)" " " CMAKE_${LANG}_FLAGS "${CMAKE_${LANG}_FLAGS}")
+endmacro()
+
+macro(__CHECK_SYMBOL_EXISTS_RESTORE_FLAGS LANG)
+ set(CMAKE_${LANG}_FLAGS "${__CMAKE_${LANG}_FLAGS_SAVED}")
+ unset(__CMAKE_${LANG}_FLAGS_SAVED)
+endmacro()
+
macro(__CHECK_SYMBOL_EXISTS_IMPL SOURCEFILE SYMBOL FILES VARIABLE)
if(NOT DEFINED "${VARIABLE}" OR "x${${VARIABLE}}" STREQUAL "x${VARIABLE}")
set(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")