From 7157743d69761c433af5ecbca37dede63c0603af Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 8 Mar 2007 11:49:30 -0500 Subject: 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. --- Source/cmLocalUnixMakefileGenerator3.cxx | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index d3a2f2e..a9c9c68 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1745,17 +1745,15 @@ cmLocalUnixMakefileGenerator3 // Add the target. 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; } -- cgit v0.12