Merge topic 'vs10-custom-comments'
2596e16
VS10: Encode custom command comments for echo (#11283)
This commit is contained in:
commit
51047564bf
|
@ -32,6 +32,30 @@ static std::string cmVS10EscapeXML(std::string arg)
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string cmVS10EscapeComment(std::string comment)
|
||||||
|
{
|
||||||
|
// MSBuild takes the CDATA of a <Message></Message> element and just
|
||||||
|
// does "echo $CDATA" with no escapes. We must encode the string.
|
||||||
|
// http://technet.microsoft.com/en-us/library/cc772462%28WS.10%29.aspx
|
||||||
|
std::string echoable;
|
||||||
|
for(std::string::iterator c = comment.begin(); c != comment.end(); ++c)
|
||||||
|
{
|
||||||
|
switch (*c)
|
||||||
|
{
|
||||||
|
case '\r': break;
|
||||||
|
case '\n': echoable += '\t'; break;
|
||||||
|
case '"': /* no break */
|
||||||
|
case '|': /* no break */
|
||||||
|
case '&': /* no break */
|
||||||
|
case '<': /* no break */
|
||||||
|
case '>': /* no break */
|
||||||
|
case '^': echoable += '^'; /* no break */
|
||||||
|
default: echoable += *c; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return echoable;
|
||||||
|
}
|
||||||
|
|
||||||
cmVisualStudio10TargetGenerator::
|
cmVisualStudio10TargetGenerator::
|
||||||
cmVisualStudio10TargetGenerator(cmTarget* target,
|
cmVisualStudio10TargetGenerator(cmTarget* target,
|
||||||
cmGlobalVisualStudio10Generator* gg)
|
cmGlobalVisualStudio10Generator* gg)
|
||||||
|
@ -328,6 +352,7 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
|
||||||
}
|
}
|
||||||
cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
|
cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
|
||||||
std::string comment = lg->ConstructComment(command);
|
std::string comment = lg->ConstructComment(command);
|
||||||
|
comment = cmVS10EscapeComment(comment);
|
||||||
std::vector<std::string> *configs =
|
std::vector<std::string> *configs =
|
||||||
static_cast<cmGlobalVisualStudio7Generator *>
|
static_cast<cmGlobalVisualStudio7Generator *>
|
||||||
(this->GlobalGenerator)->GetConfigurations();
|
(this->GlobalGenerator)->GetConfigurations();
|
||||||
|
@ -350,7 +375,7 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
|
||||||
command.GetEscapeAllowMakeVars())
|
command.GetEscapeAllowMakeVars())
|
||||||
);
|
);
|
||||||
this->WritePlatformConfigTag("Message",i->c_str(), 3);
|
this->WritePlatformConfigTag("Message",i->c_str(), 3);
|
||||||
(*this->BuildFileStream ) << comment << "</Message>\n";
|
(*this->BuildFileStream ) << cmVS10EscapeXML(comment) << "</Message>\n";
|
||||||
this->WritePlatformConfigTag("Command", i->c_str(), 3);
|
this->WritePlatformConfigTag("Command", i->c_str(), 3);
|
||||||
(*this->BuildFileStream ) << script << "</Command>\n";
|
(*this->BuildFileStream ) << script << "</Command>\n";
|
||||||
this->WritePlatformConfigTag("AdditionalInputs", i->c_str(), 3);
|
this->WritePlatformConfigTag("AdditionalInputs", i->c_str(), 3);
|
||||||
|
@ -1441,8 +1466,9 @@ void cmVisualStudio10TargetGenerator::WriteEvent(
|
||||||
command.GetEscapeAllowMakeVars())
|
command.GetEscapeAllowMakeVars())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
comment = cmVS10EscapeComment(comment);
|
||||||
this->WriteString("<Message>",3);
|
this->WriteString("<Message>",3);
|
||||||
(*this->BuildFileStream ) << comment << "</Message>\n";
|
(*this->BuildFileStream ) << cmVS10EscapeXML(comment) << "</Message>\n";
|
||||||
this->WriteString("<Command>", 3);
|
this->WriteString("<Command>", 3);
|
||||||
(*this->BuildFileStream ) << script;
|
(*this->BuildFileStream ) << script;
|
||||||
(*this->BuildFileStream ) << "</Command>" << "\n";
|
(*this->BuildFileStream ) << "</Command>" << "\n";
|
||||||
|
|
Loading…
Reference in New Issue