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 338090f0554038a14ba72e76b853a355d2d50011..5bd6e6c21005703e967b8740f7cec0f65d148528 100755 |
--- a/build/android/gyp/write_ordered_libraries.py |
+++ b/build/android/gyp/write_ordered_libraries.py |
@@ -28,15 +28,13 @@ import sys |
from util import build_utils |
- |
_options = None |
-_libraries_dir = None |
_library_re = re.compile( |
'.*NEEDED.*Shared library: \[(?P<library_name>[\w/.]+)\]') |
def FullLibraryPath(library_name): |
- return '%s/%s' % (_libraries_dir, library_name) |
+ return '%s/%s' % (_options.libraries_dir, library_name) |
def IsSystemLibrary(library_name): |
@@ -45,20 +43,20 @@ def IsSystemLibrary(library_name): |
return not os.path.exists(FullLibraryPath(library_name)) |
-def CallReadElf(library_name): |
+def CallReadElf(library_or_executable): |
readelf_cmd = [_options.readelf, |
'-d', |
- FullLibraryPath(library_name)] |
+ library_or_executable] |
return build_utils.CheckCallDie(readelf_cmd, suppress_output=True) |
-def GetDependencies(library_name): |
- elf = CallReadElf(library_name) |
+def GetDependencies(library_or_executable): |
+ elf = CallReadElf(library_or_executable) |
return set(_library_re.findall(elf)) |
def GetNonSystemDependencies(library_name): |
- all_deps = GetDependencies(library_name) |
+ all_deps = GetDependencies(FullLibraryPath(library_name)) |
return set((lib for lib in all_deps if not IsSystemLibrary(lib))) |
@@ -87,12 +85,20 @@ def GetSortedTransitiveDependencies(libraries): |
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 GetSortedTransitiveDependencies(libraries) |
+ |
def main(argv): |
parser = optparse.OptionParser() |
parser.add_option('--input-libraries', |
help='A list of top-level input libraries.') |
+ parser.add_option('--libraries-dir', |
+ help='The directory which contains shared libraries.') |
parser.add_option('--readelf', help='Path to the readelf binary.') |
parser.add_option('--output', help='Path to the generated .json file.') |
parser.add_option('--stamp', help='Path to touch on success.') |
@@ -101,11 +107,11 @@ def main(argv): |
_options, _ = parser.parse_args() |
libraries = build_utils.ParseGypList(_options.input_libraries) |
- global _libraries_dir |
- _libraries_dir = os.path.dirname(libraries[0]) |
- libraries = [os.path.basename(lib) for lib in libraries] |
- |
- libraries = GetSortedTransitiveDependencies(libraries) |
+ if libraries[0].endswith('.so'): |
+ libraries = [os.path.basename(lib) for lib in libraries] |
+ libraries = GetSortedTransitiveDependencies(libraries) |
+ else: |
+ libraries = GetSortedTransitiveDependenciesForExecutable(libraries[0]) |
with open(_options.output, 'w') as outfile: |
json.dump(libraries, outfile) |