# 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("//build/config/android/config.gni")
import("//printing/buildflags/buildflags.gni")
import("//third_party/brotli/brotli.gni")
import("//tools/grit/grit_rule.gni")

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

group("resources") {
  public_deps = [
    ":components_resources",
    ":components_scaled_resources",
  ]
}

grit("components_resources") {
  source = "components_resources.grd"

  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),
  ]
  defines = [
    "enable_basic_printing=$enable_basic_printing",
    "enable_print_preview=$enable_print_preview",
  ]

  if (is_android && notouch_build) {
    defines += [ "HIDE_ERROR_MESSAGE_FOR_DINO_PAGE" ]
  }

  deps = [
    ":compressed_about_credits",
  ]
}

grit("components_scaled_resources") {
  source = "components_scaled_resources.grd"

  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",
  ]
}

action("about_credits") {
  script = "//tools/licenses.py"
  depfile = "$target_gen_dir/$target_name.d"

  inputs = [
    "../about_ui/resources/about_credits.tmpl",
    "../about_ui/resources/about_credits_entry.tmpl",
  ]

  outputs = [
    about_credits_file,
  ]

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