|  | #!/usr/bin/env python3 | 
|  | # | 
|  | # Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | """Invokes Android's aidl | 
|  | """ | 
|  |  | 
|  | import optparse | 
|  | import os | 
|  | import re | 
|  | import sys | 
|  | import zipfile | 
|  |  | 
|  | from util import build_utils | 
|  |  | 
|  |  | 
|  | def main(argv): | 
|  | option_parser = optparse.OptionParser() | 
|  | option_parser.add_option('--aidl-path', help='Path to the aidl binary.') | 
|  | option_parser.add_option('--imports', help='Files to import.') | 
|  | option_parser.add_option('--includes', | 
|  | help='Directories to add as import search paths.') | 
|  | option_parser.add_option('--srcjar', help='Path for srcjar output.') | 
|  | build_utils.AddDepfileOption(option_parser) | 
|  | options, args = option_parser.parse_args(argv[1:]) | 
|  |  | 
|  | options.includes = build_utils.ParseGnList(options.includes) | 
|  |  | 
|  | with build_utils.TempDir() as temp_dir: | 
|  | for f in args: | 
|  | classname = os.path.splitext(os.path.basename(f))[0] | 
|  | output = os.path.join(temp_dir, classname + '.java') | 
|  | aidl_cmd = [options.aidl_path] | 
|  | aidl_cmd += [ | 
|  | '-p' + s for s in build_utils.ParseGnList(options.imports) | 
|  | ] | 
|  | aidl_cmd += ['-I' + s for s in options.includes] | 
|  | aidl_cmd += [ | 
|  | f, | 
|  | output | 
|  | ] | 
|  | build_utils.CheckOutput(aidl_cmd) | 
|  |  | 
|  | with build_utils.AtomicOutput(options.srcjar) as f: | 
|  | with zipfile.ZipFile(f, 'w') as srcjar: | 
|  | for path in build_utils.FindInDirectory(temp_dir, '*.java'): | 
|  | with open(path) as fileobj: | 
|  | data = fileobj.read() | 
|  | pkg_name = re.search(r'^\s*package\s+(.*?)\s*;', data, re.M).group(1) | 
|  | arcname = '%s/%s' % ( | 
|  | pkg_name.replace('.', '/'), os.path.basename(path)) | 
|  | build_utils.AddToZipHermetic(srcjar, arcname, data=data) | 
|  |  | 
|  | if options.depfile: | 
|  | include_files = [] | 
|  | for include_dir in options.includes: | 
|  | include_files += build_utils.FindInDirectory(include_dir, '*.java') | 
|  | build_utils.WriteDepfile(options.depfile, options.srcjar, include_files) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main(sys.argv)) |