Merge topic 'link-line-dedup'

ccec6df8 Help: Add notes for topic 'link-line-dedup'
9f7e27fc De-duplicate shared library targets in generated link lines
This commit is contained in:
Brad King 2014-08-04 10:02:16 -04:00 committed by CMake Topic Stage
commit 628f02ba35
2 changed files with 18 additions and 2 deletions

View File

@ -0,0 +1,5 @@
link-line-dedup
---------------
* When generating linker command-lines, CMake now avoids repeating
items corresponding to SHARED library targets.

View File

@ -166,7 +166,8 @@ guaranteed to be acyclic.
The final list of items produced by this procedure consists of the The final list of items produced by this procedure consists of the
original user link line followed by minimal additional items needed to original user link line followed by minimal additional items needed to
satisfy dependencies. satisfy dependencies. The final list is then filtered to de-duplicate
items that we know the linker will re-use automatically (shared libs).
*/ */
@ -262,10 +263,20 @@ cmComputeLinkDepends::Compute()
this->OrderLinkEntires(); this->OrderLinkEntires();
// Compute the final set of link entries. // Compute the final set of link entries.
std::set<int> emmitted;
for(std::vector<int>::const_iterator li = this->FinalLinkOrder.begin(); for(std::vector<int>::const_iterator li = this->FinalLinkOrder.begin();
li != this->FinalLinkOrder.end(); ++li) li != this->FinalLinkOrder.end(); ++li)
{ {
this->FinalLinkEntries.push_back(this->EntryList[*li]); int i = *li;
LinkEntry const& e = this->EntryList[i];
cmTarget const* t = e.Target;
// Entries that we know the linker will re-use for symbols
// needed by later entries do not need to be repeated.
bool uniquify = t && t->GetType() == cmTarget::SHARED_LIBRARY;
if(!uniquify || emmitted.insert(i).second)
{
this->FinalLinkEntries.push_back(e);
}
} }
// Display the final set. // Display the final set.