summaryrefslogtreecommitdiff
path: root/deps/v8/build/android/gyp/generate_resource_rewriter.py
blob: ba635a293d5cb34736b922c14f3c607a42cc5788 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/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())