| OLD | NEW | 
|    1 #!/usr/bin/env python |    1 #!/usr/bin/env python | 
|    2 # |    2 # | 
|    3 # Copyright 2013 The Chromium Authors. All rights reserved. |    3 # Copyright 2013 The Chromium Authors. All rights reserved. | 
|    4 # Use of this source code is governed by a BSD-style license that can be |    4 # Use of this source code is governed by a BSD-style license that can be | 
|    5 # found in the LICENSE file. |    5 # found in the LICENSE file. | 
|    6  |    6  | 
|    7 """Writes dependency ordered list of native libraries. |    7 """Writes dependency ordered list of native libraries. | 
|    8  |    8  | 
|    9 The list excludes any Android system libraries, as those are not bundled with |    9 The list excludes any Android system libraries, as those are not bundled with | 
|   10 the APK. |   10 the APK. | 
|   11  |   11  | 
|   12 This list of libraries is used for several steps of building an APK. |   12 This list of libraries is used for several steps of building an APK. | 
|   13 In the component build, the --input-libraries only needs to be the top-level |   13 In the component build, the --input-libraries only needs to be the top-level | 
|   14 library (i.e. libcontent_shell_content_view). This will then use readelf to |   14 library (i.e. libcontent_shell_content_view). This will then use readelf to | 
|   15 inspect the shared libraries and determine the full list of (non-system) |   15 inspect the shared libraries and determine the full list of (non-system) | 
|   16 libraries that should be included in the APK. |   16 libraries that should be included in the APK. | 
|   17 """ |   17 """ | 
|   18  |   18  | 
|   19 # TODO(cjhopman): See if we can expose the list of library dependencies from |   19 # TODO(cjhopman): See if we can expose the list of library dependencies from | 
|   20 # gyp, rather than calculating it ourselves. |   20 # gyp, rather than calculating it ourselves. | 
|   21 # http://crbug.com/225558 |   21 # http://crbug.com/225558 | 
|   22  |   22  | 
 |   23 import json | 
|   23 import optparse |   24 import optparse | 
|   24 import os |   25 import os | 
|   25 import re |   26 import re | 
|   26 import sys |   27 import sys | 
|   27  |   28  | 
|   28 from util import build_utils # pylint: disable=F0401 |   29 from util import build_utils | 
|   29  |   30  | 
|   30 _options = None |   31 _options = None | 
|   31 _library_re = re.compile( |   32 _library_re = re.compile( | 
|   32     '.*NEEDED.*Shared library: \[(?P<library_name>[\w/.]+)\]') |   33     '.*NEEDED.*Shared library: \[(?P<library_name>[\w/.]+)\]') | 
|   33  |   34  | 
|   34  |   35  | 
|   35 def FullLibraryPath(library_name): |   36 def FullLibraryPath(library_name): | 
|   36   return '%s/%s' % (_options.libraries_dir, library_name) |   37   return '%s/%s' % (_options.libraries_dir, library_name) | 
|   37  |   38  | 
|   38  |   39  | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   84  |   85  | 
|   85   return sorted_deps |   86   return sorted_deps | 
|   86  |   87  | 
|   87 def GetSortedTransitiveDependenciesForExecutable(executable): |   88 def GetSortedTransitiveDependenciesForExecutable(executable): | 
|   88   """Returns all transitive library dependencies in dependency order.""" |   89   """Returns all transitive library dependencies in dependency order.""" | 
|   89   all_deps = GetDependencies(executable) |   90   all_deps = GetDependencies(executable) | 
|   90   libraries = [lib for lib in all_deps if not IsSystemLibrary(lib)] |   91   libraries = [lib for lib in all_deps if not IsSystemLibrary(lib)] | 
|   91   return GetSortedTransitiveDependencies(libraries) |   92   return GetSortedTransitiveDependencies(libraries) | 
|   92  |   93  | 
|   93  |   94  | 
|   94 def main(): |   95 def main(argv): | 
|   95   parser = optparse.OptionParser() |   96   parser = optparse.OptionParser() | 
|   96  |   97  | 
|   97   parser.add_option('--input-libraries', |   98   parser.add_option('--input-libraries', | 
|   98       help='A list of top-level input libraries.') |   99       help='A list of top-level input libraries.') | 
|   99   parser.add_option('--libraries-dir', |  100   parser.add_option('--libraries-dir', | 
|  100       help='The directory which contains shared libraries.') |  101       help='The directory which contains shared libraries.') | 
|  101   parser.add_option('--readelf', help='Path to the readelf binary.') |  102   parser.add_option('--readelf', help='Path to the readelf binary.') | 
|  102   parser.add_option('--output', help='Path to the generated .json file.') |  103   parser.add_option('--output', help='Path to the generated .json file.') | 
|  103   parser.add_option('--stamp', help='Path to touch on success.') |  104   parser.add_option('--stamp', help='Path to touch on success.') | 
|  104  |  105  | 
|  105   global _options |  106   global _options | 
|  106   _options, _ = parser.parse_args() |  107   _options, _ = parser.parse_args() | 
|  107  |  108  | 
|  108   libraries = build_utils.ParseGypList(_options.input_libraries) |  109   libraries = build_utils.ParseGypList(_options.input_libraries) | 
|  109   if libraries[0].endswith('.so'): |  110   if libraries[0].endswith('.so'): | 
|  110     libraries = [os.path.basename(lib) for lib in libraries] |  111     libraries = [os.path.basename(lib) for lib in libraries] | 
|  111     libraries = GetSortedTransitiveDependencies(libraries) |  112     libraries = GetSortedTransitiveDependencies(libraries) | 
|  112   else: |  113   else: | 
|  113     libraries = GetSortedTransitiveDependenciesForExecutable(libraries[0]) |  114     libraries = GetSortedTransitiveDependenciesForExecutable(libraries[0]) | 
|  114  |  115  | 
|  115   build_utils.WriteJson(libraries, _options.output, only_if_changed=True) |  116   build_utils.WriteJson(libraries, _options.output, only_if_changed=True) | 
|  116  |  117  | 
|  117   if _options.stamp: |  118   if _options.stamp: | 
|  118     build_utils.Touch(_options.stamp) |  119     build_utils.Touch(_options.stamp) | 
|  119  |  120  | 
|  120  |  121  | 
|  121 if __name__ == '__main__': |  122 if __name__ == '__main__': | 
|  122   sys.exit(main()) |  123   sys.exit(main(sys.argv)) | 
|  123  |  124  | 
|  124  |  125  | 
| OLD | NEW |