| # Copyright 2013 The Flutter Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| mac_app_script = "//build/config/mac/mac_app.py" | |
| template("code_sign_mac") { | |
| assert(defined(invoker.entitlements_path), | |
| "The path to the entitlements .xcent file") | |
| assert(defined(invoker.identity), "The code signing identity") | |
| assert(defined(invoker.application_path), "The application to code sign") | |
| assert(defined(invoker.deps)) | |
| action(target_name) { | |
| sources = [ invoker.entitlements_path ] | |
| _application_path = invoker.application_path | |
| script = mac_app_script | |
| outputs = [ "$_application_path/_CodeSignature/CodeResources" ] | |
| args = [ | |
| "codesign", | |
| "-p", | |
| rebase_path(invoker.application_path, root_build_dir), | |
| "-i", | |
| invoker.identity, | |
| "-e", | |
| rebase_path(invoker.entitlements_path, root_build_dir), | |
| ] | |
| deps = invoker.deps | |
| } | |
| } | |
| template("resource_copy_mac") { | |
| assert(defined(invoker.resources), | |
| "The source list of resources to copy over") | |
| assert(defined(invoker.bundle_directory), | |
| "The directory within the bundle to place the sources in") | |
| assert(defined(invoker.app_name), "The name of the application") | |
| _bundle_directory = invoker.bundle_directory | |
| _app_name = invoker.app_name | |
| _resources = invoker.resources | |
| copy(target_name) { | |
| sources = _resources | |
| outputs = [ "$root_build_dir/$_app_name.app/$_bundle_directory/Contents/Resources/{{source_file_part}}" ] | |
| if (defined(invoker.deps)) { | |
| deps = invoker.deps | |
| } | |
| } | |
| } | |
| template("mac_app") { | |
| assert(defined(invoker.deps), | |
| "Dependencies must be specified for $target_name") | |
| assert(defined(invoker.info_plist), | |
| "The application plist file must be specified for $target_name") | |
| assert(defined(invoker.app_name), | |
| "The name of Mac application for $target_name") | |
| # We just create a variable so we can use the same in interpolation | |
| app_name = invoker.app_name | |
| # Generate the project structure | |
| struct_gen_target_name = target_name + "_struct" | |
| action(struct_gen_target_name) { | |
| script = mac_app_script | |
| sources = [] | |
| outputs = [ "$root_build_dir/$app_name.app" ] | |
| args = [ | |
| "structure", | |
| "-d", | |
| rebase_path(root_build_dir), | |
| "-n", | |
| app_name, | |
| ] | |
| } | |
| # Generate the executable | |
| bin_gen_target_name = target_name + "_bin" | |
| executable(bin_gen_target_name) { | |
| deps = invoker.deps | |
| output_name = app_name | |
| } | |
| # Process the Info.plist | |
| plist_gen_target_name = target_name + "_plist" | |
| action(plist_gen_target_name) { | |
| script = mac_app_script | |
| sources = [ invoker.info_plist ] | |
| outputs = [ "$root_build_dir/plist/$app_name/Info.plist" ] | |
| args = [ | |
| "plist", | |
| "-i", | |
| rebase_path(invoker.info_plist, root_build_dir), | |
| "-o", | |
| rebase_path("$root_build_dir/plist/$app_name"), | |
| ] | |
| } | |
| # Copy the generated binaries and assets to their appropriate locations | |
| copy_plist_gen_target_name = target_name + "_plist_copy" | |
| copy(copy_plist_gen_target_name) { | |
| sources = [ "$root_build_dir/plist/$app_name/Info.plist" ] | |
| outputs = [ "$root_build_dir/$app_name.app/Contents/{{source_file_part}}" ] | |
| deps = [ ":$plist_gen_target_name" ] | |
| } | |
| copy_bin_target_name = target_name + "_bin_copy" | |
| copy(copy_bin_target_name) { | |
| sources = [ "$root_build_dir/$app_name" ] | |
| outputs = | |
| [ "$root_build_dir/$app_name.app/Contents/MacOS/{{source_file_part}}" ] | |
| deps = [ ":$bin_gen_target_name" ] | |
| } | |
| copy_all_target_name = target_name + "_all_copy" | |
| group(copy_all_target_name) { | |
| deps = [ | |
| ":$copy_bin_target_name", | |
| ":$copy_plist_gen_target_name", | |
| ":$struct_gen_target_name", | |
| ] | |
| } | |
| # Top level group | |
| group(target_name) { | |
| deps = [ ":$copy_all_target_name" ] | |
| } | |
| } |