Index: build/android/gyp/jinja_template.py |
diff --git a/build/android/gyp/jinja_template.py b/build/android/gyp/jinja_template.py |
index 3a93f746fe14891caef4d3aaf6a3377ab2b4fc9e..9e9705cf3a55ce096b10d57a94eef565700ef824 100755 |
--- a/build/android/gyp/jinja_template.py |
+++ b/build/android/gyp/jinja_template.py |
@@ -18,18 +18,31 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '../../../third_party')) |
import jinja2 # pylint: disable=F0401 |
-def ProcessFile(input_filename, output_filename, variables): |
- with codecs.open(input_filename, 'r', 'utf-8') as input_file: |
- input_ = input_file.read() |
- env = jinja2.Environment(undefined=jinja2.StrictUndefined) |
- template = env.from_string(input_) |
- template.filename = os.path.abspath(input_filename) |
+class RecordingFileSystemLoader(jinja2.FileSystemLoader): |
+ '''A FileSystemLoader that stores a list of loaded templates.''' |
+ def __init__(self, searchpath): |
+ jinja2.FileSystemLoader.__init__(self, searchpath) |
+ self.loaded_templates = set() |
+ |
+ def get_source(self, environment, template): |
+ contents, filename, uptodate = jinja2.FileSystemLoader.get_source( |
+ self, environment, template) |
+ self.loaded_templates.add(os.path.relpath(filename)) |
+ return contents, filename, uptodate |
+ |
+ def get_loaded_templates(self): |
+ return list(self.loaded_templates) |
+ |
+ |
+def ProcessFile(env, input_filename, output_filename, variables): |
+ input_rel_path = os.path.relpath(input_filename, build_utils.CHROMIUM_SRC) |
+ template = env.get_template(input_rel_path) |
output = template.render(variables) |
with codecs.open(output_filename, 'w', 'utf-8') as output_file: |
output_file.write(output) |
-def ProcessFiles(input_filenames, inputs_base_dir, outputs_zip, variables): |
+def ProcessFiles(env, input_filenames, inputs_base_dir, outputs_zip, variables): |
with build_utils.TempDir() as temp_dir: |
for input_filename in input_filenames: |
relpath = os.path.relpath(os.path.abspath(input_filename), |
@@ -41,7 +54,7 @@ def ProcessFiles(input_filenames, inputs_base_dir, outputs_zip, variables): |
output_filename = os.path.join(temp_dir, relpath) |
parent_dir = os.path.dirname(output_filename) |
build_utils.MakeDirectory(parent_dir) |
- ProcessFile(input_filename, output_filename, variables) |
+ ProcessFile(env, input_filename, output_filename, variables) |
build_utils.ZipDir(outputs_zip, temp_dir) |
@@ -82,14 +95,17 @@ def main(): |
name, _, value = v.partition('=') |
variables[name] = value |
+ loader = RecordingFileSystemLoader(build_utils.CHROMIUM_SRC) |
+ env = jinja2.Environment(loader=loader, undefined=jinja2.StrictUndefined, |
+ line_comment_prefix='##') |
if options.output: |
- ProcessFile(inputs[0], options.output, variables) |
+ ProcessFile(env, inputs[0], options.output, variables) |
else: |
- ProcessFiles(inputs, options.inputs_base_dir, options.outputs_zip, |
+ ProcessFiles(env, inputs, options.inputs_base_dir, options.outputs_zip, |
variables) |
if options.depfile: |
- deps = inputs + build_utils.GetPythonDependencies() |
+ deps = loader.get_loaded_templates() + build_utils.GetPythonDependencies() |
build_utils.WriteDepfile(options.depfile, deps) |