Browse Source

Merge topic 'Makefiles-safer-COLOR-usage' into release-3.27

8195aa3026 Makefiles: quote `$(COLOR)` expansions

Acked-by: Kitware Robot <[email protected]>
Merge-request: !8548
Brad King 2 years ago
parent
commit
5741965586

+ 1 - 1
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=";

+ 1 - 1
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());
 

+ 9 - 0
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()

+ 6 - 0
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)