dep-protobuf/ruby/google-protobuf.gemspec
Matthew Wear ae3f25c964 ruby: make bigdecimal a development dependency (#28928)
Fixes #28927

I ran into this while packaging the OpenTelemetry Ruby auto-instrumentation as a prebuilt gem bundle (see #28927 for the full write up). The tl;dr: `bigdecimal` is only used by the test suite, so it only needs to be a development dependency. The only references are:

8baed752ce/ruby/tests/common_tests.rb (L9)

8baed752ce/ruby/tests/common_tests.rb (L1708)

As a runtime dependency it causes pain for anyone vendoring the gem. `bigdecimal` is a native extension with no precompiled build, so it has to be compiled from source for each Ruby ABI, making it the one gem that stops a prebuilt bundle from working across Ruby versions, despite never being loaded at runtime.

This PR moves `bigdecimal` from a runtime to a development dependency. For consistency it also moves `bigdecimal` into the `test` group in the Gemfile, since that's the only environment that needs it.

Closes #28928

COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/28928 from mwear:ruby-bigdecimal-dev-dependency 6fb8ee4fad
PiperOrigin-RevId: 957450742
2026-07-31 19:47:08 -07:00

55 lines
2.6 KiB
Ruby

Gem::Specification.new do |s|
s.name = "google-protobuf"
s.version = "4.37.0"
git_tag = "v#{s.version.to_s.sub('.rc.', '-rc')}" # Converts X.Y.Z.rc.N to vX.Y.Z-rcN, used for the git tag
s.licenses = ["BSD-3-Clause"]
s.summary = "Protocol Buffers"
s.description = "Protocol Buffers are Google's data interchange format."
s.homepage = "https://developers.google.com/protocol-buffers"
s.authors = ["Protobuf Authors"]
s.email = "protobuf@googlegroups.com"
s.metadata = { "source_code_uri" => "https://github.com/protocolbuffers/protobuf/tree/#{git_tag}/ruby" }
s.require_paths = ["lib"]
s.files = Dir.glob('lib/**/*.{rb,rake}')
if RUBY_PLATFORM == "java"
s.platform = "java"
s.files += ["lib/google/protobuf_java.jar"] +
Dir.glob('ext/**/*').reject do |file|
File.basename(file) =~ /^((convert|defs|map|repeated_field)\.[ch]|
BUILD\.bazel|extconf\.rb)$/x
end
s.extensions = ["ext/google/protobuf_c/Rakefile"]
s.add_dependency "ffi", "~>1"
s.add_dependency "ffi-compiler", "~>1"
else
s.files += Dir.glob('ext/**/*').reject do |file|
File.basename(file) =~ /^(BUILD\.bazel)$/
end
# When installing this gem from git via bundler
# (ie: 'gem "google-protobuf", git: "https://.../protobuf.git"' in your
# Gemfile), Rakefile is necessary so the prerequisite tasks run to copy
# third party C libraries and generate well known protobufs. When building
# the gem via `rake gem`, these steps will have already occurred, and so we
# replace the `Rakefile` extension with `ext/google/protobuf_c/extconf.rb`.
# See the `Gem::PackageTask.new` declaration in `Rakefile` for more details.
s.extensions = [
File.exist?("Rakefile") ? "Rakefile" : "ext/google/protobuf_c/extconf.rb",
"ext/google/protobuf_c/Rakefile"
]
end
s.required_ruby_version = '>= 3.2'
# TODO: evaluate removing Rakefile and moving logic to extconf.rb, so that we
# can remove this runtime dependency on rake. See the discussion here for
# more details:
# https://github.com/protocolbuffers/protobuf/pull/15203
s.add_dependency "rake", "~> 13.3"
s.add_development_dependency "ffi", "~>1"
s.add_development_dependency "ffi-compiler", "~>1"
s.add_development_dependency "rake-compiler", "~> 1.3"
s.add_development_dependency "rake-compiler-dock", "~> 1.11"
s.add_development_dependency "test-unit", '~> 3.7'
# bigdecimal is used in tests. It's no longer a built-in gem as of Ruby 3.4
# so an explicit dependency is needed.
s.add_development_dependency "bigdecimal"
end