tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

aidl.py (2193B)


      1 #!/usr/bin/env python3
      2 #
      3 # Copyright 2014 The Chromium Authors
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 """Invokes Android's aidl
      8 """
      9 
     10 import optparse
     11 import os
     12 import re
     13 import sys
     14 import zipfile
     15 
     16 from util import build_utils
     17 import action_helpers  # build_utils adds //build to sys.path.
     18 import zip_helpers
     19 
     20 
     21 def main(argv):
     22  option_parser = optparse.OptionParser()
     23  option_parser.add_option('--aidl-path', help='Path to the aidl binary.')
     24  option_parser.add_option('--imports', help='Files to import.')
     25  option_parser.add_option('--includes',
     26                           help='Directories to add as import search paths.')
     27  option_parser.add_option('--srcjar', help='Path for srcjar output.')
     28  action_helpers.add_depfile_arg(option_parser)
     29  options, args = option_parser.parse_args(argv[1:])
     30 
     31  options.includes = action_helpers.parse_gn_list(options.includes)
     32 
     33  with build_utils.TempDir() as temp_dir:
     34    for f in args:
     35      classname = os.path.splitext(os.path.basename(f))[0]
     36      output = os.path.join(temp_dir, classname + '.java')
     37      aidl_cmd = [options.aidl_path]
     38      aidl_cmd += [
     39          '-p' + s for s in action_helpers.parse_gn_list(options.imports)
     40      ]
     41      aidl_cmd += ['-I' + s for s in options.includes]
     42      aidl_cmd += [
     43        f,
     44        output
     45      ]
     46      build_utils.CheckOutput(aidl_cmd)
     47 
     48    with action_helpers.atomic_output(options.srcjar) as f:
     49      with zipfile.ZipFile(f, 'w') as srcjar:
     50        for path in build_utils.FindInDirectory(temp_dir, '*.java'):
     51          with open(path) as fileobj:
     52            data = fileobj.read()
     53          pkg_name = re.search(r'^\s*package\s+(.*?)\s*;', data, re.M).group(1)
     54          arcname = '%s/%s' % (
     55              pkg_name.replace('.', '/'), os.path.basename(path))
     56          zip_helpers.add_to_zip_hermetic(srcjar, arcname, data=data)
     57 
     58  if options.depfile:
     59    include_files = []
     60    for include_dir in options.includes:
     61      include_files += build_utils.FindInDirectory(include_dir, '*.java')
     62    action_helpers.write_depfile(options.depfile, options.srcjar, include_files)
     63 
     64 
     65 if __name__ == '__main__':
     66  sys.exit(main(sys.argv))