# Copyright 2015 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.
#
# This is a copy of src/chrome/chrome_repack_locales.gni with the necessary
# modifications to meet WebView's requirement.

import("//build/config/chrome_build.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//tools/grit/repack.gni")

# Arguments:
#
#   locale
#       Internal name of locale. e.g. "pt-BR"
#
#   output
#       Output file name.
#
#   visibility
#       Normal meaning.
template("_repack_one_locale") {
  locale = invoker.locale

  repack(target_name) {
    visibility = invoker.visibility

    # Each input pak file should also have a deps line for completeness.
    sources = [
      "${root_gen_dir}/android_webview/aw_strings_${locale}.pak",
      "${root_gen_dir}/android_webview/components_strings_${locale}.pak",
      "${root_gen_dir}/content/app/strings/content_strings_${locale}.pak",
    ]
    deps = [
      "//android_webview:generate_aw_strings",
      "//android_webview:generate_components_strings",
      "//content/app/strings",
    ]
    output = invoker.output
  }
}

# Creates an action to call the repack_locales script.
#
# The GYP version generates the locales in the "gen" directory and then copies
# it to the root build directory. This isn't easy to express in a GN copy
# rule since the files on Mac have a complex structure. So we generate the
# files into the final place and skip the "gen" directory.
#
# This template uses GN's looping constructs to avoid the complex call to
# chrome/tools/build/repack_locales.py which wraps the repack commands in the
# GYP build.
#
# Arguments
#
#   input_locales
#       List of locale names to use as inputs.
#
#   output_locales
#       A list containing the corresponding output names for each of the
#       input names.
#
#   visibility
template("webview_repack_locales") {
  # This is the name of the group below that will collect all the invidual
  # locale targets. External targets will depend on this.
  group_target_name = target_name

  # GN's subscript is too stupid to do invoker.output_locales[foo] so we need
  # to make a copy and do output_locales[foo].
  output_locales = invoker.output_locales

  # Collects all targets the loop generates.
  locale_targets = []

  # This loop iterates over the input locales and also keeps a counter so it
  # can simultaneously iterate over the output locales (using GN's very
  # limited looping capabilities).
  current_index = 0
  foreach(input_locale, invoker.input_locales) {
    output_locale = output_locales[current_index]

    # Compute the name of the target for the current file. Save it for the deps.
    current_name = "${target_name}_${input_locale}"
    locale_targets += [ ":$current_name" ]

    _repack_one_locale(current_name) {
      visibility = [ ":$group_target_name" ]
      locale = input_locale
      output = "${root_out_dir}/android_webview/locales/${output_locale}.pak"
    }

    current_index = current_index + 1
  }

  # The group that external targets depend on which collects all deps.
  group(group_target_name) {
    forward_variables_from(invoker, [ "visibility" ])
    public_deps = locale_targets
  }
}
