2020-11-01 05:26:58 +01:00
|
|
|
load("@bazel_skylib//lib:paths.bzl", "paths")
|
|
|
|
|
|
|
|
def _py_proto_library_impl(ctx):
|
|
|
|
basename = ctx.file.src.basename
|
|
|
|
outs = [
|
|
|
|
ctx.actions.declare_file(paths.replace_extension(basename, "_pb2.py")),
|
|
|
|
ctx.actions.declare_file(paths.replace_extension(basename, "_pb2.pyi")),
|
|
|
|
]
|
|
|
|
ctx.actions.run(
|
|
|
|
outputs = outs,
|
|
|
|
inputs = [ctx.file.src],
|
|
|
|
executable = ctx.executable.protoc_wrapper,
|
|
|
|
arguments = [
|
|
|
|
ctx.executable.protoc.path,
|
|
|
|
ctx.executable.mypy_protobuf.path,
|
|
|
|
ctx.file.src.path,
|
|
|
|
paths.dirname(outs[0].path),
|
|
|
|
],
|
|
|
|
tools = [
|
|
|
|
ctx.executable.protoc,
|
|
|
|
ctx.executable.mypy_protobuf,
|
|
|
|
],
|
|
|
|
use_default_shell_env = True,
|
|
|
|
)
|
|
|
|
return [
|
|
|
|
DefaultInfo(files = depset(direct = outs), data_runfiles = ctx.runfiles(files = outs)),
|
|
|
|
]
|
|
|
|
|
|
|
|
py_proto_library_typed = rule(
|
|
|
|
implementation = _py_proto_library_impl,
|
|
|
|
attrs = {
|
|
|
|
"src": attr.label(allow_single_file = [".proto"]),
|
|
|
|
"protoc_wrapper": attr.label(
|
|
|
|
executable = True,
|
|
|
|
cfg = "exec",
|
2020-11-02 07:28:31 +01:00
|
|
|
default = Label("//pylib/tools:protoc_wrapper"),
|
2020-11-01 05:26:58 +01:00
|
|
|
),
|
|
|
|
"protoc": attr.label(
|
|
|
|
executable = True,
|
|
|
|
cfg = "host",
|
|
|
|
allow_files = True,
|
|
|
|
default = Label("@com_google_protobuf//:protoc"),
|
|
|
|
),
|
|
|
|
"mypy_protobuf": attr.label(
|
|
|
|
executable = True,
|
|
|
|
cfg = "exec",
|
2020-11-02 07:28:31 +01:00
|
|
|
default = Label("//pylib/tools:mypy_protobuf"),
|
2020-11-01 05:26:58 +01:00
|
|
|
),
|
|
|
|
},
|
|
|
|
)
|