#!/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))