xref: /aosp_15_r20/external/tink/java_src/template_rule.bzl (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
1*e7b1675dSTing-Kang Chang# Copyright 2022 Google LLC
2*e7b1675dSTing-Kang Chang#
3*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License");
4*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License.
5*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at
6*e7b1675dSTing-Kang Chang#
7*e7b1675dSTing-Kang Chang# http://www.apache.org/licenses/LICENSE-2.0
8*e7b1675dSTing-Kang Chang#
9*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software
10*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS,
11*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and
13*e7b1675dSTing-Kang Chang# limitations under the License.
14*e7b1675dSTing-Kang Chang
15*e7b1675dSTing-Kang Chang"""Rule for simple expansion of template files."""
16*e7b1675dSTing-Kang Chang
17*e7b1675dSTing-Kang Changdef _template_rule_impl(ctx):
18*e7b1675dSTing-Kang Chang    """Modifies ctx.file.src keys in ctx.attr.substitutions with corresponding values."""
19*e7b1675dSTing-Kang Chang    ctx.actions.expand_template(
20*e7b1675dSTing-Kang Chang        template = ctx.file.src,
21*e7b1675dSTing-Kang Chang        output = ctx.outputs.out,
22*e7b1675dSTing-Kang Chang        substitutions = ctx.attr.substitutions,
23*e7b1675dSTing-Kang Chang    )
24*e7b1675dSTing-Kang Chang
25*e7b1675dSTing-Kang Chang# Rule for simple expansion of template files. Modifies the templates in src substituting the keys
26*e7b1675dSTing-Kang Chang# in substitutions with the corresponding values; the result is output to out.
27*e7b1675dSTing-Kang Chang#
28*e7b1675dSTing-Kang Chang# Borrowed from TensorFlow (https://github.com/tensorflow/tensorflow)
29*e7b1675dSTing-Kang Chang#
30*e7b1675dSTing-Kang Chang# Typical usage:
31*e7b1675dSTing-Kang Chang#   template_rule(
32*e7b1675dSTing-Kang Chang#       name = "ExpandMyTemplate",
33*e7b1675dSTing-Kang Chang#       src = "my.template",
34*e7b1675dSTing-Kang Chang#       out = "my.txt",
35*e7b1675dSTing-Kang Chang#       substitutions = {
36*e7b1675dSTing-Kang Chang#         "$VAR1": "foo",
37*e7b1675dSTing-Kang Chang#         "$VAR2": "bar",
38*e7b1675dSTing-Kang Chang#       }
39*e7b1675dSTing-Kang Chang#   )
40*e7b1675dSTing-Kang Chang#
41*e7b1675dSTing-Kang Chang# Args:
42*e7b1675dSTing-Kang Chang#   name: The name of the rule.
43*e7b1675dSTing-Kang Chang#   src: The template file to expand
44*e7b1675dSTing-Kang Chang#   out: The destination of the expanded file
45*e7b1675dSTing-Kang Chang#   substitutions: A dictionary mapping strings to their substitutions
46*e7b1675dSTing-Kang Changtemplate_rule = rule(
47*e7b1675dSTing-Kang Chang    attrs = {
48*e7b1675dSTing-Kang Chang        "src": attr.label(
49*e7b1675dSTing-Kang Chang            mandatory = True,
50*e7b1675dSTing-Kang Chang            allow_single_file = True,
51*e7b1675dSTing-Kang Chang        ),
52*e7b1675dSTing-Kang Chang        "substitutions": attr.string_dict(mandatory = True),
53*e7b1675dSTing-Kang Chang        "out": attr.output(mandatory = True),
54*e7b1675dSTing-Kang Chang    },
55*e7b1675dSTing-Kang Chang    # output_to_genfiles is required for header files.
56*e7b1675dSTing-Kang Chang    output_to_genfiles = True,
57*e7b1675dSTing-Kang Chang    implementation = _template_rule_impl,
58*e7b1675dSTing-Kang Chang)
59