blob: 5e15d9241adc5f4dab44dae5ec2e0fd8440968f2 [file] [log] [blame]
# 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__"],
)