diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2007-02-28 19:29:26 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2007-02-28 19:29:26 (GMT) |
commit | ecbec236b1fae48bfe625338fff3b0cd1e70714c (patch) | |
tree | ee327084678391d91a1bb03c7a3dd0c19db7839b | |
parent | 56e3a35ece5f4db276bd02c9849e7b58ca479970 (diff) | |
download | CMake-ecbec236b1fae48bfe625338fff3b0cd1e70714c.zip CMake-ecbec236b1fae48bfe625338fff3b0cd1e70714c.tar.gz CMake-ecbec236b1fae48bfe625338fff3b0cd1e70714c.tar.bz2 |
ENH: one more pass at paths with spaces and parens
-rw-r--r-- | Source/cmLocalGenerator.cxx | 31 | ||||
-rw-r--r-- | Source/cmLocalUnixMakefileGenerator3.cxx | 15 |
2 files changed, 17 insertions, 29 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index 953a4f4..57376ff 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -2066,22 +2066,7 @@ std::string cmLocalGenerator::Convert(const char* source, } if( output == SHELL) { - // for shell commands if force unix is on, but this->WindowsShell - // is true, then turn off force unix paths for the output path - // so that the path is windows style and will work with windows - // cmd.exe. - bool forceOn = cmSystemTools::GetForceUnixPaths(); - if(forceOn && this->WindowsShell) - { - cmSystemTools::SetForceUnixPaths(false); - } - result = cmSystemTools::ConvertToOutputPath(result.c_str()); - if(forceOn && this->WindowsShell) - { - cmSystemTools::SetForceUnixPaths(true); - } - - // For the MSYS shell convert drive letters to posix paths, so + // For the MSYS shell convert drive letters to posix paths, so // that c:/some/path becomes /c/some/path. This is needed to // avoid problems with the shell path translation. if(this->MSYSShell) @@ -2092,14 +2077,16 @@ std::string cmLocalGenerator::Convert(const char* source, result[0] = '/'; } } - // if this is unix then we need to escape () in the shell -#if !defined(WIN32) || defined(CYGWIN) - forceOn = true; -#endif - if(forceOn ) + if(this->WindowsShell) { - result = cmSystemTools::EscapeForUnixShell(result); + std::string::size_type pos = 0; + while((pos = result.find('/', pos)) != std::string::npos) + { + result[pos] = '\\'; + pos++; + } } + result = this->EscapeForShell(result.c_str(), true, false); } return result; } diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx index e5036b3..e86fe57 100644 --- a/Source/cmLocalUnixMakefileGenerator3.cxx +++ b/Source/cmLocalUnixMakefileGenerator3.cxx @@ -1776,14 +1776,15 @@ cmLocalUnixMakefileGenerator3 if (tgt && tgt[0] != '\0') { std::string tgt2 = this->Convert(tgt,HOME_OUTPUT,MAKEFILE); - tgt2 = this->ConvertToMakeTarget(tgt2.c_str()); - bool forceOn = cmSystemTools::GetForceUnixPaths(); -#if !defined(WIN32) || defined(CYGWIN) - forceOn = true; -#endif - if(forceOn ) + tgt2 = this->ConvertToMakeTarget(tgt2.c_str()); + // 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) { - tgt2 = cmSystemTools::EscapeForUnixShell(tgt2); + cmSystemTools::ReplaceString(tgt2, "\\", ""); + tgt2 = std::string("\"") + tgt2 + std::string("\""); } cmd += tgt2; } |