diff options
author | Brad King <brad.king@kitware.com> | 2023-06-09 13:58:17 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2023-06-09 13:58:25 (GMT) |
commit | 5741965586d77838d12c089b59bdd9f9d063fa1d (patch) | |
tree | 085f45b38105f5cc3726c6e3381b1c29509ee7fa | |
parent | 5b39465ff1eaf8fa5be072cb6a52f53aa1e599a8 (diff) | |
parent | 8195aa30269773732902029741fb8adfe13aa83d (diff) | |
download | CMake-5741965586d77838d12c089b59bdd9f9d063fa1d.zip CMake-5741965586d77838d12c089b59bdd9f9d063fa1d.tar.gz CMake-5741965586d77838d12c089b59bdd9f9d063fa1d.tar.bz2 |
Merge topic 'Makefiles-safer-COLOR-usage' into release-3.27
8195aa3026 Makefiles: quote `$(COLOR)` expansions
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !8548
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 2 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 2 | ||||
-rw-r--r-- | Tests/RunCMake/Color/DiagColorInEnv.cmake | 9 | ||||
-rw-r--r-- | Tests/RunCMake/Color/RunCMakeTest.cmake | 6 |
4 files changed, 17 insertions, 2 deletions
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index 43711b3..3c6b303 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1222,7 +1222,7 @@ void cmLocalUnixMakefileGenerator3::AppendEcho( } else { // Use cmake to echo the text in color. cmd = cmStrCat( - "@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) ", + "@$(CMAKE_COMMAND) -E cmake_echo_color \"--switch=$(COLOR)\" ", color_name); if (progress) { cmd += "--progress-dir="; diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 8099d44..5f27856 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1525,7 +1525,7 @@ void cmMakefileTargetGenerator::WriteTargetDependRules() cmSystemTools::CollapseFullPath(this->InfoFileNameFull), cmOutputConverter::SHELL); if (this->LocalGenerator->GetColorMakefile()) { - depCmd << " --color=$(COLOR)"; + depCmd << " \"--color=$(COLOR)\""; } commands.push_back(depCmd.str()); diff --git a/Tests/RunCMake/Color/DiagColorInEnv.cmake b/Tests/RunCMake/Color/DiagColorInEnv.cmake new file mode 100644 index 0000000..83c45e5 --- /dev/null +++ b/Tests/RunCMake/Color/DiagColorInEnv.cmake @@ -0,0 +1,9 @@ +if (CMAKE_GENERATOR MATCHES "Makefiles") + set(CMAKE_COLOR_DIAGNOSTICS 1) + set(EXPECT_COLOR 1) +endif () +include(DiagCommon.cmake) + +if(CMAKE_GENERATOR MATCHES "Makefiles" AND NOT DEFINED CMAKE_COLOR_MAKEFILE) + message(FATAL_ERROR "CMAKE_COLOR_MAKEFILE incorrectly undefined.") +endif() diff --git a/Tests/RunCMake/Color/RunCMakeTest.cmake b/Tests/RunCMake/Color/RunCMakeTest.cmake index bb62d4c..d2bc45a 100644 --- a/Tests/RunCMake/Color/RunCMakeTest.cmake +++ b/Tests/RunCMake/Color/RunCMakeTest.cmake @@ -12,3 +12,9 @@ endfunction() run_Diag(On -DCMAKE_COLOR_DIAGNOSTICS=ON) run_Diag(Off -DCMAKE_COLOR_DIAGNOSTICS=OFF) run_Diag(Default) + +# Test with `COLOR` in the ambient environment set to an ANSI-like color +# sequence. `$(COLOR)` is used in the Makefiles generator to control whether or +# not to do such color sequences itself. +set(ENV{COLOR} "[38;2;255;221;255m") +run_Diag(ColorInEnv) |