# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/apple/compile_plist.gni")

# Template to merge multiple .entitlements files performing variable
# substitutions.
#
# Arguments
#
#     entitlements_templates:
#         string array, paths to entitlements files which will be used for the
#         bundle.
#
#     substitutions:
#         string array, 'key=value' pairs used to replace ${key} by value
#         when generating the output plist file.
#
#     output_name:
#         string, name of the generated entitlements file.
template("compile_entitlements") {
  assert(defined(invoker.entitlements_templates),
         "A list of template plist files must be specified for $target_name")

  compile_plist(target_name) {
    forward_variables_from(invoker,
                           "*",
                           [
                             "entitlements_templates",
                             "format",
                             "plist_templates",
                           ])

    plist_templates = invoker.entitlements_templates

    # Entitlements files are always encoded in xml1.
    format = "xml1"

    # Entitlements files use unsubstitued variables, so define substitutions
    # to leave those variables untouched.
    if (!defined(substitutions)) {
      substitutions = []
    }

    substitutions += [
      "AppIdentifierPrefix=\$(AppIdentifierPrefix)",
      "CFBundleIdentifier=\$(CFBundleIdentifier)",
    ]
  }
}
