diff options
author | Brad King <brad.king@kitware.com> | 2021-10-26 13:09:39 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2021-10-26 13:09:51 (GMT) |
commit | eeb45401163d831b8c841ef6eba81466b4067b68 (patch) | |
tree | 5115aa011037963e2fcab69e3aec36aea80234eb | |
parent | 64c74efa538f4ed4efdf7967561b810aff124633 (diff) | |
parent | 1ab7c3cd28b27ca162c4559e1026e5cad1898ade (diff) | |
download | CMake-eeb45401163d831b8c841ef6eba81466b4067b68.zip CMake-eeb45401163d831b8c841ef6eba81466b4067b68.tar.gz CMake-eeb45401163d831b8c841ef6eba81466b4067b68.tar.bz2 |
Merge topic 'check-symbol-exists-pedantic-errors'
1ab7c3cd28 CheckSymbolExists: Work around GCC failure with -pedantic-errors option
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6656
-rw-r--r-- | Modules/CheckSymbolExists.cmake | 15 | ||||
-rw-r--r-- | Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt | 11 |
2 files changed, 26 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") diff --git a/Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt b/Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt index 9a9bb2a..3d65b7a 100644 --- a/Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt +++ b/Tests/CMakeOnly/CheckSymbolExists/CMakeLists.txt @@ -48,4 +48,15 @@ if (CMAKE_COMPILER_IS_GNUCC) if (CSE_RESULT_O3) message(SEND_ERROR "CheckSymbolExists reported a nonexistent symbol as existing with optimization -O3") endif () + + string(APPEND CMAKE_C_FLAGS " -pedantic-errors") + unset(CS_RESULT_PEDANTIC_ERRORS CACHE) + message(STATUS "Testing with -pedantic-errors") + + check_symbol_exists(fopen "stdio.h" CSE_RESULT_PEDANTIC_ERRORS) + + if(NOT CSE_RESULT_PEDANTIC_ERRORS) + message(SEND_ERROR "CheckSymbolExists reported an existing symbol as nonexisting with -pedantic-errors") + endif() + endif () |