# 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("//tools/grit/repack.gni")

grit("strings") {
  source = "../../ash_strings.grd"
  outputs = [
    "grit/ash_strings.h",
    "ash_strings_am.pak",
    "ash_strings_ar.pak",
    "ash_strings_bg.pak",
    "ash_strings_bn.pak",
    "ash_strings_ca.pak",
    "ash_strings_cs.pak",
    "ash_strings_da.pak",
    "ash_strings_de.pak",
    "ash_strings_el.pak",
    "ash_strings_en-GB.pak",
    "ash_strings_en-US.pak",
    "ash_strings_es.pak",
    "ash_strings_es-419.pak",
    "ash_strings_et.pak",
    "ash_strings_fa.pak",
    "ash_strings_fake-bidi.pak",
    "ash_strings_fi.pak",
    "ash_strings_fil.pak",
    "ash_strings_fr.pak",
    "ash_strings_gu.pak",
    "ash_strings_he.pak",
    "ash_strings_hi.pak",
    "ash_strings_hr.pak",
    "ash_strings_hu.pak",
    "ash_strings_id.pak",
    "ash_strings_it.pak",
    "ash_strings_ja.pak",
    "ash_strings_kn.pak",
    "ash_strings_ko.pak",
    "ash_strings_lt.pak",
    "ash_strings_lv.pak",
    "ash_strings_ml.pak",
    "ash_strings_mr.pak",
    "ash_strings_ms.pak",
    "ash_strings_nl.pak",
    "ash_strings_nb.pak",
    "ash_strings_pl.pak",
    "ash_strings_pt-BR.pak",
    "ash_strings_pt-PT.pak",
    "ash_strings_ro.pak",
    "ash_strings_ru.pak",
    "ash_strings_sk.pak",
    "ash_strings_sl.pak",
    "ash_strings_sr.pak",
    "ash_strings_sv.pak",
    "ash_strings_sw.pak",
    "ash_strings_ta.pak",
    "ash_strings_te.pak",
    "ash_strings_th.pak",
    "ash_strings_tr.pak",
    "ash_strings_uk.pak",
    "ash_strings_vi.pak",
    "ash_strings_zh-CN.pak",
    "ash_strings_zh-TW.pak",
  ]
}

# Creates locale-specific pak files with strings needed for ash_unittests, etc.
template("repack_one_locale_ash") {
  locale = invoker.locale
  output = invoker.output

  repack(target_name) {
    # Each input pak file should also have a deps line for completeness.
    sources = [
      "$root_gen_dir/ash/common/strings/ash_strings_${locale}.pak",
      "$root_gen_dir/ui/strings/app_locale_settings_${locale}.pak",
      "$root_gen_dir/ui/strings/ui_strings_${locale}.pak",
    ]

    deps = [
      "//ash/common/strings",
      "//ui/strings:app_locale_settings",
      "//ui/strings:ui_strings",
    ]

    if (is_chromeos) {
      sources += [
        "$root_gen_dir/device/bluetooth/strings/bluetooth_strings_${locale}.pak",
        "$root_gen_dir/ui/chromeos/strings/ui_chromeos_strings_${locale}.pak",
      ]
      deps += [
        "//device/bluetooth/strings",
        "//ui/chromeos/strings",
      ]
    }
  }
}

# Creates a pak file containing en-US strings for ash_unittests, etc.
repack_one_locale_ash("ash_test_strings") {
  output = "$root_build_dir/ash_test_strings.pak"
  locale = "en-US"
}
