mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-05 13:20:47 -06:00
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:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user