blob: bd9bb218f360830349598026858a45551ad2b8d9 [file] [log] [blame]
"""Copies a file to a directory."""
def _copy_file_to_dir_impl(ctx):
out_file = ctx.actions.declare_file(
"{}/{}".format(ctx.attr.out_dir, ctx.file.src.basename),
)
ctx.actions.run_shell(
inputs = [ctx.file.src],
outputs = [out_file],
arguments = [ctx.file.src.path, out_file.path],
# Perform a copy to better match how a file install from
# a repo-phase (e.g. whl extraction) looks.
command = 'cp -f "$1" "$2"',
progress_message = "Copying %{input} to %{output}",
)
return [DefaultInfo(files = depset([out_file]))]
copy_file_to_dir = rule(
implementation = _copy_file_to_dir_impl,
doc = """
This allows copying a file whose name is platform-dependent to a directory.
While bazel_skylib has a copy_file rule, you must statically specify the
output file name.
""",
attrs = {
"out_dir": attr.string(mandatory = True),
"src": attr.label(
allow_single_file = True,
mandatory = True,
),
},
)