Print any evaluated 'elseif'/'else' commands in trace mode (#13220)

In trace mode ('--trace'), any 'elseif' or 'else' commands that are
evaluated as part of a conditional block will be printed.  Previously,
only the opening 'if' command of a conditional block was printed.
This commit is contained in:
Brian Helba 2012-05-14 18:50:30 -04:00 committed by Brad King
parent 75c0304a9e
commit b3b095a933
3 changed files with 36 additions and 12 deletions

View File

@ -74,6 +74,13 @@ IsFunctionBlocked(const cmListFileFunction& lff,
{
this->IsBlocking = this->HasRun;
this->HasRun = true;
// if trace is enabled, print a (trivially) evaluated "else"
// statement
if(!this->IsBlocking && mf.GetCMakeInstance()->GetTrace())
{
mf.PrintCommandTrace(this->Functions[c]);
}
}
else if (scopeDepth == 0 && !cmSystemTools::Strucmp
(this->Functions[c].Name.c_str(),"elseif"))
@ -88,6 +95,12 @@ IsFunctionBlocked(const cmListFileFunction& lff,
cmMakefileCall stack_manager(&mf, this->Functions[c], status);
static_cast<void>(stack_manager);
// if trace is enabled, print the evaluated "elseif" statement
if(mf.GetCMakeInstance()->GetTrace())
{
mf.PrintCommandTrace(this->Functions[c]);
}
std::string errorString;
std::vector<std::string> expandedArguments;

View File

@ -353,6 +353,22 @@ bool cmMakefile::GetBacktrace(cmListFileBacktrace& backtrace) const
return true;
}
//----------------------------------------------------------------------------
void cmMakefile::PrintCommandTrace(const cmListFileFunction& lff)
{
cmOStringStream msg;
msg << lff.FilePath << "(" << lff.Line << "): ";
msg << lff.Name << "(";
for(std::vector<cmListFileArgument>::const_iterator i =
lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
{
msg << i->Value;
msg << " ";
}
msg << ")";
cmSystemTools::Message(msg.str().c_str());
}
//----------------------------------------------------------------------------
bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
cmExecutionStatus &status)
@ -385,20 +401,10 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
|| pcmd->IsScriptable()))
{
// if trace is one, print out invoke information
// if trace is enabled, print out invoke information
if(this->GetCMakeInstance()->GetTrace())
{
cmOStringStream msg;
msg << lff.FilePath << "(" << lff.Line << "): ";
msg << lff.Name << "(";
for(std::vector<cmListFileArgument>::const_iterator i =
lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
{
msg << i->Value;
msg << " ";
}
msg << ")";
cmSystemTools::Message(msg.str().c_str());
this->PrintCommandTrace(lff);
}
// Try invoking the command.
if(!pcmd->InvokeInitialPass(lff.Arguments,status) ||

View File

@ -700,6 +700,11 @@ public:
std::vector<cmSourceGroup> &groups);
#endif
/**
* Print a command's invocation
*/
void PrintCommandTrace(const cmListFileFunction& lff);
/**
* Execute a single CMake command. Returns true if the command
* succeeded or false if it failed.