Browse Source

ENH: Updated GetRecursiveMakeCall to use EscapeForShell instead of MAKEFILE conversion. This code is special because it is the only place that a make target name is passed on a command line.

Brad King 18 years ago
parent
commit
7157743d69
1 changed files with 9 additions and 11 deletions
  1. 9 11
      Source/cmLocalUnixMakefileGenerator3.cxx

+ 9 - 11
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -1745,17 +1745,15 @@ cmLocalUnixMakefileGenerator3
   // Add the target.
   // Add the target.
   if (tgt && tgt[0] != '\0')
   if (tgt && tgt[0] != '\0')
     {
     {
-    std::string tgt2 = this->Convert(tgt,HOME_OUTPUT,MAKEFILE);
-    // for make -f foo bar, foo is a file but bar (tgt2) is 
-    // a make target.  make targets should be escaped with "" 
-    // and not \, so if we find a "\ " in the path then remove
-    // the \ and quote the whole string
-    if(tgt2.find("\\ ") != tgt2.npos)
-      {
-      cmSystemTools::ReplaceString(tgt2, "\\", "");
-      tgt2 = std::string("\"") + tgt2 + std::string("\"");
-      }
-    cmd += tgt2;
+    // The make target is always relative to the top of the build tree.
+    std::string tgt2 = this->Convert(tgt, HOME_OUTPUT);
+
+    // The target may have been written with windows paths.
+    cmSystemTools::ConvertToOutputSlashes(tgt2);
+
+    // The target name is now a string that should be passed verbatim
+    // on the command line.
+    cmd += this->EscapeForShell(tgt2.c_str(), true, false);
     }
     }
   return cmd;
   return cmd;
 }
 }