ENH: Added testing for custom command line arguments containing all special characters on the US keyboard. Fixed curly brace arguments on borland and % arguments in mingw32-make.

This commit is contained in:
Brad King
2007-05-17 10:53:18 -04:00
parent cc507411d3
commit c25d2bfdd2
7 changed files with 112 additions and 2 deletions
@@ -51,6 +51,7 @@ cmLocalGenerator *cmGlobalBorlandMakefileGenerator::CreateLocalGenerator()
lg->SetGlobalGenerator(this);
lg->SetUnixCD(false);
lg->SetMakeCommandEscapeTargetTwice(true);
lg->SetBorlandMakeCurlyHack(true);
return lg;
}
@@ -61,6 +61,7 @@ cmLocalGenerator *cmGlobalMinGWMakefileGenerator::CreateLocalGenerator()
lg->SetIgnoreLibPrefix(true);
lg->SetPassMakeflags(false);
lg->SetUnixCD(true);
lg->SetMinGWMake(true);
// mingw32-make has trouble running code like
//
+5
View File
@@ -47,6 +47,7 @@ cmLocalGenerator::cmLocalGenerator()
this->WindowsShell = false;
this->WindowsVSIDE = false;
this->WatcomWMake = false;
this->MinGWMake = false;
this->MSYSShell = false;
this->IgnoreLibPrefix = false;
this->UseRelativePaths = false;
@@ -2772,6 +2773,10 @@ std::string cmLocalGenerator::EscapeForShell(const char* str, bool makeVars,
{
flags |= cmsysSystem_Shell_Flag_WatcomWMake;
}
if(this->MinGWMake)
{
flags |= cmsysSystem_Shell_Flag_MinGWMake;
}
// Compute the buffer size needed.
int size = (this->WindowsShell ?
+1
View File
@@ -304,6 +304,7 @@ protected:
bool WindowsShell;
bool WindowsVSIDE;
bool WatcomWMake;
bool MinGWMake;
bool ForceUnixPath;
bool MSYSShell;
bool UseRelativePaths;
+22
View File
@@ -55,6 +55,7 @@ cmLocalUnixMakefileGenerator3::cmLocalUnixMakefileGenerator3()
this->NativeEchoWindows = true;
this->MakeCommandEscapeTargetTwice = false;
this->IsMakefileGenerator = true;
this->BorlandMakeCurlyHack = false;
}
//----------------------------------------------------------------------------
@@ -939,6 +940,27 @@ cmLocalUnixMakefileGenerator3
escapeAllowMakeVars);
}
}
if(this->BorlandMakeCurlyHack)
{
// Borland Make has a very strange bug. If the first curly
// brace anywhere in the command string is a left curly, it
// must be written {{} instead of just {. Otherwise some
// curly braces are removed. The hack can be skipped if the
// first curly brace is the last character.
std::string::size_type lcurly = cmd.find("{");
if(lcurly != cmd.npos && lcurly < (cmd.size()-1))
{
std::string::size_type rcurly = cmd.find("}");
if(rcurly == cmd.npos || rcurly > lcurly)
{
// The first curly is a left curly. Use the hack.
std::string hack_cmd = cmd.substr(0, lcurly);
hack_cmd += "{{}";
hack_cmd += cmd.substr(lcurly+1);
cmd = hack_cmd;
}
}
}
commands1.push_back(cmd);
}
}
+13
View File
@@ -97,6 +97,11 @@ public:
*/
void SetWatcomWMake(bool v) {this->WatcomWMake = v;}
/**
* Set to true if the make tool being used is MinGW Make.
*/
void SetMinGWMake(bool v) {this->MinGWMake = v;}
/**
* Set to true if the shell being used is the MSYS shell.
* This controls if statements in the makefile and the SHELL variable.
@@ -165,6 +170,13 @@ public:
void SetMakeCommandEscapeTargetTwice(bool b)
{ this->MakeCommandEscapeTargetTwice = b; }
/**
* Set whether the Borland curly brace command line hack should be
* applied.
*/
void SetBorlandMakeCurlyHack(bool b)
{ this->BorlandMakeCurlyHack = b; }
// used in writing out Cmake files such as WriteDirectoryInformation
static void WriteCMakeArgument(std::ostream& os, const char* s);
@@ -338,6 +350,7 @@ private:
bool PassMakeflags;
bool SilentNoColon;
bool MakeCommandEscapeTargetTwice;
bool BorlandMakeCurlyHack;
//==========================================================================
std::string HomeRelativeOutputPath;