Report expanded arguments in if() command errors
The if() command reports its arguments at the beginning of some error messages. Originally it reported the un-expanded form of the arguments because in ancient CMake versions no context information was available. Now it is more useful to see the real arguments, which may be mentioned in the main error message. Since full context information is now available, users can refer back to the source if they need to see the unexpanded form of the arguments. For example, the code set(regex "++") if("x" MATCHES "${regex}") endif() now produces the message if given arguments: "x" "MATCHES" "++" Regular expression "++" cannot compile instead of if given arguments "x" MATCHES "${regex}" Regular expression "++" cannot compile
This commit is contained in:
parent
92caf34733
commit
9f43fa602d
|
@ -16,6 +16,22 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <cmsys/RegularExpression.hxx>
|
#include <cmsys/RegularExpression.hxx>
|
||||||
|
|
||||||
|
|
||||||
|
static std::string cmIfCommandError(
|
||||||
|
cmMakefile* mf, std::vector<std::string> const& args)
|
||||||
|
{
|
||||||
|
cmLocalGenerator* lg = mf->GetLocalGenerator();
|
||||||
|
std::string err = "given arguments:\n ";
|
||||||
|
for(std::vector<std::string>::const_iterator i = args.begin();
|
||||||
|
i != args.end(); ++i)
|
||||||
|
{
|
||||||
|
err += " ";
|
||||||
|
err += lg->EscapeForCMake(i->c_str());
|
||||||
|
}
|
||||||
|
err += "\n";
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
//=========================================================================
|
//=========================================================================
|
||||||
bool cmIfFunctionBlocker::
|
bool cmIfFunctionBlocker::
|
||||||
IsFunctionBlocked(const cmListFileFunction& lff,
|
IsFunctionBlocked(const cmListFileFunction& lff,
|
||||||
|
@ -85,16 +101,7 @@ IsFunctionBlocked(const cmListFileFunction& lff,
|
||||||
|
|
||||||
if (errorString.size())
|
if (errorString.size())
|
||||||
{
|
{
|
||||||
std::string err = "given arguments\n ";
|
std::string err = cmIfCommandError(&mf, expandedArguments);
|
||||||
unsigned int i;
|
|
||||||
for(i =0; i < this->Functions[c].Arguments.size(); ++i)
|
|
||||||
{
|
|
||||||
err += (this->Functions[c].Arguments[i].Quoted?"\"":"");
|
|
||||||
err += this->Functions[c].Arguments[i].Value;
|
|
||||||
err += (this->Functions[c].Arguments[i].Quoted?"\"":"");
|
|
||||||
err += " ";
|
|
||||||
}
|
|
||||||
err += "\n";
|
|
||||||
err += errorString;
|
err += errorString;
|
||||||
mf.IssueMessage(messType, err);
|
mf.IssueMessage(messType, err);
|
||||||
if (messType == cmake::FATAL_ERROR)
|
if (messType == cmake::FATAL_ERROR)
|
||||||
|
@ -175,16 +182,7 @@ bool cmIfCommand
|
||||||
|
|
||||||
if (errorString.size())
|
if (errorString.size())
|
||||||
{
|
{
|
||||||
std::string err = "given arguments\n ";
|
std::string err = cmIfCommandError(this->Makefile, expandedArguments);
|
||||||
unsigned int i;
|
|
||||||
for(i =0; i < args.size(); ++i)
|
|
||||||
{
|
|
||||||
err += (args[i].Quoted?"\"":"");
|
|
||||||
err += args[i].Value;
|
|
||||||
err += (args[i].Quoted?"\"":"");
|
|
||||||
err += " ";
|
|
||||||
}
|
|
||||||
err += "\n";
|
|
||||||
err += errorString;
|
err += errorString;
|
||||||
if (status == cmake::FATAL_ERROR)
|
if (status == cmake::FATAL_ERROR)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue