fix: plugin_output in py_proto_library rule (#1280)
plugin_output was wrong in case multiple repositories are involved
and/or _virtual_imports.
The code is taken from `cc_proto_library` and has been verified in
practice.
diff --git a/python/private/proto/py_proto_library.bzl b/python/private/proto/py_proto_library.bzl
index 9885585..9377c85 100644
--- a/python/private/proto/py_proto_library.bzl
+++ b/python/private/proto/py_proto_library.bzl
@@ -75,12 +75,22 @@
name_mapper = lambda name: name.replace("-", "_").replace(".", "/"),
)
+ # Handles multiple repository and virtual import cases
+ proto_root = proto_info.proto_source_root
+ if proto_root.startswith(ctx.bin_dir.path):
+ plugin_output = proto_root
+ else:
+ plugin_output = ctx.bin_dir.path + "/" + proto_root
+
+ if plugin_output == ".":
+ plugin_output = ctx.bin_dir.path
+
proto_common.compile(
actions = ctx.actions,
proto_info = proto_info,
proto_lang_toolchain_info = proto_lang_toolchain_info,
generated_files = generated_sources,
- plugin_output = ctx.bin_dir.path,
+ plugin_output = plugin_output,
)
# Generated sources == Python sources