diff options
author | Colin Cross <ccross@android.com> | 2020-06-25 17:12:28 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2020-06-26 22:41:34 -0700 |
commit | 9b1aa0cb86e3a80b957315af22fb7897a155273f (patch) | |
tree | e1056e218e637152b103a429a932b2d1dff82076 /scripts/gen-kotlin-build-file.py | |
parent | 8ba7d47bba762bb078685833c7a204e01aaaf8fa (diff) |
Move gen-kotlin-build-file.sh to python
Kotlin common multiplatform sources support will require more
complexity in gen-kotlin-build-file.sh, move it to python instead.
Test: m checkbuild
Change-Id: I02312160ad781877f1fec971168331c0dcecf136
Diffstat (limited to 'scripts/gen-kotlin-build-file.py')
-rw-r--r-- | scripts/gen-kotlin-build-file.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/scripts/gen-kotlin-build-file.py b/scripts/gen-kotlin-build-file.py new file mode 100644 index 000000000..83b4cd8a3 --- /dev/null +++ b/scripts/gen-kotlin-build-file.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +# +# Copyright 2018 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Generates kotlinc module xml file to drive kotlinc + +import argparse +import os + +from ninja_rsp import NinjaRspFileReader + +def parse_args(): + """Parse commandline arguments.""" + + def convert_arg_line_to_args(arg_line): + for arg in arg_line.split(): + if arg.startswith('#'): + return + if not arg.strip(): + continue + yield arg + + parser = argparse.ArgumentParser(fromfile_prefix_chars='@') + parser.convert_arg_line_to_args = convert_arg_line_to_args + parser.add_argument('--out', dest='out', + help='file to which the module.xml contents will be written.') + parser.add_argument('--classpath', dest='classpath', action='append', default=[], + help='classpath to pass to kotlinc.') + parser.add_argument('--name', dest='name', + help='name of the module.') + parser.add_argument('--out_dir', dest='out_dir', + help='directory to which kotlinc will write output files.') + parser.add_argument('--srcs', dest='srcs', action='append', default=[], + help='file containing whitespace separated list of source files.') + parser.add_argument('--common_srcs', dest='common_srcs', action='append', default=[], + help='file containing whitespace separated list of common multiplatform source files.') + + return parser.parse_args() + +def main(): + """Program entry point.""" + args = parse_args() + + if not args.out: + raise RuntimeError('--out argument is required') + + if not args.name: + raise RuntimeError('--name argument is required') + + with open(args.out, 'w') as f: + # Print preamble + f.write('<modules>\n') + f.write(' <module name="%s" type="java-production" outputDir="%s">\n' % (args.name, args.out_dir or '')) + + # Print classpath entries + for c in args.classpath: + for entry in c.split(':'): + path = os.path.abspath(entry) + f.write(' <classpath path="%s"/>\n' % path) + + # For each rsp file, print source entries + for rsp_file in args.srcs: + for src in NinjaRspFileReader(rsp_file): + path = os.path.abspath(src) + if src.endswith('.java'): + f.write(' <javaSourceRoots path="%s"/>\n' % path) + elif src.endswith('.kt'): + f.write(' <sources path="%s"/>\n' % path) + else: + raise RuntimeError('unknown source file type %s' % file) + + for rsp_file in args.common_srcs: + for src in NinjaRspFileReader(rsp_file): + path = os.path.abspath(src) + f.write(' <sources path="%s"/>\n' % path) + f.write(' <commonSources path="%s"/>\n' % path) + + f.write(' </module>\n') + f.write('</modules>\n') + +if __name__ == '__main__': + main() |