# Copyright 2021 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/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)",
    ]
  }
}
