refactor: relocate ruby targets under the //ruby package
Fixes #14569
diff --git a/BUILD.bazel b/BUILD.bazel
index 5951297..6a245bc 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -5,7 +5,7 @@
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain", "proto_library")
load("//build_defs:cpp_opts.bzl", "COPTS", "LINK_OPTS")
-load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library", "internal_ruby_proto_library")
+load(":protobuf.bzl", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
licenses(["notice"])
@@ -150,17 +150,6 @@
visibility = ["//visibility:public"],
)
-internal_ruby_proto_library(
- name = "well_known_ruby_protos",
- srcs = [":well_known_protos"],
- default_runtime = "",
- includes = ["src"],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
################################################################################
# Protocol Buffers Compiler
################################################################################
@@ -524,33 +513,6 @@
],
)
-internal_ruby_proto_library(
- name = "test_messages_proto2_ruby_proto",
- testonly = 1,
- srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
- includes = ["src/google/protobuf"],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
-internal_ruby_proto_library(
- name = "test_messages_proto3_ruby_proto",
- testonly = 1,
- srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
- includes = [
- "src/google/protobuf",
- # The above must come first.
- "src",
- ],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
- deps = [":well_known_ruby_protos"],
-)
-
filegroup(
name = "bzl_srcs",
srcs = glob(["**/*.bzl"]),
diff --git a/conformance/BUILD.bazel b/conformance/BUILD.bazel
index e54eab0..57ab5b7 100644
--- a/conformance/BUILD.bazel
+++ b/conformance/BUILD.bazel
@@ -2,7 +2,8 @@
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library", "cc_proto_library", "objc_library")
load("@rules_ruby//ruby:defs.bzl", "ruby_binary")
-load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library", "internal_ruby_proto_library")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
+load("//:protobuf.bzl", "internal_csharp_proto_library", "internal_objc_proto_library", "internal_php_proto_library", "internal_py_proto_library")
load("//build_defs:internal_shell.bzl", "inline_sh_binary")
load(
"@rules_pkg//:mappings.bzl",
diff --git a/protobuf.bzl b/protobuf.bzl
index d96eeb4..408bb2e 100644
--- a/protobuf.bzl
+++ b/protobuf.bzl
@@ -2,7 +2,6 @@
load("@rules_cc//cc:defs.bzl", "objc_library")
load("@rules_proto//proto:defs.bzl", "ProtoInfo")
load("@rules_python//python:defs.bzl", "py_library")
-load("@rules_ruby//ruby:defs.bzl", "ruby_library")
def _GetPath(ctx, path):
if ctx.label.workspace_root:
@@ -272,6 +271,9 @@
implementation = _proto_gen_impl,
)
+# Expose for //ruby
+internal_only_proto_gen = _proto_gen
+
def _internal_gen_well_known_protos_java_impl(ctx):
args = ctx.actions.args()
@@ -488,63 +490,6 @@
**kwargs
)
-def internal_ruby_proto_library(
- name,
- srcs = [],
- deps = [],
- includes = ["."],
- default_runtime = "@com_google_protobuf//ruby:protobuf",
- protoc = "@com_google_protobuf//:protoc",
- testonly = None,
- visibility = ["//visibility:public"],
- **kwargs):
- """Bazel rule to create a Ruby protobuf library from proto source files
-
- NOTE: the rule is only an internal workaround to generate protos. The
- interface may change and the rule may be removed when bazel has introduced
- the native rule.
-
- Args:
- name: the name of the ruby_proto_library.
- srcs: the .proto files to compile.
- deps: a list of dependency labels; must be a internal_ruby_proto_library.
- includes: a string indicating the include path of the .proto files.
- default_runtime: the RubyProtobuf runtime
- protoc: the label of the protocol compiler to generate the sources.
- testonly: common rule attribute (see:
- https://bazel.build/reference/be/common-definitions#common-attributes)
- visibility: the visibility of the generated files.
- **kwargs: other keyword arguments that are passed to ruby_library.
-
- """
-
- # Note: we need to run the protoc build twice to get separate targets for
- # the generated header and the source files.
- _proto_gen(
- name = name + "_genproto",
- srcs = srcs,
- deps = [s + "_genproto" for s in deps],
- langs = ["ruby"],
- includes = includes,
- protoc = protoc,
- testonly = testonly,
- visibility = visibility,
- tags = ["manual"],
- )
-
- deps = []
- if default_runtime:
- deps.append(default_runtime)
- ruby_library(
- name = name,
- srcs = [name + "_genproto"],
- deps = deps,
- testonly = testonly,
- visibility = visibility,
- includes = includes,
- **kwargs
- )
-
# When canonical labels are in use, use additional "@" prefix
_canonical_label_prefix = "@" if str(Label("//:protoc")).startswith("@@") else ""
diff --git a/ruby/BUILD.bazel b/ruby/BUILD.bazel
index cc4b477..8533941 100755
--- a/ruby/BUILD.bazel
+++ b/ruby/BUILD.bazel
@@ -6,11 +6,48 @@
load("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_ruby//ruby:defs.bzl", "ruby_library")
-load("//build_defs:internal_shell.bzl", "inline_sh_binary")
-load("//:protobuf.bzl", "internal_ruby_proto_library")
+load(":defs.bzl", "internal_ruby_proto_library")
load("//conformance:defs.bzl", "conformance_test")
load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION")
+internal_ruby_proto_library(
+ name = "well_known_ruby_protos",
+ srcs = ["//:well_known_protos"],
+ default_runtime = "",
+ includes = ["src"],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+)
+
+internal_ruby_proto_library(
+ name = "test_messages_proto2_ruby_proto",
+ testonly = 1,
+ srcs = ["//src/google/protobuf:test_messages_proto2.proto"],
+ includes = ["src/google/protobuf"],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+)
+
+internal_ruby_proto_library(
+ name = "test_messages_proto3_ruby_proto",
+ testonly = 1,
+ srcs = ["//src/google/protobuf:test_messages_proto3.proto"],
+ includes = [
+ "src/google/protobuf",
+ # The above must come first.
+ "src",
+ ],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+ deps = [":well_known_ruby_protos"],
+)
+
################################################################################
# Ruby Runtime
################################################################################
@@ -105,7 +142,7 @@
"//ruby/lib/google:copy_jar",
"//ruby/lib/google:dist_files",
"//ruby/ext/google/protobuf_c:dist_files",
- "//:well_known_ruby_protos",
+ "//ruby:well_known_ruby_protos",
"google-protobuf.gemspec",
],
outs = ["google-protobuf-" + PROTOBUF_RUBY_VERSION + "-java.gem"],
@@ -119,7 +156,7 @@
for utf in $(execpaths @utf8_range//:utf8_range_srcs) $(execpath @utf8_range//:LICENSE); do
mv "tmp/$$utf" "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range"
done
- for wkt in $(execpaths //:well_known_ruby_protos); do
+ for wkt in $(execpaths //ruby:well_known_ruby_protos); do
mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/"
done
mv "tmp/$(execpath //ruby/lib/google:copy_jar)" "tmp/ruby/lib/google"
@@ -141,7 +178,7 @@
srcs = [
"@utf8_range//:utf8_range_srcs",
"@utf8_range//:LICENSE",
- "//:well_known_ruby_protos",
+ "//ruby:well_known_ruby_protos",
"//ruby/ext/google/protobuf_c:dist_files",
"//ruby/lib/google:dist_files",
"google-protobuf.gemspec",
@@ -157,7 +194,7 @@
for utf in $(execpaths @utf8_range//:utf8_range_srcs) $(execpath @utf8_range//:LICENSE); do
mv "tmp/$$utf" "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range"
done
- for wkt in $(execpaths //:well_known_ruby_protos); do
+ for wkt in $(execpaths //ruby:well_known_ruby_protos); do
mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/"
done
cd tmp/ruby
@@ -198,7 +235,7 @@
visibility = [
"//ruby:__subpackages__",
],
- deps = ["//:well_known_ruby_protos"],
+ deps = ["//ruby:well_known_ruby_protos"],
)
conformance_test(
diff --git a/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel b/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
index 34a5391..697f876 100644
--- a/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
+++ b/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
@@ -1,6 +1,6 @@
load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix")
load("@rules_ruby//ruby:defs.bzl", "ruby_test")
-load("//:protobuf.bzl", "internal_ruby_proto_library")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
internal_ruby_proto_library(
name = "test_ruby_protos",
diff --git a/ruby/defs.bzl b/ruby/defs.bzl
new file mode 100644
index 0000000..63de67c
--- /dev/null
+++ b/ruby/defs.bzl
@@ -0,0 +1,64 @@
+"""Definition of ruby rules for Bazel
+
+These are in the //ruby subpackage to avoid leaking a dependency on the
+protocolbuffers/rules_ruby fork to Bazel users who don't use ruby.
+"""
+load("@rules_ruby//ruby:defs.bzl", "ruby_library")
+load("//:protobuf.bzl", "internal_only_proto_gen")
+
+def internal_ruby_proto_library(
+ name,
+ srcs = [],
+ deps = [],
+ includes = ["."],
+ default_runtime = "@com_google_protobuf//ruby:protobuf",
+ protoc = "@com_google_protobuf//:protoc",
+ testonly = None,
+ visibility = ["//visibility:public"],
+ **kwargs):
+ """Bazel rule to create a Ruby protobuf library from proto source files
+
+ NOTE: the rule is only an internal workaround to generate protos. The
+ interface may change and the rule may be removed when bazel has introduced
+ the native rule.
+
+ Args:
+ name: the name of the ruby_proto_library.
+ srcs: the .proto files to compile.
+ deps: a list of dependency labels; must be a internal_ruby_proto_library.
+ includes: a string indicating the include path of the .proto files.
+ default_runtime: the RubyProtobuf runtime
+ protoc: the label of the protocol compiler to generate the sources.
+ testonly: common rule attribute (see:
+ https://bazel.build/reference/be/common-definitions#common-attributes)
+ visibility: the visibility of the generated files.
+ **kwargs: other keyword arguments that are passed to ruby_library.
+
+ """
+
+ # Note: we need to run the protoc build twice to get separate targets for
+ # the generated header and the source files.
+ internal_only_proto_gen(
+ name = name + "_genproto",
+ srcs = srcs,
+ deps = [s + "_genproto" for s in deps],
+ langs = ["ruby"],
+ includes = includes,
+ protoc = protoc,
+ testonly = testonly,
+ visibility = visibility,
+ tags = ["manual"],
+ )
+
+ deps = []
+ if default_runtime:
+ deps.append(default_runtime)
+ ruby_library(
+ name = name,
+ srcs = [name + "_genproto"],
+ deps = deps,
+ testonly = testonly,
+ visibility = visibility,
+ includes = includes,
+ **kwargs
+ )
diff --git a/ruby/lib/google/BUILD.bazel b/ruby/lib/google/BUILD.bazel
index 18f1c18..09125cc 100644
--- a/ruby/lib/google/BUILD.bazel
+++ b/ruby/lib/google/BUILD.bazel
@@ -78,7 +78,7 @@
}),
includes = ["ruby/lib"],
visibility = ["//ruby:__pkg__"],
- deps = ["//:well_known_ruby_protos"] + select({
+ deps = ["//ruby:well_known_ruby_protos"] + select({
"//ruby:ffi_enabled": [
"@protobuf_bundle//:ffi",
"@protobuf_bundle//:ffi-compiler",