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

import("//tools/grit/grit_rule.gni")
import("//third_party/brotli/brotli.gni")

about_credits_file = "$target_gen_dir/about_credits.html"
about_credits_file_bro = "$target_gen_dir/about_credits.bro"

# GYP version: components/components_resources.gyp:components_resources
group("resources") {
  public_deps = [
    ":components_resources",
    ":components_scaled_resources",
  ]
}

# GYP version: components/components_resources.gyp
#              (generate_components_resources action)
grit("components_resources") {
  source = "components_resources.grd"

  # TODO(hashimoto): Remove this line.
  output_name = "components_resources_new"
  outputs = [
    "grit/components_resources.h",
    "components_resources.pak",
  ]
  output_dir = "$root_gen_dir/components"

  grit_flags = [
    "-E",
    "about_credits_file=" + rebase_path(about_credits_file_bro, root_build_dir),
  ]

  deps = [
    ":compressed_about_credits",
  ]
}

# GYP version: components/components_resources.gyp
#              (generate_scaled_components_resources action)
grit("components_scaled_resources") {
  source = "components_scaled_resources.grd"

  # TODO(hashimoto): Remove this line.
  output_name = "components_scaled_resources_new"
  outputs = [
    "grit/components_scaled_resources.h",
    "grit/components_scaled_resources_map.cc",
    "grit/components_scaled_resources_map.h",
    "components_resources_100_percent.pak",
    "components_resources_200_percent.pak",
    "components_resources_300_percent.pak",
  ]
  output_dir = "$root_gen_dir/components"
}

compress_file_brotli("compressed_about_credits") {
  input_file = about_credits_file
  output_file = about_credits_file_bro
  deps = [
    ":about_credits",
  ]
}

# GYP version: components/components_resources.gyp:about_credits
action("about_credits") {
  script = "//tools/licenses.py"

  inputs = [
    # This is not a complete list. TODO(phajdan.jr, dbeam): licenses.py needs to
    # generate a .d file with all the licenses/credits that about:credits uses.
    # Then about:credits will automatically rebuild when one of them changes.
    # See: depfile in gn's documentation (gn help depfile).
    "../about_ui/resources/about_credits.tmpl",
    "../about_ui/resources/about_credits_entry.tmpl",
  ]

  outputs = [
    about_credits_file,
  ]

  args = [
    "--target-os=$target_os",
    "credits",
    rebase_path(about_credits_file, root_build_dir),
  ]
}
