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:
Brad King 2009-10-27 09:01:33 -04:00
parent 92caf34733
commit 9f43fa602d

View File

@ -16,6 +16,22 @@
#include <list>
#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::
IsFunctionBlocked(const cmListFileFunction& lff,
@ -85,16 +101,7 @@ IsFunctionBlocked(const cmListFileFunction& lff,
if (errorString.size())
{
std::string err = "given arguments\n ";
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";
std::string err = cmIfCommandError(&mf, expandedArguments);
err += errorString;
mf.IssueMessage(messType, err);
if (messType == cmake::FATAL_ERROR)
@ -175,16 +182,7 @@ bool cmIfCommand
if (errorString.size())
{
std::string err = "given arguments\n ";
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";
std::string err = cmIfCommandError(this->Makefile, expandedArguments);
err += errorString;
if (status == cmake::FATAL_ERROR)
{