#!/usr/bin/env python # # Copyright (c) 2015 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. """Generate ResourceRewriter.java which overwrites the given package's resource id. """ import argparse import os import sys import zipfile from util import build_utils # Import jinja2 from third_party/jinja2 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..', 'third_party'))) import jinja2 RESOURCE_REWRITER_JAVA="ResourceRewriter.java" RESOURCE_REWRITER="""/* AUTO-GENERATED FILE. DO NOT MODIFY. */ package {{ package }}; /** * Helper class used to fix up resource ids. */ class ResourceRewriter { /** * Rewrite the R 'constants' for the WebView. */ public static void rewriteRValues(final int packageId) { {% for res_package in res_packages %} {{ res_package }}.R.onResourcesLoaded(packageId); {% endfor %} } } """ def ParseArgs(args): """Parses command line options. Returns: An Namespace from argparse.parse_args() """ parser = argparse.ArgumentParser(prog='generate_resource_rewriter') parser.add_argument('--package-name', required=True, help='The package name of ResourceRewriter.') parser.add_argument('--dep-packages', required=True, help='A list of packages whose resource id will be' 'overwritten in ResourceRewriter.') parser.add_argument('--output-dir', help='A output directory of generated' ' ResourceRewriter.java') parser.add_argument('--srcjar', help='The path of generated srcjar which has' ' ResourceRewriter.java') return parser.parse_args(args) def CreateResourceRewriter(package, res_packages, output_dir): build_utils.MakeDirectory(output_dir) java_path = os.path.join(output_dir, RESOURCE_REWRITER_JAVA) template = jinja2.Template(RESOURCE_REWRITER, trim_blocks=True, lstrip_blocks=True) output = template.render(package=package, res_packages=res_packages) with open(java_path, 'w') as f: f.write(output) def CreateResourceRewriterSrcjar(package, res_packages, srcjar_path): with build_utils.TempDir() as temp_dir: output_dir = os.path.join(temp_dir, *package.split('.')) CreateResourceRewriter(package, res_packages, output_dir) build_utils.DoZip([os.path.join(output_dir, RESOURCE_REWRITER_JAVA)], srcjar_path, temp_dir) def main(): options = ParseArgs(build_utils.ExpandFileArgs(sys.argv[1:])) package = options.package_name if options.output_dir: output_dir = os.path.join(options.output_dir, *package.split('.')) CreateResourceRewriter( package, build_utils.ParseGnList(options.dep_packages), output_dir) else: CreateResourceRewriterSrcjar( package, build_utils.ParseGnList(options.dep_packages), options.srcjar) return 0 if __name__ == '__main__': sys.exit(main())