ENH: add ability to escape semi-colons

This commit is contained in:
Bill Hoffman 2002-04-18 12:02:00 -04:00
parent 71fb2a2386
commit 72022ac27b
5 changed files with 31 additions and 6 deletions

View File

@ -18,14 +18,15 @@
#include "cmCacheManager.h"
// cmLibraryCommand
bool cmMessageCommand::InitialPass(std::vector<std::string> const& args)
bool cmMessageCommand::InitialPass(std::vector<std::string> const& argsIn)
{
if(args.size() < 1 )
if(argsIn.size() < 1 )
{
this->SetError("called with incorrect number of arguments");
return false;
}
std::vector<std::string> args;
cmSystemTools::ExpandListArguments(argsIn, args);
std::string message;
std::vector<std::string>::const_iterator i = args.begin();

View File

@ -853,7 +853,7 @@ std::string cmSystemTools::RemoveEscapes(const char* s)
std::string result = "";
for(const char* ch = s; *ch; ++ch)
{
if(*ch == '\\')
if(*ch == '\\' && *(ch+1) != ';')
{
++ch;
switch (*ch)
@ -1788,6 +1788,7 @@ void cmSystemTools::ExpandListArguments(std::vector<std::string> const& argument
std::vector<std::string>& newargs)
{
std::vector<std::string>::const_iterator i;
std::string newarg;
for(i = arguments.begin();i != arguments.end(); ++i)
{
// if there are no ; in the name then just copy the current string
@ -1808,6 +1809,20 @@ void cmSystemTools::ExpandListArguments(std::vector<std::string> const& argument
{
endpos = i->size();
}
else
{
// skip right over escaped ; ( \; )
while((endpos != std::string::npos)
&& (endpos > 0)
&& ((*i)[endpos-1] == '\\') )
{
endpos = i->find(';', endpos+1);
}
if(endpos == std::string::npos)
{
endpos = i->size();
}
}
std::string::size_type len = endpos - start;
if (len > 0)
{
@ -1815,7 +1830,7 @@ void cmSystemTools::ExpandListArguments(std::vector<std::string> const& argument
if(i->find('[', start) == std::string::npos)
{
// if there is no [ in the string then keep it
newargs.push_back(i->substr(start, len));
newarg = i->substr(start, len);
}
else
{
@ -1842,8 +1857,14 @@ void cmSystemTools::ExpandListArguments(std::vector<std::string> const& argument
}
len = endpos - start;
}
newargs.push_back(i->substr(start, len));
newarg = i->substr(start, len);
}
std::string::size_type pos = newarg.find("\\;");
if(pos != std::string::npos)
{
newarg[pos] = ' ';
}
newargs.push_back(newarg);
}
start = endpos+1;
}

View File

@ -58,6 +58,7 @@ SET (EXECUTABLE_OUTPUT_PATH
${Complex_BINARY_DIR}/bin/ CACHE PATH
"Single output directory for building all executables.")
MESSAGE (Test " " escape " " semi-colon " " \; \;)
#
# Exec program (TODO: test a result)
# Increase coverage.

View File

@ -58,6 +58,7 @@ SET (EXECUTABLE_OUTPUT_PATH
${Complex_BINARY_DIR}/bin/ CACHE PATH
"Single output directory for building all executables.")
MESSAGE (Test " " escape " " semi-colon " " \; \;)
#
# Exec program (TODO: test a result)
# Increase coverage.

View File

@ -58,6 +58,7 @@ SET (EXECUTABLE_OUTPUT_PATH
${Complex_BINARY_DIR}/bin/ CACHE PATH
"Single output directory for building all executables.")
MESSAGE (Test " " escape " " semi-colon " " \; \;)
#
# Exec program (TODO: test a result)
# Increase coverage.