Merge changes Ib1d201b5,Ib43f7f45,Ifdae480f,Icc411534,I98a31358, ...

* changes:
  gn2bp: Merge if block which is splitted without necessity
  gn2bp: Fix _sanitize_eval_arg and remove workaround codes
  gn2bp: sanitize eval arg from VersionSanitizer
  gn2bp: sanitize file path from VersionSanitizer
  gn2bp: Move output arg to VersionSanitizer
  gn2bp: Add VersionSanitizer
  gn2bp: Move --sources-exclusions to JniRegistrationGeneratorSanitizer
  gn2bp: Move --sources-files to JniRegistrationGeneratorSanitizer
  gn2bp: Move file path sanitize to the JniRegistrationGeneratorSanitizer
  gn2bp: Add JniRegistrationGeneratorSanitizer
  gn2bp: Move --input_file to JniGeneratorSanitizer
  gn2bp: Add _update_list_arg
  gn2bp: Update the definition of value arg and list arg
This commit is contained in:
Mohannad Farrag
2022-12-01 13:17:16 +00:00
committed by Gerrit Code Review
2 changed files with 79 additions and 59 deletions

View File

@@ -7224,8 +7224,6 @@ cc_genrule {
"--header-path " + "--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " + "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " + "--manual_jni_registration " +
" " +
" " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " + ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h", "$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [ out: [
@@ -7535,8 +7533,6 @@ cc_genrule {
"--header-path " + "--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " + "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " + "--manual_jni_registration " +
" " +
" " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " + ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h", "$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [ out: [
@@ -7846,8 +7842,6 @@ cc_genrule {
"--header-path " + "--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " + "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " + "--manual_jni_registration " +
" " +
" " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " + ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h", "$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [ out: [
@@ -8157,8 +8151,6 @@ cc_genrule {
"--header-path " + "--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " + "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " + "--manual_jni_registration " +
" " +
" " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " + ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h", "$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [ out: [
@@ -8594,7 +8586,6 @@ cc_genrule {
"$(location chrome/VERSION) " + "$(location chrome/VERSION) " +
"-e " + "-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " + "VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
" " +
"-o " + "-o " +
"$(out) " + "$(out) " +
"$(location components/cronet/version.h.in)", "$(location components/cronet/version.h.in)",
@@ -8620,7 +8611,6 @@ cc_genrule {
"$(location chrome/VERSION) " + "$(location chrome/VERSION) " +
"-e " + "-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " + "VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
" " +
"-o " + "-o " +
"$(out) " + "$(out) " +
"$(location components/cronet/version.h.in)", "$(location components/cronet/version.h.in)",
@@ -8646,7 +8636,6 @@ cc_genrule {
"$(location chrome/VERSION) " + "$(location chrome/VERSION) " +
"-e " + "-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " + "VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
" " +
"-o " + "-o " +
"$(out) " + "$(out) " +
"$(location components/cronet/version.h.in)", "$(location components/cronet/version.h.in)",
@@ -8672,7 +8661,6 @@ cc_genrule {
"$(location chrome/VERSION) " + "$(location chrome/VERSION) " +
"-e " + "-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " + "VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
" " +
"-o " + "-o " +
"$(out) " + "$(out) " +
"$(location components/cronet/version.h.in)", "$(location components/cronet/version.h.in)",

View File

@@ -630,19 +630,35 @@ class BaseActionSanitizer():
# - flags (--flag) # - flags (--flag)
# - value args (--arg value) # - value args (--arg value)
# - list args (--arg value1 --arg value2) # - list args (--arg value1 --arg value2)
# Note that the set of list args contains the set of value args.
# value args must have exactly one arg value pair but list args could have one arg value pair.
# This is because list args with one arg value pair and value args can not be distinguished only
# from the desc.json
# Some functions provide special implementations for each type, while others # Some functions provide special implementations for each type, while others
# work on all of them. # work on all of them.
def _has_arg(self, arg): def _has_arg(self, arg):
return arg in self.target.args return arg in self.target.args
# Whether an arg has multiple occurences (e.g. see argparse action='append') def _get_arg_indices(self, target_arg):
def _is_list_arg(self, arg): return [i for i, arg in enumerate(self.target.args) if arg == target_arg]
return operator.countOf(arg, self.target.args) > 1
# Whether an arg value pair appears once or more times
def _is_list_arg(self, arg):
indices = self._get_arg_indices(arg)
return len(indices) > 0 and all([not self.target.args[i + 1].startswith('--') for i in indices])
def _update_list_arg(self, arg, func, throw_if_absent = True):
if self._should_fail_silently(arg, throw_if_absent):
return
assert(self._is_list_arg(arg))
indices = self._get_arg_indices(arg)
for i in indices:
self._set_arg_at(i + 1, func(self.target.args[i + 1]))
# Whether an arg value pair appears exactly once
def _is_value_arg(self, arg): def _is_value_arg(self, arg):
# TODO: we'll probably need a set of helper functions to deal with append if operator.countOf(self.target.args, arg) != 1:
# args as well. return False
assert(not self._is_list_arg(arg))
i = self.target.args.index(arg) i = self.target.args.index(arg)
return not self.target.args[i + 1].startswith('--') return not self.target.args[i + 1].startswith('--')
@@ -697,6 +713,10 @@ class BaseActionSanitizer():
filepath = re.sub('^gen', '$(genDir)', filepath) filepath = re.sub('^gen', '$(genDir)', filepath)
return filepath return filepath
# Iterate through all the args and apply function
def _update_all_args(self, func):
self.target.args = [func(arg) for arg in self.target.args]
def get_args(self): def get_args(self):
return self.target.args return self.target.args
@@ -712,6 +732,13 @@ class WriteBuildFlagHeaderSanitizer(BaseActionSanitizer):
return super().get_args() return super().get_args()
class JniGeneratorSanitizer(BaseActionSanitizer): class JniGeneratorSanitizer(BaseActionSanitizer):
def _add_location_tag_to_filepath(self, arg):
if not arg.endswith('.class'):
# --input_file supports both .class specifiers or source files as arguments.
# Only source files need to be wrapped inside a $(location <label>) tag.
arg = self._add_location_tag(arg)
return arg
def get_args(self): def get_args(self):
self._update_value_arg('--jar_file', self._sanitize_filepath, False) self._update_value_arg('--jar_file', self._sanitize_filepath, False)
self._update_value_arg('--jar_file', self._add_location_tag, False) self._update_value_arg('--jar_file', self._add_location_tag, False)
@@ -720,8 +747,45 @@ class JniGeneratorSanitizer(BaseActionSanitizer):
self._update_value_arg('--output_dir', self._sanitize_filepath) self._update_value_arg('--output_dir', self._sanitize_filepath)
self._update_value_arg('--includes', self._sanitize_filepath, False) self._update_value_arg('--includes', self._sanitize_filepath, False)
self._delete_value_arg('--prev_output_dir', False) self._delete_value_arg('--prev_output_dir', False)
self._update_list_arg('--input_file', self._sanitize_filepath)
self._update_list_arg('--input_file', self._add_location_tag_to_filepath)
return super().get_args() return super().get_args()
class JniRegistrationGeneratorSanitizer(BaseActionSanitizer):
def get_args(self):
self._update_value_arg('--depfile', self._sanitize_filepath)
self._update_value_arg('--srcjar-path', self._sanitize_filepath)
self._update_value_arg('--header-path', self._sanitize_filepath)
self._set_value_arg('--sources-files', '$(genDir)/java.sources')
# update_jni_registration_module removes them from the srcs of the module
# It might be better to remove sources by '--sources-exclusions'
self._delete_value_arg('--sources-exclusions')
return super().get_args()
class VersionSanitizer(BaseActionSanitizer):
def _sanitize_version_filepath(self, arg):
if arg.startswith('../../'):
arg = self._sanitize_filepath(arg)
arg = self._add_location_tag(arg)
return arg
def _sanitize_eval(self):
assert (self._is_value_arg('-e'))
# arg for -e EVAL option should be passed in -e PATCH_HI=int(PATCH)//256 format.
index = self.target.args.index('-e')
value = '%s=\'%s\'' % (self.target.args[index + 1], self.target.args[index + 2])
# escape '"' in the value
value = value.replace('"', r'\"')
self._set_arg_at(index + 1, value)
self.target.args.pop(index + 2)
def get_args(self):
self._set_value_arg('-o', '$(out)')
# args for the version.py contain file path without leading --arg key. So apply sanitize
# function for all the args.
self._update_all_args(self._sanitize_version_filepath)
self._sanitize_eval()
return super().get_args()
def get_action_sanitizer(target): def get_action_sanitizer(target):
if target.script == "//build/write_buildflag_header.py": if target.script == "//build/write_buildflag_header.py":
@@ -730,6 +794,10 @@ def get_action_sanitizer(target):
return WriteBuildDateHeaderSanitizer(target) return WriteBuildDateHeaderSanitizer(target)
elif target.script == '//base/android/jni_generator/jni_generator.py': elif target.script == '//base/android/jni_generator/jni_generator.py':
return JniGeneratorSanitizer(target) return JniGeneratorSanitizer(target)
elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
return JniRegistrationGeneratorSanitizer(target)
elif target.script == "//build/util/version.py":
return VersionSanitizer(target)
else: else:
# TODO: throw exception here once all script hacks have been converted. # TODO: throw exception here once all script hacks have been converted.
return BaseActionSanitizer(target) return BaseActionSanitizer(target)
@@ -775,19 +843,13 @@ def create_action_module(blueprint, target):
target.args = sanitizer.get_args() target.args = sanitizer.get_args()
if target.script == '//base/android/jni_generator/jni_generator.py': if target.script == '//base/android/jni_generator/jni_generator.py':
for i, val in enumerate(target.args):
if val == '--input_file':
# --input_file supports both .class specifiers or source files as arguments.
# Only source files need to be wrapped inside a $(location <label>) tag.
if re.match('.*\.class$', target.args[i + 1]):
continue
# replace --input_file ../../... with --input_file $(location ...)
# TODO: put inside function
filename = re.sub('^\.\./\.\./', '', target.args[i + 1])
target.args[i + 1] = '$(location %s)' % filename
# fix target.output directory to match #include statements. # fix target.output directory to match #include statements.
target.outputs = [re.sub('^jni_headers/', '', out) for out in target.outputs] target.outputs = [re.sub('^jni_headers/', '', out) for out in target.outputs]
# android_jar.classes should be part of the tools as it list implicit classes
# for the script to generate JNI headers.
module.tool_files.add("base/android/jni_generator/android_jar.classes")
elif target.script == '//base/android/jni_generator/jni_registration_generator.py': elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
# jni_registration_generator.py pulls in some config dependencies that we # jni_registration_generator.py pulls in some config dependencies that we
# do not handle. Remove them. # do not handle. Remove them.
@@ -795,16 +857,6 @@ def create_action_module(blueprint, target):
target.deps.clear() target.deps.clear()
target.inputs = [file for file in target.inputs if not file.startswith('//out/')] target.inputs = [file for file in target.inputs if not file.startswith('//out/')]
for i, val in enumerate(target.args):
if val in ['--depfile', '--srcjar-path', '--header-path']:
target.args[i + 1] = re.sub('^gen', '$(genDir)', target.args[i + 1])
if val == '--sources-files':
target.args[i + 1] = '$(genDir)/java.sources'
elif val == '--sources-exclusions':
# update_jni_registration_module removes them from the srcs of the module
# It might be better to remove sources by '--sources-exclusions'
target.args[i] = ''
target.args[i + 1] = ''
elif target.script == "//net/tools/dafsa/make_dafsa.py": elif target.script == "//net/tools/dafsa/make_dafsa.py":
# This script generates .cc files but source (registry_controlled_domain.cc) in the target that # This script generates .cc files but source (registry_controlled_domain.cc) in the target that
# depends on this target includes .cc file this script generates. # depends on this target includes .cc file this script generates.
@@ -812,16 +864,6 @@ def create_action_module(blueprint, target):
elif target.script == "//build/util/version.py": elif target.script == "//build/util/version.py":
# android_chrome_version.py is not specified in anywhere but version.py imports this file # android_chrome_version.py is not specified in anywhere but version.py imports this file
module.tool_files.add('build/util/android_chrome_version.py') module.tool_files.add('build/util/android_chrome_version.py')
for i, val in enumerate(target.args):
if val.startswith('../../'):
filename = re.sub('^\.\./\.\./', '', val)
target.args[i] = '$(location %s)' % filename
elif val == '-e':
# arg for -e EVAL option should be passed in -e PATCH_HI=int(PATCH)//256 format.
target.args[i + 1] = '%s=\'%s\'' % (target.args[i + 1], target.args[i + 2])
target.args[i + 2] = ''
elif val == '-o':
target.args[i + 1] = '$(out)'
script = gn_utils.label_to_path(target.script) script = gn_utils.label_to_path(target.script)
module.tool_files.add(script) module.tool_files.add(script)
@@ -834,12 +876,6 @@ def create_action_module(blueprint, target):
# Replace {{response_file_contents}} with /dev/stdin # Replace {{response_file_contents}} with /dev/stdin
target.args = ['/dev/stdin' if it == response_file else it for it in target.args] target.args = ['/dev/stdin' if it == response_file else it for it in target.args]
# escape " and \$ in target.args.
# once all actions are properly implemented, this may not be necessary anymore.
# TODO: is this the right place to do this?
target.args = [arg.replace('"', r'\"') for arg in target.args]
target.args = [arg.replace(r'\$', r'\\$') for arg in target.args]
# put all args on a new line for better diffs. # put all args on a new line for better diffs.
NEWLINE = ' " +\n "' NEWLINE = ' " +\n "'
arg_string = NEWLINE.join(target.args) arg_string = NEWLINE.join(target.args)
@@ -868,11 +904,7 @@ def create_action_module(blueprint, target):
module.out.update(target.outputs) module.out.update(target.outputs)
if target.script == "//base/android/jni_generator/jni_generator.py": if target.script == '//base/android/jni_generator/jni_registration_generator.py':
# android_jar.classes should be part of the tools as it list implicit classes
# for the script to generate JNI headers.
module.tool_files.add("base/android/jni_generator/android_jar.classes")
elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
# jni_registration_generator.py doesn't work with python2 # jni_registration_generator.py doesn't work with python2
module.cmd = "python3 " + module.cmd module.cmd = "python3 " + module.cmd
# Path in the original sources file does not work in genrule. # Path in the original sources file does not work in genrule.