From a08292059eba4fdded6643b225640ebf559b2dac Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 23 May 2014 14:59:11 -0400 Subject: [PATCH] genex: remove the need for backtraces Rather than making dummy backtraces and passing them around, just make backtraces optional. --- Source/cmCustomCommand.cxx | 16 +-- Source/cmCustomCommand.h | 4 +- Source/cmCustomCommandGenerator.cxx | 2 +- Source/cmExportFileGenerator.cxx | 3 +- Source/cmExportTryCompileFileGenerator.cxx | 5 +- Source/cmFileCommand.cxx | 4 +- Source/cmGeneratorExpression.cxx | 8 +- Source/cmGeneratorExpression.h | 4 +- Source/cmGeneratorExpressionDAGChecker.cxx | 26 +++- Source/cmGeneratorExpressionDAGChecker.h | 5 + .../cmGeneratorExpressionEvaluationFile.cxx | 2 +- Source/cmGeneratorExpressionEvaluator.cxx | 4 +- Source/cmGeneratorTarget.cxx | 13 +- Source/cmInstallFilesGenerator.cxx | 4 +- Source/cmInstalledFile.cxx | 4 +- Source/cmMakefileTargetGenerator.cxx | 3 +- Source/cmTarget.cxx | 123 ++++++++---------- Source/cmTest.cxx | 6 +- Source/cmTest.h | 4 +- Source/cmTestGenerator.cxx | 2 +- 20 files changed, 117 insertions(+), 125 deletions(-) diff --git a/Source/cmCustomCommand.cxx b/Source/cmCustomCommand.cxx index 20908a5da..ae702e5d7 100644 --- a/Source/cmCustomCommand.cxx +++ b/Source/cmCustomCommand.cxx @@ -33,7 +33,7 @@ cmCustomCommand::cmCustomCommand(const cmCustomCommand& r): WorkingDirectory(r.WorkingDirectory), EscapeAllowMakeVars(r.EscapeAllowMakeVars), EscapeOldStyle(r.EscapeOldStyle), - Backtrace(new cmListFileBacktrace(*r.Backtrace)) + Backtrace(r.Backtrace) { } @@ -54,11 +54,7 @@ cmCustomCommand& cmCustomCommand::operator=(cmCustomCommand const& r) this->EscapeAllowMakeVars = r.EscapeAllowMakeVars; this->EscapeOldStyle = r.EscapeOldStyle; this->ImplicitDepends = r.ImplicitDepends; - - cmsys::auto_ptr - newBacktrace(new cmListFileBacktrace(*r.Backtrace)); - delete this->Backtrace; - this->Backtrace = newBacktrace.release(); + this->Backtrace = r.Backtrace; return *this; } @@ -77,21 +73,19 @@ cmCustomCommand::cmCustomCommand(cmMakefile const* mf, Comment(comment?comment:""), WorkingDirectory(workingDirectory?workingDirectory:""), EscapeAllowMakeVars(false), - EscapeOldStyle(true), - Backtrace(new cmListFileBacktrace) + EscapeOldStyle(true) { this->EscapeOldStyle = true; this->EscapeAllowMakeVars = false; if(mf) { - *this->Backtrace = mf->GetBacktrace(); + this->Backtrace = mf->GetBacktrace(); } } //---------------------------------------------------------------------------- cmCustomCommand::~cmCustomCommand() { - delete this->Backtrace; } //---------------------------------------------------------------------------- @@ -166,7 +160,7 @@ void cmCustomCommand::SetEscapeAllowMakeVars(bool b) //---------------------------------------------------------------------------- cmListFileBacktrace const& cmCustomCommand::GetBacktrace() const { - return *this->Backtrace; + return this->Backtrace; } //---------------------------------------------------------------------------- diff --git a/Source/cmCustomCommand.h b/Source/cmCustomCommand.h index b5d7e6215..21dbefb26 100644 --- a/Source/cmCustomCommand.h +++ b/Source/cmCustomCommand.h @@ -13,8 +13,8 @@ #define cmCustomCommand_h #include "cmStandardIncludes.h" +#include "cmListFileCache.h" class cmMakefile; -class cmListFileBacktrace; /** \class cmCustomCommand * \brief A class to encapsulate a custom command @@ -88,7 +88,7 @@ private: std::string WorkingDirectory; bool EscapeAllowMakeVars; bool EscapeOldStyle; - cmListFileBacktrace* Backtrace; + cmListFileBacktrace Backtrace; ImplicitDependsList ImplicitDepends; }; diff --git a/Source/cmCustomCommandGenerator.cxx b/Source/cmCustomCommandGenerator.cxx index ebfbf7c09..1bca6e68e 100644 --- a/Source/cmCustomCommandGenerator.cxx +++ b/Source/cmCustomCommandGenerator.cxx @@ -21,7 +21,7 @@ cmCustomCommandGenerator::cmCustomCommandGenerator( cmCustomCommand const& cc, const std::string& config, cmMakefile* mf): CC(cc), Config(config), Makefile(mf), LG(mf->GetLocalGenerator()), OldStyle(cc.GetEscapeOldStyle()), MakeVars(cc.GetEscapeAllowMakeVars()), - GE(new cmGeneratorExpression(cc.GetBacktrace())), DependsDone(false) + GE(new cmGeneratorExpression(&cc.GetBacktrace())), DependsDone(false) { } diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 2db40864d..9f5eee56f 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -377,8 +377,7 @@ void cmExportFileGenerator::PopulateIncludeDirectoriesInterface( const char *propName = "INTERFACE_INCLUDE_DIRECTORIES"; const char *input = target->GetProperty(propName); - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; std::string dirs = cmGeneratorExpression::Preprocess( tei->InterfaceIncludeDirectories, diff --git a/Source/cmExportTryCompileFileGenerator.cxx b/Source/cmExportTryCompileFileGenerator.cxx index 3350d7c5d..eb8d1935f 100644 --- a/Source/cmExportTryCompileFileGenerator.cxx +++ b/Source/cmExportTryCompileFileGenerator.cxx @@ -57,10 +57,9 @@ std::string cmExportTryCompileFileGenerator::FindTargets( return std::string(); } - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( tgt->GetName(), propName, 0, 0); diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 41ea35797..655f3ba8b 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -3272,11 +3272,11 @@ void cmFileCommand::AddEvaluationFile(const std::string &inputName, { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression outputGe(lfbt); + cmGeneratorExpression outputGe(&lfbt); cmsys::auto_ptr outputCge = outputGe.Parse(outputExpr); - cmGeneratorExpression conditionGe(lfbt); + cmGeneratorExpression conditionGe(&lfbt); cmsys::auto_ptr conditionCge = conditionGe.Parse(condition); diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx index d53bdd7f8..9a74569f7 100644 --- a/Source/cmGeneratorExpression.cxx +++ b/Source/cmGeneratorExpression.cxx @@ -24,7 +24,7 @@ //---------------------------------------------------------------------------- cmGeneratorExpression::cmGeneratorExpression( - cmListFileBacktrace const& backtrace): + cmListFileBacktrace const* backtrace): Backtrace(backtrace) { } @@ -34,9 +34,9 @@ cmsys::auto_ptr cmGeneratorExpression::Parse(std::string const& input) { return cmsys::auto_ptr( - new cmCompiledGeneratorExpression( - this->Backtrace, - input)); + new cmCompiledGeneratorExpression( + this->Backtrace ? *this->Backtrace : cmListFileBacktrace(), + input)); } //---------------------------------------------------------------------------- diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h index ef5360ef2..324d23c15 100644 --- a/Source/cmGeneratorExpression.h +++ b/Source/cmGeneratorExpression.h @@ -41,7 +41,7 @@ class cmGeneratorExpression { public: /** Construct. */ - cmGeneratorExpression(cmListFileBacktrace const& backtrace); + cmGeneratorExpression(cmListFileBacktrace const* backtrace = NULL); ~cmGeneratorExpression(); cmsys::auto_ptr Parse( @@ -70,7 +70,7 @@ private: cmGeneratorExpression(const cmGeneratorExpression &); void operator=(const cmGeneratorExpression &); - cmListFileBacktrace const& Backtrace; + cmListFileBacktrace const* Backtrace; }; class cmCompiledGeneratorExpression diff --git a/Source/cmGeneratorExpressionDAGChecker.cxx b/Source/cmGeneratorExpressionDAGChecker.cxx index 7f8e6943a..531a471a2 100644 --- a/Source/cmGeneratorExpressionDAGChecker.cxx +++ b/Source/cmGeneratorExpressionDAGChecker.cxx @@ -23,6 +23,25 @@ cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker( cmGeneratorExpressionDAGChecker *parent) : Parent(parent), Target(target), Property(property), Content(content), Backtrace(backtrace), TransitivePropertiesOnly(false) +{ + Initialize(); +} + +//---------------------------------------------------------------------------- +cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker( + const std::string &target, + const std::string &property, + const GeneratorExpressionContent *content, + cmGeneratorExpressionDAGChecker *parent) + : Parent(parent), Target(target), Property(property), + Content(content), TransitivePropertiesOnly(false) +{ + Initialize(); +} + +//---------------------------------------------------------------------------- +void +cmGeneratorExpressionDAGChecker::Initialize() { const cmGeneratorExpressionDAGChecker *top = this; const cmGeneratorExpressionDAGChecker *p = this->Parent; @@ -43,11 +62,12 @@ cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker( #undef TEST_TRANSITIVE_PROPERTY_METHOD { std::map >::const_iterator it - = top->Seen.find(target); + = top->Seen.find(this->Target); if (it != top->Seen.end()) { const std::set &propSet = it->second; - const std::set::const_iterator i = propSet.find(property); + const std::set::const_iterator i + = propSet.find(this->Property); if (i != propSet.end()) { this->CheckResult = ALREADY_SEEN; @@ -55,7 +75,7 @@ cmGeneratorExpressionDAGChecker::cmGeneratorExpressionDAGChecker( } } const_cast(top) - ->Seen[target].insert(property); + ->Seen[this->Target].insert(this->Property); } } diff --git a/Source/cmGeneratorExpressionDAGChecker.h b/Source/cmGeneratorExpressionDAGChecker.h index 7217a562a..10f9fa746 100644 --- a/Source/cmGeneratorExpressionDAGChecker.h +++ b/Source/cmGeneratorExpressionDAGChecker.h @@ -46,6 +46,10 @@ struct cmGeneratorExpressionDAGChecker const std::string &property, const GeneratorExpressionContent *content, cmGeneratorExpressionDAGChecker *parent); + cmGeneratorExpressionDAGChecker(const std::string &target, + const std::string &property, + const GeneratorExpressionContent *content, + cmGeneratorExpressionDAGChecker *parent); enum Result { DAG, @@ -76,6 +80,7 @@ struct cmGeneratorExpressionDAGChecker private: Result CheckGraph() const; + void Initialize(); private: const cmGeneratorExpressionDAGChecker * const Parent; diff --git a/Source/cmGeneratorExpressionEvaluationFile.cxx b/Source/cmGeneratorExpressionEvaluationFile.cxx index 01d31d3b8..f9067cf9a 100644 --- a/Source/cmGeneratorExpressionEvaluationFile.cxx +++ b/Source/cmGeneratorExpressionEvaluationFile.cxx @@ -115,7 +115,7 @@ void cmGeneratorExpressionEvaluationFile::Generate() } cmListFileBacktrace lfbt = this->OutputFileExpr->GetBacktrace(); - cmGeneratorExpression contentGE(lfbt); + cmGeneratorExpression contentGE(&lfbt); cmsys::auto_ptr inputExpression = contentGE.Parse(inputContent); diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx index a15e3ff54..c54922d72 100644 --- a/Source/cmGeneratorExpressionEvaluator.cxx +++ b/Source/cmGeneratorExpressionEvaluator.cxx @@ -809,7 +809,7 @@ std::string getLinkedTargetsContent(const std::vector &targets, cmGeneratorExpressionDAGChecker *dagChecker, const std::string &interfacePropertyName) { - cmGeneratorExpression ge(context->Backtrace); + cmGeneratorExpression ge(&context->Backtrace); std::string sep; std::string depString; @@ -1196,7 +1196,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode { if (targetPropertyTransitiveWhitelist[i] == interfacePropertyName) { - cmGeneratorExpression ge(context->Backtrace); + cmGeneratorExpression ge(&context->Backtrace); cmsys::auto_ptr cge = ge.Parse(prop); std::string result = cge->Evaluate(context->Makefile, context->Config, diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 153c611de..a7576ed60 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -259,12 +259,10 @@ static void handleSystemIncludesDep(cmMakefile *mf, cmTarget* depTgt, std::vector& result, bool excludeImported) { - cmListFileBacktrace lfbt; - if (const char* dirs = depTgt->GetProperty("INTERFACE_SYSTEM_INCLUDE_DIRECTORIES")) { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmSystemTools::ExpandListArgument(ge.Parse(dirs) ->Evaluate(mf, config, false, headTarget, @@ -278,7 +276,7 @@ static void handleSystemIncludesDep(cmMakefile *mf, cmTarget* depTgt, if (const char* dirs = depTgt->GetProperty("INTERFACE_INCLUDE_DIRECTORIES")) { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmSystemTools::ExpandListArgument(ge.Parse(dirs) ->Evaluate(mf, config, false, headTarget, @@ -457,8 +455,7 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const std::string& dir, return false; } - cmListFileBacktrace lfbt; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( this->GetName(), "SYSTEM_INCLUDE_DIRECTORIES", 0, 0); @@ -470,7 +467,7 @@ bool cmGeneratorTarget::IsSystemIncludeDirectory(const std::string& dir, it = this->Target->GetSystemIncludeDirectories().begin(); it != this->Target->GetSystemIncludeDirectories().end(); ++it) { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmSystemTools::ExpandListArgument(ge.Parse(*it) ->Evaluate(this->Makefile, config, false, this->Target, @@ -808,7 +805,7 @@ cmTargetTraceDependencies { // Transform command names that reference targets built in this // project to corresponding target-level dependencies. - cmGeneratorExpression ge(cc.GetBacktrace()); + cmGeneratorExpression ge(&cc.GetBacktrace()); // Add target-level dependencies referenced by generator expressions. std::set targets; diff --git a/Source/cmInstallFilesGenerator.cxx b/Source/cmInstallFilesGenerator.cxx index 65942180a..b2be82e28 100644 --- a/Source/cmInstallFilesGenerator.cxx +++ b/Source/cmInstallFilesGenerator.cxx @@ -12,6 +12,7 @@ #include "cmInstallFilesGenerator.h" #include "cmGeneratorExpression.h" +#include "cmMakefile.h" #include "cmSystemTools.h" //---------------------------------------------------------------------------- @@ -84,8 +85,7 @@ void cmInstallFilesGenerator::GenerateScriptForConfig(std::ostream& os, Indent const& indent) { std::vector files; - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; for(std::vector::const_iterator i = this->Files.begin(); i != this->Files.end(); ++i) { diff --git a/Source/cmInstalledFile.cxx b/Source/cmInstalledFile.cxx index 6860e00fc..7813fcc5c 100644 --- a/Source/cmInstalledFile.cxx +++ b/Source/cmInstalledFile.cxx @@ -33,7 +33,7 @@ cmInstalledFile::~cmInstalledFile() void cmInstalledFile::SetName(cmMakefile* mf, const std::string& name) { cmListFileBacktrace backtrace = mf->GetBacktrace(); - cmGeneratorExpression ge(backtrace); + cmGeneratorExpression ge(&backtrace); this->Name = name; this->NameExpression = ge.Parse(name).release(); @@ -70,7 +70,7 @@ void cmInstalledFile::AppendProperty(cmMakefile const* mf, const std::string& prop, const char* value, bool /*asString*/) { cmListFileBacktrace backtrace = mf->GetBacktrace(); - cmGeneratorExpression ge(backtrace); + cmGeneratorExpression ge(&backtrace); Property& property = this->Properties[prop]; property.ValueExpressions.push_back(ge.Parse(value).release()); diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index a08d731b2..77bf48470 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -137,8 +137,7 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules() this->Makefile->GetProperty ("ADDITIONAL_MAKE_CLEAN_FILES")) { - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(additional_clean_files); diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 56b98f7a7..4b5dc7a17 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -710,11 +710,8 @@ void cmTarget::GetSourceFiles(std::vector &files, this->DebugSourcesDone = true; } - cmListFileBacktrace lfbt; - - cmGeneratorExpressionDAGChecker dagChecker(lfbt, - this->GetName(), - "SOURCES", 0, 0); + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), + "SOURCES", 0, 0); std::set uniqueSrcs; bool contextDependentDirectSources = processSources(this, @@ -739,7 +736,7 @@ void cmTarget::GetSourceFiles(std::vector &files, continue; } { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(it->Value); std::string targetResult = cge->Evaluate(this->Makefile, config, @@ -758,7 +755,7 @@ void cmTarget::GetSourceFiles(std::vector &files, // TARGET_PROPERTY expression. sourceGenex = "$<$Value + ">:" + sourceGenex + ">"; } - cmGeneratorExpression ge(it->Backtrace); + cmGeneratorExpression ge(&it->Backtrace); cmsys::auto_ptr cge = ge.Parse( sourceGenex); @@ -911,7 +908,7 @@ void cmTarget::AddTracedSources(std::vector const& srcs) this->Internal->SourceFilesMap.clear(); this->LinkImplementationLanguageIsContextDependent = true; cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); cmsys::auto_ptr cge = ge.Parse(srcFiles); cge->SetEvaluateForBuildsystem(true); this->Internal->SourceEntries.push_back( @@ -948,7 +945,7 @@ void cmTarget::AddSources(std::vector const& srcs) this->Internal->SourceFilesMap.clear(); this->LinkImplementationLanguageIsContextDependent = true; cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); cmsys::auto_ptr cge = ge.Parse(srcFiles); cge->SetEvaluateForBuildsystem(true); this->Internal->SourceEntries.push_back( @@ -1083,7 +1080,7 @@ cmSourceFile* cmTarget::AddSource(const std::string& src) this->Internal->SourceFilesMap.clear(); this->LinkImplementationLanguageIsContextDependent = true; cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); cmsys::auto_ptr cge = ge.Parse(src); cge->SetEvaluateForBuildsystem(true); this->Internal->SourceEntries.push_back( @@ -1203,11 +1200,10 @@ void cmTarget::GetDirectLinkLibraries(const std::string& config, const char *prop = this->GetProperty("LINK_LIBRARIES"); if (prop) { - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; const cmsys::auto_ptr cge = ge.Parse(prop); - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( this->GetName(), "LINK_LIBRARIES", 0, 0); cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile, @@ -1238,11 +1234,10 @@ void cmTarget::GetInterfaceLinkLibraries(const std::string& config, const char *prop = this->GetProperty("INTERFACE_LINK_LIBRARIES"); if (prop) { - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; const cmsys::auto_ptr cge = ge.Parse(prop); - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( this->GetName(), "INTERFACE_LINK_LIBRARIES", 0, 0); cmSystemTools::ExpandListArgument(cge->Evaluate(this->Makefile, @@ -1793,7 +1788,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value) if(prop == "INCLUDE_DIRECTORIES") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); deleteAndClear(this->Internal->IncludeDirectoriesEntries); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->IncludeDirectoriesEntries.push_back( @@ -1803,7 +1798,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value) if(prop == "COMPILE_OPTIONS") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); deleteAndClear(this->Internal->CompileOptionsEntries); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->CompileOptionsEntries.push_back( @@ -1813,7 +1808,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value) if(prop == "COMPILE_FEATURES") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); deleteAndClear(this->Internal->CompileFeaturesEntries); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->CompileFeaturesEntries.push_back( @@ -1823,7 +1818,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value) if(prop == "COMPILE_DEFINITIONS") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); deleteAndClear(this->Internal->CompileDefinitionsEntries); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->CompileDefinitionsEntries.push_back( @@ -1858,7 +1853,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value) } this->Internal->SourceFilesMap.clear(); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); this->Internal->SourceEntries.clear(); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->SourceEntries.push_back( @@ -1892,7 +1887,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, if(prop == "INCLUDE_DIRECTORIES") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); this->Internal->IncludeDirectoriesEntries.push_back( new cmTargetInternals::TargetPropertyEntry(ge.Parse(value))); return; @@ -1900,7 +1895,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, if(prop == "COMPILE_OPTIONS") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); this->Internal->CompileOptionsEntries.push_back( new cmTargetInternals::TargetPropertyEntry(ge.Parse(value))); return; @@ -1908,7 +1903,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, if(prop == "COMPILE_FEATURES") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); this->Internal->CompileFeaturesEntries.push_back( new cmTargetInternals::TargetPropertyEntry(ge.Parse(value))); return; @@ -1916,7 +1911,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, if(prop == "COMPILE_DEFINITIONS") { cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); this->Internal->CompileDefinitionsEntries.push_back( new cmTargetInternals::TargetPropertyEntry(ge.Parse(value))); return; @@ -1948,7 +1943,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value, } this->Internal->SourceFilesMap.clear(); cmListFileBacktrace lfbt = this->Makefile->GetBacktrace(); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge(&lfbt); cmsys::auto_ptr cge = ge.Parse(value); this->Internal->SourceEntries.push_back( new cmTargetInternals::TargetPropertyEntry(cge)); @@ -2014,7 +2009,7 @@ void cmTarget::AppendBuildInterfaceIncludes() void cmTarget::InsertInclude(const cmValueWithOrigin &entry, bool before) { - cmGeneratorExpression ge(entry.Backtrace); + cmGeneratorExpression ge(&entry.Backtrace); std::vector::iterator position = before ? this->Internal->IncludeDirectoriesEntries.begin() @@ -2028,7 +2023,7 @@ void cmTarget::InsertInclude(const cmValueWithOrigin &entry, void cmTarget::InsertCompileOption(const cmValueWithOrigin &entry, bool before) { - cmGeneratorExpression ge(entry.Backtrace); + cmGeneratorExpression ge(&entry.Backtrace); std::vector::iterator position = before ? this->Internal->CompileOptionsEntries.begin() @@ -2041,7 +2036,7 @@ void cmTarget::InsertCompileOption(const cmValueWithOrigin &entry, //---------------------------------------------------------------------------- void cmTarget::InsertCompileDefinition(const cmValueWithOrigin &entry) { - cmGeneratorExpression ge(entry.Backtrace); + cmGeneratorExpression ge(&entry.Backtrace); this->Internal->CompileDefinitionsEntries.push_back( new cmTargetInternals::TargetPropertyEntry(ge.Parse(entry.Value))); @@ -2082,14 +2077,13 @@ static void processIncludeDirectories(cmTarget const* tgt, } } std::string usedIncludes; - cmListFileBacktrace lfbt; for(std::vector::iterator li = entryIncludes.begin(); li != entryIncludes.end(); ++li) { std::string targetName = (*it)->TargetName; std::string evaluatedTargetName; { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(targetName); evaluatedTargetName = cge->Evaluate(mf, config, false, tgt, 0, 0); @@ -2222,10 +2216,8 @@ cmTarget::GetIncludeDirectories(const std::string& config) const { std::vector includes; std::set uniqueIncludes; - cmListFileBacktrace lfbt; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, - this->GetName(), + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), "INCLUDE_DIRECTORIES", 0, 0); std::vector debugProperties; @@ -2268,7 +2260,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const continue; } { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(it->Value); std::string result = cge->Evaluate(this->Makefile, config, @@ -2287,7 +2279,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const // TARGET_PROPERTY expression. includeGenex = "$<$Value + ">:" + includeGenex + ">"; } - cmGeneratorExpression ge(it->Backtrace); + cmGeneratorExpression ge(&it->Backtrace); cmsys::auto_ptr cge = ge.Parse( includeGenex); @@ -2316,7 +2308,7 @@ cmTarget::GetIncludeDirectories(const std::string& config) const libDir = frameworkCheck.match(1); - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(libDir.c_str()); this->Internal @@ -2430,10 +2422,9 @@ void cmTarget::GetAutoUicOptions(std::vector &result, { return; } - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( this->GetName(), "AUTOUIC_OPTIONS", 0, 0); cmSystemTools::ExpandListArgument(ge.Parse(prop) @@ -2450,11 +2441,9 @@ void cmTarget::GetCompileOptions(std::vector &result, const std::string& config) const { std::set uniqueOptions; - cmListFileBacktrace lfbt; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, - this->GetName(), - "COMPILE_OPTIONS", 0, 0); + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), + "COMPILE_OPTIONS", 0, 0); std::vector debugProperties; const char *debugProp = @@ -2496,7 +2485,7 @@ void cmTarget::GetCompileOptions(std::vector &result, continue; } { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(it->Value); std::string targetResult = cge->Evaluate(this->Makefile, config, @@ -2515,7 +2504,7 @@ void cmTarget::GetCompileOptions(std::vector &result, // TARGET_PROPERTY expression. optionGenex = "$<$Value + ">:" + optionGenex + ">"; } - cmGeneratorExpression ge(it->Backtrace); + cmGeneratorExpression ge(&it->Backtrace); cmsys::auto_ptr cge = ge.Parse( optionGenex); @@ -2562,11 +2551,9 @@ void cmTarget::GetCompileDefinitions(std::vector &list, const std::string& config) const { std::set uniqueOptions; - cmListFileBacktrace lfbt; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, - this->GetName(), - "COMPILE_DEFINITIONS", 0, 0); + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), + "COMPILE_DEFINITIONS", 0, 0); std::vector debugProperties; const char *debugProp = @@ -2608,7 +2595,7 @@ void cmTarget::GetCompileDefinitions(std::vector &list, continue; } { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(it->Value); std::string targetResult = cge->Evaluate(this->Makefile, config, @@ -2627,7 +2614,7 @@ void cmTarget::GetCompileDefinitions(std::vector &list, // TARGET_PROPERTY expression. defsGenex = "$<$Value + ">:" + defsGenex + ">"; } - cmGeneratorExpression ge(it->Backtrace); + cmGeneratorExpression ge(&it->Backtrace); cmsys::auto_ptr cge = ge.Parse( defsGenex); @@ -2655,7 +2642,7 @@ void cmTarget::GetCompileDefinitions(std::vector &list, } case cmPolicies::OLD: { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(configProp); this->Internal @@ -2710,10 +2697,8 @@ void cmTarget::GetCompileFeatures(std::vector &result, const std::string& config) const { std::set uniqueFeatures; - cmListFileBacktrace lfbt; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, - this->GetName(), + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), "COMPILE_FEATURES", 0, 0); @@ -2757,7 +2742,7 @@ void cmTarget::GetCompileFeatures(std::vector &result, continue; } { - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; cmsys::auto_ptr cge = ge.Parse(it->Value); std::string targetResult = cge->Evaluate(this->Makefile, config, @@ -2776,7 +2761,7 @@ void cmTarget::GetCompileFeatures(std::vector &result, // TARGET_PROPERTY expression. featureGenex = "$<$Value + ">:" + featureGenex + ">"; } - cmGeneratorExpression ge(it->Backtrace); + cmGeneratorExpression ge(&it->Backtrace); cmsys::auto_ptr cge = ge.Parse( featureGenex); @@ -5904,10 +5889,9 @@ void cmTarget::ComputeImportInfo(std::string const& desired_config, } if(propertyLibs) { - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); + cmGeneratorExpression ge; - cmGeneratorExpressionDAGChecker dagChecker(lfbt, + cmGeneratorExpressionDAGChecker dagChecker( this->GetName(), linkProp, 0, 0); cmSystemTools::ExpandListArgument(ge.Parse(propertyLibs) @@ -6227,10 +6211,9 @@ void cmTarget::GetTransitivePropertyTargets(const std::string& config, } // The interface libraries have been explicitly set. - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); - cmGeneratorExpressionDAGChecker dagChecker(lfbt, this->GetName(), - linkIfaceProp, 0, 0); + cmGeneratorExpression ge; + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), + linkIfaceProp, 0, 0); dagChecker.SetTransitivePropertiesOnly(); std::vector libs; cmSystemTools::ExpandListArgument(ge.Parse(interfaceLibs)->Evaluate( @@ -6339,9 +6322,8 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config, if(explicitLibraries) { // The interface libraries have been explicitly set. - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); - cmGeneratorExpressionDAGChecker dagChecker(lfbt, this->GetName(), + cmGeneratorExpression ge; + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), linkIfaceProp, 0, 0); cmSystemTools::ExpandListArgument(ge.Parse(explicitLibraries)->Evaluate( this->Makefile, @@ -6366,9 +6348,8 @@ const char* cmTarget::ComputeLinkInterfaceLibraries(const std::string& config, { // Compare the link implementation fallback link interface to the // preferred new link interface property and warn if different. - cmListFileBacktrace lfbt; - cmGeneratorExpression ge(lfbt); - cmGeneratorExpressionDAGChecker dagChecker(lfbt, this->GetName(), + cmGeneratorExpression ge; + cmGeneratorExpressionDAGChecker dagChecker(this->GetName(), "INTERFACE_LINK_LIBRARIES", 0, 0); std::vector ifaceLibs; const char* newExplicitLibraries = diff --git a/Source/cmTest.cxx b/Source/cmTest.cxx index f0288b2b8..464ad6035 100644 --- a/Source/cmTest.cxx +++ b/Source/cmTest.cxx @@ -21,20 +21,18 @@ cmTest::cmTest(cmMakefile* mf) this->Makefile = mf; this->OldStyle = true; this->Properties.SetCMakeInstance(mf->GetCMakeInstance()); - this->Backtrace = new cmListFileBacktrace; - *this->Backtrace = this->Makefile->GetBacktrace(); + this->Backtrace = this->Makefile->GetBacktrace(); } //---------------------------------------------------------------------------- cmTest::~cmTest() { - delete this->Backtrace; } //---------------------------------------------------------------------------- cmListFileBacktrace const& cmTest::GetBacktrace() const { - return *this->Backtrace; + return this->Backtrace; } //---------------------------------------------------------------------------- diff --git a/Source/cmTest.h b/Source/cmTest.h index a93eff534..c6e7e42e8 100644 --- a/Source/cmTest.h +++ b/Source/cmTest.h @@ -14,8 +14,8 @@ #include "cmCustomCommand.h" #include "cmPropertyMap.h" +#include "cmListFileCache.h" class cmMakefile; -class cmListFileBacktrace; /** \class cmTest * \brief Represent a test @@ -71,7 +71,7 @@ private: bool OldStyle; cmMakefile* Makefile; - cmListFileBacktrace* Backtrace; + cmListFileBacktrace Backtrace; }; #endif diff --git a/Source/cmTestGenerator.cxx b/Source/cmTestGenerator.cxx index c1b1f8b98..f87a5353f 100644 --- a/Source/cmTestGenerator.cxx +++ b/Source/cmTestGenerator.cxx @@ -70,7 +70,7 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os, this->TestGenerated = true; // Set up generator expression evaluation context. - cmGeneratorExpression ge(this->Test->GetBacktrace()); + cmGeneratorExpression ge(&this->Test->GetBacktrace()); // Start the test command. os << indent << "add_test(" << this->Test->GetName() << " ";