1#!/usr/bin/env python
2#
3# Copyright 2017 The Chromium Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import argparse
8import os
9import sys
10
11from util import build_utils
12
13
14def main():
15  args = build_utils.ExpandFileArgs(sys.argv[1:])
16  parser = argparse.ArgumentParser()
17  build_utils.AddDepfileOption(parser)
18  parser.add_argument('--desugar-jar', required=True,
19                      help='Path to Desugar.jar.')
20  parser.add_argument('--input-jar', required=True,
21                      help='Jar input path to include .class files from.')
22  parser.add_argument('--output-jar', required=True,
23                      help='Jar output path.')
24  parser.add_argument('--classpath', required=True,
25                      help='Classpath.')
26  parser.add_argument('--bootclasspath', required=True,
27                      help='Path to javac bootclasspath interface jar.')
28  parser.add_argument('--warnings-as-errors',
29                      action='store_true',
30                      help='Treat all warnings as errors.')
31  options = parser.parse_args(args)
32
33  options.bootclasspath = build_utils.ParseGnList(options.bootclasspath)
34  options.classpath = build_utils.ParseGnList(options.classpath)
35
36  cmd = build_utils.JavaCmd(options.warnings_as_errors) + [
37      '-jar',
38      options.desugar_jar,
39      '--input',
40      options.input_jar,
41      '--output',
42      options.output_jar,
43      '--generate_base_classes_for_default_methods',
44      # Don't include try-with-resources files in every .jar. Instead, they
45      # are included via //third_party/bazel/desugar:desugar_runtime_java.
46      '--desugar_try_with_resources_omit_runtime_classes',
47  ]
48  for path in options.bootclasspath:
49    cmd += ['--bootclasspath_entry', path]
50  for path in options.classpath:
51    cmd += ['--classpath_entry', path]
52  build_utils.CheckOutput(
53      cmd,
54      print_stdout=False,
55      stderr_filter=build_utils.FilterReflectiveAccessJavaWarnings,
56      fail_on_output=options.warnings_as_errors)
57
58  if options.depfile:
59    build_utils.WriteDepfile(options.depfile,
60                             options.output_jar,
61                             inputs=options.bootclasspath + options.classpath)
62
63
64if __name__ == '__main__':
65  sys.exit(main())
66