13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#!/usr/bin/env python
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# found in the LICENSE file.
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import optparse
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import os
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import sys
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from util import build_utils
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)def DoProguard(options):
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  injars = options.input_path
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  outjars = options.output_path
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  classpath = []
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  for arg in options.classpath:
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    classpath += build_utils.ParseGypList(arg)
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  classpath = list(set(classpath))
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  libraryjars = ':'.join(classpath)
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  # proguard does its own dependency checking, which can be avoided by deleting
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  # the output.
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if os.path.exists(options.output_path):
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    os.remove(options.output_path)
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  proguard_cmd = ['java', '-jar',
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  options.proguard_path,
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  '-injars', injars,
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  '-outjars', outjars,
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  '-libraryjars', libraryjars,
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                  '@' + options.proguard_config]
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  build_utils.CheckOutput(proguard_cmd, print_stdout=True)
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)def main(args):
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  args = build_utils.ExpandFileArgs(args)
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser = optparse.OptionParser()
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  build_utils.AddDepfileOption(parser)
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser.add_option('--proguard-path',
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                    help='Path to the proguard executable.')
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser.add_option('--input-path',
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                    help='Path to the .jar file proguard should run on.')
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser.add_option('--output-path', help='Path to the generated .jar file.')
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser.add_option('--proguard-config',
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                    help='Path to the proguard configuration file.')
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  parser.add_option('--classpath', action='append',
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                    help="Classpath for proguard.")
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  parser.add_option('--stamp', help='Path to touch on success.')
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  options, _ = parser.parse_args(args)
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DoProguard(options)
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if options.depfile:
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    build_utils.WriteDepfile(
5503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        options.depfile,
5603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        build_utils.GetPythonDependencies())
5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if options.stamp:
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    build_utils.Touch(options.stamp)
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)if __name__ == '__main__':
6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  sys.exit(main(sys.argv[1:]))
64