blob: a6bcc604cdae7f6ff4a351e8013f140ea556ad60 [file] [log] [blame]
"""A macro for consistent extra_action plumbing.
The extractor_action macro plumbs together a Kythe extractor to an extra_action
with an associated action_listener.
"""
def extractor_action(name, extractor, args, mnemonics, output, needs_output = False, data = [], tags = []):
"""Creates an extra_action and an associated action_listener.
The action_listener is given the specified name and mnemonics.
The extra_action invokes extractor with the given list of args, output
template, and (optional) data dependencies.
If the name of the action_listener is "foo", the associated extra_action will
be named "foo_extra_action".
Args:
name: The name of the action_listener.
extractor: The label of the extractor binary.
args: The argument list for the extractor binary, not including the command.
needs_output: Whether the extra action requires the action's output.
mnemonics: The list of action mnemonics to shadow.
output: The output file template (string).
data: A list of data dependencies (optional).
tags: A list of build tags (optional).
"""
xa_name = name + "_extra_action"
native.extra_action(
name = xa_name,
data = data,
out_templates = [output],
tools = [extractor],
cmd = " ".join(["$(location %s)" % extractor] + args),
tags = tags,
requires_action_output = needs_output,
)
native.action_listener(
name = name,
extra_actions = [":" + xa_name],
mnemonics = mnemonics,
visibility = ["//visibility:public"],
)