Chromium Code Reviews| Index: build/android/gyp/util/proguard_util.py |
| diff --git a/build/android/gyp/util/proguard_util.py b/build/android/gyp/util/proguard_util.py |
| index 901cd9f2a8f30c5491986492cc3a4575776ef8a2..c0f967137b403fd9a850db7c87ef49a4671ac7e1 100644 |
| --- a/build/android/gyp/util/proguard_util.py |
| +++ b/build/android/gyp/util/proguard_util.py |
| @@ -32,45 +32,55 @@ class ProguardCmdBuilder(object): |
| def __init__(self, proguard_jar): |
| assert os.path.exists(proguard_jar) |
| self._proguard_jar_path = proguard_jar |
| - self._test = None |
| + self._tested_apk_info_path = None |
| + self._tested_apk_info = None |
| self._mapping = None |
| self._libraries = None |
| self._injars = None |
| self._configs = None |
| self._outjar = None |
| + self._cmd = None |
| def outjar(self, path): |
| + assert self._cmd is None |
| assert self._outjar is None |
| self._outjar = path |
| - def is_test(self, enable): |
| - assert self._test is None |
| - self._test = enable |
| + def is_test(self, tested_apk_info_path): |
| + assert self._cmd is None |
| + assert self._tested_apk_info is None |
| + self._tested_apk_info_path = tested_apk_info_path |
| def mapping(self, path): |
| + assert self._cmd is None |
| assert self._mapping is None |
| assert os.path.exists(path), path |
| self._mapping = path |
| def libraryjars(self, paths): |
| + assert self._cmd is None |
| assert self._libraries is None |
| for p in paths: |
| assert os.path.exists(p), p |
| self._libraries = paths |
| def injars(self, paths): |
| + assert self._cmd is None |
| assert self._injars is None |
| for p in paths: |
| assert os.path.exists(p), p |
| self._injars = paths |
| def configs(self, paths): |
| + assert self._cmd is None |
| assert self._configs is None |
| for p in paths: |
| assert os.path.exists(p), p |
| self._configs = paths |
| def build(self): |
| + if self._cmd is not None: |
| + return |
| assert self._injars is not None |
| assert self._outjar is not None |
| assert self._configs is not None |
| @@ -78,7 +88,16 @@ class ProguardCmdBuilder(object): |
| 'java', '-jar', self._proguard_jar_path, |
| '-forceprocessing', |
| ] |
| - if self._test: |
| + if self._tested_apk_info_path: |
| + assert len(self._configs) == 1, 'DO NOT SUBMIT' |
|
newt (away)
2015/05/29 01:43:04
'DO NOT SUBMIT' ?
|
| + tested_apk_info = build_utils.ReadJson(self._tested_apk_info_path) |
| + self._configs += tested_apk_info['configs'] |
| + self._injars = [ |
| + p for p in self._injars if not p in tested_apk_info['inputs']] |
| + if not self._libraries: |
| + self._libraries = [] |
| + self._libraries += tested_apk_info['inputs'] |
| + self._mapping = tested_apk_info['mapping'] |
| cmd += [ |
| '-dontobfuscate', |
| '-dontoptimize', |
| @@ -111,18 +130,37 @@ class ProguardCmdBuilder(object): |
| '-printusage', self._outjar + '.usage', |
| '-printmapping', self._outjar + '.mapping', |
| ] |
| - return cmd |
| + self._cmd = cmd |
| def GetInputs(self): |
| + self.build() |
| inputs = [self._proguard_jar_path] + self._configs + self._injars |
| if self._mapping: |
| inputs.append(self._mapping) |
| if self._libraries: |
| inputs += self._libraries |
| + if self._tested_apk_info_path: |
| + inputs += [self._tested_apk_info_path] |
| return inputs |
| def CheckOutput(self): |
| - build_utils.CheckOutput(self.build(), print_stdout=True, |
| + self.build() |
| + # Proguard will skip writing these files if they would be empty. Create |
| + # empty versions of them all now so that they are updated as the build |
| + # expects. |
| + open(self._outjar + '.dump', 'w').close() |
|
newt (away)
2015/05/29 01:43:04
Using 'w' will delete the existing contents of the
cjhopman
2015/06/30 23:26:11
Yeah, that's intentional.
|
| + open(self._outjar + '.seeds', 'w').close() |
| + open(self._outjar + '.usage', 'w').close() |
| + open(self._outjar + '.mapping', 'w').close() |
| + build_utils.CheckOutput(self._cmd, print_stdout=True, |
| stdout_filter=FilterProguardOutput) |
| + this_info = { |
| + 'inputs': self._injars, |
| + 'configs': self._configs, |
| + 'mapping': self._outjar + '.mapping', |
| + } |
| + |
| + build_utils.WriteJson(this_info, self._outjar + '.info') |
| + |