| "expand_template rule" |
| |
| load(":expand_locations.bzl", _expand_locations = "expand_locations") |
| load(":expand_variables.bzl", _expand_variables = "expand_variables") |
| |
| def _expand_template_impl(ctx): |
| template = ctx.file.template |
| |
| substitutions = {} |
| for k, v in ctx.attr.substitutions.items(): |
| substitutions[k] = " ".join([_expand_variables(ctx, e, outs = [ctx.outputs.out], attribute_name = "substitutions") for e in _expand_locations(ctx, v, ctx.attr.data).split(" ")]) |
| |
| ctx.actions.expand_template( |
| template = template, |
| output = ctx.outputs.out, |
| substitutions = substitutions, |
| is_executable = ctx.attr.is_executable, |
| ) |
| |
| expand_template_lib = struct( |
| doc = """Template expansion |
| |
| This performs a simple search over the template file for the keys in substitutions, |
| and replaces them with the corresponding values. |
| |
| Values may also use location templates as documented in |
| [expand_locations](https://github.com/aspect-build/bazel-lib/blob/main/docs/expand_make_vars.md#expand_locations) |
| as well as [configuration variables](https://docs.bazel.build/versions/main/skylark/lib/ctx.html#var) |
| such as `$(BINDIR)`, `$(TARGET_CPU)`, and `$(COMPILATION_MODE)` as documented in |
| [expand_variables](https://github.com/aspect-build/bazel-lib/blob/main/docs/expand_make_vars.md#expand_variables). |
| """, |
| implementation = _expand_template_impl, |
| attrs = { |
| "template": attr.label( |
| doc = "The template file to expand.", |
| mandatory = True, |
| allow_single_file = True, |
| ), |
| "substitutions": attr.string_dict( |
| doc = "Mapping of strings to substitutions.", |
| mandatory = True, |
| ), |
| "out": attr.output( |
| doc = "Where to write the expanded file.", |
| mandatory = True, |
| ), |
| "is_executable": attr.bool( |
| doc = "Whether to mark the output file as executable.", |
| default = False, |
| mandatory = False, |
| ), |
| "data": attr.label_list( |
| doc = "List of targets for additional lookup information.", |
| allow_files = True, |
| ), |
| }, |
| ) |
| |
| expand_template = rule( |
| doc = expand_template_lib.doc, |
| implementation = expand_template_lib.implementation, |
| attrs = expand_template_lib.attrs, |
| ) |