Preserve CMAKE_${lang}_COMPILER_ARG1 from existing CMakeCache.txt

`CMAKE_<LANG>_COMPILER` may be a list if it was defined by a toolchain
file.  In this case we move the args to `CMAKE_<LANG>_COMPILER_ARG1`.
If `CMAKE_<LANG>_COMPILER` is not a list, then it might have been cached
by a previous run that split the `CC` or `CXX` environment variable into
`CMAKE_<LANG>_COMPILER` and `CMAKE_<LANG>_COMPILER_ARG1`.  In this
latter case, avoid clobbering `CMAKE_<LANG>_COMPILER_ARG1`.

Fixes: #23358
This commit is contained in:
Klein, Thorsten (BSH)
2022-03-28 13:01:08 +02:00
committed by Brad King
parent b4de4217ae
commit 211a9deac1
6 changed files with 23 additions and 3 deletions
+9 -3
View File
@@ -119,9 +119,15 @@ macro(_cmake_find_compiler_path lang)
# (e.g. via ctest) or set in CMAKE_TOOLCHAIN_FILE
# if CMAKE_${lang}_COMPILER is a list, use the first item as
# CMAKE_${lang}_COMPILER and the rest as CMAKE_${lang}_COMPILER_ARG1
set(CMAKE_${lang}_COMPILER_ARG1 "${CMAKE_${lang}_COMPILER}")
list(POP_FRONT CMAKE_${lang}_COMPILER_ARG1 CMAKE_${lang}_COMPILER)
list(JOIN CMAKE_${lang}_COMPILER_ARG1 " " CMAKE_${lang}_COMPILER_ARG1)
# Otherwise, preserve any existing CMAKE_${lang}_COMPILER_ARG1 that might
# have been saved by CMakeDetermine${lang}Compiler in a previous run.
list(LENGTH CMAKE_${lang}_COMPILER _CMAKE_${lang}_COMPILER_LENGTH)
if(_CMAKE_${lang}_COMPILER_LENGTH GREATER 1)
set(CMAKE_${lang}_COMPILER_ARG1 "${CMAKE_${lang}_COMPILER}")
list(POP_FRONT CMAKE_${lang}_COMPILER_ARG1 CMAKE_${lang}_COMPILER)
list(JOIN CMAKE_${lang}_COMPILER_ARG1 " " CMAKE_${lang}_COMPILER_ARG1)
endif()
unset(_CMAKE_${lang}_COMPILER_LENGTH)
# find the compiler in the PATH if necessary
# if compiler (and arguments) comes from cache then synchronize cache with updated CMAKE_<LANG>_COMPILER
+1
View File
@@ -0,0 +1 @@
-- CMAKE_C_COMPILER_ARG1=' ?-DFOO1 -DFOO2'
+1
View File
@@ -1,3 +1,4 @@
enable_language(C)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
message(STATUS "CMAKE_C_COMPILER_ARG1='${CMAKE_C_COMPILER_ARG1}'")
add_executable(main main.c)
@@ -0,0 +1 @@
-- CMAKE_CXX_COMPILER_ARG1=' ?-DFOO1 -DFOO2'
+1
View File
@@ -1,3 +1,4 @@
enable_language(CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
message(STATUS "CMAKE_CXX_COMPILER_ARG1='${CMAKE_CXX_COMPILER_ARG1}'")
add_executable(main main.cxx)
@@ -31,6 +31,11 @@ function(run_compiler_env lang)
run_cmake(${lang})
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/CMakeFiles")
set(RunCMake_TEST_VARIANT_DESCRIPTION "-env-cached")
run_cmake(${lang})
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
endfunction()
function(run_compiler_tc lang)
@@ -42,6 +47,11 @@ function(run_compiler_tc lang)
run_cmake(${lang})
set(RunCMake_TEST_NO_CLEAN 1)
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/CMakeFiles")
set(RunCMake_TEST_VARIANT_DESCRIPTION "-tc-cached")
run_cmake(${lang})
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
endfunction()
set(langs C CXX)