diff options
author | Bill Hoffman <bill.hoffman@kitware.com> | 2007-02-22 20:33:49 (GMT) |
---|---|---|
committer | Bill Hoffman <bill.hoffman@kitware.com> | 2007-02-22 20:33:49 (GMT) |
commit | 417b2073dfa571c4b4ae9f17d9ddfce0e32a67c9 (patch) | |
tree | 93c6c5bc76c65fbb7f5c92ae6590e7e5668ec163 /Source/cmLocalGenerator.cxx | |
parent | 2a64bb477462a03da3ba917364d9e66921665bc9 (diff) | |
download | CMake-417b2073dfa571c4b4ae9f17d9ddfce0e32a67c9.zip CMake-417b2073dfa571c4b4ae9f17d9ddfce0e32a67c9.tar.gz CMake-417b2073dfa571c4b4ae9f17d9ddfce0e32a67c9.tar.bz2 |
ENH: add new escape stuff
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index cacce68..bcbbcee 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -1014,20 +1014,16 @@ cmLocalGenerator::ExpandRuleVariables(std::string& s, std::string cmLocalGenerator::ConvertToOutputForExisting(const char* p) { - std::string ret = this->Convert(p, START_OUTPUT, SHELL, true); - // if there are spaces in the path, then get the short path version - // if there is one - if(ret.find(' ') != std::string::npos) + std::string ret = p; + if(this->WindowsShell && ret.find(' ') != ret.npos + && cmSystemTools::FileExists(p)) { - if(cmSystemTools::FileExists(p)) + if(cmSystemTools::GetShortPath(p, ret)) { - if(!cmSystemTools::GetShortPath(ret.c_str(), ret)) - { - ret = this->Convert(p,START_OUTPUT,SHELL,true); - } + return this->Convert(ret.c_str(), NONE, SHELL, true); } } - return ret; + return this->Convert(p, START_OUTPUT, SHELL, true); } const char* cmLocalGenerator::GetIncludeFlags(const char* lang) @@ -2062,21 +2058,6 @@ 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 // that c:/some/path becomes /c/some/path. This is needed to // avoid problems with the shell path translation. @@ -2088,14 +2069,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; } |