From 69e2f3f8ea93ea04d76d40ce32087cb45326d702 Mon Sep 17 00:00:00 2001 From: Tristan Daifuku Date: Wed, 15 Oct 2025 11:08:12 -0700 Subject: [PATCH] Linker: Tolerate CMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL set to ANY Tolerate expected failures of linkers invoked via `execute_process`. --- Modules/Internal/CMakeDetermineLinkerId.cmake | 4 +++- Modules/Platform/Linker/GNU.cmake | 4 +++- Tests/RunCMake/execute_process/ConfigureErrorANY.cmake | 2 ++ Tests/RunCMake/execute_process/RunCMakeTest.cmake | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 Tests/RunCMake/execute_process/ConfigureErrorANY.cmake diff --git a/Modules/Internal/CMakeDetermineLinkerId.cmake b/Modules/Internal/CMakeDetermineLinkerId.cmake index 2b17036930..df2ddbe3aa 100644 --- a/Modules/Internal/CMakeDetermineLinkerId.cmake +++ b/Modules/Internal/CMakeDetermineLinkerId.cmake @@ -29,7 +29,9 @@ function(cmake_determine_linker_id lang linker) OUTPUT_VARIABLE linker_desc ERROR_VARIABLE linker_desc OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE) + ERROR_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL NONE + ) string(JOIN "\" \"" flags_string ${flags}) string(REGEX REPLACE "\n\n.*" "" linker_desc_head "${linker_desc}") diff --git a/Modules/Platform/Linker/GNU.cmake b/Modules/Platform/Linker/GNU.cmake index 979aa987a2..3e665fa35f 100644 --- a/Modules/Platform/Linker/GNU.cmake +++ b/Modules/Platform/Linker/GNU.cmake @@ -21,7 +21,9 @@ function(__cmake_set_whole_archive_feature __linker) # launch linker to check if push_state/pop_state options are supported execute_process(COMMAND "${__linker}" --push-state --pop-state OUTPUT_VARIABLE __linker_log - ERROR_VARIABLE __linker_log) + ERROR_VARIABLE __linker_log + COMMAND_ERROR_IS_FATAL NONE + ) if(__linker_log MATCHES "--push-state" OR __linker_log MATCHES "--pop-state") set(CMAKE_${__lang}LINKER_PUSHPOP_STATE_SUPPORTED FALSE) else() diff --git a/Tests/RunCMake/execute_process/ConfigureErrorANY.cmake b/Tests/RunCMake/execute_process/ConfigureErrorANY.cmake new file mode 100644 index 0000000000..7385137884 --- /dev/null +++ b/Tests/RunCMake/execute_process/ConfigureErrorANY.cmake @@ -0,0 +1,2 @@ +enable_language(C) +enable_language(CXX) diff --git a/Tests/RunCMake/execute_process/RunCMakeTest.cmake b/Tests/RunCMake/execute_process/RunCMakeTest.cmake index 9124afad26..973ff1201a 100644 --- a/Tests/RunCMake/execute_process/RunCMakeTest.cmake +++ b/Tests/RunCMake/execute_process/RunCMakeTest.cmake @@ -1,5 +1,7 @@ include(RunCMake) +run_cmake_with_options(ConfigureErrorANY -DCMAKE_EXECUTE_PROCESS_COMMAND_ERROR_IS_FATAL=ANY) + set(RunCMake_TEST_OUTPUT_MERGE 1) run_cmake_command(MergeOutput ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/MergeOutput.cmake) unset(RunCMake_TEST_OUTPUT_MERGE)