ENH: one more pass at paths with spaces and parens
This commit is contained in:
parent
56e3a35ece
commit
ecbec236b1
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue