Chromium Code Reviews| Index: build/android/gyp/generate_v14_compatible_resources.py |
| diff --git a/build/android/gyp/generate_v14_compatible_resources.py b/build/android/gyp/generate_v14_compatible_resources.py |
| index 6b848082adc544605f1bb88269aa9c59229e0296..e7efc6247535ec248a21c8ff4688200816c98985 100755 |
| --- a/build/android/gyp/generate_v14_compatible_resources.py |
| +++ b/build/android/gyp/generate_v14_compatible_resources.py |
| @@ -98,16 +98,17 @@ def ErrorIfStyleResourceExistsInDir(input_dir): |
| if HasStyleResource(dom): |
| raise Exception('error: style file ' + input_filename + |
| ' should be under ' + input_dir + |
| - '-v17 directory. Please refer to crbug.com/243952 ' |
| - 'for the details.') |
| + '-v17 directory. Please refer to ' |
| + 'http://crbug.com/243952 for the details.') |
| -def GenerateV14LayoutResourceDom(dom, filename): |
| +def GenerateV14LayoutResourceDom(dom, filename_for_warning): |
|
newt (away)
2013/07/08 22:55:49
it's OK to print both a warning and an error if a
Kibeom Kim (inactive)
2013/07/09 00:20:50
Looks like we have to skip warning for pre-v17 bec
newt (away)
2013/07/09 00:52:49
Where is that call? I only see this method called
|
| """Convert layout resource to API 14 compatible layout resource. |
| Args: |
| dom: parsed minidom object to be modified. |
| - filename: file name to display in case we print warnings. |
| + filename_for_warning: file name to display in case we print warnings. |
| + If None, do not print warning. |
| Returns: |
| True if dom is modified, False otherwise. |
| """ |
| @@ -125,28 +126,35 @@ def GenerateV14LayoutResourceDom(dom, filename): |
| element.setAttribute(ATTRIBUTES_TO_MAP[name], value) |
| del element.attributes[name] |
| is_modified = True |
| - else: |
| - WarnIfDeprecatedAttribute(name, value, filename) |
| + elif filename_for_warning: |
| + WarnIfDeprecatedAttribute(name, value, filename_for_warning) |
| return is_modified |
| -def GenerateV14StyleResourceDom(dom, filename): |
| +def GenerateV14StyleResourceDom(dom, filename_for_warning): |
| """Convert style resource to API 14 compatible style resource. |
| Args: |
| dom: parsed minidom object to be modified. |
| - filename: file name to display in case we print warnings. |
| + filename_for_warning: file name to display in case we print warnings. |
| + If None, do not print warning. |
| + Returns: |
| + True if dom is modified, False otherwise. |
| """ |
| + is_modified = False |
| + |
| for style_element in dom.getElementsByTagName('style'): |
| for item_element in style_element.getElementsByTagName('item'): |
| name = item_element.attributes['name'].value |
| value = item_element.childNodes[0].nodeValue |
| if name in ATTRIBUTES_TO_MAP: |
| item_element.attributes['name'].value = ATTRIBUTES_TO_MAP[name] |
| - else: |
| - WarnIfDeprecatedAttribute(name, value, filename) |
| + is_modified = True |
| + elif filename_for_warning: |
| + WarnIfDeprecatedAttribute(name, value, filename_for_warning) |
| + return is_modified |
| def GenerateV14LayoutResource(input_filename, output_v14_filename, |
| output_v17_filename): |
| @@ -201,6 +209,17 @@ def GenerateV14StyleResourcesInDir(input_dir, output_v14_dir): |
| output_v14_filename = os.path.join(output_v14_dir, rel_filename) |
| GenerateV14StyleResource(input_filename, output_v14_filename) |
| +def VerifyNoRtlAttributeInDir(input_dir): |
|
newt (away)
2013/07/08 22:55:49
how about "VerifyV14StyleResourcesInDir"?
Kibeom Kim (inactive)
2013/07/09 00:20:50
Done.
|
| + for input_filename in build_utils.FindInDirectory(input_dir, '*.xml'): |
| + dom = minidom.parse(input_filename) |
| + if (GenerateV14LayoutResourceDom(dom, None) or |
|
newt (away)
2013/07/08 22:55:49
it's a bit odd to run both of these methods on the
Kibeom Kim (inactive)
2013/07/09 00:20:50
Done.
|
| + GenerateV14StyleResourceDom(dom, None)): |
| + raise Exception('error : ' + input_filename + |
| + ' has an RTL attribute, i.e., attribute that has "start"' |
| + 'or "end" in its name. Pre-v17 resources should not ' |
| + 'include it because it can cause crashes on certain ' |
| + 'devices. Please refer to http://crbug.com/243952 ' |
| + 'for the details.') |
| def ParseArgs(): |
| """Parses command line options. |
| @@ -216,6 +235,9 @@ def ParseArgs(): |
| help='output directory into which ' |
| 'v14 compatible resources will be generated') |
| parser.add_option('--stamp', help='File to touch on success') |
| + parser.add_option('--only-verify', help='Do not generate v14 resources. ' |
|
newt (away)
2013/07/08 22:55:49
"Do not generate v14 resources. Instead, just veri
Kibeom Kim (inactive)
2013/07/09 00:20:50
Done.
|
| + 'Only verify it and raise an error if the current resource can ' |
| + 'cause crashes on certain devices.') |
|
newt (away)
2013/07/08 22:55:49
use 'action="store_true"' here. then options.only_
Kibeom Kim (inactive)
2013/07/09 00:20:50
Done.
|
| options, args = parser.parse_args() |
| @@ -230,6 +252,7 @@ def ParseArgs(): |
| def main(argv): |
| options = ParseArgs() |
| + only_verify = bool(options.only_verify) and int(options.only_verify) > 0 |
|
newt (away)
2013/07/08 22:55:49
remove this
Kibeom Kim (inactive)
2013/07/09 00:20:50
Done.
|
| build_utils.DeleteDirectory(options.res_v14_compatibility_dir) |
| build_utils.MakeDirectory(options.res_v14_compatibility_dir) |
| @@ -254,29 +277,35 @@ def main(argv): |
| if 'ldrtl' in qualifiers: |
| continue |
| - # We also need to copy the original v17 resource to *-v17 directory |
| - # because the generated v14 resource will hide the original resource. |
| - input_dir = os.path.join(options.res_dir, name) |
| - output_v14_dir = os.path.join(options.res_v14_compatibility_dir, name) |
| - output_v17_dir = os.path.join(options.res_v14_compatibility_dir, name + |
| - '-v17') |
| - |
| - # We only convert layout resources under layout*/, xml*/, |
| - # and style resources under values*/. |
| - if resource_type in ('layout', 'xml'): |
| - if not api_level_qualifier: |
| - GenerateV14LayoutResourcesInDir(input_dir, output_v14_dir, |
| - output_v17_dir) |
| - elif resource_type == 'values': |
| - if api_level_qualifier == 'v17': |
| - output_qualifiers = qualifiers[:] |
| - del output_qualifiers[api_level_qualifier_index] |
| - output_v14_dir = os.path.join(options.res_v14_compatibility_dir, |
| - '-'.join([resource_type] + |
| - output_qualifiers)) |
| - GenerateV14StyleResourcesInDir(input_dir, output_v14_dir) |
| - elif not api_level_qualifier: |
| - ErrorIfStyleResourceExistsInDir(input_dir) |
| + input_dir = os.path.abspath(os.path.join(options.res_dir, name)) |
| + |
| + if only_verify: |
| + if not api_level_qualifier or int(api_level_qualifier[1:]) < 17: |
| + if resource_type in ('layout', 'xml', 'values'): |
| + VerifyNoRtlAttributeInDir(input_dir) |
| + else: |
| + # We also need to copy the original v17 resource to *-v17 directory |
| + # because the generated v14 resource will hide the original resource. |
| + output_v14_dir = os.path.join(options.res_v14_compatibility_dir, name) |
| + output_v17_dir = os.path.join(options.res_v14_compatibility_dir, name + |
| + '-v17') |
| + |
| + # We only convert layout resources under layout*/, xml*/, |
| + # and style resources under values*/. |
| + if resource_type in ('layout', 'xml'): |
| + if not api_level_qualifier: |
| + GenerateV14LayoutResourcesInDir(input_dir, output_v14_dir, |
| + output_v17_dir) |
| + elif resource_type == 'values': |
| + if api_level_qualifier == 'v17': |
| + output_qualifiers = qualifiers[:] |
| + del output_qualifiers[api_level_qualifier_index] |
| + output_v14_dir = os.path.join(options.res_v14_compatibility_dir, |
| + '-'.join([resource_type] + |
| + output_qualifiers)) |
| + GenerateV14StyleResourcesInDir(input_dir, output_v14_dir) |
| + elif not api_level_qualifier: |
| + ErrorIfStyleResourceExistsInDir(input_dir) |
| if options.stamp: |
| build_utils.Touch(options.stamp) |