diff options
author | Timo Röhling <roehling@debian.org> | 2021-10-22 13:47:14 (GMT) |
---|---|---|
committer | Timo Röhling <roehling@debian.org> | 2021-10-22 13:48:51 (GMT) |
commit | 1ab7c3cd28b27ca162c4559e1026e5cad1898ade (patch) | |
tree | 47eea29a594e89ed481780d320cb8b1483d1e377 /Modules/CheckSymbolExists.cmake | |
parent | ca3e83250f43285fa3c9a0f5e062a3fd94a097e0 (diff) | |
download | CMake-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.cmake | 15 |
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") |