| # 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. |
| |
| import("//mojo/public/mojo_constants.gni") |
| |
| # Used to produce a Mojo Application Manifest for an application. |
| # |
| # Parameters: |
| # |
| # source |
| # The manifest file template for this application, must be valid JSON with |
| # a valid 'url' key matching application_name. |
| # |
| # base_manifest (optional) |
| # A manifest file template to use as a base for |source|. Any properties |
| # defined in |source| will overwrite or be merged with properties defined |
| # in |base_manifest|. |
| # |
| # application_name |
| # The host portion of the mojo: URL of the application. The script |
| # validates that the value of this parameter matches the host name portion |
| # of the 'url' property set in the manifest and throws a ValueError if |
| # they do not. |
| # |
| # base_deps (optional) |
| # Dependencies required to generate |base_manifest| if applicable. |
| # |
| # deps (optional) |
| # An array of dependent instances of this template. This template enforces |
| # that dependencies can only be instances of this template. |
| # |
| # packaged_applications (optional) |
| # An array of application_names of the dependent applications. |
| # |
| # type (default is mojo) |
| # Possible values are 'mojo' and 'exe'. Default is 'mojo'. |
| # |
| # Outputs: |
| # |
| # An instantiation of this template produces in |
| # $outdir/<application_name>/manifest.json |
| # a meta manifest from the source template and the output manifest of all |
| # dependent children. |
| # |
| template("mojo_application_manifest") { |
| assert(defined(invoker.source), |
| "\"source\" must be defined for the $target_name template") |
| assert(defined(invoker.application_name), |
| "\"application_name\" must be defined for the $target_name template") |
| if (defined(invoker.deps)) { |
| assert(defined(invoker.packaged_applications), |
| "\"packaged_applications\" listing the directory containing the " + |
| "manifest.json of dependent applications must be provided.") |
| } |
| if (defined(invoker.packaged_applications)) { |
| assert(defined(invoker.deps), |
| "\"deps\" building the dependent packaged applications must be " + |
| "provided.") |
| } |
| if (defined(invoker.type)) { |
| assert(invoker.type == "mojo" || invoker.type == "exe", |
| "\"type\" must be one of \"mojo\" or \"exe\".") |
| } |
| |
| action(target_name) { |
| script = "//mojo/public/tools/manifest/manifest_collator.py" |
| |
| type = "mojo" |
| if (defined(invoker.type)) { |
| type = invoker.type |
| } |
| |
| application_name = invoker.application_name |
| inputs = [ |
| invoker.source, |
| ] |
| |
| if (type == "mojo") { |
| output = "$root_out_dir/$mojo_application_subdir/$application_name/manifest.json" |
| } else { |
| output = "$root_out_dir/${application_name}_manifest.json" |
| } |
| outputs = [ |
| output, |
| ] |
| |
| rebase_parent = rebase_path(invoker.source, root_build_dir) |
| rebase_output = rebase_path(output, root_build_dir) |
| |
| args = [ |
| "--application-name=$application_name", |
| "--parent=$rebase_parent", |
| "--output=$rebase_output", |
| ] |
| |
| if (defined(invoker.base_manifest)) { |
| rebase_base = rebase_path(invoker.base_manifest, root_build_dir) |
| args += [ "--base-manifest=$rebase_base" ] |
| } |
| |
| if (defined(invoker.packaged_applications)) { |
| foreach(application_name, invoker.packaged_applications) { |
| input = "$root_out_dir/$mojo_application_subdir/$application_name/manifest.json" |
| inputs += [ input ] |
| args += [ rebase_path(input, root_build_dir) ] |
| } |
| } |
| deps = [] |
| data_deps = [] |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| data_deps += invoker.deps |
| } |
| if (defined(invoker.base_deps)) { |
| deps += invoker.base_deps |
| data_deps += invoker.base_deps |
| } |
| } |
| |
| all_deps = [] |
| if (defined(invoker.deps)) { |
| all_deps += invoker.deps |
| } |
| |
| group("${target_name}__is_mojo_application_manifest") { |
| } |
| |
| # Explicitly ensure that all dependencies are mojo_application_manifest |
| # targets themselves. |
| group("${target_name}__check_deps_are_all_mojo_application_manifest") { |
| deps = [] |
| foreach(d, all_deps) { |
| name = get_label_info(d, "label_no_toolchain") |
| toolchain = get_label_info(d, "toolchain") |
| deps += [ "${name}__is_mojo_application_manifest(${toolchain})" ] |
| } |
| } |
| } |