summaryrefslogtreecommitdiff
path: root/Source/cmComputeLinkDepends.h
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2008-08-27 10:21:57 -0400
committerBrad King <brad.king@kitware.com>2008-08-27 10:21:57 -0400
commit816ee0f83cd9775e3b378fe3b074efe06d6b29a6 (patch)
treeb32d2fdc46a9008f0da7b441d2fd2ea65f1cec91 /Source/cmComputeLinkDepends.h
parent012e4c4f68dc75002468cc043065c358bc12a7b5 (diff)
downloadcmake-816ee0f83cd9775e3b378fe3b074efe06d6b29a6.tar.gz
ENH: New link line item ordering algorithm
This change introduces a new algorithm for link line construction. The order it computes always begins with the exact link line specified by the user. Dependencies of items specified by the user are tracked, and those that are not already satisified by the line are appended to it at the end with minimal repeats. This restores the behavior of CMake 2.4 and below while still fixing some of its bugs. See issue #7546.
Diffstat (limited to 'Source/cmComputeLinkDepends.h')
-rw-r--r--Source/cmComputeLinkDepends.h28
1 files changed, 23 insertions, 5 deletions
diff --git a/Source/cmComputeLinkDepends.h b/Source/cmComputeLinkDepends.h
index b41da9e3a5..b738d8f9f8 100644
--- a/Source/cmComputeLinkDepends.h
+++ b/Source/cmComputeLinkDepends.h
@@ -131,15 +131,33 @@ private:
// Ordering algorithm.
void OrderLinkEntires();
std::vector<char> ComponentVisited;
+ std::vector<int> ComponentOrder;
+ int ComponentOrderId;
+ struct PendingComponent
+ {
+ // The real component id. Needed because the map is indexed by
+ // component topological index.
+ int Id;
+
+ // The number of times the component needs to be seen. This is
+ // always 1 for trivial components and is initially 2 for
+ // non-trivial components.
+ int Count;
+
+ // The entries yet to be seen to complete the component.
+ DependSet Entries;
+ };
+ std::map<int, PendingComponent> PendingComponents;
+ cmComputeComponentGraph* CCG;
std::vector<int> FinalLinkOrder;
- void DisplayComponents(cmComputeComponentGraph const& ccg);
- void VisitComponent(cmComputeComponentGraph const& ccg, unsigned int i);
- void EmitComponent(NodeList const& nl);
+ void DisplayComponents();
+ void VisitComponent(unsigned int c);
+ void VisitEntry(int index);
+ PendingComponent& MakePendingComponent(unsigned int component);
void DisplayFinalEntries();
- // Preservation of original link line.
+ // Record of the original link line.
std::vector<int> OriginalEntries;
- void PreserveOriginalEntries();
// Compatibility help.
bool OldLinkDirMode;