# Copyright 2014 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 the version processing script over the given template file to produce
# an output file. This is used for generating various forms of files that
# incorporate the product name and version.
#
# This template automatically includes VERSION, LASTCHANGE, and BRANDING,
#
# Parameters:
#   source:
#     File name of source template file to read.
#
#   output:
#     File name of file to write.
#
#   extra_args (optional):
#     Extra arguments to pass to version.py.
#
#   visibility (optional)
#
# Example:
#   process_version("myversion") {
#     source = "myfile.h.in"
#     output = "$target_gen_dir/myfile.h"
#     extra_args = ["-e", "FOO=42"]
#   }
template("process_version") {
  assert(defined(invoker.source), "Source must be defined for $target_name")
  assert(defined(invoker.output), "Output must be defined for $target_name")

  action(target_name) {
    if (defined(invoker.visibility)) {
      visibility = invoker.visibility
    }
    script = "//build/util/version.py"

    lastchange_path = "//build/util/LASTCHANGE"
    version_path = "//chrome/VERSION"
    if (is_chrome_branded) {
      branding_path = "//chrome/app/theme/google_chrome/BRANDING"
    } else {
      branding_path = "//chrome/app/theme/chromium/BRANDING"
    }

    inputs = [
      version_path,
      invoker.source,
      lastchange_path,
      branding_path,
    ]

    outputs = [ invoker.output ]

    args = [
      "-f", rebase_path(version_path, root_build_dir),
      "-f", rebase_path(branding_path, root_build_dir),
      "-f", rebase_path(lastchange_path, root_build_dir),
      "-i", rebase_path(invoker.source, root_build_dir),
      "-o", rebase_path(invoker.output, root_build_dir),
    ]

    if (defined(invoker.extra_args)) {
      args += invoker.extra_args
    }
  }
}
