From d38423ecc4105d8339b7461130b964f3c69e8847 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 17 Mar 2014 17:49:38 +0100 Subject: [PATCH] cmTarget: Add a method to obtain list of filenames for sources. --- Source/cmGeneratorTarget.cxx | 24 ++++++++++++------------ Source/cmTarget.cxx | 14 ++++++++++++++ Source/cmTarget.h | 1 + 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index b35e859e66..834f9fd602 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -600,12 +600,12 @@ private: cmGlobalGenerator const* GlobalGenerator; typedef cmGeneratorTarget::SourceEntry SourceEntry; SourceEntry* CurrentEntry; - std::queue SourceQueue; - std::set SourcesQueued; + std::queue SourceQueue; + std::set SourcesQueued; typedef std::map NameMapType; NameMapType NameMap; - void QueueSource(cmSourceFile* sf); + void QueueSource(std::string const& name); void FollowName(std::string const& name); void FollowNames(std::vector const& names); bool IsUtility(std::string const& dep); @@ -628,11 +628,11 @@ cmTargetTraceDependencies this->CurrentEntry = 0; // Queue all the source files already specified for the target. - std::vector sources; if (this->Target->GetType() != cmTarget::INTERFACE_LIBRARY) { + std::vector sources; this->Target->GetSourceFiles(sources); - for(std::vector::const_iterator si = sources.begin(); + for(std::vector::const_iterator si = sources.begin(); si != sources.end(); ++si) { this->QueueSource(*si); @@ -652,7 +652,8 @@ void cmTargetTraceDependencies::Trace() while(!this->SourceQueue.empty()) { // Get the next source from the queue. - cmSourceFile* sf = this->SourceQueue.front(); + std::string src = this->SourceQueue.front(); + cmSourceFile* sf = this->Makefile->GetSource(src); this->SourceQueue.pop(); this->CurrentEntry = &this->GeneratorTarget->SourceEntries[sf]; @@ -680,14 +681,14 @@ void cmTargetTraceDependencies::Trace() } //---------------------------------------------------------------------------- -void cmTargetTraceDependencies::QueueSource(cmSourceFile* sf) +void cmTargetTraceDependencies::QueueSource(std::string const& name) { - if(this->SourcesQueued.insert(sf).second) + if(this->SourcesQueued.insert(name).second) { - this->SourceQueue.push(sf); + this->SourceQueue.push(name); // Make sure this file is in the target. - this->Target->AddSourceFile(sf); + this->Target->AddSource(name); } } @@ -709,8 +710,7 @@ void cmTargetTraceDependencies::FollowName(std::string const& name) { this->CurrentEntry->Depends.push_back(sf); } - - this->QueueSource(sf); + this->QueueSource(sf->GetFullPath()); } } diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 835aaad93e..0866d103fd 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -541,6 +541,20 @@ bool cmTarget::IsBundleOnApple() const this->IsCFBundleOnApple(); } +//---------------------------------------------------------------------------- +void cmTarget::GetSourceFiles(std::vector &files) const +{ + assert(this->GetType() != INTERFACE_LIBRARY); + std::vector sourceFiles; + this->GetSourceFiles(sourceFiles); + for(std::vector::const_iterator + si = sourceFiles.begin(); + si != sourceFiles.end(); ++si) + { + files.push_back((*si)->GetFullPath()); + } +} + //---------------------------------------------------------------------------- void cmTarget::GetSourceFiles(std::vector &files) const { diff --git a/Source/cmTarget.h b/Source/cmTarget.h index e38544306e..8df9bd8839 100644 --- a/Source/cmTarget.h +++ b/Source/cmTarget.h @@ -135,6 +135,7 @@ public: /** * Get the list of the source files used by this target */ + void GetSourceFiles(std::vector &files) const; void GetSourceFiles(std::vector &files) const; void AddSourceFile(cmSourceFile* sf); std::vector const& GetObjectLibraries() const