mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 05:25:34 +02:00

Along the same lines as https://github.com/rubygems/rubygems/pull/5469,
this adds support for Ruby 3.2 and 3.3 platforms: `:ruby_32`, `mri_32`,
etc.
It also includes a spec that should help catch this earlier in the
future, failing if we don't support platforms for the version of Ruby
that is running the tests.
7cd19d824d
97 lines
3.1 KiB
Ruby
97 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "rubygems/dependency"
|
|
require_relative "shared_helpers"
|
|
require_relative "rubygems_ext"
|
|
|
|
module Bundler
|
|
class Dependency < Gem::Dependency
|
|
attr_reader :autorequire
|
|
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
|
|
|
|
ALL_RUBY_VERSIONS = ((18..27).to_a + (30..33).to_a).freeze
|
|
PLATFORM_MAP = {
|
|
:ruby => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
|
:mri => [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
|
:rbx => [Gem::Platform::RUBY],
|
|
:truffleruby => [Gem::Platform::RUBY],
|
|
:jruby => [Gem::Platform::JAVA, [18, 19]],
|
|
:windows => [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
|
|
:mswin => [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
|
|
:mswin64 => [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
|
|
:mingw => [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
|
|
:x64_mingw => [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
|
|
}.each_with_object({}) do |(platform, spec), hash|
|
|
hash[platform] = spec[0]
|
|
spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
|
|
end.freeze
|
|
|
|
def initialize(name, version, options = {}, &blk)
|
|
type = options["type"] || :runtime
|
|
super(name, version, type)
|
|
|
|
@autorequire = nil
|
|
@groups = Array(options["group"] || :default).map(&:to_sym)
|
|
@source = options["source"]
|
|
@path = options["path"]
|
|
@git = options["git"]
|
|
@github = options["github"]
|
|
@branch = options["branch"]
|
|
@ref = options["ref"]
|
|
@platforms = Array(options["platforms"])
|
|
@env = options["env"]
|
|
@should_include = options.fetch("should_include", true)
|
|
@gemfile = options["gemfile"]
|
|
@force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
|
|
|
|
@autorequire = Array(options["require"] || []) if options.key?("require")
|
|
end
|
|
|
|
# Returns the platforms this dependency is valid for, in the same order as
|
|
# passed in the `valid_platforms` parameter
|
|
def gem_platforms(valid_platforms)
|
|
return [Gem::Platform::RUBY] if force_ruby_platform
|
|
return valid_platforms if @platforms.empty?
|
|
|
|
valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
|
|
end
|
|
|
|
def expanded_platforms
|
|
@expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
|
|
end
|
|
|
|
def should_include?
|
|
@should_include && current_env? && current_platform?
|
|
end
|
|
|
|
def current_env?
|
|
return true unless @env
|
|
if @env.is_a?(Hash)
|
|
@env.all? do |key, val|
|
|
ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
|
|
end
|
|
else
|
|
ENV[@env.to_s]
|
|
end
|
|
end
|
|
|
|
def current_platform?
|
|
return true if @platforms.empty?
|
|
@platforms.any? do |p|
|
|
Bundler.current_ruby.send("#{p}?")
|
|
end
|
|
end
|
|
|
|
def to_lock
|
|
out = super
|
|
out << "!" if source
|
|
out
|
|
end
|
|
|
|
def specific?
|
|
super
|
|
rescue NoMethodError
|
|
requirement != ">= 0"
|
|
end
|
|
end
|
|
end
|