| # 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__"], | |
| ) |