# Copyright 2016 The Chromium Authors
# 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_util.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" ]
}
}