diff options
author | Brad King <brad.king@kitware.com> | 2022-04-21 14:55:21 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2022-04-21 15:35:30 (GMT) |
commit | c2341ece47f994baec57296d7a08dcf6bf34f8e9 (patch) | |
tree | 6d753150c73e34574cde2876dc3428451820af90 /Modules/Internal/CheckLinkerFlag.cmake | |
parent | 75d2faae52086ddf8fccc8566695b3915eb14ffd (diff) | |
download | CMake-c2341ece47f994baec57296d7a08dcf6bf34f8e9.zip CMake-c2341ece47f994baec57296d7a08dcf6bf34f8e9.tar.gz CMake-c2341ece47f994baec57296d7a08dcf6bf34f8e9.tar.bz2 |
CheckLinkerFlag: Catch linker warning when the checked flag is ignored
Prior to commit 219dde4ea8 (CheckPIESupported: now uses any SYSROOT settings,
2022-01-16, v3.23.0-rc1~110^2), the checks for `-pie` and `-no_pie` on macOS
failed due to executing the compiler directly without any `-isysroot`,
producing `ld: library not found for -lc++`. See issues #23053 and #19180.
The failing check for `-pie` was a bug because it is supported on macOS,
both for `x86_64` and `arm64`, and the commit fixed that check.
However, `-no_pie` is not supported on macOS `arm64`. The above commit was
only able to detect that due to commit f745e0497e (CheckCompilerFlags: Catch
linker warning about ignored flags, 2022-01-03, v3.23.0-rc1~174^2), which we
need to revert due to issue #23432. Instead, catch only the linker warning
about the exact flag being checked.
Diffstat (limited to 'Modules/Internal/CheckLinkerFlag.cmake')
-rw-r--r-- | Modules/Internal/CheckLinkerFlag.cmake | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Modules/Internal/CheckLinkerFlag.cmake b/Modules/Internal/CheckLinkerFlag.cmake index 51d4225..7613105 100644 --- a/Modules/Internal/CheckLinkerFlag.cmake +++ b/Modules/Internal/CheckLinkerFlag.cmake @@ -25,6 +25,15 @@ function(CMAKE_CHECK_LINKER_FLAG _lang _flag _var) set(CMAKE_REQUIRED_LINK_OPTIONS "${_flag}") check_compiler_flag_common_patterns(_common_patterns) + + # Match linker warnings if the exact flag is ignored. + foreach(flag IN LISTS _flag) + string(REGEX REPLACE "([][+.*?()^$])" [[\\\1]] _flag_regex "${flag}") + list(APPEND _common_patterns + FAIL_REGEX "warning: .*${_flag_regex}.* ignored" + ) + endforeach() + cmake_check_source_compiles(${_lang} "${_lang_src}" ${_var} |