# 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/chrome_build.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//extensions/buildflags/buildflags.gni")
import("//tools/grit/repack.gni")

assert(!is_ios, "Chromium/iOS shouldn't use anything in //chrome")

# Wraps repack_locales(), setting the source_patterns and deps required for
# Chrome.
#
# Extra Parameters:
#
#   additional_source_patterns [optional]
#      Extra source_patterns for repack_locales().
template("chrome_repack_locales") {
  repack_locales(target_name) {
    forward_variables_from(invoker, "*", [ "additional_source_patterns" ])

    # Each input pak file should also have a deps line.
    source_patterns = [
      "${root_gen_dir}/chrome/generated_resources_",
      "${root_gen_dir}/chrome/locale_settings_",
      "${root_gen_dir}/chrome/platform_locale_settings_",
      "${root_gen_dir}/components/strings/components_locale_settings_",
      "${root_gen_dir}/components/strings/components_strings_",
      "${root_gen_dir}/third_party/blink/public/strings/blink_strings_",
      "${root_gen_dir}/device/bluetooth/strings/bluetooth_strings_",
      "${root_gen_dir}/device/fido/strings/fido_strings_",
      "${root_gen_dir}/services/strings/services_strings_",
      "${root_gen_dir}/third_party/libaddressinput/address_input_strings_",
      "${root_gen_dir}/ui/strings/app_locale_settings_",
      "${root_gen_dir}/ui/strings/ui_strings_",
    ]
    if (!defined(deps)) {
      deps = []
    }
    deps += [
      "//chrome/app:generated_resources",
      "//chrome/app/resources:locale_settings",
      "//chrome/app/resources:platform_locale_settings",
      "//components/strings:components_locale_settings",
      "//components/strings:components_strings",
      "//device/bluetooth/strings",
      "//device/fido/strings",
      "//services/strings",
      "//third_party/blink/public/strings",
      "//third_party/libaddressinput:strings",
      "//ui/strings:app_locale_settings",
      "//ui/strings:ui_strings",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    # Omnibox resources are currently desktop-only, but this may change.
    if (!is_android) {
      source_patterns +=
          [ "${root_gen_dir}/components/omnibox/resources/omnibox_resources_" ]
      deps += [ "//components/omnibox/resources:omnibox_resources" ]
    }
    if (is_chromeos_ash) {
      source_patterns += [
        "${root_gen_dir}/ash/shortcut_viewer/strings/shortcut_viewer_strings_",
        "${root_gen_dir}/ash/strings/ash_strings_",
        "${root_gen_dir}/chromeos/components/camera_app_ui/resources/strings/chromeos_camera_app_strings_",
        "${root_gen_dir}/chromeos/strings/chromeos_strings_",
        "${root_gen_dir}/remoting/resources/",
        "${root_gen_dir}/ui/chromeos/strings/ui_chromeos_strings_",
      ]
      deps += [
        "//ash/shortcut_viewer/strings",
        "//ash/strings",
        "//chromeos/components/camera_app_ui/resources/strings",
        "//chromeos/strings",
        "//remoting/resources",
        "//ui/chromeos/strings",
      ]
      compress = true
    }
    if (enable_extensions) {
      source_patterns +=
          [ "${root_gen_dir}/extensions/strings/extensions_strings_" ]
      deps += [ "//extensions/strings" ]
    }

    if (is_chrome_branded) {
      source_patterns += [
        "${root_gen_dir}/chrome/google_chrome_strings_",
        "${root_gen_dir}/components/strings/components_google_chrome_strings_",
      ]
      deps += [
        "//chrome/app:google_chrome_strings",
        "//components/strings:components_google_chrome_strings",
      ]
    } else {
      source_patterns += [
        "${root_gen_dir}/chrome/chromium_strings_",
        "${root_gen_dir}/components/strings/components_chromium_strings_",
      ]
      deps += [
        "//chrome/app:chromium_strings",
        "//components/strings:components_chromium_strings",
      ]
    }

    if (defined(invoker.additional_source_patterns)) {
      source_patterns += invoker.additional_source_patterns
    }
  }
}
