summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-11-11 17:46:27 (GMT)
committerBrad King <brad.king@kitware.com>2014-11-11 17:46:27 (GMT)
commitec893d9a26ee9cf6e15b525f4c1b0302b4fb666f (patch)
tree0a63b81fdd5c2e9acb4220509cda04e6fdd1c4c7 /Source
parent41b4fb997bdaff06c24221469bc5954cfff0fca1 (diff)
parent4db31095e5f4ce410c013e0b92bc5d1baee03934 (diff)
downloadCMake-ec893d9a26ee9cf6e15b525f4c1b0302b4fb666f.zip
CMake-ec893d9a26ee9cf6e15b525f4c1b0302b4fb666f.tar.gz
CMake-ec893d9a26ee9cf6e15b525f4c1b0302b4fb666f.tar.bz2
Merge branch 'fix_link-line-dedup_regression' into release
Diffstat (limited to 'Source')
-rw-r--r--Source/cmComputeLinkDepends.cxx13
1 files changed, 9 insertions, 4 deletions
diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx
index b13a125..1fb8f30 100644
--- a/Source/cmComputeLinkDepends.cxx
+++ b/Source/cmComputeLinkDepends.cxx
@@ -263,21 +263,26 @@ cmComputeLinkDepends::Compute()
this->OrderLinkEntires();
// Compute the final set of link entries.
+ // Iterate in reverse order so we can keep only the last occurrence
+ // of a shared library.
std::set<int> emmitted;
- for(std::vector<int>::const_iterator li = this->FinalLinkOrder.begin();
- li != this->FinalLinkOrder.end(); ++li)
+ for(std::vector<int>::const_reverse_iterator
+ li = this->FinalLinkOrder.rbegin(),
+ le = this->FinalLinkOrder.rend();
+ li != le; ++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.
+ // Entries that we know the linker will re-use 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);
}
}
+ // Reverse the resulting order since we iterated in reverse.
+ std::reverse(this->FinalLinkEntries.begin(), this->FinalLinkEntries.end());
// Display the final set.
if(this->DebugMode)