Index: pylib/gyp/input.py |
diff --git a/pylib/gyp/input.py b/pylib/gyp/input.py |
index 20178672b23bd83333466c2e26afdf69b63eea85..22eb333d0524ab11918a36212f90390b522ba11e 100644 |
--- a/pylib/gyp/input.py |
+++ b/pylib/gyp/input.py |
@@ -1539,11 +1539,15 @@ class DependencyGraphNode(object): |
# dependents. |
flat_list = OrderedSet() |
+ def ExtractNodeRef(node): |
+ """Extracts the object that the node represents from the given node.""" |
+ return node.ref |
+ |
# in_degree_zeros is the list of DependencyGraphNodes that have no |
# dependencies not in flat_list. Initially, it is a copy of the children |
# of this node, because when the graph was built, nodes with no |
# dependencies were made implicit dependents of the root node. |
- in_degree_zeros = set(self.dependents[:]) |
+ in_degree_zeros = sorted(self.dependents[:], key=ExtractNodeRef) |
while in_degree_zeros: |
# Nodes in in_degree_zeros have no dependencies not in flat_list, so they |
@@ -1555,12 +1559,13 @@ class DependencyGraphNode(object): |
# Look at dependents of the node just added to flat_list. Some of them |
# may now belong in in_degree_zeros. |
- for node_dependent in node.dependents: |
+ for node_dependent in sorted(node.dependents, key=ExtractNodeRef): |
is_in_degree_zero = True |
# TODO: We want to check through the |
# node_dependent.dependencies list but if it's long and we |
# always start at the beginning, then we get O(n^2) behaviour. |
- for node_dependent_dependency in node_dependent.dependencies: |
+ for node_dependent_dependency in (sorted(node_dependent.dependencies, |
+ key=ExtractNodeRef)): |
if not node_dependent_dependency.ref in flat_list: |
# The dependent one or more dependencies not in flat_list. There |
# will be more chances to add it to flat_list when examining |
@@ -1573,7 +1578,7 @@ class DependencyGraphNode(object): |
# All of the dependent's dependencies are already in flat_list. Add |
# it to in_degree_zeros where it will be processed in a future |
# iteration of the outer loop. |
- in_degree_zeros.add(node_dependent) |
+ in_degree_zeros += [node_dependent] |
return list(flat_list) |