| # 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", |
| "//third_party/utf8_range:all_files", |
| ] + 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__"], |
| ) |