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):
# method 'int close()' is not being kept as 'a', but remapped to 'c'
_RemoveMethodMappings(options.apply_mapping, f)
proguard.mapping(f.name)
input_strings = proguard.build()
if f.name in input_strings:
input_strings[input_strings.index(f.name)] = '$M'
build_utils.CallAndWriteDepfileIfStale(
proguard.CheckOutput,
options,
input_paths=input_paths,
input_strings=input_strings,
output_paths=proguard.GetOutputs(),
depfile_deps=proguard.GetDepfileDeps(),
add_pydeps=False)
with build_utils.TempDir() as d:
proguard.tmp_dir(d)
input_strings = proguard.build()
if f.name in input_strings:
input_strings[input_strings.index(f.name)] = '$M'
build_utils.CallAndWriteDepfileIfStale(
proguard.CheckOutput,
options,
input_paths=input_paths,
input_strings=input_strings,
output_paths=proguard.GetOutputs(),
depfile_deps=proguard.GetDepfileDeps(),
add_pydeps=False)
if __name__ == '__main__':
......
......@@ -54,6 +54,7 @@ class ProguardCmdBuilder(object):
self._mapping_output = None
self._verbose = False
self._min_api = None
self._tmp_dir = None
self._disabled_optimizations = []
def outjar(self, path):
......@@ -69,6 +70,10 @@ class ProguardCmdBuilder(object):
assert os.path.exists(path), path
self._mapping = path
def tmp_dir(self, path):
assert self._tmp_dir is None
self._tmp_dir = path
def libraryjars(self, paths):
assert self._libraries is None
for p in paths:
......@@ -105,16 +110,29 @@ class ProguardCmdBuilder(object):
assert self._injars is not None
assert self._outjar is not None
assert self._configs is not None
cmd = [
'java', '-jar', self._proguard_jar_path,
'-forceprocessing',
]
_combined_injars_path = os.path.join(self._tmp_dir, 'injars.jar')
_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:
cmd += ['-applymapping', self._mapping]
if self._libraries:
cmd += ['-libraryjars', ':'.join(self._libraries)]
cmd += ['-libraryjars', _combined_libjars_path]
if self._min_api:
cmd += [
......@@ -126,22 +144,19 @@ class ProguardCmdBuilder(object):
for optimization in self._disabled_optimizations:
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.
cmd += [
'-outjars', self._outjar,
'-printseeds', self._outjar + '.seeds',
'-printusage', self._outjar + '.usage',
'-printmapping', self._mapping_output,
'-forceprocessing',
'-injars',
_combined_injars_path,
'-outjars',
self._outjar,
'-printseeds',
self._outjar + '.seeds',
'-printusage',
self._outjar + '.usage',
'-printmapping',
self._mapping_output,
]
if self._verbose:
......@@ -219,6 +234,17 @@ class ProguardCmdBuilder(object):
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):
for config in sorted(configs):
if exclude_generated and config.endswith('.resources.proguard.txt'):
......
......@@ -343,7 +343,7 @@
-assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder {
public <init>();
public <clinit>();
*** build() return null;
*** build();
}
################################################################################
......
......@@ -60,5 +60,5 @@
-assumenosideeffects class com.google.android.gms.cast.framework.media.CastMediaOptions$Builder {
public <init>();
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