# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Generates a credits HTML file, based on the third-party dependencies of
# a provided GN target.
# Parameters:
#   gn_target: The target whose dependencies should be listed in the credits.
#   credits_gen_dir: Directory (without trailing slash) where the generated
#     HTML will be placed, together with the copied JSS+CS files.
template("remoting_credits") {
  _credits_source_dir = "//remoting/credits"

  action("${target_name}__generate") {
    # Generate credits.html in a temporary location, so it can be copied into
    # the final location - see comment for 'copy' target.
    _credits_html_file = "$target_gen_dir/$target_name/credits.html"
    _credits_template = "$_credits_source_dir/credits.tmpl"
    _credits_entry_template = "$_credits_source_dir/credits_entry.tmpl"
    script = "//tools/licenses/licenses.py"
    depfile = "$target_gen_dir/$target_name.d"
    inputs = [
      _credits_template,
      _credits_entry_template,
    ]
    outputs = [ _credits_html_file ]
    args = [
      "credits",
      rebase_path(_credits_html_file, root_build_dir),
      "--file-template",
      rebase_path(_credits_template, root_build_dir),
      "--entry-template",
      rebase_path(_credits_entry_template, root_build_dir),
      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--gn-target",
      invoker.gn_target,
      "--gn-out-dir",
      ".",
    ]
  }

  # This target purposefully copies the generated HTML file (instead of
  # directly generating the HTML file into credits_gen_dir), so that the caller
  # can use get_target_outputs(:target_name) and the HTML file will be
  # included in the returned list along with the JS+CSS files.
  copy(target_name) {
    _generate_target = ":${target_name}__generate"
    _credits_gen_dir = invoker.credits_gen_dir
    sources = [
                "$_credits_source_dir/credits_css.css",
                "$_credits_source_dir/credits_js.js",
              ] + get_target_outputs(_generate_target)
    outputs = [ "$_credits_gen_dir/{{source_file_part}}" ]
    deps = [ _generate_target ]
  }
}
