From b68f2ea8ae26b23639df5978116375b47b4123c3 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Fri, 29 May 2015 01:14:19 +0200 Subject: cmMakefile: Add API for elseif to create backtrace. --- Source/cmIfCommand.cxx | 7 ++----- Source/cmMakefile.cxx | 14 ++++++++++++++ Source/cmMakefile.h | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx index 3551f83..7c4792c 100644 --- a/Source/cmIfCommand.cxx +++ b/Source/cmIfCommand.cxx @@ -92,10 +92,6 @@ IsFunctionBlocked(const cmListFileFunction& lff, } else { - // Place this call on the call stack. - 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()) { @@ -119,7 +115,8 @@ IsFunctionBlocked(const cmListFileFunction& lff, { std::string err = cmIfCommandError(expandedArguments); err += errorString; - mf.IssueMessage(messType, err); + cmListFileBacktrace bt = mf.GetBacktrace(this->Functions[c]); + mf.GetCMakeInstance()->IssueMessage(messType, err, bt); if (messType == cmake::FATAL_ERROR) { cmSystemTools::SetFatalErrorOccured(); diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index f09c8cb..9f2a1be 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -287,6 +287,20 @@ cmListFileBacktrace cmMakefile::GetBacktrace() const } //---------------------------------------------------------------------------- +cmListFileBacktrace +cmMakefile::GetBacktrace(cmListFileContext const& lfc) const +{ + cmListFileBacktrace backtrace(this->GetLocalGenerator()); + backtrace.Append(lfc); + for(CallStackType::const_reverse_iterator i = this->CallStack.rbegin(); + i != this->CallStack.rend(); ++i) + { + backtrace.Append(*i->Context); + } + return backtrace; +} + +//---------------------------------------------------------------------------- cmListFileContext cmMakefile::GetExecutionContext() const { return *this->CallStack.back().Context; diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index efd73a1..29a7061 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -572,6 +572,7 @@ public: * Get the current context backtrace. */ cmListFileBacktrace GetBacktrace() const; + cmListFileBacktrace GetBacktrace(cmListFileContext const& lfc) const; cmListFileContext GetExecutionContext() const; /** -- cgit v0.12