|  | # Protobuf Ruby runtime | 
|  | # | 
|  | # See also code generation logic under /src/google/protobuf/compiler/ruby. | 
|  |  | 
|  | load("@rules_pkg//:mappings.bzl", "pkg_files", "strip_prefix") | 
|  | load("@upb//cmake:build_defs.bzl", "staleness_test") | 
|  | load("//build_defs:internal_shell.bzl", "inline_sh_test") | 
|  | load("//conformance:defs.bzl", "conformance_test") | 
|  | load("//:protobuf.bzl", "internal_ruby_proto_library") | 
|  | load(":internal.bzl", "internal_ruby_extension") | 
|  |  | 
|  | ################################################################################ | 
|  | # Ruby Runtime | 
|  | ################################################################################ | 
|  |  | 
|  | config_setting( | 
|  | name = "java_ruby", | 
|  | values = {"define": "ruby_platform=java"}, | 
|  | ) | 
|  |  | 
|  | config_setting( | 
|  | name = "c_ruby", | 
|  | values = {"define": "ruby_platform=c"}, | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "srcs", | 
|  | srcs = glob([ | 
|  | "lib/**/*.rb", | 
|  | "src/**/*.proto", | 
|  | ]) + [ | 
|  | "Gemfile", | 
|  | "Rakefile", | 
|  | "google-protobuf.gemspec", | 
|  | "pom.xml", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | internal_ruby_extension( | 
|  | name = "protobuf_c_mac", | 
|  | extension = "lib/google/protobuf_c.bundle", | 
|  | deps = glob(["ext/google/protobuf_c/*"]), | 
|  | target_compatible_with = select({ | 
|  | ":java_ruby": ["@platforms//:incompatible"], | 
|  | "//conditions:default": ["@platforms//os:osx"], | 
|  | }), | 
|  | ) | 
|  |  | 
|  | internal_ruby_extension( | 
|  | name = "protobuf_c", | 
|  | extension = "lib/google/protobuf_c.so", | 
|  | deps = glob(["ext/google/protobuf_c/*"]), | 
|  | target_compatible_with = select({ | 
|  | ":java_ruby": ["@platforms//:incompatible"], | 
|  | "@platforms//os:osx": ["@platforms//:incompatible"], | 
|  | "//conditions:default": [], | 
|  | }), | 
|  | ) | 
|  |  | 
|  | internal_ruby_extension( | 
|  | name = "protobuf_java", | 
|  | extension = "lib/google/protobuf_java.jar", | 
|  | deps = glob(["src/**/*.java"]), | 
|  | target_compatible_with = select({ | 
|  | ":java_ruby": [], | 
|  | "//conditions:default": ["@platforms//:incompatible"], | 
|  | }), | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "protobuf", | 
|  | srcs = [ | 
|  | ":srcs", | 
|  | "@utf8_range//:utf8_range_srcs", | 
|  | ] + select({ | 
|  | ":java_ruby": [":protobuf_java"], | 
|  | "@bazel_tools//src/conditions:darwin": [":protobuf_c_mac"], | 
|  | "//conditions:default": [":protobuf_c"], | 
|  | }), | 
|  | visibility = [ | 
|  | "//conformance:__subpackages__", | 
|  | "//ruby:__subpackages__", | 
|  | ], | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # Tests | 
|  | ################################################################################ | 
|  |  | 
|  | filegroup( | 
|  | name = "tests", | 
|  | srcs = glob(["tests/*.rb"]), | 
|  | ) | 
|  |  | 
|  | filegroup( | 
|  | name = "test_protos", | 
|  | srcs = glob(["tests/*.proto"]), | 
|  | ) | 
|  |  | 
|  | internal_ruby_proto_library( | 
|  | name = "test_ruby_protos", | 
|  | srcs = [":test_protos"], | 
|  | proto_deps = ["//:well_known_protos"], | 
|  | includes = [".", "src", "ruby/tests"], | 
|  | ) | 
|  |  | 
|  | inline_sh_test( | 
|  | name = "test", | 
|  | srcs = [ | 
|  | "Rakefile", | 
|  | ], | 
|  | deps = [ | 
|  | ":protobuf", | 
|  | ":test_ruby_protos", | 
|  | ":tests", | 
|  | "//:well_known_ruby_protos", | 
|  | ], | 
|  | cmd = """ | 
|  | pushd `dirname $(location Rakefile)` | 
|  | RUBYLIB=../src:tests:. BAZEL=true rake test | 
|  | popd | 
|  | """, | 
|  | ) | 
|  |  | 
|  | inline_sh_test( | 
|  | name = "gc_test", | 
|  | srcs = [ | 
|  | "Rakefile", | 
|  | ], | 
|  | deps = [ | 
|  | ":protobuf", | 
|  | ":test_ruby_protos", | 
|  | ":tests", | 
|  | "//:well_known_ruby_protos", | 
|  | ], | 
|  | cmd = """ | 
|  | pushd `dirname $(location Rakefile)` | 
|  | RUBYLIB=../src:tests:. BAZEL=true rake gc_test | 
|  | popd | 
|  | """, | 
|  | ) | 
|  |  | 
|  | 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({ | 
|  | ":java_ruby": ["@platforms//:incompatible"], | 
|  | "//conditions:default": [], | 
|  | }), | 
|  | ) | 
|  |  | 
|  | 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({ | 
|  | ":java_ruby": [], | 
|  | "//conditions:default": ["@platforms//:incompatible"], | 
|  | }), | 
|  | ) | 
|  |  | 
|  | genrule( | 
|  | name = "copy_ruby_amalgamation_h", | 
|  | srcs = ["@upb//:ruby-upb.h"], | 
|  | outs = ["generated-in/ext/google/protobuf_c/ruby-upb.h"], | 
|  | cmd = "cp $< $@", | 
|  | ) | 
|  |  | 
|  | genrule( | 
|  | name = "copy_ruby_amalgamation_c", | 
|  | srcs = ["@upb//:ruby-upb.c"], | 
|  | outs = ["generated-in/ext/google/protobuf_c/ruby-upb.c"], | 
|  | cmd = "cp $< $@", | 
|  | ) | 
|  |  | 
|  | staleness_test( | 
|  | name = "test_amalgamation_staleness", | 
|  | outs = [ | 
|  | "ext/google/protobuf_c/ruby-upb.h", | 
|  | "ext/google/protobuf_c/ruby-upb.c", | 
|  | ], | 
|  | generated_pattern = "generated-in/%s", | 
|  | ) | 
|  |  | 
|  | ################################################################################ | 
|  | # Distribution files | 
|  | ################################################################################ | 
|  |  | 
|  | pkg_files( | 
|  | name = "dist_files", | 
|  | srcs = glob([ | 
|  | "tests/*.proto", | 
|  | "tests/*.rb", | 
|  | ]) + [ | 
|  | ":srcs", | 
|  | ".gitignore", | 
|  | "BUILD.bazel", | 
|  | "internal.bzl", | 
|  | "Gemfile", | 
|  | "README.md", | 
|  | "travis-test.sh", | 
|  | ], | 
|  | strip_prefix = strip_prefix.from_root(""), | 
|  | visibility = ["//pkg:__pkg__"], | 
|  | ) |