summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorTarget.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2014-04-05 09:41:58 (GMT)
committerStephen Kelly <steveire@gmail.com>2014-04-06 08:02:34 (GMT)
commit92e2fbe103c6ffc3af1189d0450493488c65baaa (patch)
tree8c3ad15aa403a0d5b3420430798fe21cb48065ff /Source/cmGeneratorTarget.cxx
parentc5b26f3bec0e6e18255802da53886eae30a74021 (diff)
downloadCMake-92e2fbe103c6ffc3af1189d0450493488c65baaa.zip
CMake-92e2fbe103c6ffc3af1189d0450493488c65baaa.tar.gz
CMake-92e2fbe103c6ffc3af1189d0450493488c65baaa.tar.bz2
cmGeneratorTarget: Trace cmSourceFile objects instead of strings.
This reverses the decision in commit d38423ec (cmTarget: Add a method to obtain list of filenames for sources., 2014-03-17). The cmSourceFile based API is preferred because that avoids creation of many cmSourceFileLocation objects for matching strings, and the result is cached by cmTarget.
Diffstat (limited to 'Source/cmGeneratorTarget.cxx')
-rw-r--r--Source/cmGeneratorTarget.cxx31
1 files changed, 15 insertions, 16 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 69a2977..0d25a00 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -606,12 +606,12 @@ private:
cmGlobalGenerator const* GlobalGenerator;
typedef cmGeneratorTarget::SourceEntry SourceEntry;
SourceEntry* CurrentEntry;
- std::queue<std::string> SourceQueue;
- std::set<std::string> SourcesQueued;
+ std::queue<cmSourceFile*> SourceQueue;
+ std::set<cmSourceFile*> SourcesQueued;
typedef std::map<std::string, cmSourceFile*> NameMapType;
NameMapType NameMap;
- void QueueSource(std::string const& name);
+ void QueueSource(cmSourceFile* sf);
void FollowName(std::string const& name);
void FollowNames(std::vector<std::string> const& names);
bool IsUtility(std::string const& dep);
@@ -642,19 +642,19 @@ cmTargetTraceDependencies
{
configs.push_back("");
}
- std::set<std::string> emitted;
+ std::set<cmSourceFile*> emitted;
for(std::vector<std::string>::const_iterator ci = configs.begin();
ci != configs.end(); ++ci)
{
- std::vector<std::string> sources;
+ std::vector<cmSourceFile*> sources;
this->Target->GetSourceFiles(sources, *ci);
- for(std::vector<std::string>::const_iterator si = sources.begin();
+ for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
si != sources.end(); ++si)
{
- if(emitted.insert(*si).second && this->SourcesQueued.insert(*si).second)
+ cmSourceFile* sf = *si;
+ if(emitted.insert(sf).second && this->SourcesQueued.insert(sf).second)
{
- this->SourceQueue.push(*si);
- this->Makefile->GetOrCreateSource(*si);
+ this->SourceQueue.push(sf);
}
}
}
@@ -673,8 +673,7 @@ void cmTargetTraceDependencies::Trace()
while(!this->SourceQueue.empty())
{
// Get the next source from the queue.
- std::string src = this->SourceQueue.front();
- cmSourceFile* sf = this->Makefile->GetSource(src);
+ cmSourceFile* sf = this->SourceQueue.front();
this->SourceQueue.pop();
this->CurrentEntry = &this->GeneratorTarget->SourceEntries[sf];
@@ -702,14 +701,14 @@ void cmTargetTraceDependencies::Trace()
}
//----------------------------------------------------------------------------
-void cmTargetTraceDependencies::QueueSource(std::string const& name)
+void cmTargetTraceDependencies::QueueSource(cmSourceFile* sf)
{
- if(this->SourcesQueued.insert(name).second)
+ if(this->SourcesQueued.insert(sf).second)
{
- this->SourceQueue.push(name);
+ this->SourceQueue.push(sf);
// Make sure this file is in the target.
- this->Target->AddSource(name);
+ this->Target->AddSource(sf->GetFullPath());
}
}
@@ -731,7 +730,7 @@ void cmTargetTraceDependencies::FollowName(std::string const& name)
{
this->CurrentEntry->Depends.push_back(sf);
}
- this->QueueSource(sf->GetFullPath());
+ this->QueueSource(sf);
}
}