| Index: chrome/browser/resources/settings/flatten_settings.py
|
| diff --git a/chrome/browser/resources/settings/flatten_settings.py b/chrome/browser/resources/settings/flatten_settings.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..609da8b67a49477e40e678f0c4aa987b4d674034
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/settings/flatten_settings.py
|
| @@ -0,0 +1,131 @@
|
| +#!/usr/bin/python
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Runs grit to flatten resources from settings_resources.grd into a temporary
|
| + directory for use by vulcanize/crisper.
|
| +"""
|
| +import os
|
| +import re
|
| +import shutil
|
| +import subprocess
|
| +import sys
|
| +import tempfile
|
| +
|
| +_HERE_PATH = os.path.join(os.path.dirname(__file__))
|
| +_SRC_PATH = os.path.normpath(os.path.join(_HERE_PATH, '..', '..', '..', '..'))
|
| +_POLYMER_PATH = os.path.join(
|
| + _SRC_PATH, 'third_party', 'polymer', 'v1_0', 'components-chromium')
|
| +
|
| +def flatten(target_os='linux'):
|
| + wrap_grd()
|
| +
|
| + sys.path.append(os.path.join(_SRC_PATH, 'tools', 'grit'))
|
| + from grit.format import data_pack
|
| + from grit.tool import build
|
| + from grit import grit_runner
|
| +
|
| + options=grit_runner.Options()
|
| + options.input = os.path.join(_HERE_PATH, 'settings_resources.grd')
|
| +
|
| + temp_dir = tempfile.mkdtemp()
|
| + flattened_dir = tempfile.mkdtemp()
|
| + try:
|
| + builder = build.RcBuilder()
|
| + if target_os == 'linux' or target_os == 'chromeos':
|
| + target = 'linux2';
|
| + elif target_os == 'windows':
|
| + raise Error('Not working yet. Use linux or chromeos on a Linux device.')
|
| + target = 'win32';
|
| + elif target_os == 'mac':
|
| + raise Error('Not working yet. Use linux or chromeos on a Linux device.')
|
| + target = 'darwin';
|
| + else:
|
| + raise Exception('Invalid target OS: %s' % target_os)
|
| +
|
| + args = ['-o', temp_dir, '-t', target_os]
|
| + if target_os == 'chromeos':
|
| + args.extend(['-D', 'chromeos'])
|
| +
|
| + builder.Run(options, args)
|
| +
|
| + resource_ids = dict()
|
| + resources_path = os.path.join(temp_dir, 'grit', 'settings_resources.h')
|
| + with open(resources_path) as resources_file:
|
| + for line in resources_file:
|
| + res = re.match('#define ([^ ]+) (\d+)', line)
|
| + if res:
|
| + resource_ids[int(res.group(2))] = res.group(1)
|
| +
|
| + resource_filenames = dict()
|
| + resources_map_path = os.path.join(temp_dir, 'grit', 'settings_resources_map.cc')
|
| + with open(resources_map_path) as resources_map:
|
| + for line in resources_map:
|
| + res = re.match(' {"([^"]+)", ([^}]+)', line)
|
| + if res:
|
| + resource_filenames[res.group(2)] = res.group(1)
|
| +
|
| + resources_pak_path = os.path.join(temp_dir, 'settings_resources.pak')
|
| + data = data_pack.DataPack.ReadDataPack(resources_pak_path)
|
| +
|
| + for (resource_id, text) in data.resources.iteritems():
|
| + filename = resource_filenames[resource_ids[resource_id]]
|
| + dirname = os.path.join(flattened_dir, os.path.dirname(filename))
|
| + if not os.path.exists(dirname):
|
| + os.makedirs(dirname)
|
| + with open(os.path.join(flattened_dir, filename), 'w') as file:
|
| + file.write(text)
|
| + except:
|
| + print "Error: ", sys.exc_info()[0]
|
| + shutil.rmtree(flattened_dir)
|
| + flattened_dir = None
|
| + finally:
|
| + shutil.rmtree(temp_dir)
|
| + return flattened_dir
|
| +
|
| +
|
| +def wrap_grd():
|
| + grd_filename = os.path.join(_HERE_PATH, 'settings_resources.grd')
|
| + with open(grd_filename) as grd_file:
|
| + grd_text = grd_file.read();
|
| +
|
| + if 'use_vulcanize' in grd_text:
|
| + return
|
| +
|
| + new_grd_texts = []
|
| +
|
| + start_tag = '<structures>'
|
| + start_tag_index = grd_text.index(start_tag)
|
| + new_grd_texts.append(grd_text[:start_tag_index])
|
| + new_grd_texts.append(start_tag)
|
| +
|
| + new_grd_texts.append("""
|
| + <if expr="use_vulcanize">
|
| + <structure name="IDR_SETTINGS_VULCANIZED_HTML"
|
| + file="vulcanized.html"
|
| + type="chrome_html" />
|
| + <structure name="IDR_SETTINGS_CRISPER_JS"
|
| + file="crisper.js"
|
| + flattenhtml="true"
|
| + type="chrome_html" />
|
| + </if>
|
| + <if expr="not use_vulcanize">""")
|
| +
|
| + end_tag = '</structures>'
|
| + end_tag_index = grd_text.index(end_tag)
|
| + new_grd_texts.append(grd_text[start_tag_index + len(start_tag):end_tag_index])
|
| + new_grd_texts.append("""</if>
|
| + """)
|
| + new_grd_texts.append(grd_text[end_tag_index:])
|
| +
|
| + with open(grd_filename, 'w') as grd_file:
|
| + grd_file.write(''.join(new_grd_texts))
|
| +
|
| +
|
| +def main():
|
| + print flatten()
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|