Commit 5172d096 authored by Harsh Patel's avatar Harsh Patel Committed by Commit Bot

Allow usage of non java executables for proguard

Changed proguard_utils to allow for non java executables to be run.

Change-Id: I193288fbc857573a64a54926aa066d2a03e06698
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1672196Reviewed-by: default avatarSam Maier <smaier@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Commit-Queue: Harsh Patel <harshpa@google.com>
Cr-Commit-Position: refs/heads/master@{#672092}
parent 357184a9
...@@ -278,19 +278,20 @@ def main(args): ...@@ -278,19 +278,20 @@ def main(args):
# method 'int close()' is not being kept as 'a', but remapped to 'c' # method 'int close()' is not being kept as 'a', but remapped to 'c'
_RemoveMethodMappings(options.apply_mapping, f) _RemoveMethodMappings(options.apply_mapping, f)
proguard.mapping(f.name) proguard.mapping(f.name)
with build_utils.TempDir() as d:
input_strings = proguard.build() proguard.tmp_dir(d)
if f.name in input_strings: input_strings = proguard.build()
input_strings[input_strings.index(f.name)] = '$M' if f.name in input_strings:
input_strings[input_strings.index(f.name)] = '$M'
build_utils.CallAndWriteDepfileIfStale(
proguard.CheckOutput, build_utils.CallAndWriteDepfileIfStale(
options, proguard.CheckOutput,
input_paths=input_paths, options,
input_strings=input_strings, input_paths=input_paths,
output_paths=proguard.GetOutputs(), input_strings=input_strings,
depfile_deps=proguard.GetDepfileDeps(), output_paths=proguard.GetOutputs(),
add_pydeps=False) depfile_deps=proguard.GetDepfileDeps(),
add_pydeps=False)
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -54,6 +54,7 @@ class ProguardCmdBuilder(object): ...@@ -54,6 +54,7 @@ class ProguardCmdBuilder(object):
self._mapping_output = None self._mapping_output = None
self._verbose = False self._verbose = False
self._min_api = None self._min_api = None
self._tmp_dir = None
self._disabled_optimizations = [] self._disabled_optimizations = []
def outjar(self, path): def outjar(self, path):
...@@ -69,6 +70,10 @@ class ProguardCmdBuilder(object): ...@@ -69,6 +70,10 @@ class ProguardCmdBuilder(object):
assert os.path.exists(path), path assert os.path.exists(path), path
self._mapping = path self._mapping = path
def tmp_dir(self, path):
assert self._tmp_dir is None
self._tmp_dir = path
def libraryjars(self, paths): def libraryjars(self, paths):
assert self._libraries is None assert self._libraries is None
for p in paths: for p in paths:
...@@ -105,16 +110,29 @@ class ProguardCmdBuilder(object): ...@@ -105,16 +110,29 @@ class ProguardCmdBuilder(object):
assert self._injars is not None assert self._injars is not None
assert self._outjar is not None assert self._outjar is not None
assert self._configs is not None assert self._configs is not None
cmd = [
'java', '-jar', self._proguard_jar_path, _combined_injars_path = os.path.join(self._tmp_dir, 'injars.jar')
'-forceprocessing', _combined_libjars_path = os.path.join(self._tmp_dir, 'libjars.jar')
] _combined_proguard_configs_path = os.path.join(self._tmp_dir,
'includes.txt')
build_utils.MergeZips(_combined_injars_path, self._injars)
build_utils.MergeZips(_combined_libjars_path, self._libraries)
_CombineConfigs(_combined_proguard_configs_path, self.GetConfigs())
if self._proguard_jar_path.endswith('.jar'):
cmd = [
'java', '-jar', self._proguard_jar_path, '-include',
_combined_proguard_configs_path
]
else:
cmd = [self._proguard_jar_path, '@' + _combined_proguard_configs_path]
if self._mapping: if self._mapping:
cmd += ['-applymapping', self._mapping] cmd += ['-applymapping', self._mapping]
if self._libraries: if self._libraries:
cmd += ['-libraryjars', ':'.join(self._libraries)] cmd += ['-libraryjars', _combined_libjars_path]
if self._min_api: if self._min_api:
cmd += [ cmd += [
...@@ -126,22 +144,19 @@ class ProguardCmdBuilder(object): ...@@ -126,22 +144,19 @@ class ProguardCmdBuilder(object):
for optimization in self._disabled_optimizations: for optimization in self._disabled_optimizations:
cmd += [ '-optimizations', '!' + optimization ] cmd += [ '-optimizations', '!' + optimization ]
# Filter to just .class files to avoid warnings about multiple inputs having
# the same files in META_INF/.
cmd += [
'-injars',
':'.join('{}(**.class)'.format(x) for x in self._injars)
]
for config_file in self.GetConfigs():
cmd += ['-include', config_file]
# The output jar must be specified after inputs. # The output jar must be specified after inputs.
cmd += [ cmd += [
'-outjars', self._outjar, '-forceprocessing',
'-printseeds', self._outjar + '.seeds', '-injars',
'-printusage', self._outjar + '.usage', _combined_injars_path,
'-printmapping', self._mapping_output, '-outjars',
self._outjar,
'-printseeds',
self._outjar + '.seeds',
'-printusage',
self._outjar + '.usage',
'-printmapping',
self._mapping_output,
] ]
if self._verbose: if self._verbose:
...@@ -219,6 +234,17 @@ class ProguardCmdBuilder(object): ...@@ -219,6 +234,17 @@ class ProguardCmdBuilder(object):
open(self._outjar + '.mapping', 'a').close() open(self._outjar + '.mapping', 'a').close()
def _CombineConfigs(output_config_path, input_configs):
# Combine all input_configs into one config file at output_config_path.
output_string = ''
for input_config in input_configs:
with open(input_config) as f_input_config:
output_string += f_input_config.read()
with open(output_config_path, "w+") as f_output_config:
f_output_config.write(output_string)
def WriteFlagsFile(configs, out, exclude_generated=False): def WriteFlagsFile(configs, out, exclude_generated=False):
for config in sorted(configs): for config in sorted(configs):
if exclude_generated and config.endswith('.resources.proguard.txt'): if exclude_generated and config.endswith('.resources.proguard.txt'):
......
...@@ -343,7 +343,7 @@ ...@@ -343,7 +343,7 @@
-assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder { -assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder {
public <init>(); public <init>();
public <clinit>(); public <clinit>();
*** build() return null; *** build();
} }
################################################################################ ################################################################################
......
...@@ -60,5 +60,5 @@ ...@@ -60,5 +60,5 @@
-assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder { -assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder {
public <init>(); public <init>();
public <clinit>(); public <clinit>();
*** build() return null; *** build();
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment