| # Copyright 2022 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # An internal helper template that acts like a group, but also validates that |
| # its dependencies produce a set of files (the `inputs`). |
| # |
| # GN groups only have `deps` or `public_deps`, they can't list files that are |
| # inputs. GN's inputs are files that are required to be created by the deps |
| # of an `action()` or the public_deps of its deps. |
| # |
| # This template creates an action that acts like a group that also has inputs. |
| # - it has deps, like a group |
| # - it has public_deps, like a group |
| # - it has inputs, like an action |
| # - it doesn't have a "real" output, like a group. |
| # |
| # This can be used to catch if the deps of the groups don't produce the given |
| # set of input files, at GN-time. The deps can be larger than the set of files, |
| # but not the other way around). |
| # |
| # If one or more of the inputs are not generated by the deps or public_deps of |
| # this "group", GN will fail with an error message stating which files are not |
| # produced by any dep of this action. |
| # |
| # Arguments: |
| # |
| # inputs |
| # [list, files] The GN usual meaning of "inputs": A list of paths to files |
| # that must be created by the direct deps of this target. |
| # |
| # deps, public_deps |
| # [list, GN targets] These are the usual GN args, but are the set of deps |
| # that are validated (by GN) to ensure that these deps (private or public) |
| # create the listed input files. |
| # |
| # GN Usual: |
| # testonly |
| # visibility |
| template("group_with_inputs") { |
| action(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| forward_variables_from(invoker, |
| [ |
| "testonly", |
| "visibility", |
| ]) |
| |
| assert(defined(inputs) || defined(sources), |
| "Must provide inputs or sources.") |
| assert(defined(deps) || defined(public_deps), |
| "Must provide deps or public_deps.") |
| |
| script = "//build/scripts/no_op.sh" |
| outputs = [ "${target_out_dir}/${target_name}.inputs_checked" ] |
| args = rebase_path(outputs, root_build_dir) |
| } |
| } |