blob: 618441730582006b17d289f7493c81940c0015c4 [file] [log] [blame]
# 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})" ]
}
}
}