|  | # Copyright 2014 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. | 
|  |  | 
|  | # Converts a .json file to a C++ struct. | 
|  | # | 
|  | # Variables: | 
|  | # | 
|  | #   source (required) | 
|  | #       Single file name of source .json file. | 
|  | # | 
|  | #   schema_file (required) | 
|  | #       Single file name of the .json file that defines the schema. | 
|  | # | 
|  | #   namespace (required) | 
|  | #       Namespace name to put result in. | 
|  | # | 
|  | #   visibility (optional) | 
|  | #       Normal meaning. | 
|  | template("json_to_struct") { | 
|  | assert(defined(invoker.source), "source required in $target_name") | 
|  | assert(defined(invoker.schema_file), "schema_file required in $target_name") | 
|  | assert(defined(invoker.namespace), "namespace required in $target_name") | 
|  |  | 
|  | action_name = target_name + "_action" | 
|  | source_set_name = target_name | 
|  |  | 
|  | action(action_name) { | 
|  | visibility = [ ":$source_set_name" ] | 
|  | script = "//tools/json_to_struct/json_to_struct.py" | 
|  |  | 
|  | inputs = [ | 
|  | "//tools/json_to_struct/element_generator.py", | 
|  | "//tools/json_to_struct/struct_generator.py", | 
|  | invoker.source, | 
|  | ] | 
|  |  | 
|  | out_dir = get_path_info(invoker.source, "gen_dir") | 
|  | out_name = get_path_info(invoker.source, "name") | 
|  | outputs = [ | 
|  | "$out_dir/$out_name.cc", | 
|  | "$out_dir/$out_name.h", | 
|  | ] | 
|  |  | 
|  | args = [ | 
|  | rebase_path(invoker.source, root_build_dir), | 
|  | "--destbase=" + rebase_path(out_dir, root_build_dir), | 
|  | "--namespace=" + invoker.namespace, | 
|  | "--schema=" + rebase_path(invoker.schema_file, root_build_dir), | 
|  | ] | 
|  | } | 
|  |  | 
|  | source_set(source_set_name) { | 
|  | if (defined(invoker.visibility)) { | 
|  | visibility = invoker.visibility | 
|  | } | 
|  |  | 
|  | sources = get_target_outputs(":$action_name") | 
|  |  | 
|  | deps = [ | 
|  | ":$action_name", | 
|  | ] | 
|  | } | 
|  | } |