# Copyright 2016 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/repack.gni")

# Pack all resources for an application extension for all locales.
#
# Arguments (in addition to those from repack_locales):
#
#   extension [required]
#       name of the application extension.
#
template("extension_repack_all_locales") {
  # Wraps repack_locales(), setting the source_patterns and deps required for
  # Chrome.
  # Generates a collection of bundle_data targets.
  repack_locales(target_name) {
    forward_variables_from(invoker, "*", [ "extension" ])

    source_patterns = [ "$root_gen_dir/ios/${invoker.extension}/ios_${invoker.extension}_strings_" ]

    deps = [
      "//ios/chrome/${invoker.extension}/strings",
    ]
  }
}
