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.
This commit is contained in:
Brad King
2022-04-21 10:55:21 -04:00
parent 75d2faae52
commit c2341ece47

View File

@@ -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}