ENH: Adding support for # escape in Watcom WMake.
This commit is contained in:
parent
9e29a742a9
commit
54731fa2c8
|
@ -50,6 +50,7 @@ cmLocalGenerator *cmGlobalWatcomWMakeGenerator::CreateLocalGenerator()
|
|||
lg->SetSilentNoColon(true);
|
||||
lg->SetDefineWindowsNULL(true);
|
||||
lg->SetWindowsShell(true);
|
||||
lg->SetWatcomWMake(true);
|
||||
lg->SetMakeSilentFlag("-s -h");
|
||||
lg->SetGlobalGenerator(this);
|
||||
lg->SetIgnoreLibPrefix(true);
|
||||
|
|
|
@ -40,6 +40,7 @@ cmLocalGenerator::cmLocalGenerator()
|
|||
this->Parent = 0;
|
||||
this->WindowsShell = false;
|
||||
this->WindowsVSIDE = false;
|
||||
this->WatcomWMake = false;
|
||||
this->MSYSShell = false;
|
||||
this->IgnoreLibPrefix = false;
|
||||
this->UseRelativePaths = false;
|
||||
|
@ -2348,6 +2349,10 @@ std::string cmLocalGenerator::EscapeForShell(const char* str, bool makeVars,
|
|||
{
|
||||
flags |= cmsysSystem_Shell_Flag_EchoWindows;
|
||||
}
|
||||
if(this->WatcomWMake)
|
||||
{
|
||||
flags |= cmsysSystem_Shell_Flag_WatcomWMake;
|
||||
}
|
||||
|
||||
// Compute the buffer size needed.
|
||||
int size = (this->WindowsShell ?
|
||||
|
|
|
@ -278,6 +278,7 @@ protected:
|
|||
std::map<cmStdString, cmStdString> UniqueObjectNamesMap;
|
||||
bool WindowsShell;
|
||||
bool WindowsVSIDE;
|
||||
bool WatcomWMake;
|
||||
bool ForceUnixPath;
|
||||
bool MSYSShell;
|
||||
bool UseRelativePaths;
|
||||
|
|
|
@ -104,6 +104,11 @@ public:
|
|||
*/
|
||||
void SetWindowsShell(bool v) {this->WindowsShell = v;}
|
||||
|
||||
/**
|
||||
* Set to true if the make tool being used is Watcom WMake.
|
||||
*/
|
||||
void SetWatcomWMake(bool v) {this->WatcomWMake = v;}
|
||||
|
||||
/**
|
||||
* Set to true if the shell being used is the MSYS shell.
|
||||
* This controls if statements in the makefile and the SHELL variable.
|
||||
|
|
|
@ -222,7 +222,7 @@ static int kwsysSystem_Shell__GetArgumentSize(const char* in,
|
|||
}
|
||||
}
|
||||
|
||||
/* Check whether this character needs escaping. */
|
||||
/* Check whether this character needs escaping for the shell. */
|
||||
if(isUnix)
|
||||
{
|
||||
/* On Unix a few special characters need escaping even inside a
|
||||
|
@ -261,7 +261,7 @@ static int kwsysSystem_Shell__GetArgumentSize(const char* in,
|
|||
}
|
||||
}
|
||||
|
||||
/* The dollar sign needs special handling in some environments. */
|
||||
/* Check whether this character needs escaping for a make tool. */
|
||||
if(*c == '$')
|
||||
{
|
||||
if(flags & kwsysSystem_Shell_Flag_Make)
|
||||
|
@ -277,6 +277,16 @@ static int kwsysSystem_Shell__GetArgumentSize(const char* in,
|
|||
size += 2;
|
||||
}
|
||||
}
|
||||
else if(*c == '#')
|
||||
{
|
||||
if((flags & kwsysSystem_Shell_Flag_Make) &&
|
||||
(flags & kwsysSystem_Shell_Flag_WatcomWMake))
|
||||
{
|
||||
/* In Watcom WMake makefiles a pound is written $# so we need
|
||||
one extra character. */
|
||||
++size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Check whether the argument needs surrounding quotes. */
|
||||
|
@ -333,7 +343,7 @@ static char* kwsysSystem_Shell__GetArgument(const char* in, char* out,
|
|||
}
|
||||
}
|
||||
|
||||
/* Check whether this character needs escaping. */
|
||||
/* Check whether this character needs escaping for the shell. */
|
||||
if(isUnix)
|
||||
{
|
||||
/* On Unix a few special characters need escaping even inside a
|
||||
|
@ -377,7 +387,7 @@ static char* kwsysSystem_Shell__GetArgument(const char* in, char* out,
|
|||
}
|
||||
}
|
||||
|
||||
/* The dollar sign needs special handling in some environments. */
|
||||
/* Check whether this character needs escaping for a make tool. */
|
||||
if(*c == '$')
|
||||
{
|
||||
if(flags & kwsysSystem_Shell_Flag_Make)
|
||||
|
@ -405,6 +415,23 @@ static char* kwsysSystem_Shell__GetArgument(const char* in, char* out,
|
|||
*out++ = '$';
|
||||
}
|
||||
}
|
||||
else if(*c == '#')
|
||||
{
|
||||
if((flags & kwsysSystem_Shell_Flag_Make) &&
|
||||
(flags & kwsysSystem_Shell_Flag_WatcomWMake))
|
||||
{
|
||||
/* In Watcom WMake makefiles a pound is written $#. The make
|
||||
tool will replace it with just # before passing it to the
|
||||
shell. */
|
||||
*out++ = '$';
|
||||
*out++ = '#';
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Otherwise a pound is written just #. */
|
||||
*out++ = '#';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Store this character. */
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#define kwsysSystem_Shell_Flag_Make kwsys_ns(System_Shell_Flag_Make)
|
||||
#define kwsysSystem_Shell_Flag_VSIDE kwsys_ns(System_Shell_Flag_VSIDE)
|
||||
#define kwsysSystem_Shell_Flag_EchoWindows kwsys_ns(System_Shell_Flag_EchoWindows)
|
||||
#define kwsysSystem_Shell_Flag_WatcomWMake kwsys_ns(System_Shell_Flag_WatcomWMake)
|
||||
#define kwsysSystem_Shell_Flag_AllowMakeVariables kwsys_ns(System_Shell_Flag_AllowMakeVariables)
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
@ -82,12 +83,15 @@ enum kwsysSystem_Shell_Flag_e
|
|||
/** In a windows whell the argument is being passed to "echo". */
|
||||
kwsysSystem_Shell_Flag_EchoWindows = (1<<2),
|
||||
|
||||
/** The target shell is in a Watcom WMake makefile. */
|
||||
kwsysSystem_Shell_Flag_WatcomWMake = (1<<3),
|
||||
|
||||
/** Make variable reference syntax $(MAKEVAR) should not be escaped
|
||||
to allow a build tool to replace it. Replacement values
|
||||
containing spaces, quotes, backslashes, or other
|
||||
non-alphanumeric characters that have significance to some makes
|
||||
or shells produce undefined behavior. */
|
||||
kwsysSystem_Shell_Flag_AllowMakeVariables = (1<<3)
|
||||
kwsysSystem_Shell_Flag_AllowMakeVariables = (1<<4)
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
@ -107,6 +111,7 @@ enum kwsysSystem_Shell_Flag_e
|
|||
# undef kwsysSystem_Shell_Flag_Make
|
||||
# undef kwsysSystem_Shell_Flag_VSIDE
|
||||
# undef kwsysSystem_Shell_Flag_EchoWindows
|
||||
# undef kwsysSystem_Shell_Flag_WatcomWMake
|
||||
# undef kwsysSystem_Shell_Flag_AllowMakeVariables
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue