[Cmake-commits] CMake branch, next, updated. v3.0.0-rc3-1934-g966b57f
Stephen Kelly
steveire at gmail.com
Sun Apr 6 04:02:56 EDT 2014
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".
The branch, next has been updated
via 966b57fbdeaf35998bf88fa9bfbb22f1d41716a0 (commit)
via a4e6bf8e36e6fa38bb40dc6df2345922de86bad4 (commit)
via 92e2fbe103c6ffc3af1189d0450493488c65baaa (commit)
via c5b26f3bec0e6e18255802da53886eae30a74021 (commit)
via eb163f37d449af27fe8446c5d8d632aa295b6428 (commit)
from 821c131b55fd2aefae81e8c417a6009bc1df1fb7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=966b57fbdeaf35998bf88fa9bfbb22f1d41716a0
commit 966b57fbdeaf35998bf88fa9bfbb22f1d41716a0
Merge: 821c131 a4e6bf8
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Sun Apr 6 04:02:55 2014 -0400
Commit: CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Sun Apr 6 04:02:55 2014 -0400
Merge topic 'optimize-source-file-processing' into next
a4e6bf8e cmTarget: Make GetSourceFiles string overload private.
92e2fbe1 cmGeneratorTarget: Trace cmSourceFile objects instead of strings.
c5b26f3b cmTarget: Cache the cmSourceFiles in GetSourceFiles.
eb163f37 cmTarget: Extract a ProcessSourceItemCMP0049 method.
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=a4e6bf8e36e6fa38bb40dc6df2345922de86bad4
commit a4e6bf8e36e6fa38bb40dc6df2345922de86bad4
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Sat Apr 5 12:35:43 2014 +0200
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Sun Apr 6 10:02:34 2014 +0200
cmTarget: Make GetSourceFiles string overload private.
Consumers should use the cmSourceFile overload, which is now
always the case.
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index a8ac57f..da9d0a1 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -135,9 +135,6 @@ public:
/**
* Get the list of the source files used by this target
*/
- void GetSourceFiles(std::vector<std::string> &files,
- const std::string& config,
- cmTarget const* head = 0) const;
void GetSourceFiles(std::vector<cmSourceFile*> &files,
const std::string& config,
cmTarget const* head = 0) const;
@@ -683,6 +680,9 @@ private:
const std::string& config,
bool contentOnly) const;
+ void GetSourceFiles(std::vector<std::string> &files,
+ const std::string& config,
+ cmTarget const* head = 0) const;
private:
std::string Name;
std::vector<cmCustomCommand> PreBuildCommands;
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=92e2fbe103c6ffc3af1189d0450493488c65baaa
commit 92e2fbe103c6ffc3af1189d0450493488c65baaa
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Sat Apr 5 11:41:58 2014 +0200
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Sun Apr 6 10:02:34 2014 +0200
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.
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);
}
}
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c5b26f3bec0e6e18255802da53886eae30a74021
commit c5b26f3bec0e6e18255802da53886eae30a74021
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Sat Apr 5 11:40:38 2014 +0200
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Sun Apr 6 10:02:34 2014 +0200
cmTarget: Cache the cmSourceFiles in GetSourceFiles.
Avoid calling GetSourceFiles with the same result container multiple
times when tracing target dependencies. The result from the previous
configuration is cached and used later otherwise.
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 01fad26..69a2977 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -636,26 +636,26 @@ cmTargetTraceDependencies
// Queue all the source files already specified for the target.
if (this->Target->GetType() != cmTarget::INTERFACE_LIBRARY)
{
- std::vector<std::string> sources;
std::vector<std::string> configs;
this->Makefile->GetConfigurations(configs);
if (configs.empty())
{
configs.push_back("");
}
+ std::set<std::string> emitted;
for(std::vector<std::string>::const_iterator ci = configs.begin();
ci != configs.end(); ++ci)
{
+ std::vector<std::string> sources;
this->Target->GetSourceFiles(sources, *ci);
- }
- std::set<std::string> emitted;
- for(std::vector<std::string>::const_iterator si = sources.begin();
- si != sources.end(); ++si)
- {
- if(emitted.insert(*si).second && this->SourcesQueued.insert(*si).second)
+ for(std::vector<std::string>::const_iterator si = sources.begin();
+ si != sources.end(); ++si)
{
- this->SourceQueue.push(*si);
- this->Makefile->GetOrCreateSource(*si);
+ if(emitted.insert(*si).second && this->SourcesQueued.insert(*si).second)
+ {
+ this->SourceQueue.push(*si);
+ this->Makefile->GetOrCreateSource(*si);
+ }
}
}
}
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 22be57f..d28ac3f 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -138,6 +138,10 @@ public:
LinkClosureMapType;
LinkClosureMapType LinkClosureMap;
+ typedef std::map<TargetConfigPair, std::vector<cmSourceFile*> >
+ SourceFilesMapType;
+ SourceFilesMapType SourceFilesMap;
+
struct TargetPropertyEntry {
TargetPropertyEntry(cmsys::auto_ptr<cmCompiledGeneratorExpression> cge,
const std::string &targetName = std::string())
@@ -793,19 +797,33 @@ void cmTarget::GetSourceFiles(std::vector<cmSourceFile*> &files,
const std::string& config,
cmTarget const* head) const
{
- std::vector<std::string> srcs;
- this->GetSourceFiles(srcs, config, head);
- std::set<cmSourceFile*> emitted;
+ // Lookup any existing link implementation for this configuration.
+ TargetConfigPair key(head, cmSystemTools::UpperCase(config));
- for(std::vector<std::string>::const_iterator i = srcs.begin();
- i != srcs.end(); ++i)
+ cmTargetInternals::SourceFilesMapType::iterator
+ it = this->Internal->SourceFilesMap.find(key);
+ if(it != this->Internal->SourceFilesMap.end())
+ {
+ files = it->second;
+ }
+ else
{
- cmSourceFile* sf = this->Makefile->GetOrCreateSource(*i);
- if (emitted.insert(sf).second)
+ std::vector<std::string> srcs;
+ this->GetSourceFiles(srcs, config, head);
+
+ std::set<cmSourceFile*> emitted;
+
+ for(std::vector<std::string>::const_iterator i = srcs.begin();
+ i != srcs.end(); ++i)
{
- files.push_back(sf);
+ cmSourceFile* sf = this->Makefile->GetOrCreateSource(*i);
+ if (emitted.insert(sf).second)
+ {
+ files.push_back(sf);
+ }
}
+ this->Internal->SourceFilesMap[key] = files;
}
}
@@ -835,6 +853,7 @@ void cmTarget::AddSources(std::vector<std::string> const& srcs)
}
if (!srcFiles.empty())
{
+ this->Internal->SourceFilesMap.clear();
cmListFileBacktrace lfbt;
this->Makefile->GetBacktrace(lfbt);
cmGeneratorExpression ge(lfbt);
@@ -969,6 +988,7 @@ cmSourceFile* cmTarget::AddSource(const std::string& src)
TargetPropertyEntryFinder(sfl))
== this->Internal->SourceEntries.end())
{
+ this->Internal->SourceFilesMap.clear();
cmListFileBacktrace lfbt;
this->Makefile->GetBacktrace(lfbt);
cmGeneratorExpression ge(lfbt);
@@ -1738,6 +1758,7 @@ void cmTarget::SetProperty(const std::string& prop, const char* value)
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
return;
}
+ this->Internal->SourceFilesMap.clear();
cmListFileBacktrace lfbt;
this->Makefile->GetBacktrace(lfbt);
cmGeneratorExpression ge(lfbt);
@@ -1824,7 +1845,7 @@ void cmTarget::AppendProperty(const std::string& prop, const char* value,
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
return;
}
-
+ this->Internal->SourceFilesMap.clear();
cmListFileBacktrace lfbt;
this->Makefile->GetBacktrace(lfbt);
cmGeneratorExpression ge(lfbt);
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=eb163f37d449af27fe8446c5d8d632aa295b6428
commit eb163f37d449af27fe8446c5d8d632aa295b6428
Author: Stephen Kelly <steveire at gmail.com>
AuthorDate: Fri Apr 4 17:45:28 2014 +0200
Commit: Stephen Kelly <steveire at gmail.com>
CommitDate: Sun Apr 6 10:02:34 2014 +0200
cmTarget: Extract a ProcessSourceItemCMP0049 method.
Avoid calling AddSource for each src filename. That involves
checking each entry for uniqueness and creating a separate
generator expression for each one.
Instead, add a single entry for the list of sources. The source
files are passed through a uniqueness filter at generate-time, so
duplicates don't matter so much.
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index b6bb2d3..22be57f 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -812,23 +812,41 @@ void cmTarget::GetSourceFiles(std::vector<cmSourceFile*> &files,
//----------------------------------------------------------------------------
void cmTarget::AddSources(std::vector<std::string> const& srcs)
{
+ std::string srcFiles;
+ const char* sep = "";
for(std::vector<std::string>::const_iterator i = srcs.begin();
i != srcs.end(); ++i)
{
- const char* src = i->c_str();
- if(src[0] == '$' && src[1] == '<')
- {
- this->AddSource(src);
- }
- else
+ std::string filename = *i;
+ const char* src = filename.c_str();
+
+ if(!(src[0] == '$' && src[1] == '<'))
{
- this->AddSourceCMP0049(src);
+ filename = this->ProcessSourceItemCMP0049(filename);
+ if (cmSystemTools::GetErrorOccuredFlag())
+ {
+ return;
+ }
+ this->Makefile->GetOrCreateSource(filename);
}
+ srcFiles += sep;
+ srcFiles += filename;
+ sep = ";";
+ }
+ if (!srcFiles.empty())
+ {
+ cmListFileBacktrace lfbt;
+ this->Makefile->GetBacktrace(lfbt);
+ cmGeneratorExpression ge(lfbt);
+ cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(srcFiles);
+ cge->SetEvaluateForBuildsystem(true);
+ this->Internal->SourceEntries.push_back(
+ new cmTargetInternals::TargetPropertyEntry(cge));
}
}
//----------------------------------------------------------------------------
-cmSourceFile* cmTarget::AddSourceCMP0049(const std::string& s)
+std::string cmTarget::ProcessSourceItemCMP0049(const std::string& s)
{
std::string src = s;
@@ -863,10 +881,22 @@ cmSourceFile* cmTarget::AddSourceCMP0049(const std::string& s)
this->Makefile->IssueMessage(messageType, e.str());
if (messageType == cmake::FATAL_ERROR)
{
- return 0;
+ return "";
}
}
}
+ return src;
+}
+
+//----------------------------------------------------------------------------
+cmSourceFile* cmTarget::AddSourceCMP0049(const std::string& s)
+{
+ std::string src = this->ProcessSourceItemCMP0049(s);
+
+ if (cmSystemTools::GetErrorOccuredFlag())
+ {
+ return 0;
+ }
return this->AddSource(src);
}
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index da032a5..a8ac57f 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -752,6 +752,8 @@ private:
void ComputeLinkClosure(const std::string& config, LinkClosure& lc,
cmTarget const* head) const;
+ std::string ProcessSourceItemCMP0049(const std::string& s);
+
void ClearLinkMaps();
void MaybeInvalidatePropertyCache(const std::string& prop);
-----------------------------------------------------------------------
Summary of changes:
hooks/post-receive
--
CMake
More information about the Cmake-commits
mailing list