mirror of
https://github.com/reactos/CMake.git
synced 2024-11-24 20:19:53 +00:00
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
|
||||
cmLocalUnixMakefileGenerator3
|
||||
@ -646,13 +667,13 @@ cmLocalUnixMakefileGenerator3
|
||||
makefileStream
|
||||
<< "# The CMake executable.\n"
|
||||
<< "CMAKE_COMMAND = "
|
||||
<< this->Convert(cmakecommand.c_str(), FULL, SHELL).c_str()
|
||||
<< this->ConvertShellCommand(cmakecommand, FULL)
|
||||
<< "\n"
|
||||
<< "\n";
|
||||
makefileStream
|
||||
<< "# The command to remove a file.\n"
|
||||
<< "RM = "
|
||||
<< this->Convert(cmakecommand.c_str(),FULL,SHELL).c_str()
|
||||
<< this->ConvertShellCommand(cmakecommand, FULL)
|
||||
<< " -E remove -f\n"
|
||||
<< "\n";
|
||||
|
||||
@ -662,7 +683,7 @@ cmLocalUnixMakefileGenerator3
|
||||
makefileStream
|
||||
<< "# The program to use to edit the cache.\n"
|
||||
<< "CMAKE_EDIT_COMMAND = "
|
||||
<< this->Convert(edit_cmd,FULL,SHELL) << "\n"
|
||||
<< this->ConvertShellCommand(edit_cmd, FULL) << "\n"
|
||||
<< "\n";
|
||||
}
|
||||
|
||||
@ -1019,22 +1040,9 @@ cmLocalUnixMakefileGenerator3
|
||||
// without the current directory being in the search path.
|
||||
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 =
|
||||
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);
|
||||
if(content)
|
||||
|
@ -340,6 +340,7 @@ protected:
|
||||
void CheckMultipleOutputs(bool verbose);
|
||||
|
||||
private:
|
||||
std::string ConvertShellCommand(std::string const& cmd, RelativeRoot root);
|
||||
std::string MakeLauncher(const cmCustomCommand& cc, cmTarget* target,
|
||||
RelativeRoot relative);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user