summaryrefslogtreecommitdiff
path: root/Modules/Internal
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2022-04-21 10:55:21 -0400
committerBrad King <brad.king@kitware.com>2022-04-21 11:35:30 -0400
commitc2341ece47f994baec57296d7a08dcf6bf34f8e9 (patch)
tree6d753150c73e34574cde2876dc3428451820af90 /Modules/Internal
parent75d2faae52086ddf8fccc8566695b3915eb14ffd (diff)
downloadcmake-c2341ece47f994baec57296d7a08dcf6bf34f8e9.tar.gz
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')
-rw-r--r--Modules/Internal/CheckLinkerFlag.cmake9
1 files changed, 9 insertions, 0 deletions
diff --git a/Modules/Internal/CheckLinkerFlag.cmake b/Modules/Internal/CheckLinkerFlag.cmake
index 51d42254f7..7613105500 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}