summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2006-10-25 15:23:04 (GMT)
committerBrad King <brad.king@kitware.com>2006-10-25 15:23:04 (GMT)
commit54731fa2c88879bf19cee97493556a02f833dda3 (patch)
treeed914c77b53837aedf6e014ddb426bd1fe3f6a80
parent9e29a742a931e67ed92038e0250af66bbff07ff7 (diff)
downloadCMake-54731fa2c88879bf19cee97493556a02f833dda3.zip
CMake-54731fa2c88879bf19cee97493556a02f833dda3.tar.gz
CMake-54731fa2c88879bf19cee97493556a02f833dda3.tar.bz2
ENH: Adding support for # escape in Watcom WMake.
-rw-r--r--Source/cmGlobalWatcomWMakeGenerator.cxx1
-rw-r--r--Source/cmLocalGenerator.cxx5
-rw-r--r--Source/cmLocalGenerator.h1
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.h5
-rw-r--r--Source/kwsys/System.c35
-rw-r--r--Source/kwsys/System.h.in7
6 files changed, 49 insertions, 5 deletions
diff --git a/Source/cmGlobalWatcomWMakeGenerator.cxx b/Source/cmGlobalWatcomWMakeGenerator.cxx
index 29a60d4..dc4089b 100644
--- a/Source/cmGlobalWatcomWMakeGenerator.cxx
+++ b/Source/cmGlobalWatcomWMakeGenerator.cxx
@@ -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);
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 0b0594c..2909b33 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -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 ?
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index fc59ed5..4aa49a7 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -278,6 +278,7 @@ protected:
std::map<cmStdString, cmStdString> UniqueObjectNamesMap;
bool WindowsShell;
bool WindowsVSIDE;
+ bool WatcomWMake;
bool ForceUnixPath;
bool MSYSShell;
bool UseRelativePaths;
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 5b9d7fd..5fa78f7 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -105,6 +105,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.
* The default is false.
diff --git a/Source/kwsys/System.c b/Source/kwsys/System.c
index 288513f..62807c8 100644
--- a/Source/kwsys/System.c
+++ b/Source/kwsys/System.c
@@ -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. */
diff --git a/Source/kwsys/System.h.in b/Source/kwsys/System.h.in
index 8c7d2a8..731bec9 100644
--- a/Source/kwsys/System.h.in
+++ b/Source/kwsys/System.h.in
@@ -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