diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index 4eed47728..ffc0f35b8 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -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(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 expandedArguments; diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 0a709ae90..a60896fbc 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -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::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::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) || diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 9fc64d6f0..8a0088b1a 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -700,6 +700,11 @@ public: std::vector &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.