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