|  | # 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, root_build_dir), | 
|  | rebase_path(invoker.data, root_build_dir), | 
|  | rebase_path(stamp_file, root_build_dir), | 
|  | ] | 
|  | } | 
|  | } |