| # Protobuf Ruby runtime |
| # |
| # See also code generation logic under /src/google/protobuf/compiler/ruby. |
| |
| 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("//conformance:defs.bzl", "conformance_test") |
| load("//:protobuf_version.bzl", "PROTOBUF_RUBY_VERSION") |
| |
| ################################################################################ |
| # Ruby Runtime |
| ################################################################################ |
| |
| ruby_library( |
| name = "protobuf", |
| deps = ["//ruby/lib/google:protobuf_lib"], |
| visibility = [ |
| "//visibility:public", |
| ], |
| ) |
| |
| # Note: these can be greatly simplified using inline_sh_binary in Bazel 6, |
| # but doesn't work prior to that due to https://github.com/bazelbuild/bazel/issues/15043. |
| # Instead, we need to manually copy all of the srcs into gendir from a genrule. |
| genrule( |
| name = "jruby_release", |
| srcs = [ |
| "//ruby/lib/google:copy_jar", |
| "//ruby/lib/google:dist_files", |
| "//:well_known_ruby_protos", |
| "google-protobuf.gemspec", |
| ], |
| outs = ["google-protobuf-"+PROTOBUF_RUBY_VERSION+"-java.gem"], |
| cmd = """ |
| set -eux |
| mkdir tmp |
| for src in $(SRCS); do |
| cp --parents -L "$$src" tmp |
| done |
| 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" |
| cd tmp/ruby |
| chmod -R 777 ./ |
| gem build google-protobuf.gemspec |
| cd ../.. |
| mv tmp/ruby/google-protobuf-*.gem $@ |
| """, |
| tags = ["manual"], |
| target_compatible_with = select({ |
| "@rules_ruby//ruby/runtime:config_jruby": [], |
| "//conditions:default": ["@platforms//:incompatible"], |
| }), |
| ) |
| |
| genrule( |
| name = "ruby_release", |
| srcs = [ |
| "@utf8_range//:utf8_range_srcs", |
| "@utf8_range//:LICENSE", |
| "//:well_known_ruby_protos", |
| "//ruby/ext/google/protobuf_c:dist_files", |
| "//ruby/lib/google:dist_files", |
| "google-protobuf.gemspec", |
| ], |
| outs = ["google-protobuf-"+PROTOBUF_RUBY_VERSION+".gem"], |
| cmd = """ |
| set -eux |
| mkdir tmp |
| for src in $(SRCS); do |
| cp --parents -L "$$src" "tmp" |
| done |
| mkdir -p "tmp/ruby/ext/google/protobuf_c/third_party/utf8_range" |
| 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 |
| mv "tmp/$$wkt" "tmp/ruby/lib/google/protobuf/" |
| done |
| cd tmp/ruby |
| chmod -R 777 ./ |
| gem build google-protobuf.gemspec |
| cd ../.. |
| mv tmp/ruby/google-protobuf-*.gem $@ |
| """, |
| tags = ["manual"], |
| target_compatible_with = select({ |
| "@rules_ruby//ruby/runtime:config_ruby": [], |
| "//conditions:default": ["@platforms//:incompatible"], |
| }), |
| ) |
| |
| filegroup( |
| name = "release", |
| srcs = select({ |
| "@rules_ruby//ruby/runtime:config_jruby": [":jruby_release"], |
| "//conditions:default": [":ruby_release"], |
| }), |
| tags = ["manual"], |
| ) |
| |
| |
| ################################################################################ |
| # Tests |
| ################################################################################ |
| |
| # Define this here so the descriptor paths match what we get in Rake tests. |
| internal_ruby_proto_library( |
| name = "test_ruby_protos", |
| srcs = ["//ruby/tests:test_protos"], |
| deps = ["//:well_known_ruby_protos"], |
| includes = [".", "src", "ruby/tests"], |
| visibility = [ |
| "//ruby:__subpackages__", |
| ], |
| ) |
| |
| |
| conformance_test( |
| name = "conformance_test", |
| failure_list = "//conformance:failure_list_ruby.txt", |
| testee = "//conformance:conformance_ruby", |
| text_format_failure_list = "//conformance:text_format_failure_list_ruby.txt", |
| target_compatible_with = select({ |
| "@rules_ruby//ruby/runtime:config_ruby": [], |
| "//conditions:default": ["@platforms//:incompatible"], |
| }), |
| ) |
| |
| conformance_test( |
| name = "conformance_test_jruby", |
| failure_list = "//conformance:failure_list_jruby.txt", |
| testee = "//conformance:conformance_ruby", |
| text_format_failure_list = "//conformance:text_format_failure_list_jruby.txt", |
| target_compatible_with = select({ |
| "@rules_ruby//ruby/runtime:config_jruby": [], |
| "//conditions:default": ["@platforms//:incompatible"], |
| }), |
| ) |
| |
| ################################################################################ |
| # Distribution files |
| ################################################################################ |
| |
| pkg_files( |
| name = "dist_files", |
| srcs = [ |
| "//ruby/ext/google/protobuf_c:dist_files", |
| "//ruby/lib/google:dist_files", |
| "//ruby/src/main/java:dist_files", |
| "//ruby/tests:dist_files", |
| ".gitignore", |
| "BUILD.bazel", |
| "Gemfile", |
| "Rakefile", |
| "README.md", |
| ], |
| strip_prefix = strip_prefix.from_root(""), |
| visibility = ["//pkg:__pkg__"], |
| ) |