# Copyright 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.

# Declare a target for processing a template.
#
# Variables
#   input: The template file to be processed.
#   output: Where to save the result.
#   variables: A list of variables to make available to the template
#     processing environment, e.g. ["name=foo", "color=red"].
#
# Example
#   file_template("chrome_shell_manifest") {
#     input = "shell/java/AndroidManifest.xml"
#     output = "$target_gen_dir/AndroidManifest.xml"
#     variables = "app_name=chrome_shell app_version=1"
#   }
template("file_template") {
  set_sources_assignment_filter([])

  if (defined(invoker.testonly)) {
    testonly = invoker.testonly
  }

  assert(defined(invoker.input), "The input file must be specified")
  assert(defined(invoker.output), "The output file must be specified")
  assert(defined(invoker.variables),
         "The variable used for substitution in templates must be specified")

  variables = invoker.variables

  action(target_name) {
    if (defined(invoker.visibility)) {
      visibility = invoker.visibility
    }

    script = "//build/android/gyp/jinja_template.py"
    depfile = "$target_gen_dir/$target_name.d"

    sources = [
      invoker.input,
    ]
    outputs = [
      invoker.output,
      depfile,
    ]

    args = [
      "--inputs",
      rebase_path(invoker.input, root_build_dir),
      "--output",
      rebase_path(invoker.output, root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--variables=${variables}",
    ]
  }
}
