| #!/usr/bin/env python3 |
| # |
| # Copyright 2013 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. |
| |
| import argparse |
| import os |
| import posixpath |
| import re |
| import sys |
| import zipfile |
| |
| from util import build_utils |
| |
| |
| def _ParsePackageName(data): |
| m = re.match(r'^\s*package\s+(.*?)\s*;', data, re.MULTILINE) |
| return m.group(1) if m else '' |
| |
| |
| def main(args): |
| args = build_utils.ExpandFileArgs(args) |
| |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--include-dirs', help='GN list of include directories.') |
| parser.add_argument('--output', help='Path for .srcjar.') |
| parser.add_argument('--define', |
| action='append', |
| dest='defines', |
| help='List of -D args') |
| parser.add_argument('templates', nargs='+', help='Template files.') |
| options = parser.parse_args(args) |
| |
| options.defines = build_utils.ParseGnList(options.defines) |
| options.include_dirs = build_utils.ParseGnList(options.include_dirs) |
| |
| gcc_cmd = [ |
| 'gcc', |
| '-E', # stop after preprocessing. |
| '-DANDROID', # Specify ANDROID define for pre-processor. |
| '-x', |
| 'c-header', # treat sources as C header files |
| '-P', # disable line markers, i.e. '#line 309' |
| ] |
| gcc_cmd.extend('-D' + x for x in options.defines) |
| gcc_cmd.extend('-I' + x for x in options.include_dirs) |
| |
| with build_utils.AtomicOutput(options.output) as f: |
| with zipfile.ZipFile(f, 'w') as z: |
| for template in options.templates: |
| data = build_utils.CheckOutput(gcc_cmd + [template]) |
| package_name = _ParsePackageName(data) |
| if not package_name: |
| raise Exception('Could not find java package of ' + template) |
| zip_path = posixpath.join( |
| package_name.replace('.', '/'), |
| os.path.splitext(os.path.basename(template))[0]) + '.java' |
| build_utils.AddToZipHermetic(z, zip_path, data=data) |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |