# Copyright 2019 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/config/ios/templates/merge_plist.gni") # Template to create an Apple bundle containing a binary file (e.g. .app or # .framework bundle). # # Arguments # # - bundle_extension # # extension of the bundle (e.g. "app", "framework", ...); must not # include the dot preceding the extension # # - bundle_type # # four letter code corresponding to the bundle type ("FMWK", "AAPL", # ...); used to fill the "Bundle OS Type code" value in the generated # Info.plist for the bundle # # - bundle_identitier # # bundle identitifier # # - product_type # # type of the generated bundle (used for Xcode project) # # - output_name (optional) # # name of the bundle without the extension; the bundle binary (i.e. # the application or the library) must have the same name; defaults # to $target_name # # - display_name (optional) # # display name of the bundle (e.g. the name that is displayed to the # user); defaults to $output_name # # - info_plist (optional) # # path to additional Info.plist to merge into the final bundle Info.plist # template("ios_binary_bundle") { assert( defined(invoker.bundle_extension), "bundle_extension must be defined for ios_binary_bundle ($target_name)") assert( defined(invoker.bundle_identifier), "bundle_identifier must be defined for ios_binary_bundle ($target_name)") assert(defined(invoker.bundle_type), "bundle_type must be defined for ios_binary_bundle ($target_name)") assert(defined(invoker.product_type), "product_type must be defined for ios_binary_bundle ($target_name)") _output_name = target_name if (defined(invoker.output_name)) { _output_name = invoker.output_name } _display_name = _output_name if (defined(invoker.display_name)) { _display_name = invoker.display_name } _plist_target = target_name + "_plist" _plist_bundle = target_name + "_plist_bundle" merge_plist(_plist_target) { substitutions = { CURRENT_PROJECT_VERSION = "1" DEVELOPMENT_LANGUAGE = "en" EXECUTABLE_NAME = "$_output_name" PRODUCT_BUNDLE_IDENTIFIER = invoker.bundle_identifier PRODUCT_BUNDLE_PACKAGE_TYPE = invoker.bundle_type PRODUCT_NAME = "$_display_name" } format = "binary1" output = "$target_out_dir/$_plist_target/Info.plist" plists = [ get_label_info("//build/config/ios:compiler_plist", "target_out_dir") + "/compiler_plist/Info.plist", "//build/config/ios/resources/Info.plist", ] if (defined(invoker.info_plist)) { plists += [ invoker.info_plist ] } deps = [ "//build/config/ios:compiler_plist" ] } bundle_data(_plist_bundle) { public_deps = [ ":$_plist_target" ] sources = [ "$target_out_dir/$_plist_target/Info.plist" ] outputs = [ "{{bundle_contents_dir}}/Info.plist" ] } create_bundle(target_name) { forward_variables_from(invoker, "*", [ "display_name", "output_name", "bundle_extension", "bundle_type", ]) if (!defined(public_deps)) { public_deps = [] } public_deps += [ ":$_plist_bundle" ] bundle_root_dir = "$root_out_dir/$_output_name.${invoker.bundle_extension}" bundle_contents_dir = bundle_root_dir bundle_executable_dir = bundle_contents_dir bundle_resources_dir = bundle_contents_dir } }