blob: e088e5d93e155051f4c56e3e35a34cdea6085f40 [file] [log] [blame]
# Copyright 2015 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 native and HTML/JS supporting code for Web UI element from element's
# declaration JSON file.
#
# Parameters:
#
# source (required)
# Declaration file.
#
# deps (optional)
# visibility (optional)
# Normal meanings.
#
# Example:
# wug("some_type_wug_generated") {
# source = "some_type.json"
# }
#
# Target's name should be deduced from declaration file name by removing
# extension and adding '_wug_generated' prefix. This is needed to properly
# handle dependencies between declaration files and their imports.
#
# For declaration file with a full path 'src/full/path/some_type.json' 5 files
# will be generated and compiled:
# $root_gen_dir/wug/full/path/some_type_export.h
# $root_gen_dir/wug/full/path/some_type_view.h
# $root_gen_dir/wug/full/path/some_type_view_model.cc
# $root_gen_dir/wug/full/path/some_type_view_model.h
# $root_gen_dir/wug/full/path/some_type_webui_view.cc
template("wug") {
declaration_path = invoker.source
generator_dir = "//components/webui_generator/generator"
generator_path = "$generator_dir/gen_sources.py"
src_root = rebase_path("//", root_build_dir)
helper_path = "$generator_dir/build_helper.py"
target_name = "${target_name}"
action_name = target_name + "_gen"
group_name = target_name
out_dir = "$root_gen_dir/wug"
helper_args = [
rebase_path(declaration_path, root_build_dir),
"--destination",
rebase_path(out_dir, root_build_dir),
"--root",
src_root,
"--gn",
"--output",
]
expected_target_name =
exec_script(helper_path, helper_args + [ "target_name" ], "trim string")
assert(target_name == expected_target_name,
"Wrong target name. " + "Expected '" + expected_target_name +
"', got '" + target_name + "'.")
action(action_name) {
visibility = [ ":$group_name" ]
script = generator_path
sources = [
"$generator_dir/declaration.py",
"$generator_dir/export_h.py",
"$generator_dir/html_view.py",
"$generator_dir/util.py",
"$generator_dir/view_model.py",
"$generator_dir/web_ui_view.py",
]
inputs = [
declaration_path,
]
inputs +=
exec_script(helper_path, helper_args + [ "imports" ], "list lines")
common_prefix = process_file_template(
[ declaration_path ],
"$out_dir/{{source_root_relative_dir}}/{{source_name_part}}_")
common_prefix = common_prefix[0]
outputs = [
common_prefix + "export.h",
common_prefix + "view_model.h",
common_prefix + "view_model.cc",
common_prefix + "web_ui_view.h",
common_prefix + "web_ui_view.cc",
]
args = [
rebase_path(declaration_path, root_build_dir),
"--root",
src_root,
"--destination",
rebase_path(out_dir, root_build_dir),
]
if (defined(invoker.deps)) {
deps = invoker.deps
}
if (defined(invoker.public_deps)) {
public_deps = invoker.public_deps
}
}
source_set(target_name) {
if (defined(invoker.visibility)) {
visibility = invoker.visibility
}
sources = get_target_outputs(":$action_name")
defines = [ exec_script(helper_path,
helper_args + [ "impl_macro" ],
"trim string") ]
deps = [
":$action_name",
"//base",
"//components/login",
"//components/strings",
]
deps += exec_script(helper_path,
helper_args + [ "import_dependencies" ],
"list lines")
public_deps = [
"//components/webui_generator",
]
all_dependent_configs =
[ "//components/webui_generator:wug_generated_config" ]
}
}