Index: build/android/gyp/write_ordered_libraries.py |
diff --git a/build/android/gyp/write_ordered_libraries.py b/build/android/gyp/write_ordered_libraries.py |
index dcb5064cf28caaea59cb2f1c72a10d2984411871..63e75709692eac3ef64b4387b677e2a0730cdd62 100755 |
--- a/build/android/gyp/write_ordered_libraries.py |
+++ b/build/android/gyp/write_ordered_libraries.py |
@@ -61,33 +61,18 @@ def GetNonSystemDependencies(library_name): |
def GetSortedTransitiveDependencies(libraries): |
"""Returns all transitive library dependencies in dependency order.""" |
- def GraphNode(library): |
- return (library, GetNonSystemDependencies(library)) |
- |
- # First: find all library dependencies. |
- unchecked_deps = libraries |
- all_deps = set(libraries) |
- while unchecked_deps: |
- lib = unchecked_deps.pop() |
- new_deps = GetNonSystemDependencies(lib).difference(all_deps) |
- unchecked_deps.extend(new_deps) |
- all_deps = all_deps.union(new_deps) |
- |
- # Then: simple, slow topological sort. |
- sorted_deps = [] |
- unsorted_deps = dict(map(GraphNode, all_deps)) |
- while unsorted_deps: |
- for library, dependencies in unsorted_deps.items(): |
- if not dependencies.intersection(unsorted_deps.keys()): |
- sorted_deps.append(library) |
- del unsorted_deps[library] |
- |
- return sorted_deps |
- |
-def GetSortedTransitiveDependenciesForExecutable(executable): |
- """Returns all transitive library dependencies in dependency order.""" |
- all_deps = GetDependencies(executable) |
- libraries = [lib for lib in all_deps if not IsSystemLibrary(lib)] |
+ return build_utils.GetSortedTransitiveDependencies( |
+ libraries, GetNonSystemDependencies) |
+ |
+ |
+def GetSortedTransitiveDependenciesForBinaries(binaries): |
+ if binaries[0].endswith('.so'): |
+ libraries = [os.path.basename(lib) for lib in binaries] |
+ else: |
+ assert len(binaries) == 1 |
+ all_deps = GetDependencies(binaries[0]) |
+ libraries = [lib for lib in all_deps if not IsSystemLibrary(lib)] |
+ |
return GetSortedTransitiveDependencies(libraries) |
@@ -105,12 +90,8 @@ def main(): |
global _options |
_options, _ = parser.parse_args() |
- libraries = build_utils.ParseGypList(_options.input_libraries) |
- if libraries[0].endswith('.so'): |
- libraries = [os.path.basename(lib) for lib in libraries] |
- libraries = GetSortedTransitiveDependencies(libraries) |
- else: |
- libraries = GetSortedTransitiveDependenciesForExecutable(libraries[0]) |
+ libraries = GetSortedTransitiveDependenciesForBinaries( |
+ build_utils.ParseGypList(_options.input_libraries)) |
build_utils.WriteJson(libraries, _options.output, only_if_changed=True) |