File: wayland_templater.gni

package info (click to toggle)
chromium 139.0.7258.127-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 6,122,156 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (71 lines) | stat: -rw-r--r-- 2,608 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# A wayland templater takes one or more |protocols| and processes its
# |sources| so as to instantiate a template for fuzzing wayland.
# The output of the wayland source will be the input's path, rebased
# under the gen/ directory and with the .tmpl suffix removed.
#
# This templater is used for all kinds of files (i.e. more than just
# c++), so we do not provide a convenient source_set target to depend
# on. Instead you must manually depend on the outputs like:
#
# wayland_templater("foo_tmpl") {
#   ...
# }
#
# source_set("foo") {
#   sources = get_target_outputs(":foo_tmpl")
#   deps = [
#     ":foo_tmpl",
#   ]
# }
#
# If needed, the user can set 'script_override=foo.py' to use a different
# templating script to the default (wayland_templater.py).

template("wayland_templater") {
  assert(defined(invoker.sources), "Need sources for wayland_templater")
  assert(defined(invoker.protocols), "Need protocols for wayland_templater")

  # Process the inputs to determine the output:
  # "//a/b/c.xyz.tmpl" -> "gen/a/b/c.xyz"
  template_outputs = []
  foreach(src, invoker.sources) {
    dir = get_path_info(src, "dir")
    name = get_path_info(src, "name")
    template_outputs += [ "${target_gen_dir}/${dir}/${name}" ]
  }

  templater_script_name = "wayland_templater.py"
  if (defined(invoker.script_override)) {
    templater_script_name = invoker.script_override
  }

  # Jinja2 doesnt like having ".." in the target path, so we give it the
  # source-tree's path rather than the build-directory's relative path (which
  # usually contains "..").
  build_to_src_path = rebase_path("//", root_build_dir)
  src_path_to_inputs = rebase_path(invoker.sources, "//")
  build_path_to_outputs = rebase_path(template_outputs, root_build_dir)
  build_path_to_protocols = rebase_path(invoker.protocols, root_build_dir)

  action(target_name) {
    script = "//third_party/blink/renderer/build/scripts/run_with_pythonpath.py"
    sources = [
                script,
                templater_script_name,
              ] + invoker.sources + invoker.protocols
    outputs = template_outputs
    args = [
             "-I",
             rebase_path("//third_party", root_build_dir),
             rebase_path(templater_script_name, root_build_dir),
             "--directory",
             build_to_src_path,
             "--input",
           ] + src_path_to_inputs + [ "--output" ] + build_path_to_outputs +
           [ "--spec" ] + build_path_to_protocols
  }
}