diff options
Diffstat (limited to 'build/android/gyp/write_ordered_libraries.py')
-rwxr-xr-x | build/android/gyp/write_ordered_libraries.py | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/build/android/gyp/write_ordered_libraries.py b/build/android/gyp/write_ordered_libraries.py index b1e3cec..31aba74 100755 --- a/build/android/gyp/write_ordered_libraries.py +++ b/build/android/gyp/write_ordered_libraries.py @@ -65,33 +65,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) @@ -111,11 +96,7 @@ def main(): libraries = build_utils.ParseGypList(_options.input_libraries) if len(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(libraries) build_utils.WriteJson(libraries, _options.output, only_if_changed=True) |