blob: e6e167cd0a5540c9efdf261e40debe6e3e071641 [file] [log] [blame]
# Copyright 2018 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.
import("//build/compiled_action.gni")
# Validate a JSON file against a JSON schema.
#
# data (required)
# [file] JSON file to validate.
# If this file is not valid JSON, or does not meet the schema, then this
# target will fail to build.
#
# schema (required)
# [file] Schema to use for validation.
#
# sources (optional)
# [list of files] Additional schema files referenced by schema.
# Additional schema files used by the original schema file must be listed
# here for validation to be re-run when they change.
#
# allow_comments (optional; default is false)
# [bool] If true, the |data| file may contain C-style comments
# (`/* block */` and `// inline`) that will be ignored.
#
# deps (optional)
# public_deps (optional)
# testonly (optional)
# visibility (optional)
# Standard GN meaning.
#
# Example of usage:
#
# validate_json("validate_my_json") {
# data = "my_file.json"
# schema = "my_schema.json"
# }
template("validate_json") {
assert(defined(invoker.data), "data is required")
assert(defined(invoker.schema), "schema is required")
allow_comments = defined(invoker.allow_comments) && invoker.allow_comments
compiled_action(target_name) {
forward_variables_from(invoker,
[
"deps",
"sources",
"public_deps",
"testonly",
"visibility",
])
tool = "//build/tools/json_validator"
stamp_file = "$target_gen_dir/$target_name.verified"
inputs = [
invoker.data,
invoker.schema,
]
outputs = [ stamp_file ]
args = []
if (allow_comments) {
args += [ "--allow_comments" ]
}
args += [
rebase_path(invoker.schema),
rebase_path(invoker.data),
rebase_path(stamp_file),
]
}
}