Skip to content
Snippets Groups Projects
Commit 46aa5fcd authored by Brad King's avatar Brad King
Browse files

ENH: Improved escaping in kwsys/System. Added escape of % for NMake. Added...

ENH: Improved escaping in kwsys/System.  Added escape of % for NMake.  Added escape of ; for the VS IDE.
parent 050401f7
No related branches found
No related tags found
No related merge requests found
......@@ -315,13 +315,23 @@ static int kwsysSystem_Shell__GetArgumentSize(const char* in,
{
if((flags & kwsysSystem_Shell_Flag_VSIDE) ||
((flags & kwsysSystem_Shell_Flag_Make) &&
(flags & kwsysSystem_Shell_Flag_MinGWMake)))
((flags & kwsysSystem_Shell_Flag_MinGWMake) ||
(flags & kwsysSystem_Shell_Flag_NMake))))
{
/* In the VS IDE or MinGW make a percent is written %% so we
need one extra characters. */
/* In the VS IDE, NMake, or MinGW make a percent is written %%
so we need one extra characters. */
size += 1;
}
}
else if(*c == ';')
{
if(flags & kwsysSystem_Shell_Flag_VSIDE)
{
/* In a VS IDE a semicolon is written ";" so we need two extra
characters. */
size += 2;
}
}
}
/* Check whether the argument needs surrounding quotes. */
......@@ -471,9 +481,10 @@ static char* kwsysSystem_Shell__GetArgument(const char* in, char* out,
{
if((flags & kwsysSystem_Shell_Flag_VSIDE) ||
((flags & kwsysSystem_Shell_Flag_Make) &&
(flags & kwsysSystem_Shell_Flag_MinGWMake)))
((flags & kwsysSystem_Shell_Flag_MinGWMake) ||
(flags & kwsysSystem_Shell_Flag_NMake))))
{
/* In the VS IDE or MinGW make a percent is written %%. */
/* In the VS IDE, NMake, or MinGW make a percent is written %%. */
*out++ = '%';
*out++ = '%';
}
......@@ -483,6 +494,25 @@ static char* kwsysSystem_Shell__GetArgument(const char* in, char* out,
*out++ = '%';
}
}
else if(*c == ';')
{
if(flags & kwsysSystem_Shell_Flag_VSIDE)
{
/* In a VS IDE a semicolon is written ";". If this is written
in an un-quoted argument it starts a quoted segment,
inserts the ; and ends the segment. If it is written in a
quoted argument it ends quoting, inserts the ; and restarts
quoting. Either way the ; is isolated. */
*out++ = '"';
*out++ = ';';
*out++ = '"';
}
else
{
/* Otherwise a semicolon is written just ;. */
*out++ = ';';
}
}
else
{
/* Store this character. */
......
......@@ -34,6 +34,7 @@
#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_MinGWMake kwsys_ns(System_Shell_Flag_MinGWMake)
#define kwsysSystem_Shell_Flag_NMake kwsys_ns(System_Shell_Flag_NMake)
#define kwsysSystem_Shell_Flag_AllowMakeVariables kwsys_ns(System_Shell_Flag_AllowMakeVariables)
#if defined(__cplusplus)
......@@ -90,6 +91,9 @@ enum kwsysSystem_Shell_Flag_e
/** The target shell is in a MinGW Make makefile. */
kwsysSystem_Shell_Flag_MinGWMake = (1<<4),
/** The target shell is in a NMake makefile. */
kwsysSystem_Shell_Flag_NMake = (1<<6),
/** 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
......@@ -117,6 +121,7 @@ enum kwsysSystem_Shell_Flag_e
# undef kwsysSystem_Shell_Flag_EchoWindows
# undef kwsysSystem_Shell_Flag_WatcomWMake
# undef kwsysSystem_Shell_Flag_MinGWMake
# undef kwsysSystem_Shell_Flag_NMake
# undef kwsysSystem_Shell_Flag_AllowMakeVariables
#endif
......
......@@ -7,4 +7,4 @@ SET(KWSYS_DATE_STAMP_YEAR 2008)
SET(KWSYS_DATE_STAMP_MONTH 01)
# KWSys version date day component. Format is DD.
SET(KWSYS_DATE_STAMP_DAY 12)
SET(KWSYS_DATE_STAMP_DAY 13)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment