# 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.

# This file contains rules that are shared between Mac and iOS.

import("//build/toolchain/toolchain.gni")
import("//build/config/mac/symbols.gni")

if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
} else if (is_ios) {
  import("//build/config/ios/ios_sdk.gni")
}

# Convert plist file to given format.
#
# Arguments
#
#   source:
#     string, path to the plist file to convert
#
#   output:
#     string, path to the converted plist, must be under $root_build_dir
#
#   format:
#     string, the format to `plutil -convert` the plist to.
template("convert_plist") {
  assert(defined(invoker.source), "source must be defined for $target_name")
  assert(defined(invoker.output), "output must be defined for $target_name")
  assert(defined(invoker.format), "format must be defined for $target_name")

  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "visibility",
                             "testonly",
                             "deps",
                           ])

    script = "//build/config/mac/xcrun.py"
    sources = [
      invoker.source,
    ]
    outputs = [
      invoker.output,
    ]
    args = []
    if (!use_system_xcode) {
      args += [
        "--developer_dir",
        hermetic_xcode_path,
      ]
    }
    args += [
      "plutil",
      "-convert",
      invoker.format,
      "-o",
      rebase_path(invoker.output, root_build_dir),
      rebase_path(invoker.source, root_build_dir),
    ]
  }
}

# Template to merge multiple plist files and perform variable substitutions.
#
# Arguments
#
#     plist_templates:
#         string array, paths to plist files which will be used for the bundle.
#
#     format:
#         string, the format to `plutil -convert` the plist to when
#         generating the output.
#
#     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 plist file.
template("compile_plist") {
  assert(defined(invoker.plist_templates),
         "A list of template plist files must be specified for $target_name")
  assert(defined(invoker.format),
         "The plist format must be specified for $target_name")
  assert(defined(invoker.substitutions),
         "A list of key=value pairs must be specified for $target_name")
  assert(defined(invoker.output_name),
         "The name of the output file must be specified for $target_name")

  _output_name = invoker.output_name
  _merged_name = get_path_info(_output_name, "dir") + "/" +
                 get_path_info(_output_name, "name") + "_merged." +
                 get_path_info(_output_name, "extension")

  _merge_target = target_name + "_merge"

  action(_merge_target) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "testonly",
                           ])

    script = "//build/config/mac/plist_util.py"
    sources = invoker.plist_templates
    outputs = [
      _merged_name,
    ]
    args = [
             "merge",
             "-f=" + invoker.format,
             "-o=" + rebase_path(_merged_name, root_build_dir),
           ] + rebase_path(invoker.plist_templates, root_build_dir)
  }

  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    script = "//build/config/mac/plist_util.py"
    sources = [
      _merged_name,
    ]
    outputs = [
      _output_name,
    ]
    args = [
      "substitute",
      "-f=" + invoker.format,
      "-o=" + rebase_path(_output_name, root_build_dir),
      "-t=" + rebase_path(_merged_name, root_build_dir),
    ]
    foreach(_substitution, invoker.substitutions) {
      args += [ "-s=$_substitution" ]
    }
    deps = [
      ":$_merge_target",
    ]
  }
}

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

# The base template used to generate Info.plist files for iOS and Mac apps and
# frameworks.
#
# Arguments
#
#     plist_templates:
#         string array, paths to plist files which will be used for the bundle.
#
#     executable_name:
#         string, name of the generated target used for the product
#         and executable name as specified in the output Info.plist.
#
#     format:
#         string, the format to `plutil -convert` the plist to when
#         generating the output.
#
#     extra_substitutions:
#         (optional) string array, 'key=value' pairs for extra fields which are
#         specified in a source Info.plist template.
#
#     output_name:
#         (optional) string, name of the generated plist file, default to
#         "$target_gen_dir/$target_name.plist".
template("info_plist") {
  assert(defined(invoker.executable_name),
         "The executable_name must be specified for $target_name")
  executable_name = invoker.executable_name

  compile_plist(target_name) {
    forward_variables_from(invoker,
                           [
                             "plist_templates",
                             "testonly",
                             "deps",
                             "visibility",
                             "format",
                           ])

    if (defined(invoker.output_name)) {
      output_name = invoker.output_name
    } else {
      output_name = "$target_gen_dir/$target_name.plist"
    }

    substitutions = [
      "BUILD_MACHINE_OS_BUILD=$machine_os_build",
      "EXECUTABLE_NAME=$executable_name",
      "GCC_VERSION=com.apple.compilers.llvm.clang.1_0",
      "PRODUCT_NAME=$executable_name",
      "XCODE_BUILD=$xcode_build",
      "XCODE_VERSION=$xcode_version",
    ]
    if (is_mac) {
      substitutions += [ "MACOSX_DEPLOYMENT_TARGET=$mac_deployment_target" ]
    } else if (is_ios) {
      substitutions += [ "IOS_DEPLOYMENT_TARGET=$ios_deployment_target" ]
    }
    if (defined(invoker.extra_substitutions)) {
      substitutions += invoker.extra_substitutions
    }
  }
}

# Template to compile .xib and .storyboard files.
#
# Arguments
#
#     sources:
#         list of string, sources to compile
#
#     ibtool_flags:
#         (optional) list of string, additional flags to pass to the ibtool
template("compile_ib_files") {
  action_foreach(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    assert(defined(invoker.sources),
           "sources must be specified for $target_name")
    assert(defined(invoker.output_extension),
           "output_extension must be specified for $target_name")

    ibtool_flags = []
    if (defined(invoker.ibtool_flags)) {
      ibtool_flags = invoker.ibtool_flags
    }

    _output_extension = invoker.output_extension

    script = "//build/config/mac/compile_ib_files.py"
    sources = invoker.sources
    outputs = [
      "$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
    ]
    args = [
      "--input",
      "{{source}}",
      "--output",
      rebase_path(
          "$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
          root_build_dir),
    ]
    if (!use_system_xcode) {
      args += [
        "--developer_dir",
        hermetic_xcode_path,
      ]
    }
    args += ibtool_flags
  }
}
