# 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/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 = [
    "//build/util/LASTCHANGE",
    "//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",
                           ])
  }
}
