ENH: add new escape stuff

This commit is contained in:
Bill Hoffman 2007-02-22 15:33:49 -05:00
parent 2a64bb4774
commit 417b2073df

View File

@ -1014,20 +1014,16 @@ cmLocalGenerator::ExpandRuleVariables(std::string& s,
std::string std::string
cmLocalGenerator::ConvertToOutputForExisting(const char* p) cmLocalGenerator::ConvertToOutputForExisting(const char* p)
{ {
std::string ret = this->Convert(p, START_OUTPUT, SHELL, true); std::string ret = p;
// if there are spaces in the path, then get the short path version if(this->WindowsShell && ret.find(' ') != ret.npos
// if there is one && cmSystemTools::FileExists(p))
if(ret.find(' ') != std::string::npos)
{ {
if(cmSystemTools::FileExists(p)) if(cmSystemTools::GetShortPath(p, ret))
{ {
if(!cmSystemTools::GetShortPath(ret.c_str(), ret)) return this->Convert(ret.c_str(), NONE, SHELL, true);
{
ret = this->Convert(p,START_OUTPUT,SHELL,true);
}
} }
} }
return ret; return this->Convert(p, START_OUTPUT, SHELL, true);
} }
const char* cmLocalGenerator::GetIncludeFlags(const char* lang) const char* cmLocalGenerator::GetIncludeFlags(const char* lang)
@ -2062,21 +2058,6 @@ std::string cmLocalGenerator::Convert(const char* source,
} }
if( output == SHELL) 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 // that c:/some/path becomes /c/some/path. This is needed to
// avoid problems with the shell path translation. // avoid problems with the shell path translation.
@ -2088,14 +2069,16 @@ std::string cmLocalGenerator::Convert(const char* source,
result[0] = '/'; result[0] = '/';
} }
} }
// if this is unix then we need to escape () in the shell if(this->WindowsShell)
#if !defined(WIN32) || defined(CYGWIN)
forceOn = true;
#endif
if(forceOn )
{ {
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; return result;
} }