mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
CMAKE_TOOLCHAIN_FILE: Fix Windows saved input toolchain file syntax error
The value of _CMAKE_INPUT_TOOLCHAIN_FILE can contain backslashes when Windows path separators are used. This commit ensures regression tests check such cases and saves the value with a bracket argument to avoid causing a syntax error due to the backslashes. Fixes: #28024
This commit is contained in:
@@ -227,7 +227,7 @@ if(CMAKE_BINARY_DIR)
|
||||
set(INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED)
|
||||
if(CMAKE_TOOLCHAIN_FILE)
|
||||
string(CONCAT INCLUDE_CMAKE_TOOLCHAIN_FILE_IF_REQUIRED
|
||||
"set(_CMAKE_INPUT_TOOLCHAIN_FILE \"${_CMAKE_INPUT_TOOLCHAIN_FILE}\")\n"
|
||||
"set(_CMAKE_INPUT_TOOLCHAIN_FILE [==[${_CMAKE_INPUT_TOOLCHAIN_FILE}]==])\n"
|
||||
"set(_CMAKE_SYSTEM_TOOLCHAIN_FILE \"${CMAKE_TOOLCHAIN_FILE}\")\n"
|
||||
"include(\"\${_CMAKE_SYSTEM_TOOLCHAIN_FILE}\")"
|
||||
)
|
||||
|
||||
@@ -48,6 +48,15 @@ endif()
|
||||
# Set up "toolchain" files
|
||||
file(WRITE "${RunCMake_BINARY_DIR}/foo.cmake" "set(toolchain_var foo)\n")
|
||||
file(WRITE "${RunCMake_BINARY_DIR}/bar.cmake" "set(toolchain_var bar)\n")
|
||||
if(UNIX)
|
||||
# Can't use file(TO_NATIVE_PATH) because it escapes spaces and cmake_path is
|
||||
# 3.20
|
||||
set(foo_TOOLCHAIN_FILE "${RunCMake_BINARY_DIR}/foo.cmake")
|
||||
set(bar_TOOLCHAIN_FILE "${RunCMake_BINARY_DIR}/bar.cmake")
|
||||
else()
|
||||
set(foo_TOOLCHAIN_FILE "${RunCMake_BINARY_DIR}\\foo.cmake")
|
||||
set(bar_TOOLCHAIN_FILE "${RunCMake_BINARY_DIR}\\bar.cmake")
|
||||
endif()
|
||||
|
||||
# New toolchain path comes from file
|
||||
block()
|
||||
@@ -70,11 +79,11 @@ endblock()
|
||||
block()
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ToolchainFromCmdline-build)
|
||||
run_cmake_with_options(ToolchainFromCmdline-step1
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${RunCMake_BINARY_DIR}/foo.cmake"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${foo_TOOLCHAIN_FILE}"
|
||||
)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
run_cmake_with_options(ToolchainFromCmdline-step2
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${RunCMake_BINARY_DIR}/bar.cmake"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${bar_TOOLCHAIN_FILE}"
|
||||
)
|
||||
endblock()
|
||||
|
||||
@@ -85,7 +94,7 @@ block()
|
||||
${RunCMake_SOURCE_DIR}/ToolchainFromCmdlineOnce-stdout.txt
|
||||
)
|
||||
run_cmake_with_options(ToolchainFromCmdlineOnce-step1
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${RunCMake_BINARY_DIR}/foo.cmake"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${foo_TOOLCHAIN_FILE}"
|
||||
)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
run_cmake(ToolchainFromCmdlineOnce-step2)
|
||||
|
||||
@@ -2,4 +2,4 @@ You have changed variables that require your cache to be deleted.
|
||||
Configure will be re-run and you may have to reset some variables.
|
||||
The following variables have changed:
|
||||
CMAKE_TOOLCHAIN_FILE= [^
|
||||
]*/Tests/RunCMake/CompilerChange/bar\.cmake
|
||||
]*[\/]Tests[\/]RunCMake[\/]CompilerChange[\/]bar\.cmake
|
||||
|
||||
Reference in New Issue
Block a user