Public API for expanding variables
Rules
expand_template
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
as well as configuration variables such as $(BINDIR)
, $(TARGET_CPU)
, and $(COMPILATION_MODE)
.
Example usage (generated)
load("@aspect_bazel_lib//lib:expand_make_vars.bzl", "expand_template")
expand_template(
# A unique name for this target.
name = "",
# Where to write the expanded file.
out = "",
# Mapping of strings to substitutions.
substitutions = {},
# The template file to expand.
template = "",
)
name
A unique name for this target.
data
List of targets for additional lookup information.
is_executable
Whether to mark the output file as executable.
out
Where to write the expanded file.
substitutions
Mapping of strings to substitutions.
template
The template file to expand.
Macros and Functions
expand_locations
Expand location templates.
Expands all $(execpath ...)
, $(rootpath ...)
and legacy $(location ...)
templates in the
given string by replacing with the expanded path. Expansion only works for labels that point to direct dependencies
of this rule or that are explicitly listed in the optional argument targets.
See https://docs.bazel.build/versions/main/be/make-variables.html#predefined_label_variables.
Use $(rootpath)
and $(rootpaths)
to expand labels to the runfiles path that a built binary can use
to find its dependencies. This path is of the format:
./file
path/to/file
../external_repo/path/to/file
Use $(execpath)
and $(execpaths)
to expand labels to the execroot (where Bazel runs build actions).
This is of the format:
./file
path/to/file
external/external_repo/path/to/file
<bin_dir>/path/to/file
<bin_dir>/external/external_repo/path/to/file
The legacy $(location)
and $(locations)
expansions are deprecated as they return the runfiles manifest path of the
format repo/path/to/file
which behave differently than the built-in $(location)
expansion in args of *_binary
and *_test rules which returns the rootpath.
See https://docs.bazel.build/versions/main/be/common-definitions.html#common-attributes-binaries.
The legacy $(location)
and $(locations)
expansion also differs from how the builtin ctx.expand_location()
expansions
of $(location)
and $(locations)
behave as that function returns either the execpath or rootpath depending on the context.
See https://docs.bazel.build/versions/main/be/make-variables.html#predefined_label_variables.
The behavior of $(location)
and $(locations)
expansion will be fixed in a future major release to match the
to default Bazel behavior and return the same path as ctx.expand_location()
returns for these.
The recommended approach is to now use $(rootpath)
where you previously used $(location). See the docstrings
of nodejs_binary
or params_file
for examples of how to use $(rootpath)
in templated_args
and args
respectively.
Example usage (generated)
load("@aspect_bazel_lib//lib:expand_make_vars.bzl", "expand_locations")
expand_locations(
# context
ctx = None,
# String to be expanded
input = None,
)
ctx
context
input
String to be expanded
targets
List of targets for additional lookup information.
expand_variables
Expand make variables and substitute like genrule does.
This function is the same as ctx.expand_make_variables with the additional genrule-like substitutions of:
$@
: The output file if it is a single file. Else triggers a build error.$(@D)
: The output directory. If there is only one file name in outs,this expands to the directory containing that file. If there are multiple files, this instead expands to the package's root directory in the bin tree, even if all generated files belong to the same subdirectory!
$(RULEDIR)
: The output directory of the rule, that is, the directory corresponding to the name of the package containing the rule under the bin tree.
See https://docs.bazel.build/versions/main/be/general.html#genrule.cmd and https://docs.bazel.build/versions/main/be/make-variables.html#predefined_genrule_variables for more information of how these special variables are expanded.
Example usage (generated)
load("@aspect_bazel_lib//lib:expand_make_vars.bzl", "expand_variables")
expand_variables(
# starlark rule context
ctx = None,
# expression to expand
s = None,
)
ctx
starlark rule context
s
expression to expand
outs
declared outputs of the rule, for expanding references to outputs
output_dir
whether the rule is expected to output a directory (TreeArtifact)
attribute_name
name of the attribute containing the expression