| # 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. | 
 |  | 
 | # Generates the FeatureProviders files for extension features files. | 
 | # The following variables are required: | 
 | #   sources: The features.json files to use. | 
 | #   feature_type: The type of the features to generate, e.g. APIFeature. | 
 | #   method_name: The name of the method to generate, e.g. AddChromeAPIFeatures. | 
 | #   deps/public_deps/visibility: normal meaning | 
 | template("json_features") { | 
 |   assert(defined(invoker.sources), | 
 |          "\"sources\" must be defined for the $target_name template.") | 
 |   assert(defined(invoker.feature_type), | 
 |          "\"feature_type\" must be defined for the $target_name template.") | 
 |   assert(defined(invoker.method_name), | 
 |          "\"method_name\" must be defined for the $target_name template.") | 
 |   feature_type = invoker.feature_type | 
 |   method_name = invoker.method_name | 
 |  | 
 |   compiler_root = "//tools/json_schema_compiler" | 
 |   base_filename = target_name | 
 |   action_name = "${target_name}_json_features" | 
 |   source_set_name = target_name | 
 |   generated_files = [ | 
 |     "$target_gen_dir/$base_filename.cc", | 
 |     "$target_gen_dir/$base_filename.h", | 
 |   ] | 
 |  | 
 |   action(action_name) { | 
 |     visibility = [ ":$source_set_name" ] | 
 |     sources = invoker.sources | 
 |     script = "$compiler_root/feature_compiler.py" | 
 |     inputs = [ | 
 |       "$compiler_root/code.py", | 
 |       "$compiler_root/json_parse.py", | 
 |     ] | 
 |     outputs = generated_files | 
 |     rebased = rebase_path(sources, root_build_dir) | 
 |     args = [ | 
 |              ".", | 
 |              "$feature_type", | 
 |              "$method_name", | 
 |              rebase_path(target_gen_dir, root_build_dir), | 
 |              rebase_path(root_gen_dir, root_build_dir), | 
 |              "$base_filename", | 
 |            ] + rebased | 
 |  | 
 |     # Add the deps in for the action as well, in case the deps generate the | 
 |     # inputs used by the action. | 
 |     forward_variables_from(invoker, | 
 |                            [ | 
 |                              "deps", | 
 |                              "public_deps", | 
 |                            ]) | 
 |   } | 
 |  | 
 |   source_set(target_name) { | 
 |     sources = generated_files | 
 |     forward_variables_from(invoker, | 
 |                            [ | 
 |                              "deps", | 
 |                              "public_deps", | 
 |                              "visibility", | 
 |                            ]) | 
 |     if (!defined(public_deps)) { | 
 |       public_deps = [] | 
 |     } | 
 |     public_deps += [ ":$action_name" ] | 
 |  | 
 |     # Append a dependency on the extensions system. Headers in this target | 
 |     # are included by the feature compiler automatically. | 
 |     if (!defined(deps)) { | 
 |       deps = [] | 
 |     } | 
 |     deps += [ "//extensions/common" ] | 
 |   } | 
 | } |