Watcom: Use shortpath to CMake if full path has parens (#12548)
The Watcom WMake tool has trouble running commands in paths that have parentheses. We already convert most commands to a shortpath for Watcom if the path contains a space, but the use of $(CMAKE_COMMAND) hides the true path from that conversion. Factor the shortpath conversion code out into a new ConvertShellCommand method. Teach it to convert paths that contain parentheses as well as spaces. Use the new method to convert the value of $(CMAKE_COMMAND) and other helper variables.
This commit is contained in:
parent
22bf096474
commit
23381d83d8
|
@ -607,6 +607,27 @@ cmLocalUnixMakefileGenerator3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
std::string
|
||||||
|
cmLocalUnixMakefileGenerator3
|
||||||
|
::ConvertShellCommand(std::string const& cmd, RelativeRoot root)
|
||||||
|
{
|
||||||
|
if(this->WatcomWMake &&
|
||||||
|
cmSystemTools::FileIsFullPath(cmd.c_str()) &&
|
||||||
|
cmd.find_first_of("( )") != cmd.npos)
|
||||||
|
{
|
||||||
|
// On Watcom WMake use the windows short path for the command
|
||||||
|
// name. This is needed to avoid funny quoting problems on
|
||||||
|
// lines with shell redirection operators.
|
||||||
|
std::string scmd;
|
||||||
|
if(cmSystemTools::GetShortPath(cmd.c_str(), scmd))
|
||||||
|
{
|
||||||
|
return this->Convert(scmd.c_str(), NONE, SHELL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this->Convert(cmd.c_str(), root, SHELL);
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void
|
void
|
||||||
cmLocalUnixMakefileGenerator3
|
cmLocalUnixMakefileGenerator3
|
||||||
|
@ -646,13 +667,13 @@ cmLocalUnixMakefileGenerator3
|
||||||
makefileStream
|
makefileStream
|
||||||
<< "# The CMake executable.\n"
|
<< "# The CMake executable.\n"
|
||||||
<< "CMAKE_COMMAND = "
|
<< "CMAKE_COMMAND = "
|
||||||
<< this->Convert(cmakecommand.c_str(), FULL, SHELL).c_str()
|
<< this->ConvertShellCommand(cmakecommand, FULL)
|
||||||
<< "\n"
|
<< "\n"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
makefileStream
|
makefileStream
|
||||||
<< "# The command to remove a file.\n"
|
<< "# The command to remove a file.\n"
|
||||||
<< "RM = "
|
<< "RM = "
|
||||||
<< this->Convert(cmakecommand.c_str(),FULL,SHELL).c_str()
|
<< this->ConvertShellCommand(cmakecommand, FULL)
|
||||||
<< " -E remove -f\n"
|
<< " -E remove -f\n"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
|
|
||||||
|
@ -662,7 +683,7 @@ cmLocalUnixMakefileGenerator3
|
||||||
makefileStream
|
makefileStream
|
||||||
<< "# The program to use to edit the cache.\n"
|
<< "# The program to use to edit the cache.\n"
|
||||||
<< "CMAKE_EDIT_COMMAND = "
|
<< "CMAKE_EDIT_COMMAND = "
|
||||||
<< this->Convert(edit_cmd,FULL,SHELL) << "\n"
|
<< this->ConvertShellCommand(edit_cmd, FULL) << "\n"
|
||||||
<< "\n";
|
<< "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1019,22 +1040,9 @@ cmLocalUnixMakefileGenerator3
|
||||||
// without the current directory being in the search path.
|
// without the current directory being in the search path.
|
||||||
cmd = "./" + cmd;
|
cmd = "./" + cmd;
|
||||||
}
|
}
|
||||||
if(this->WatcomWMake &&
|
|
||||||
cmSystemTools::FileIsFullPath(cmd.c_str()) &&
|
|
||||||
cmd.find(" ") != cmd.npos)
|
|
||||||
{
|
|
||||||
// On Watcom WMake use the windows short path for the command
|
|
||||||
// name. This is needed to avoid funny quoting problems on
|
|
||||||
// lines with shell redirection operators.
|
|
||||||
std::string scmd;
|
|
||||||
if(cmSystemTools::GetShortPath(cmd.c_str(), scmd))
|
|
||||||
{
|
|
||||||
cmd = scmd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
std::string launcher =
|
std::string launcher =
|
||||||
this->MakeLauncher(cc, target, workingDir? NONE : START_OUTPUT);
|
this->MakeLauncher(cc, target, workingDir? NONE : START_OUTPUT);
|
||||||
cmd = launcher + this->Convert(cmd.c_str(),NONE,SHELL);
|
cmd = launcher + this->ConvertShellCommand(cmd, NONE);
|
||||||
|
|
||||||
ccg.AppendArguments(c, cmd);
|
ccg.AppendArguments(c, cmd);
|
||||||
if(content)
|
if(content)
|
||||||
|
|
|
@ -340,6 +340,7 @@ protected:
|
||||||
void CheckMultipleOutputs(bool verbose);
|
void CheckMultipleOutputs(bool verbose);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::string ConvertShellCommand(std::string const& cmd, RelativeRoot root);
|
||||||
std::string MakeLauncher(const cmCustomCommand& cc, cmTarget* target,
|
std::string MakeLauncher(const cmCustomCommand& cc, cmTarget* target,
|
||||||
RelativeRoot relative);
|
RelativeRoot relative);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue