summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGeneratorTarget.cxx35
-rw-r--r--Source/cmTarget.cxx49
-rw-r--r--Source/cmTarget.h14
3 files changed, 49 insertions, 49 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 357b972..43ce882 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -842,7 +842,40 @@ static void AddInterfaceEntries(
void cmGeneratorTarget::GetSourceFiles(std::vector<cmSourceFile*> &files,
const std::string& config) const
{
- this->Target->GetSourceFiles(files, config);
+ // Lookup any existing link implementation for this configuration.
+ std::string key = cmSystemTools::UpperCase(config);
+
+ cmTarget::SourceFilesMapType& sfm = this->Target->GetSourceFilesMap();
+ if(!this->Target->GetLinkImplementationLanguageIsContextDependent())
+ {
+ files = sfm.begin()->second;
+ return;
+ }
+
+ cmTarget::SourceFilesMapType::iterator
+ it = sfm.find(key);
+ if(it != sfm.end())
+ {
+ files = it->second;
+ }
+ else
+ {
+ std::vector<std::string> srcs;
+ this->Target->GetSourceFiles(srcs, config);
+
+ std::set<cmSourceFile*> emitted;
+
+ for(std::vector<std::string>::const_iterator i = srcs.begin();
+ i != srcs.end(); ++i)
+ {
+ cmSourceFile* sf = this->Makefile->GetOrCreateSource(*i);
+ if (emitted.insert(sf).second)
+ {
+ files.push_back(sf);
+ }
+ }
+ sfm[key] = files;
+ }
}
//----------------------------------------------------------------------------
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index fc9e963..8ff729f 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -101,9 +101,7 @@ public:
HeadToLinkImplementationMap> LinkImplMapType;
LinkImplMapType LinkImplMap;
- typedef std::map<std::string, std::vector<cmSourceFile*> >
- SourceFilesMapType;
- SourceFilesMapType SourceFilesMap;
+ cmTarget::SourceFilesMapType SourceFilesMap;
std::set<cmLinkItem> UtilityItems;
bool UtilityItemsDone;
@@ -409,6 +407,11 @@ void cmTarget::Compute()
this->Internal->SourceItems, true);
}
+cmTarget::SourceFilesMapType& cmTarget::GetSourceFilesMap() const
+{
+ return this->Internal->SourceFilesMap;
+}
+
//----------------------------------------------------------------------------
void cmTarget::AddUtility(const std::string& u, cmMakefile *makefile)
{
@@ -736,46 +739,6 @@ void cmTarget::GetSourceFiles(std::vector<std::string> &files,
}
//----------------------------------------------------------------------------
-void cmTarget::GetSourceFiles(std::vector<cmSourceFile*> &files,
- const std::string& config) const
-{
-
- // Lookup any existing link implementation for this configuration.
- std::string key = cmSystemTools::UpperCase(config);
-
- if(!this->LinkImplementationLanguageIsContextDependent)
- {
- files = this->Internal->SourceFilesMap.begin()->second;
- return;
- }
-
- cmTargetInternals::SourceFilesMapType::iterator
- it = this->Internal->SourceFilesMap.find(key);
- if(it != this->Internal->SourceFilesMap.end())
- {
- files = it->second;
- }
- else
- {
- std::vector<std::string> srcs;
- this->GetSourceFiles(srcs, config);
-
- std::set<cmSourceFile*> emitted;
-
- for(std::vector<std::string>::const_iterator i = srcs.begin();
- i != srcs.end(); ++i)
- {
- cmSourceFile* sf = this->Makefile->GetOrCreateSource(*i);
- if (emitted.insert(sf).second)
- {
- files.push_back(sf);
- }
- }
- this->Internal->SourceFilesMap[key] = files;
- }
-}
-
-//----------------------------------------------------------------------------
void cmTarget::AddTracedSources(std::vector<std::string> const& srcs)
{
if (!srcs.empty())
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 2f1671d..6024c38 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -135,11 +135,15 @@ public:
void Compute();
- /**
- * Get the list of the source files used by this target
- */
- void GetSourceFiles(std::vector<cmSourceFile*> &files,
- const std::string& config) const;
+ typedef std::map<std::string, std::vector<cmSourceFile*> >
+ SourceFilesMapType;
+
+ SourceFilesMapType& GetSourceFilesMap() const;
+
+ bool GetLinkImplementationLanguageIsContextDependent() const {
+ return this->LinkImplementationLanguageIsContextDependent;
+ }
+
/**
* Add sources to the target.
*/