blob: e9c41eac6f774d9d792b8ecfd6aa75146f946717 [file] [log] [blame]
From 738d9640e9954f8e10c1060b0b08c943145bed8b Mon Sep 17 00:00:00 2001
From: Mike Kruskal <mkruskal@google.com>
Date: Tue, 21 Nov 2023 12:08:51 -0800
Subject: [PATCH 6/7] Make rules_ruby a dev-only dependency.
There is no canonical rules_ruby repo today, and we don't want our fork to become one. In order to unblock inclusion of Protobuf in the bzlmod registry, we're making this a dev dependency and dropping support for Bazel/Ruby.
Fixes #14569
PiperOrigin-RevId: 584393841
Backport of commit 571b727cb66ad51f89fbef565d3a6c123366a1f5
---
BUILD.bazel | 40 +------------
conformance/BUILD.bazel | 6 +-
protobuf.bzl | 3 +-
protobuf_deps.bzl | 8 ---
ruby/BUILD.bazel | 56 +++++++++++++++++--
.../v3.0.0/tests/BUILD.bazel | 2 +-
ruby/defs.bzl | 24 ++++++++
ruby/lib/google/BUILD.bazel | 7 ++-
src/google/protobuf/BUILD.bazel | 1 +
src/google/protobuf/compiler/BUILD.bazel | 1 +
10 files changed, 88 insertions(+), 60 deletions(-)
create mode 100644 ruby/defs.bzl
diff --git a/BUILD.bazel b/BUILD.bazel
index 637882c49..e2d1687e5 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("@rules_java//java:defs.bzl", "java_lite_proto_library", "java_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"])
@@ -144,17 +144,6 @@ filegroup(
visibility = ["//visibility:public"],
)
-internal_ruby_proto_library(
- name = "well_known_ruby_protos",
- srcs = [":well_known_protos"],
- includes = ["src"],
- default_runtime = "",
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
################################################################################
# Protocol Buffers Compiler
################################################################################
@@ -511,33 +500,6 @@ internal_php_proto_library(
],
)
-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",
- ],
- deps = [":well_known_ruby_protos"],
- visibility = [
- "//conformance:__pkg__",
- "//ruby:__subpackages__",
- ],
-)
-
filegroup(
name = "bzl_srcs",
srcs = glob(["**/*.bzl"]),
diff --git a/conformance/BUILD.bazel b/conformance/BUILD.bazel
index dde520228..4f9b79060 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",
@@ -328,8 +329,7 @@ ruby_binary(
srcs = ["conformance_ruby.rb"],
deps = [
":conformance_ruby_proto",
- "//:test_messages_proto2_ruby_proto",
- "//:test_messages_proto3_ruby_proto",
+ "//ruby:conformance_test_ruby_proto",
],
visibility = ["//ruby:__subpackages__"],
)
diff --git a/protobuf.bzl b/protobuf.bzl
index e7b7a14eb..3f7e001ae 100644
--- a/protobuf.bzl
+++ b/protobuf.bzl
@@ -2,7 +2,6 @@ load("@bazel_skylib//lib:versions.bzl", "versions")
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:
@@ -490,6 +489,7 @@ def internal_objc_proto_library(
def internal_ruby_proto_library(
name,
+ ruby_library,
srcs = [],
deps = [],
includes = ["."],
@@ -506,6 +506,7 @@ def internal_ruby_proto_library(
Args:
name: the name of the ruby_proto_library.
+ ruby_library: the ruby library rules to use.
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.
diff --git a/protobuf_deps.bzl b/protobuf_deps.bzl
index 7d825b4c7..8ce8e6ab0 100644
--- a/protobuf_deps.bzl
+++ b/protobuf_deps.bzl
@@ -107,14 +107,6 @@ def protobuf_deps():
sha256 = "a3e4b4ade7c4a52e757b16a16e94d0b2640333062180cba577d81fac087a501d",
)
- if not native.existing_rule("rules_ruby"):
- _github_archive(
- name = "rules_ruby",
- repo = "https://github.com/protocolbuffers/rules_ruby",
- commit = "5cf6ff74161d7f985b9bf86bb3c5fb16cef6337b",
- sha256 = "c88dd69eb50fcfd7fbc5d7db79adc6631ef0e1d80b3c94efe33ac5ee3ccc37f7",
- )
-
if not native.existing_rule("rules_jvm_external"):
_github_archive(
name = "rules_jvm_external",
diff --git a/ruby/BUILD.bazel b/ruby/BUILD.bazel
index c581355c5..1942dc001 100755
--- a/ruby/BUILD.bazel
+++ b/ruby/BUILD.bazel
@@ -5,7 +5,8 @@
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("//python:internal.bzl", "internal_copy_files")
+load("//ruby:defs.bzl", "internal_ruby_proto_library")
load("//conformance:defs.bzl", "conformance_test")
load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION")
@@ -13,6 +14,49 @@ load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION")
# Ruby Runtime
################################################################################
+internal_copy_files(
+ name = "copied_wkt_proto_files",
+ srcs = [
+ "//:well_known_type_protos",
+ "//src/google/protobuf:descriptor_proto_srcs",
+ "//src/google/protobuf/compiler:plugin.proto",
+ ],
+ strip_prefix = "src",
+)
+
+internal_ruby_proto_library(
+ name = "well_known_ruby_protos",
+ srcs = [":copied_wkt_proto_files"],
+ default_runtime = "",
+ includes = ["."],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+)
+
+internal_copy_files(
+ name = "copied_conformance_test_files",
+ testonly = 1,
+ srcs = [
+ "//src/google/protobuf:test_messages_proto2.proto",
+ "//src/google/protobuf:test_messages_proto3.proto",
+ ],
+ strip_prefix = "src",
+)
+
+internal_ruby_proto_library(
+ name = "conformance_test_ruby_proto",
+ testonly = 1,
+ srcs = [":copied_conformance_test_files"],
+ includes = ["."],
+ visibility = [
+ "//conformance:__pkg__",
+ "//ruby:__subpackages__",
+ ],
+ deps = [":well_known_ruby_protos"],
+)
+
ruby_library(
name = "protobuf",
deps = ["//ruby/lib/google:protobuf_lib"],
@@ -29,7 +73,7 @@ genrule(
srcs = [
"//ruby/lib/google:copy_jar",
"//ruby/lib/google:dist_files",
- "//:well_known_ruby_protos",
+ ":well_known_ruby_protos",
"google-protobuf.gemspec",
],
outs = ["google-protobuf-"+PROTOBUF_RUBY_VERSION+"-java.gem"],
@@ -39,7 +83,7 @@ genrule(
for src in $(SRCS); do
cp --parents -L "$$src" tmp
done
- for wkt in $(execpaths //:well_known_ruby_protos); do
+ for wkt in $(execpaths :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"
@@ -61,7 +105,7 @@ genrule(
srcs = [
"@utf8_range//:utf8_range_srcs",
"@utf8_range//:LICENSE",
- "//:well_known_ruby_protos",
+ ":well_known_ruby_protos",
"//ruby/ext/google/protobuf_c:dist_files",
"//ruby/lib/google:dist_files",
"google-protobuf.gemspec",
@@ -77,7 +121,7 @@ genrule(
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 :well_known_ruby_protos); do
mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/"
done
cd tmp/ruby
@@ -111,7 +155,7 @@ filegroup(
internal_ruby_proto_library(
name = "test_ruby_protos",
srcs = ["//ruby/tests:test_protos"],
- deps = ["//:well_known_ruby_protos"],
+ deps = [":well_known_ruby_protos"],
includes = [".", "src", "ruby/tests"],
visibility = [
"//ruby:__subpackages__",
diff --git a/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel b/ruby/compatibility_tests/v3.0.0/tests/BUILD.bazel
index e165b0bb2..1b92a0863 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 000000000..7f60b47f5
--- /dev/null
+++ b/ruby/defs.bzl
@@ -0,0 +1,24 @@
+"""Wrapper around internal_ruby_proto_library to supply our rules_ruby"""
+
+load("@rules_ruby//ruby:defs.bzl", "ruby_library")
+load("//:protobuf.bzl", _internal_ruby_proto_library = "internal_ruby_proto_library")
+
+def internal_ruby_proto_library(
+ name,
+ **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.
+ **kwargs: other keyword arguments that are passed to ruby_library.
+
+ """
+ _internal_ruby_proto_library(
+ name,
+ ruby_library,
+ **kwargs
+ )
diff --git a/ruby/lib/google/BUILD.bazel b/ruby/lib/google/BUILD.bazel
index 4cfa5cbcf..f1f0ce789 100644
--- a/ruby/lib/google/BUILD.bazel
+++ b/ruby/lib/google/BUILD.bazel
@@ -46,8 +46,11 @@ ruby_library(
srcs = glob([
"**/*.rb",
]),
- deps = ["//:well_known_ruby_protos"],
- includes = ["ruby/lib"],
+ deps = ["//ruby:well_known_ruby_protos"],
+ includes = [
+ "ruby",
+ "ruby/lib",
+ ],
data = select({
"@rules_ruby//ruby/runtime:config_jruby": ["protobuf_java.jar"],
"@platforms//os:osx": ["protobuf_c.bundle"],
diff --git a/src/google/protobuf/BUILD.bazel b/src/google/protobuf/BUILD.bazel
index 77ed2309f..f7f1c7b48 100644
--- a/src/google/protobuf/BUILD.bazel
+++ b/src/google/protobuf/BUILD.bazel
@@ -732,6 +732,7 @@ exports_files(
visibility = [
"//:__pkg__",
"//python:__pkg__",
+ "//ruby:__pkg__",
],
)
diff --git a/src/google/protobuf/compiler/BUILD.bazel b/src/google/protobuf/compiler/BUILD.bazel
index a2171c806..936d7a21d 100644
--- a/src/google/protobuf/compiler/BUILD.bazel
+++ b/src/google/protobuf/compiler/BUILD.bazel
@@ -196,6 +196,7 @@ exports_files(
visibility = [
"//:__pkg__",
"//python:__pkg__",
+ "//ruby:__pkg__",
],
)
--
2.42.1