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

import("//build/config/chrome_build.gni")
import("//build/util/lastchange.gni")
import("//build/util/process_version.gni")

# The path to the BRANDING file in chrome/app/theme.
branding_file_path = "//chrome/app/theme/$branding_path_component/BRANDING"

# This is a wrapper around process_version() that eases the task of processing
# a .rc.version file (used especially on Windows).
#
# This template automatically includes VERSION, LASTCHANGE and BRANDING, and
# any additional source files are passed after those (so their values can
# override the ones specified by those 3 files).
#
# Parameters:
#   sources (optional):
#     List of files with value definitions that will be passed in addition to
#     VERSION, LASTCHANGE and BRANDING.
#
#   template_file (optional):
#     Template file to use (not a list). If not specified, a default value,
#     //chrome/app/chrome_version.rc.version will be used.
#
# This template forwards all other parameters directly to process_version().
#
# Examples:
#   process_version_rc_template("my_exe_version") {
#     output = "$target_gen_dir/my_exe_version.rc"
#     sources = [ "frob/my_exe.ver" ]
#     extra_args = [ "-e", "FOO=42" ]
#   }
#
#   process_version_rc_template("my_dll_version") {
#     output = "$target_gen_dir/my_dll_version.rc"
#     template_file = [ "//foo/bar/my_dll_version.rc.version" ]
#   }
template("process_version_rc_template") {
  if (defined(invoker.template_file)) {
    _template_file = invoker.template_file
  } else {
    _template_file = "//chrome/app/chrome_version.rc.version"
  }
  _sources = [
    lastchange_file,
    "//chrome/VERSION",
    branding_file_path,
  ]
  if (defined(invoker.sources)) {
    _sources += invoker.sources
  }

  process_version(target_name) {
    template_file = _template_file
    sources = _sources
    forward_variables_from(invoker,
                           "*",
                           [
                             "sources",
                             "template_file",
                           ])
  }
}
