Index: build/android/gyp/proguard.py |
diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py |
index cb547fb97043a091b41370762830618c8dacc33b..5127100a890ce5545f6b3c89c02a43651c6767e3 100755 |
--- a/build/android/gyp/proguard.py |
+++ b/build/android/gyp/proguard.py |
@@ -5,54 +5,32 @@ |
# found in the LICENSE file. |
import optparse |
-import os |
import sys |
from util import build_utils |
+from util import proguard_util |
def DoProguard(options): |
- injars = options.input_path |
- outjars = options.output_path |
+ proguard = proguard_util.ProguardCmdBuilder(options.proguard_path) |
+ proguard.injars(build_utils.ParseGypList(options.input_paths)) |
+ proguard.configs(build_utils.ParseGypList(options.proguard_configs)) |
+ proguard.outjar(options.output_path) |
+ |
+ if options.mapping: |
+ proguard.mapping(options.mapping) |
+ |
+ if options.is_test: |
+ proguard.is_test(True) |
+ |
classpath = [] |
for arg in options.classpath: |
classpath += build_utils.ParseGypList(arg) |
classpath = list(set(classpath)) |
- libraryjars = ':'.join(classpath) |
- # proguard does its own dependency checking, which can be avoided by deleting |
- # the output. |
- if os.path.exists(options.output_path): |
- os.remove(options.output_path) |
- proguard_cmd = ['java', '-jar', |
- options.proguard_path, |
- '-injars', injars, |
- '-outjars', outjars, |
- '-libraryjars', libraryjars, |
- '@' + options.proguard_config] |
- build_utils.CheckOutput(proguard_cmd, print_stdout=True, |
- stdout_filter=FilterProguardOutput) |
- |
- |
-def FilterProguardOutput(output): |
- '''ProGuard outputs boring stuff to stdout (proguard version, jar path, etc) |
- as well as interesting stuff (notes, warnings, etc). If stdout is entirely |
- boring, this method suppresses the output. |
- ''' |
- ignore_patterns = [ |
- 'ProGuard, version ', |
- 'Reading program jar [', |
- 'Reading library jar [', |
- 'Preparing output jar [', |
- ' Copying resources from program jar [', |
- ] |
- for line in output.splitlines(): |
- for pattern in ignore_patterns: |
- if line.startswith(pattern): |
- break |
- else: |
- # line doesn't match any of the patterns; it's probably something worth |
- # printing out. |
- return output |
- return '' |
+ proguard.libraryjars(classpath) |
+ |
+ proguard.CheckOutput() |
+ |
+ return proguard.GetInputs() |
def main(args): |
@@ -61,23 +39,27 @@ def main(args): |
build_utils.AddDepfileOption(parser) |
parser.add_option('--proguard-path', |
help='Path to the proguard executable.') |
- parser.add_option('--input-path', |
- help='Path to the .jar file proguard should run on.') |
+ parser.add_option('--input-paths', |
+ help='Paths to the .jar files proguard should run on.') |
parser.add_option('--output-path', help='Path to the generated .jar file.') |
- parser.add_option('--proguard-config', |
- help='Path to the proguard configuration file.') |
+ parser.add_option('--proguard-configs', |
+ help='Paths to proguard configuration files.') |
+ parser.add_option('--mapping', help='Path to proguard mapping to apply.') |
+ parser.add_option('--is-test', action='store_true', |
+ help='If true, extra proguard options for instrumentation tests will be ' |
+ 'added.') |
parser.add_option('--classpath', action='append', |
- help="Classpath for proguard.") |
+ help='Classpath for proguard.') |
parser.add_option('--stamp', help='Path to touch on success.') |
options, _ = parser.parse_args(args) |
- DoProguard(options) |
+ inputs = DoProguard(options) |
if options.depfile: |
build_utils.WriteDepfile( |
options.depfile, |
- build_utils.GetPythonDependencies()) |
+ inputs + build_utils.GetPythonDependencies()) |
if options.stamp: |
build_utils.Touch(options.stamp) |