# 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")

# 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 = [
    "//chrome/VERSION",
    branding_file_path,
    lastchange_file,
  ]
  if (defined(invoker.sources)) {
    _sources += invoker.sources
  }

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