diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index d2399ca..a59f941 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ /*/ /ruby-*.tar.xz -/rexml-*.gem /*.rpm - -!/plans/ diff --git a/macros.rubygems b/macros.rubygems index 7146c77..8c4d067 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,55 +2,14 @@ %gem_dir %{_datadir}/gems %gem_archdir %{_libdir}/gems -# %gem_prerelease - Provides prerelease string if available. -# -# Usage: %gem_prerelease [custom_gem_name] -# -# If avilable, prints prerelease string, which is a %prerelease macro by -# default. When [custom_gem_name] is provided, the custom_gem_name is used to -# derive %custom_gem_name_prerelease macro, which can be predefined. -# -# Please note that for the prerelease macros are the dashes in -# [custom_gem_name] replaced by underscores. -# -%gem_prerelease() %{?1:%{expand:%%{?%{gsub %{1} - _}_prerelease}}}%{!?1:%{?prerelease}} - -# %gem_version - Provides version string (including prerelease if available). -# -# Usage: %gem_version [custom_gem_name] -# -# Prints version (including prerelease string), that is %version macro by -# default. When [custom_gem_name] is provided, the custom_gem_name is used to -# derive %custom_gem_name_version macro which needs to be predefined. -# -# Please note that for the version macros are the dashes in [custom_gem_name] -# replaced by underscores. -# -%gem_version() %{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{gem_prerelease %{?1}} - -# %gem_name_version - Provides gem_name-version string. -# -# Usage: %gem_name_version [custom_gem_name] -# -# Prints gem_name-version string, by default joining %gem_name, %version and -# %prerelease macros. When [custom_gem_name] is provided, the -# custom_gem_name is joined with version as provided by %gem_version macro. -# -%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{gem_version %{?1}} - # Common gem locations and files. -# -# These macros leverages %gem_name_version macro and accepts custom gem_name. -# -# -d Use default gem install location. -# -%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}} -%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}} -%gem_libdir() %{gem_instdir %{?1}}/lib -%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem -%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec -%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}} -%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb +%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease} +%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease} +%gem_libdir %{gem_instdir}/lib +%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem +%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec +%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} +%gem_plugin %{gem_dir}/plugins/%{gem_name}_plugin.rb # %gem_install - Install gem into appropriate directory. diff --git a/operating_system.rb b/operating_system.rb index fd56386..d95b303 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,51 +87,41 @@ module Gem # Remove methods we are going to override. This avoids "method redefined;" # warnings otherwise issued by Ruby. + remove_method :operating_system_defaults if method_defined? :operating_system_defaults remove_method :default_dir if method_defined? :default_dir - remove_method :default_specifications_dir if method_defined? :default_specifications_dir remove_method :default_path if method_defined? :default_path - remove_method :default_bindir if method_defined? :default_bindir remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for + ## + # Regular user installs into user directory, root manages /usr/local. + + def operating_system_defaults + unless opt_build_root? + options = if Process.uid == 0 + "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}" + else + "--user-install --bindir #{File.join [Dir.home, 'bin']}" + end + + {"gem" => options} + else + {} + end + end + ## # RubyGems default overrides. def default_dir - if opt_build_root? - Gem.default_dirs[:system][:gem_dir] - elsif Process.uid == 0 - Gem.default_dirs[:local][:gem_dir] - else - Gem.user_dir - end + Gem.default_dirs[:system][:gem_dir] end - ## - # Path to specification files of default gems. - - def default_specifications_dir - @default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default") - end - - ## - # Default gem load path - def default_path path = default_dirs.collect {|location, paths| paths[:gem_dir]} path.unshift Gem.user_dir if File.exist? Gem.user_home path end - def default_bindir - if opt_build_root? - Gem.default_dirs[:system][:bin_dir] - elsif Process.uid == 0 - Gem.default_dirs[:local][:bin_dir] - else - File.join [Dir.home, 'bin'] - end - end - def default_ext_dir_for base_dir dir = if rpmbuild? build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] diff --git a/plans/all.fmf b/plans/all.fmf deleted file mode 100644 index 7b06cfb..0000000 --- a/plans/all.fmf +++ /dev/null @@ -1,6 +0,0 @@ -summary: Test plan with all Fedora tests -discover: - how: fmf - url: https://src.fedoraproject.org/tests/ruby.git -execute: - how: tmt diff --git a/rdoc-pr1531-fix-mutilple-document-installation.patch b/rdoc-pr1531-fix-mutilple-document-installation.patch deleted file mode 100644 index 192863f..0000000 --- a/rdoc-pr1531-fix-mutilple-document-installation.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 994ee4c17fb8c217ab0335df55620c6bdb5d5cbe Mon Sep 17 00:00:00 2001 -From: tompng -Date: Fri, 26 Dec 2025 04:57:12 +0900 -Subject: [PATCH] Fix comment_location for merged ClassModule - ---- - lib/rdoc/code_object/class_module.rb | 7 ++++++- - test/rdoc/code_object/class_module_test.rb | 6 ++++++ - 2 files changed, 12 insertions(+), 1 deletion(-) - -diff --git a/lib/rdoc/code_object/class_module.rb b/lib/rdoc/code_object/class_module.rb -index b6bed352a2..d7ee36f950 100644 ---- a/lib/rdoc/code_object/class_module.rb -+++ b/lib/rdoc/code_object/class_module.rb -@@ -477,7 +477,12 @@ def merge(class_module) - document = document.merge other_document - - @comment = RDoc::Comment.from_document(document) -- @comment_location = document -+ -+ @comment_location = if document.parts.first.is_a?(RDoc::Markup::Document) -+ document.parts.map { |doc| [doc, doc.file] } -+ else -+ [[document, document.file]] -+ end - end - - cm = class_module diff --git a/rpm_test_helper.rb b/rpm_test_helper.rb deleted file mode 100644 index 671ca55..0000000 --- a/rpm_test_helper.rb +++ /dev/null @@ -1,166 +0,0 @@ -require 'tmpdir' -require 'tempfile' -require 'fileutils' -# Available in Ruby upstream sources under tool/lib/envutil.rb -# Required for finding and setting up the built ruby binary. -require 'envutil' - -module RPMTestHelper - def setup - @tmpdir = Dir.mktmpdir - @tempfiles = [] - end - - def teardown - @tempfiles.each do |file| - file.close - file.unlink - end - - FileUtils.rmtree(@tmpdir) - end - - GENERATOR_SCRIPT = ENV['GENERATOR_SCRIPT'].clone.freeze - if GENERATOR_SCRIPT.nil? || GENERATOR_SCRIPT == '' - raise "GENERATOR_SCRIPT is not specified." \ - "Specify the ENV variable with absolute path to the generator." - end - - Dependency = Struct.new('Dependency', :name, :requirements) do - def to_rpm_str - "rubygem(#{self.name})" - end - end - - def make_gemspec(gem_info) - file = Tempfile.new('req_gemspec', @tmpdir) - # Fake gemspec with enough to pass most checks - # Rubygems uses to validate the format. - gemspec_contents = <<~EOF - # -*- encoding: utf-8 -*- - # stub: #{gem_info.name} #{gem_info.version} ruby lib - - Gem::Specification.new do |s| - s.name = "#{gem_info.name}".freeze - s.version = "#{gem_info.version}" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["John Doe".freeze] - s.bindir = "bin".freeze - s.date = "2023-12-15" - s.description = "Fake gemspec helper for testing Rubygem Generators".freeze - s.email = ["example@example.com".freeze] - s.files = ["LICENSE.txt".freeze, "lib/#{gem_info.name}.rb".freeze, "#{gem_info.name}.gemspec".freeze] - s.homepage = "https://pkgs.fedoraproject.org/rpms/ruby".freeze - s.licenses = ["MIT".freeze] - s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze) - s.rubygems_version = "3.3.5".freeze - s.summary = "Fake gemspec for testing Rubygem Generators".freeze - - if s.respond_to? :specification_version then - s.specification_version = 4 - end - - if s.respond_to? :add_runtime_dependency then - #{gem_info.gemspec_runtime_dep_str} - else - #{gem_info.gemspec_dep_str} - end - end - EOF - - file.write gemspec_contents - file.rewind - @tempfiles << file - file - end - - # Caller is expected to close subprocess stdin via #close_write - # in order to let subprocess proceed if the process is reading - # from STDIN in a loop. - def rb_subprocess(*args) - args = [GENERATOR_SCRIPT] if args.empty? - ruby = EnvUtil.rubybin - f = IO.popen([ruby] + args, 'r+') #, external_encoding: external_encoding) - yield(f) - ensure - f.close unless !f || f.closed? - end - - def run_generator_single_file(gem_info) - lines = [] - gemspec_f = make_gemspec(gem_info) - - rb_subprocess do |io| - io.write gemspec_f.path - io.close_write - lines = io.readlines - end - - lines - end - - def helper_rubygems_dependency - "ruby(rubygems)" - end - - class GemInfo - attr_accessor :name, :version, :dependencies - - def initialize(name: 'foo', version: '1.2.3', dependencies: []) - @name = name - @version = version - @dependencies = dependencies - end - - def dependencies=(other) - raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Expected array of `Dependency' elements" \ - unless other.is_a?(Array) && other.all? { |elem| elem.respond_to?(:name) && elem.respond_to?(:requirements) } - - @dependencies = other - end - - def to_rpm_str - "rubygem(#{self.name})" - end - - def gemspec_dep_str - return '' if self.dependencies.nil? || self.dependencies.empty? - @dependencies.inject("") do |memo, dep| - memo += if dep.requirements && !dep.requirements.empty? - %Q|s.add_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| - else - %Q|s.add_dependency(%q<#{dep.name}>.freeze)| - end - - memo += "\n" - end - end - - def gemspec_runtime_dep_str - return '' if self.dependencies.nil? || self.dependencies.empty? - - @dependencies.inject("") do |memo, dep| - memo += if dep.requirements && !dep.requirements.empty? - %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| - else - %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze)| - end - - memo += "\n" - end - end - - private - - def handle_dep_requirements(reqs) - raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must be an array." \ - unless reqs.is_a? Array - raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must not be empty for this method." \ - if reqs.empty? - - '[ "' + reqs.join('", "') + '" ]' - end - end -end diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 8551d79..81261f1 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -1,4 +1,4 @@ -From e1293f665128b0d9c5bfa0b5beeab4afebf07e6a Mon Sep 17 00:00:00 2001 +From 07c666ba5c3360dd6f43605a8ac7c85c99c1721f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 1 Oct 2013 12:22:40 +0200 Subject: [PATCH] Allow to configure libruby.so placement. @@ -8,10 +8,10 @@ Subject: [PATCH] Allow to configure libruby.so placement. 1 file changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac -index a64358fada..b3bdfad1eb 100644 +index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3381,6 +3381,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' @@ -23,3 +23,6 @@ index a64358fada..b3bdfad1eb 100644 sitearchlibdir='${libdir}/${sitearch}' archincludedir='${includedir}/${arch}' sitearchincludedir='${includedir}/${sitearch}' +-- +2.22.0 + diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 045d6ae..aacd076 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -1,4 +1,4 @@ -From 6062f4976c5b51f8b952b9f6745175be7b1c5ff9 Mon Sep 17 00:00:00 2001 +From e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 8 Feb 2013 22:48:41 +0100 Subject: [PATCH] Prevent duplicated paths when empty version string is @@ -11,10 +11,10 @@ Subject: [PATCH] Prevent duplicated paths when empty version string is 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac -index 2bc5153141..a64358fada 100644 +index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4472,7 +4472,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4039,7 +4039,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -25,7 +25,7 @@ index 2bc5153141..a64358fada 100644 rubylibdir='${rubylibprefix}'${ruby_version_dir} diff --git a/loadpath.c b/loadpath.c -index b8969e6998..bbfd4daa78 100644 +index 9160031..0d4d953 100644 --- a/loadpath.c +++ b/loadpath.c @@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] = @@ -63,10 +63,10 @@ index b8969e6998..bbfd4daa78 100644 RUBY_LIB "\0" diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index db74115730..2b01796abf 100755 +index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -114,7 +114,7 @@ +@@ -115,7 +115,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ @@ -75,3 +75,6 @@ index db74115730..2b01796abf 100755 when /^ARCH_FLAG$/ val = "arch_flag || #{val}" if universal when /^UNIVERSAL_ARCHNAMES$/ +-- +1.9.0 + diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 6ecfb2e..0e788dc 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -1,4 +1,4 @@ -From 9e70f6e4b8771965a30ecfb6d1c6015df350ca55 Mon Sep 17 00:00:00 2001 +From 2089cab72b38d6d5e7ba2b596e41014209acad30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 19 Nov 2012 14:37:28 +0100 Subject: [PATCH] Always use i386. @@ -8,10 +8,10 @@ Subject: [PATCH] Always use i386. 1 file changed, 2 insertions(+) diff --git a/configure.ac b/configure.ac -index b3bdfad1eb..411322a27f 100644 +index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4536,6 +4536,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4103,6 +4103,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl @@ -20,3 +20,6 @@ index b3bdfad1eb..411322a27f 100644 AS_IF([test "${universal_binary-no}" = yes ], [ arch="universal-${target_os}" AS_IF([test "${rb_cv_architecture_available}" = yes], [ +-- +1.8.3.1 + diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 969fefa..b3cb639 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -1,4 +1,4 @@ -From c7952996ac9738a14bea0a1a971fea13460a6c94 Mon Sep 17 00:00:00 2001 +From 94da59aafacc6a9efe829529eb51385588d6f149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Nov 2011 13:14:45 +0100 Subject: [PATCH] Allow to install RubyGems into custom location, outside of @@ -12,10 +12,10 @@ Subject: [PATCH] Allow to install RubyGems into custom location, outside of 4 files changed, 22 insertions(+) diff --git a/configure.ac b/configure.ac -index 411322a27f..b5f842a512 100644 +index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4508,6 +4508,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4075,6 +4075,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 411322a27f..b5f842a512 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4099,6 +4104,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -35,7 +35,7 @@ index 411322a27f..b5f842a512 100644 AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/loadpath.c b/loadpath.c -index bbfd4daa78..69677a9297 100644 +index 623dc9d..74c5d9e 100644 --- a/loadpath.c +++ b/loadpath.c @@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] = @@ -50,7 +50,7 @@ index bbfd4daa78..69677a9297 100644 #ifdef RUBY_THINARCH RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl -index 9ba2bd6de5..4ec4ce9353 100644 +index 79c003e..34f2382 100644 --- a/template/verconf.h.tmpl +++ b/template/verconf.h.tmpl @@ -36,6 +36,9 @@ @@ -64,10 +64,10 @@ index 9ba2bd6de5..4ec4ce9353 100644 % R = {} % R["ruby_version"] = '"RUBY_LIB_VERSION"' diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index a9e6365b27..7117e65e82 100755 +index e9110a17ca..76a1f0a315 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false) +@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index a9e6365b27..7117e65e82 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -1082,7 +1083,16 @@ def (bins = []).add(name) +@@ -590,7 +591,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] @@ -92,3 +92,6 @@ index a9e6365b27..7117e65e82 100755 end install?(:local, :comm, :hdr, :'comm-hdr') do +-- +1.8.3.1 + diff --git a/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch b/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch deleted file mode 100644 index 82f5963..0000000 --- a/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch +++ /dev/null @@ -1,22 +0,0 @@ -From f833e213596b0bcfad8264a555eb5093303fb5f2 Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Thu, 25 Sep 2025 12:26:39 +0200 -Subject: [PATCH] Add ruby_version_dir_name support for RDoc. - ---- - lib/rdoc/ri/paths.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb -index 8e89b04e..731f9e36 100644 ---- a/lib/rdoc/ri/paths.rb -+++ b/lib/rdoc/ri/paths.rb -@@ -10,7 +10,7 @@ module RDoc::RI::Paths - #:stopdoc: - require 'rbconfig' - -- version = RbConfig::CONFIG['ruby_version'] -+ version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - - BASE = File.join RbConfig::CONFIG['ridir'], version - diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 2eb5d00..cb2871e 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -1,4 +1,4 @@ -From 5406ea4b4b13db747e5c1f8341bb257b4da04435 Mon Sep 17 00:00:00 2001 +From 4fc1be3af3f58621bb751c9e63c208b15c0e8d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 31 Mar 2015 16:21:04 +0200 Subject: [PATCH 1/4] Use ruby_version_dir_name for versioned directories. @@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.ac | 66 ++++++++++++++++++++++++--------------------- + configure.ac | 64 ++++++++++++++++++++++++--------------------- template/ruby.pc.in | 1 + - 2 files changed, 36 insertions(+), 31 deletions(-) + 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/configure.ac b/configure.ac -index 2bbce78fd0..9d8662369c 100644 +index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -4422,9 +4422,6 @@ AS_CASE(["$target_os"], +@@ -3990,9 +3990,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 2bbce78fd0..9d8662369c 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir, +@@ -4015,56 +4015,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -46,7 +46,6 @@ index 2bbce78fd0..9d8662369c 100644 -AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ - { - echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" -- echo '@%:@include "confdefs.h"' - echo '#define STRINGIZE(x) x' - test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' - echo '#include "version.h"' @@ -62,7 +61,6 @@ index 2bbce78fd0..9d8662369c 100644 +RUBY_LIB_VERSION_STYLE='3 /* full */' +{ +echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" -+echo '@%:@include "confdefs.h"' +echo '#define STRINGIZE(x) x' +test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' +echo '#include "version.h"' @@ -122,7 +120,7 @@ index 2bbce78fd0..9d8662369c 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4514,6 +4517,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4081,6 +4081,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -131,7 +129,7 @@ index 2bbce78fd0..9d8662369c 100644 AC_SUBST(rubyarchdir)dnl AC_SUBST(sitedir)dnl diff --git a/template/ruby.pc.in b/template/ruby.pc.in -index 6901ec2320..9b7b787208 100644 +index 8a2c066..c81b211 100644 --- a/template/ruby.pc.in +++ b/template/ruby.pc.in @@ -2,6 +2,7 @@ MAJOR=@MAJOR@ @@ -142,21 +140,38 @@ index 6901ec2320..9b7b787208 100644 RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ arch=@arch@ +-- +2.1.0 -From baff562149499973123d2187620201be641c6538 Mon Sep 17 00:00:00 2001 + +From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 31 Mar 2015 16:37:26 +0200 Subject: [PATCH 2/4] Add ruby_version_dir_name support for RDoc. --- - tool/rbinstall.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + lib/rdoc/ri/paths.rb | 2 +- + tool/rbinstall.rb | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) +diff --git a/lib/rdoc/ri/paths.rb b/lib/rdoc/ri/paths.rb +index 970cb91..5bf8230 100644 +--- a/lib/rdoc/ri/paths.rb ++++ b/lib/rdoc/ri/paths.rb +@@ -10,7 +10,7 @@ module RDoc::RI::Paths + #:stopdoc: + require 'rbconfig' + +- version = RbConfig::CONFIG['ruby_version'] ++ version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + + BASE = File.join RbConfig::CONFIG['ridir'], version + diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 874c3ef1d9..a9e6365b27 100755 +index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -1053,7 +1053,7 @@ def (bins = []).add(name) +@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -165,8 +180,11 @@ index 874c3ef1d9..a9e6365b27 100755 prepare "rdoc", ridatadir install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end +-- +2.23.0 -From 7cf872a9a34f38d71cd2ca04ac114b4ea85cc56c Mon Sep 17 00:00:00 2001 + +From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 31 Mar 2015 16:37:44 +0200 Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. @@ -177,10 +195,10 @@ Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index 90f09fc191..f6b8a03b95 100644 +index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -35,7 +35,7 @@ def self.default_spec_cache_dir +@@ -34,7 +34,7 @@ def self.default_spec_cache_dir # specified in the environment def self.default_dir @@ -189,7 +207,7 @@ index 90f09fc191..f6b8a03b95 100644 end ## -@@ -104,7 +104,8 @@ def self.user_dir +@@ -103,7 +103,8 @@ def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] @@ -199,7 +217,7 @@ index 90f09fc191..f6b8a03b95 100644 File.join parts end -@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc: +@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? "vendordir" File.join RbConfig::CONFIG["vendordir"], "gems", @@ -209,10 +227,10 @@ index 90f09fc191..f6b8a03b95 100644 ## diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index 74c8953904..1f3bd91d51 100644 +index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1339,7 +1339,8 @@ def test_self_use_paths +@@ -1395,7 +1395,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -222,7 +240,7 @@ index 74c8953904..1f3bd91d51 100644 FileUtils.mkdir_p File.join(parts) -@@ -1415,7 +1416,7 @@ def test_self_vendor_dir +@@ -1471,7 +1472,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", @@ -231,8 +249,11 @@ index 74c8953904..1f3bd91d51 100644 assert_equal expected, Gem.vendor_dir end +-- +2.1.0 -From 17cb98b7b78f8bfc511feffbe061747f676055b1 Mon Sep 17 00:00:00 2001 + +From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Apr 2015 14:55:37 +0200 Subject: [PATCH 4/4] Let headers directories follow the configured version @@ -243,10 +264,10 @@ Subject: [PATCH 4/4] Let headers directories follow the configured version 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac -index 9d8662369c..2bc5153141 100644 +index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -151,7 +151,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -115,7 +115,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) @@ -255,3 +276,6 @@ index 9d8662369c..2bc5153141 100644 dnl checks for alternative programs AC_CANONICAL_BUILD +-- +2.1.0 + diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 86d97fc..4d5ab29 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -1,4 +1,4 @@ -From 03b44a86b574dc0b63fd57c5f9b52b56ad3ced37 Mon Sep 17 00:00:00 2001 +From eca084e4079c77c061045df9c21b219175b05228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 6 Jan 2020 13:56:04 +0100 Subject: [PATCH] Initialize ABRT hook. @@ -15,16 +15,15 @@ To keep the things simple for now, load the ABRT hook via C. [4]: https://github.com/ruby/ruby/pull/2735 [5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ --- - abrt.c | 12 ++++++++++++ - common.mk | 1 + - ruby.c | 4 ++++ - spec/ruby/core/kernel/require_spec.rb | 2 ++ - 4 files changed, 19 insertions(+) + abrt.c | 12 ++++++++++++ + common.mk | 3 ++- + ruby.c | 4 ++++ + 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 abrt.c diff --git a/abrt.c b/abrt.c new file mode 100644 -index 0000000000..e99cb432e6 +index 0000000000..74b0bd5c0f --- /dev/null +++ b/abrt.c @@ -0,0 +1,12 @@ @@ -41,22 +40,24 @@ index 0000000000..e99cb432e6 + ); +} diff --git a/common.mk b/common.mk -index 08fee9119a..dae7d9dc00 100644 +index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -116,6 +116,7 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ - prism_init.$(OBJEXT) +@@ -82,7 +82,8 @@ ENC_MK = enc.mk + MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ + RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags) - COMMONOBJS = \ -+ abrt.$(OBJEXT) \ - array.$(OBJEXT) \ +-COMMONOBJS = array.$(OBJEXT) \ ++COMMONOBJS = abrt.$(OBJEXT) \ ++ array.$(OBJEXT) \ ast.$(OBJEXT) \ bignum.$(OBJEXT) \ + class.$(OBJEXT) \ diff --git a/ruby.c b/ruby.c -index b00fc1502d..32b88f7496 100644 +index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1773,10 +1773,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1623,10 +1623,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -68,19 +69,9 @@ index b00fc1502d..32b88f7496 100644 { Init_builtin_features(); + Init_abrt(); + rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } - void rb_call_builtin_inits(void); -diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb -index 60d17242fe..a8f93b0db4 100644 ---- a/spec/ruby/core/kernel/require_spec.rb -+++ b/spec/ruby/core/kernel/require_spec.rb -@@ -26,6 +26,8 @@ - out = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems --disable-did-you-mean') - features = out.lines.map { |line| File.basename(line.chomp, '.*') } - -+ # Ignore ABRT -+ features -= %w[abrt] - # Ignore CRuby internals - features -= %w[encdb transdb windows_1252 windows_31j] - features.reject! { |feature| feature.end_with?('-fake') } +-- +2.24.1 + diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch new file mode 100644 index 0000000..5c7afe8 --- /dev/null +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -0,0 +1,34 @@ +From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Mon, 27 Jul 2020 14:56:05 +0200 +Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error. + +While timeouting the threads might be still good idea, it does not seems +the timeout impacts the TestBugReporter#test_bug_reporter_add result, +because the output of the child process has been already collected +earlier. + +It seems that when the system is under heavy load, the thread might not +be sheduled to finish its processing. Even finishing the child process +might take tens of seconds and therefore the test case finish might take +a while. +--- + test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb +index 628fcd0340..2c677cc8a7 100644 +--- a/test/-ext-/bug_reporter/test_bug_reporter.rb ++++ b/test/-ext-/bug_reporter/test_bug_reporter.rb +@@ -22,7 +22,7 @@ def test_bug_reporter_add + args = ["--disable-gems", "-r-test-/bug_reporter", + "-C", tmpdir] + stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" +- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") ++ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil) + ensure + FileUtils.rm_rf(tmpdir) if tmpdir + end +-- +2.27.0 + diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch new file mode 100644 index 0000000..973fe72 --- /dev/null +++ b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch @@ -0,0 +1,43 @@ +From 0ade5611df9f981005eed32b369d1e699e520221 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 10 Feb 2022 13:26:44 +0100 +Subject: [PATCH] Don't query `RubyVM::FrozenCore` for class path. + +The `RubyVM::FrozenCore` class path is corrupted during GC cycle and +returns random garbage, which might result in segfault. + +But since it is easy to detect the `RubyVM::FrozenCore`, just provide +the class path explicitly as a workaround. + +Other possibility would be to ignore `RubyVM::FrozenCore` simlarly as +TracePoint API does: + +https://github.com/ruby/ruby/blob/46f6575157d4c2f6bbd5693896e26a65037e5552/vm_trace.c#L411 +--- + vm.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/vm.c b/vm.c +index 8ce8b279d4..3d189fa63a 100644 +--- a/vm.c ++++ b/vm.c +@@ -479,7 +479,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, + } + type = BUILTIN_TYPE(klass); + if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { +- VALUE name = rb_class_path(klass); ++ VALUE name = Qnil; ++ /* ++ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. ++ * https://bugs.ruby-lang.org/issues/18257 ++ */ ++ if (klass == rb_mRubyVMFrozenCore) ++ name = rb_str_new_cstr("RubyVM::FrozenCore"); ++ else ++ name = rb_class_path(klass); + const char *classname, *filename; + const char *methodname = rb_id2name(id); + if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { +-- +2.34.1 + diff --git a/ruby-3.1.4-Skip-test_compaction_bug_19529-if-compaction-unsupported.patch b/ruby-3.1.4-Skip-test_compaction_bug_19529-if-compaction-unsupported.patch new file mode 100644 index 0000000..acfa992 --- /dev/null +++ b/ruby-3.1.4-Skip-test_compaction_bug_19529-if-compaction-unsupported.patch @@ -0,0 +1,23 @@ +From bffadcd6d46ccfccade79ce0efb60ced8eac4483 Mon Sep 17 00:00:00 2001 +From: Peter Zhu +Date: Thu, 6 Apr 2023 13:35:25 -0400 +Subject: [PATCH] Add guard to compaction test in WeakMap + +Some platforms don't support compaction, so we should skip this test. +--- + test/ruby/test_weakmap.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/ruby/test_weakmap.rb b/test/ruby/test_weakmap.rb +index c72e7310db101..7fc956dfae474 100644 +--- a/test/ruby/test_weakmap.rb ++++ b/test/ruby/test_weakmap.rb +@@ -178,6 +178,8 @@ def test_no_memory_leak + end + + def test_compaction_bug_19529 ++ omit "compaction is not supported on this platform" unless GC.respond_to?(:compact) ++ + obj = Object.new + 100.times do |i| + GC.compact diff --git a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch new file mode 100644 index 0000000..aecfb2a --- /dev/null +++ b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch @@ -0,0 +1,291 @@ +From 4d9cc9afa47981520d991d19fd78b322f1ba9f2a Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Wed, 22 Jun 2022 01:03:49 +0200 +Subject: [PATCH] Detect compaction support during runtime. + +The patch is created by backporting 3 commits from +the upstream Ruby master branch in the chronological order below. + +https://github.com/ruby/ruby/commit/52d42e702375446746164a0251e1a10bce813b78 +https://github.com/ruby/ruby/commit/79eaaf2d0b641710613f16525e4b4c439dfe854e +https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 + +== How to create this patch == + +Download Ruby source code. +``` +$ git clone https://github.com/ruby/ruby.git +$ cd ruby +``` + +First create a commit squashed from the 3 commits above. +Checkout the second commmit above, and create a temporary branch. +``` +$ git checkout 79eaaf2d0b641710613f16525e4b4c439dfe854e +$ git checkout -b wip/detect-compaction-runtime-tmp +``` + +Cherry pick the third commit on the second commit. +``` +$ git cherry-pick 2c190863239bee3f54cfb74b16bb6ea4cae6ed20 +``` + +Squash the last 3 commits on the branch. +``` +$ git rebase -i 2223eb082afa6d05321b69df783d4133b9aacba6 +``` + +Then checkout Ruby 3.1.2 branch. +Create a new branch. +Merge the Fedora Ruby's +ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch. +``` +$ git checkout v3_1_2 +$ git checkout -b wip/detect-compaction-runtime +$ patch -p1 < +~/fed/ruby/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +$ git add gc.c gc.rb test/ruby/test_gc_compact.rb +$ git commit +``` + +Merge the squashed one commit on the +`wip/detect-compaction-runtime-tmp` branch +into the `wip/detect-compaction-runtime` branch. +``` +$ git cherry-pick +``` + +Fix conflicts seeing the difference by `git show ` +on another terminal. +``` +$ vi gc.c +$ git add gc.c +$ git commit +``` + +== Notes for the patch == + +``` ++# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) +``` + +We use the USE_MMAP_ALIGNED_ALLOC instead of HEAP_PAGE_ALLOC_USE_MMAP on +the line above. Because while the Ruby on the master branch replaced the +USE_MMAP_ALIGNED_ALLOC with HEAP_PAGE_ALLOC_USE_MMAP, Ruby 3.1.2 doesn't. +See . + +``` ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); +``` + +We added the line in the case that GC_COMPACTION_SUPPORTED is true. +Because while the Ruby on the master branch defines the +GC.verify_compaction_references in the gc.rb in +the case that GC_COMPACTION_SUPPORTED is true, Ruby 3.1.2 +doesn't define it in the gc.rb. +See . + +``` ++ OPT(GC_COMPACTION_SUPPORTED); +``` + +We added the line to expose the C macro to Ruby level. +In Ruby the macro existance can then be checked like so: +```Ruby +GC::OPTS.include?("GC_COMPACTION_SUPPORTED") +``` +It will return `true` if the GC_COMPACTION_SUPPORTED evaluates to `true` on the +C level, `false` otherwise. +See + +== Original commit messages == + +This is a combination of 3 commits. +This is the 1st commit message: +~~~ +Rename GC_COMPACTION_SUPPORTED + +Naming this macro GC_COMPACTION_SUPPORTED is misleading because it +only checks whether compaction is supported at compile time. + +[Bug #18829] +~~~ + +This is the commit message #2: +~~~ +Include runtime checks for compaction support + +Commit 0c36ba53192c5a0d245c9b626e4346a32d7d144e changed GC compaction +methods to not be implemented when not supported. However, that commit +only does compile time checks (which currently only checks for WASM), +but there are additional compaction support checks during run time. + +This commit changes it so that GC compaction methods aren't defined +during run time if the platform does not support GC compaction. + +[Bug #18829] +~~~ + +This is the commit message #3: +~~~ +Suppress code unused unless GC_CAN_COMPILE_COMPACTION +~~~ +--- + gc.c | 63 +++++++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 43 insertions(+), 20 deletions(-) + +diff --git a/gc.c b/gc.c +index 1c35856c44..bff0666a17 100644 +--- a/gc.c ++++ b/gc.c +@@ -4985,6 +4985,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) + static void gc_update_references(rb_objspace_t * objspace); + static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); + ++#ifndef GC_CAN_COMPILE_COMPACTION ++#if defined(__wasi__) /* WebAssembly doesn't support signals */ ++# define GC_CAN_COMPILE_COMPACTION 0 ++#else ++# define GC_CAN_COMPILE_COMPACTION 1 ++#endif ++#endif ++ ++#if defined(__MINGW32__) || defined(_WIN32) ++# define GC_COMPACTION_SUPPORTED 1 ++#else ++/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for ++ * the read barrier, so we must disable compaction. */ ++# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) ++#endif ++ ++#if GC_CAN_COMPILE_COMPACTION + static void + read_barrier_handler(uintptr_t address) + { +@@ -5005,6 +5022,7 @@ read_barrier_handler(uintptr_t address) + } + RB_VM_LOCK_LEAVE(); + } ++#endif + + #if defined(_WIN32) + static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; +@@ -9268,13 +9286,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE + + /* For now, compact implies full mark / sweep, so ignore other flags */ + if (RTEST(compact)) { +- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for +- * the read barrier, so we must disable compaction. */ +-#if !defined(__MINGW32__) && !defined(_WIN32) +- if (!USE_MMAP_ALIGNED_ALLOC) { +- rb_raise(rb_eNotImpError, "Compaction isn't available on this platform"); +- } +-#endif ++ GC_ASSERT(GC_COMPACTION_SUPPORTED); + + reason |= GPR_FLAG_COMPACT; + } +@@ -9439,7 +9451,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) + return (VALUE)src; + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + static int + compare_free_slots(const void *left, const void *right, void *dummy) + { +@@ -10167,7 +10179,7 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +@@ -10208,7 +10220,7 @@ gc_compact_stats(VALUE self) + # define gc_compact_stats rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + static void + root_obj_check_moved_i(const char *category, VALUE obj, void *data) + { +@@ -10287,7 +10299,7 @@ gc_compact(VALUE self) + # define gc_compact rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +@@ -10818,7 +10830,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + +-#if GC_COMPACTION_SUPPORTED ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.auto_compact = flag +@@ -10832,8 +10844,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + static VALUE + gc_set_auto_compact(VALUE _, VALUE v) + { +- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for +- * the read barrier, so we must disable automatic compaction. */ ++ GC_ASSERT(GC_COMPACTION_SUPPORTED); + + ruby_enable_autocompact = RTEST(v); + return v; +@@ -10842,7 +10853,8 @@ gc_set_auto_compact(VALUE _, VALUE v) + # define gc_set_auto_compact rb_f_notimplement + #endif + +-#if GC_COMPACTION_SUPPORTED ++ ++#if GC_CAN_COMPILE_COMPACTION + /* + * call-seq: + * GC.auto_compact -> true or false +@@ -13753,11 +13776,21 @@ Init_GC(void) + rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); + rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); + #endif +- rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); +- rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); +- rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); +- rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); +- rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); ++ if (GC_COMPACTION_SUPPORTED) { ++ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); ++ } ++ else { ++ rb_define_singleton_method(rb_mGC, "compact", rb_f_notimplement, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", rb_f_notimplement, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", rb_f_notimplement, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", rb_f_notimplement, 0); ++ /* When !GC_COMPACTION_SUPPORTED, this method is not defined in gc.rb */ ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1); ++ } + + #if GC_DEBUG_STRESS_TO_CLASS + rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); +@@ -13781,6 +13803,7 @@ Init_GC(void) + OPT(MALLOC_ALLOCATED_SIZE); + OPT(MALLOC_ALLOCATED_SIZE_CHECK); + OPT(GC_PROFILE_DETAIL_MEMORY); ++ OPT(GC_COMPACTION_SUPPORTED); + #undef OPT + OBJ_FREEZE(opts); + } +-- +2.36.1 + diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch new file mode 100644 index 0000000..89842ea --- /dev/null +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch @@ -0,0 +1,502 @@ +From 1b3502156a665e2782f366aa5ac8c3bfd7637ab8 Mon Sep 17 00:00:00 2001 +From: Mike Dalessio +Date: Mon, 23 May 2022 15:40:22 -0400 +Subject: [PATCH 1/2] Move compaction-related methods into gc.c + +These methods are removed from gc.rb and added to gc.c: + +- GC.compact +- GC.auto_compact +- GC.auto_compact= +- GC.latest_compact_info +- GC.verify_compaction_references + +This is a prefactor to allow setting these methods to +`rb_f_notimplement` in a followup commit. +--- + gc.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ + gc.rb | 68 --------------------------------------- + 2 files changed, 91 insertions(+), 78 deletions(-) + +diff --git a/gc.c b/gc.c +index ef9327df1f..1c35856c44 100644 +--- a/gc.c ++++ b/gc.c +@@ -10165,8 +10165,20 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + ++/* ++ * call-seq: ++ * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} ++ * ++ * Returns information about object moved in the most recent GC compaction. ++ * ++ * The returned hash has two keys :considered and :moved. The hash for ++ * :considered lists the number of objects that were considered for movement ++ * by the compactor, and the :moved hash lists the number of objects that ++ * were actually moved. Some objects can't be moved (maybe they were pinned) ++ * so these numbers can be used to calculate compaction efficiency. ++ */ + static VALUE +-gc_compact_stats(rb_execution_context_t *ec, VALUE self) ++gc_compact_stats(VALUE self) + { + size_t i; + rb_objspace_t *objspace = &rb_objspace; +@@ -10239,22 +10251,70 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) + return 0; + } + ++/* ++ * call-seq: ++ * GC.compact ++ * ++ * This function compacts objects together in Ruby's heap. It eliminates ++ * unused space (or fragmentation) in the heap by moving objects in to that ++ * unused space. This function returns a hash which contains statistics about ++ * which objects were moved. See `GC.latest_gc_info` for details about ++ * compaction statistics. ++ * ++ * This method is implementation specific and not expected to be implemented ++ * in any implementation besides MRI. ++ */ + static VALUE +-gc_compact(rb_execution_context_t *ec, VALUE self) ++gc_compact(VALUE self) + { + /* Run GC with compaction enabled */ +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); + +- return gc_compact_stats(ec, self); ++ return gc_compact_stats(self); + } + ++/* ++ * call-seq: ++ * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash ++ * ++ * Verify compaction reference consistency. ++ * ++ * This method is implementation specific. During compaction, objects that ++ * were moved are replaced with T_MOVED objects. No object should have a ++ * reference to a T_MOVED object after compaction. ++ * ++ * This function doubles the heap to ensure room to move all objects, ++ * compacts the heap to make sure everything moves, updates all references, ++ * then performs a full GC. If any object contains a reference to a T_MOVED ++ * object, that object should be pushed on the mark stack, and will ++ * make a SEGV. ++ */ + static VALUE +-gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty) ++gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) + { + rb_objspace_t *objspace = &rb_objspace; ++ VALUE kwargs, double_heap = Qfalse, toward_empty = Qfalse; ++ static ID id_toward, id_double_heap, id_empty; ++ ++ if (!id_toward) { ++ id_toward = rb_intern("toward"); ++ id_double_heap = rb_intern("double_heap"); ++ id_empty = rb_intern("empty"); ++ } ++ ++ rb_scan_args(argc, argv, ":", &kwargs); ++ if (!NIL_P(kwargs)) { ++ if (rb_hash_has_key(kwargs, ID2SYM(id_toward))) { ++ VALUE toward = rb_hash_aref(kwargs, ID2SYM(id_toward)); ++ toward_empty = (toward == ID2SYM(id_empty)) ? Qtrue : Qfalse; ++ } ++ if (rb_hash_has_key(kwargs, ID2SYM(id_double_heap))) { ++ double_heap = rb_hash_aref(kwargs, ID2SYM(id_double_heap)); ++ } ++ } + + /* Clear the heap. */ +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qfalse); + + RB_VM_LOCK_ENTER(); + { +@@ -10274,12 +10334,12 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do + } + RB_VM_LOCK_LEAVE(); + +- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); ++ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); + + objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); + objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE); + +- return gc_compact_stats(ec, self); ++ return gc_compact_stats(self); + } + + VALUE +@@ -10740,8 +10800,18 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + ++/* ++ * call-seq: ++ * GC.auto_compact = flag ++ * ++ * Updates automatic compaction mode. ++ * ++ * When enabled, the compactor will execute on every major collection. ++ * ++ * Enabling compaction will degrade performance on major collections. ++ */ + static VALUE +-gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) ++gc_set_auto_compact(VALUE _, VALUE v) + { + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable automatic compaction. */ +@@ -10755,8 +10825,14 @@ gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) + return v; + } + ++/* ++ * call-seq: ++ * GC.auto_compact -> true or false ++ * ++ * Returns whether or not automatic compaction has been enabled. ++ */ + static VALUE +-gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) ++gc_get_auto_compact(VALUE _) + { + return RBOOL(ruby_enable_autocompact); + } +@@ -13656,6 +13732,11 @@ Init_GC(void) + rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); + rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); + #endif ++ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); ++ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); ++ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); ++ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); + + #if GC_DEBUG_STRESS_TO_CLASS + rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); +diff --git a/gc.rb b/gc.rb +index 72637f3796..9265dd7b57 100644 +--- a/gc.rb ++++ b/gc.rb +@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true + Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false + end + +- # call-seq: +- # GC.auto_compact -> true or false +- # +- # Returns whether or not automatic compaction has been enabled. +- # +- def self.auto_compact +- Primitive.gc_get_auto_compact +- end +- +- # call-seq: +- # GC.auto_compact = flag +- # +- # Updates automatic compaction mode. +- # +- # When enabled, the compactor will execute on every major collection. +- # +- # Enabling compaction will degrade performance on major collections. +- def self.auto_compact=(flag) +- Primitive.gc_set_auto_compact(flag) +- end +- + # call-seq: + # GC.enable -> true or false + # +@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil + Primitive.gc_latest_gc_info hash_or_key + end + +- # call-seq: +- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +- # +- # Returns information about object moved in the most recent GC compaction. +- # +- # The returned hash has two keys :considered and :moved. The hash for +- # :considered lists the number of objects that were considered for movement +- # by the compactor, and the :moved hash lists the number of objects that +- # were actually moved. Some objects can't be moved (maybe they were pinned) +- # so these numbers can be used to calculate compaction efficiency. +- def self.latest_compact_info +- Primitive.gc_compact_stats +- end +- +- # call-seq: +- # GC.compact +- # +- # This function compacts objects together in Ruby's heap. It eliminates +- # unused space (or fragmentation) in the heap by moving objects in to that +- # unused space. This function returns a hash which contains statistics about +- # which objects were moved. See `GC.latest_gc_info` for details about +- # compaction statistics. +- # +- # This method is implementation specific and not expected to be implemented +- # in any implementation besides MRI. +- def self.compact +- Primitive.gc_compact +- end +- +- # call-seq: +- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +- # +- # Verify compaction reference consistency. +- # +- # This method is implementation specific. During compaction, objects that +- # were moved are replaced with T_MOVED objects. No object should have a +- # reference to a T_MOVED object after compaction. +- # +- # This function doubles the heap to ensure room to move all objects, +- # compacts the heap to make sure everything moves, updates all references, +- # then performs a full GC. If any object contains a reference to a T_MOVED +- # object, that object should be pushed on the mark stack, and will +- # make a SEGV. +- def self.verify_compaction_references(toward: nil, double_heap: false) +- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) +- end +- + # call-seq: + # GC.using_rvargc? -> true or false + # + +From d3273559356db6852d1fd794f0f076fba100e09e Mon Sep 17 00:00:00 2001 +From: Mike Dalessio +Date: Mon, 23 May 2022 17:31:14 -0400 +Subject: [PATCH 2/2] Define unsupported GC compaction methods as + rb_f_notimplement + +Fixes [Bug #18779] + +Define the following methods as `rb_f_notimplement` on unsupported +platforms: + +- GC.compact +- GC.auto_compact +- GC.auto_compact= +- GC.latest_compact_info +- GC.verify_compaction_references + +This change allows users to call `GC.respond_to?(:compact)` to +properly test for compaction support. Previously, it was necessary to +invoke `GC.compact` or `GC.verify_compaction_references` and check if +those methods raised `NotImplementedError` to determine if compaction +was supported. + +This follows the precedent set for other platform-specific +methods. For example, in `process.c` for methods such as +`Process.fork`, `Process.setpgid`, and `Process.getpriority`. +--- + gc.c | 31 +++++++++++++++---- + test/ruby/test_gc_compact.rb | 58 ++++++++++++++++++++++++++---------- + 2 files changed, 69 insertions(+), 20 deletions(-) + +diff --git a/gc.c b/gc.c +index 92ed76cf96..d71924846a 100644 +--- a/gc.c ++++ b/gc.c +@@ -9439,6 +9439,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) + return (VALUE)src; + } + ++#if GC_COMPACTION_SUPPORTED + static int + compare_free_slots(const void *left, const void *right, void *dummy) + { +@@ -9486,6 +9487,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) + free(page_list); + } + } ++#endif + + static void + gc_ref_update_array(rb_objspace_t * objspace, VALUE v) +@@ -10165,6 +10167,7 @@ gc_update_references(rb_objspace_t *objspace) + gc_update_table_refs(objspace, finalizer_table); + } + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} +@@ -10201,7 +10204,11 @@ gc_compact_stats(VALUE self) + + return h; + } ++#else ++# define gc_compact_stats rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + static void + root_obj_check_moved_i(const char *category, VALUE obj, void *data) + { +@@ -10263,6 +10270,10 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) + * + * This method is implementation specific and not expected to be implemented + * in any implementation besides MRI. ++ * ++ * To test whether GC compaction is supported, use the idiom: ++ * ++ * GC.respond_to?(:compact) + */ + static VALUE + gc_compact(VALUE self) +@@ -10272,7 +10283,11 @@ gc_compact(VALUE self) + + return gc_compact_stats(self); + } ++#else ++# define gc_compact rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash +@@ -10341,6 +10356,9 @@ gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) + + return gc_compact_stats(self); + } ++#else ++# define gc_verify_compaction_references rb_f_notimplement ++#endif + + VALUE + rb_gc_start(void) +@@ -10800,6 +10818,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) + return rb_gc_disable(); + } + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.auto_compact = flag +@@ -10815,16 +10834,15 @@ gc_set_auto_compact(VALUE _, VALUE v) + { + /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for + * the read barrier, so we must disable automatic compaction. */ +-#if !defined(__MINGW32__) && !defined(_WIN32) +- if (!USE_MMAP_ALIGNED_ALLOC) { +- rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); +- } +-#endif + + ruby_enable_autocompact = RTEST(v); + return v; + } ++#else ++# define gc_set_auto_compact rb_f_notimplement ++#endif + ++#if GC_COMPACTION_SUPPORTED + /* + * call-seq: + * GC.auto_compact -> true or false +@@ -10836,6 +10854,9 @@ gc_get_auto_compact(VALUE _) + { + return RBOOL(ruby_enable_autocompact); + } ++#else ++# define gc_get_auto_compact rb_f_notimplement ++#endif + + static int + get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) +diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb +index 42ad028530..411d5eab69 100644 +--- a/test/ruby/test_gc_compact.rb ++++ b/test/ruby/test_gc_compact.rb +@@ -9,14 +9,7 @@ + end + + class TestGCCompact < Test::Unit::TestCase +- module SupportsCompact +- def setup +- skip "autocompact not supported on this platform" unless supports_auto_compact? +- super +- end +- +- private +- ++ module CompactionSupportInspector + def supports_auto_compact? + return true unless defined?(Etc::SC_PAGE_SIZE) + +@@ -30,10 +23,19 @@ def supports_auto_compact? + end + end + +- include SupportsCompact ++ module OmitUnlessCompactSupported ++ include CompactionSupportInspector ++ ++ def setup ++ omit "autocompact not supported on this platform" unless supports_auto_compact? ++ super ++ end ++ end ++ ++ include OmitUnlessCompactSupported + + class AutoCompact < Test::Unit::TestCase +- include SupportsCompact ++ include OmitUnlessCompactSupported + + def test_enable_autocompact + before = GC.auto_compact +@@ -87,13 +89,39 @@ def test_implicit_compaction_does_something + end + end + +- def os_page_size +- return true unless defined?(Etc::SC_PAGE_SIZE) ++ class CompactMethodsNotImplemented < Test::Unit::TestCase ++ include CompactionSupportInspector ++ ++ def assert_not_implemented(method, *args) ++ omit "autocompact is supported on this platform" if supports_auto_compact? ++ ++ assert_raise(NotImplementedError) { GC.send(method, *args) } ++ refute(GC.respond_to?(method), "GC.#{method} should be defined as rb_f_notimplement") ++ end ++ ++ def test_gc_compact_not_implemented ++ assert_not_implemented(:compact) ++ end ++ ++ def test_gc_auto_compact_get_not_implemented ++ assert_not_implemented(:auto_compact) ++ end ++ ++ def test_gc_auto_compact_set_not_implemented ++ assert_not_implemented(:auto_compact=, true) ++ end ++ ++ def test_gc_latest_compact_info_not_implemented ++ assert_not_implemented(:latest_compact_info) ++ end ++ ++ def test_gc_verify_compaction_references_not_implemented ++ assert_not_implemented(:verify_compaction_references) ++ end + end + +- def setup +- skip "autocompact not supported on this platform" unless supports_auto_compact? +- super ++ def os_page_size ++ return true unless defined?(Etc::SC_PAGE_SIZE) + end + + def test_gc_compact_stats diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch new file mode 100644 index 0000000..654c54c --- /dev/null +++ b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch @@ -0,0 +1,502 @@ +--- ruby-3.1.3/gc.rbinc 2022-11-24 11:20:33.000000000 +0100 ++++ ruby/gc.rbinc 2022-11-25 11:50:19.939820992 +0100 +@@ -9,27 +9,27 @@ + #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ + struct rb_execution_context_struct; /* in vm_core.h */ + +-static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self) + { + MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3); +-#line 277 "gc.rb" ++#line 209 "gc.rb" + + rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; + return flag; + #line 20 "gc.rbinc" + } + +-static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self) + { +-#line 289 "gc.rb" ++#line 221 "gc.rb" + return + RBOOL(rb_objspace.flags.measure_gc); + #line 28 "gc.rbinc" + } + +-static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self) ++static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self) + { +-#line 299 "gc.rb" ++#line 231 "gc.rb" + return + ULL2NUM(rb_objspace.profile.total_time_ns); + #line 36 "gc.rbinc" +@@ -52,31 +52,6 @@ + } + + static void +-mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n"); +- if (index == -1) { +- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1); +- } +- else { +- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); +- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); +- } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact); +- fprintf(f, " val = f(ec, self, argv[0]);\n"); +-} +- +-static void + mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p) + { + fprintf(f, " VALUE self = GET_SELF();\n"); +@@ -161,40 +136,6 @@ + } + + static void +-mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact); +- fprintf(f, " val = f(ec, self);\n"); +-} +- +-static void +-mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p) +-{ +- fprintf(f, " VALUE self = GET_SELF();\n"); +- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n"); +- if (index == -1) { +- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2); +- } +- else { +- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); +- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); +- } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references); +- fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n"); +-} +- +-static void + mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p) + { + fprintf(f, " VALUE self = GET_SELF();\n"); +@@ -202,7 +143,7 @@ + if (inlinable_p) { + fprintf(f, "%s", " {\n"); + fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n"); +- fprintf(f, "%s", "#line 277 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 209 \"gc.rb\"\n"); + fprintf(f, "%s", " \n"); + fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"); + fprintf(f, "%s", " return flag;\n"); +@@ -211,7 +152,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -222,7 +163,7 @@ + fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); + if (inlinable_p) { + fprintf(f, "%s", " {\n"); +- fprintf(f, "%s", "#line 289 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 221 \"gc.rb\"\n"); + fprintf(f, "%s", " return \n"); + fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n"); + fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n"); +@@ -230,7 +171,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -241,7 +182,7 @@ + fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); + if (inlinable_p) { + fprintf(f, "%s", " {\n"); +- fprintf(f, "%s", "#line 299 \"gc.rb\"\n"); ++ fprintf(f, "%s", "#line 231 \"gc.rb\"\n"); + fprintf(f, "%s", " return \n"); + fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n"); + fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n"); +@@ -249,7 +190,7 @@ + fprintf(f, "%s", " \n"); + return; + } +- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299); ++ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231); + fprintf(f, " val = f(ec, self);\n"); + } + +@@ -258,21 +199,16 @@ + // table definition + static const struct rb_builtin_function gc_table[] = { + RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal), +- RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact), +- RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact), +- RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), +- RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), +- RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), +- RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), +- RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), +- RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), +- RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), +- RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats), +- RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact), +- RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references), +- RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0), +- RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1), +- RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2), ++ RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), ++ RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), ++ RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), ++ RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), ++ RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), ++ RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), ++ RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), ++ RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0), ++ RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1), ++ RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2), + RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0), + }; + +@@ -282,8 +218,6 @@ + COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) + #endif + if (0) rb_builtin_function_check_arity4(gc_start_internal); +- if (0) rb_builtin_function_check_arity0(gc_get_auto_compact); +- if (0) rb_builtin_function_check_arity1(gc_set_auto_compact); + if (0) rb_builtin_function_check_arity0(gc_enable); + if (0) rb_builtin_function_check_arity0(gc_disable); + if (0) rb_builtin_function_check_arity0(gc_stress_get); +@@ -291,12 +225,9 @@ + if (0) rb_builtin_function_check_arity0(gc_count); + if (0) rb_builtin_function_check_arity1(gc_stat); + if (0) rb_builtin_function_check_arity1(gc_latest_gc_info); +- if (0) rb_builtin_function_check_arity0(gc_compact_stats); +- if (0) rb_builtin_function_check_arity0(gc_compact); +- if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_277); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_289); +- if (0) rb_builtin_function_check_arity0(builtin_inline_class_299); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_209); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_221); ++ if (0) rb_builtin_function_check_arity0(builtin_inline_class_231); + COMPILER_WARNING_POP + + // load +--- ruby-3.1.3/miniprelude.c 2022-11-24 11:20:33.000000000 +0100 ++++ ruby/miniprelude.c 2022-11-25 11:50:20.012820803 +0100 +@@ -545,11 +545,10 @@ + + static const char prelude_name2[] = ""; + static const struct { +- char L0[479]; /* 1..58 */ +- char L58[508]; /* 59..204 */ +- char L204[504]; /* 205..275 */ +- char L275[490]; /* 276..306 */ +- char L306[128]; /* 307..312 */ ++ char L0[492]; /* 1..70 */ ++ char L70[468]; /* 71..197 */ ++ char L197[470]; /* 198..237 */ ++ char L237[211]; /* 238..244 */ + } prelude_code2 = { + #line 1 "gc.rb" + ""/* for gc.c */ +@@ -593,29 +592,6 @@ + " end\n" + "\n" + "\n"/* call-seq: */ +-"\n"/* GC.auto_compact -> true or false */ +-"\n"/* */ +-"\n"/* Returns whether or not automatic compaction has been enabled. */ +-"\n"/* */ +-" def self.auto_compact\n" +-" Primitive.gc_get_auto_compact\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.auto_compact = flag */ +-"\n"/* */ +-"\n"/* Updates automatic compaction mode. */ +-"\n"/* */ +-"\n"/* When enabled, the compactor will execute on every major collection. */ +-"\n"/* */ +-"\n"/* Enabling compaction will degrade performance on major collections. */ +-" def self.auto_compact=(flag)\n" +-, +-#line 59 "gc.rb" +-" Primitive.gc_set_auto_compact(flag)\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ + "\n"/* GC.enable -> true or false */ + "\n"/* */ + "\n"/* Enables garbage collection, returning +true+ if garbage */ +@@ -645,6 +621,8 @@ + "\n"/* GC.stress -> integer, true or false */ + "\n"/* */ + "\n"/* Returns current status of GC stress mode. */ ++, ++#line 71 "gc.rb" + " def self.stress\n" + " Primitive.gc_stress_get\n" + " end\n" +@@ -758,8 +736,6 @@ + "\n"/* GC.latest_gc_info(:major_by) -> :malloc */ + "\n"/* */ + "\n"/* Returns information about the most recent garbage collection. */ +-, +-#line 205 "gc.rb" + "\n"/* */ + "\n"/* If the optional argument, hash, is given, */ + "\n"/* it is overwritten and returned. */ +@@ -768,59 +744,14 @@ + " Primitive.gc_latest_gc_info hash_or_key\n" + " end\n" + "\n" +-"\n"/* call-seq: */ +-"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */ +-"\n"/* */ +-"\n"/* Returns information about object moved in the most recent GC compaction. */ +-"\n"/* */ +-"\n"/* The returned hash has two keys :considered and :moved. The hash for */ +-"\n"/* :considered lists the number of objects that were considered for movement */ +-"\n"/* by the compactor, and the :moved hash lists the number of objects that */ +-"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */ +-"\n"/* so these numbers can be used to calculate compaction efficiency. */ +-" def self.latest_compact_info\n" +-" Primitive.gc_compact_stats\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.compact */ +-"\n"/* */ +-"\n"/* This function compacts objects together in Ruby's heap. It eliminates */ +-"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */ +-"\n"/* unused space. This function returns a hash which contains statistics about */ +-"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */ +-"\n"/* compaction statistics. */ +-"\n"/* */ +-"\n"/* This method is implementation specific and not expected to be implemented */ +-"\n"/* in any implementation besides MRI. */ +-" def self.compact\n" +-" Primitive.gc_compact\n" +-" end\n" +-"\n" +-"\n"/* call-seq: */ +-"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */ +-"\n"/* */ +-"\n"/* Verify compaction reference consistency. */ +-"\n"/* */ +-"\n"/* This method is implementation specific. During compaction, objects that */ +-"\n"/* were moved are replaced with T_MOVED objects. No object should have a */ +-"\n"/* reference to a T_MOVED object after compaction. */ +-"\n"/* */ +-"\n"/* This function doubles the heap to ensure room to move all objects, */ +-"\n"/* compacts the heap to make sure everything moves, updates all references, */ +-"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */ +-"\n"/* object, that object should be pushed on the mark stack, and will */ +-"\n"/* make a SEGV. */ +-" def self.verify_compaction_references(toward: nil, double_heap: false)\n" +-" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n" +-" end\n" +-"\n" + "\n"/* call-seq: */ + "\n"/* GC.using_rvargc? -> true or false */ + "\n"/* */ + "\n"/* Returns true if using experimental feature Variable Width Allocation, false */ + "\n"/* otherwise. */ + " def self.using_rvargc?\n"/* :nodoc: */ ++, ++#line 198 "gc.rb" + " GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n" + " end\n" + "\n" +@@ -831,8 +762,6 @@ + "\n"/* Enable to measure GC time. */ + "\n"/* You can get the result with GC.stat(:time). */ + "\n"/* Note that GC time measurement can cause some performance overhead. */ +-, +-#line 276 "gc.rb" + " def self.measure_total_time=(flag)\n" + " Primitive.cstmt! %{\n" + " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n" +@@ -863,15 +792,15 @@ + "end\n" + "\n" + "module ObjectSpace\n" +-" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" + , +-#line 307 "gc.rb" ++#line 238 "gc.rb" ++" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" + " Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n" + " end\n" + "\n" + " module_function :garbage_collect\n" + "end\n" +-#line 875 "miniprelude.c" ++#line 804 "miniprelude.c" + }; + + static const char prelude_name3[] = ""; +@@ -1223,7 +1152,7 @@ + " end\n" + "\n" + "end\n" +-#line 1227 "miniprelude.c" ++#line 1156 "miniprelude.c" + }; + + static const char prelude_name4[] = ""; +@@ -1354,7 +1283,7 @@ + " Primitive.io_write_nonblock(buf, exception)\n" + " end\n" + "end\n" +-#line 1358 "miniprelude.c" ++#line 1287 "miniprelude.c" + }; + + static const char prelude_name5[] = ""; +@@ -1402,7 +1331,7 @@ + " alias restore load\n" + " end\n" + "end\n" +-#line 1406 "miniprelude.c" ++#line 1335 "miniprelude.c" + }; + + static const char prelude_name6[] = ""; +@@ -1724,7 +1653,7 @@ + " Primitive.pack_unpack1(fmt, offset)\n" + " end\n" + "end\n" +-#line 1728 "miniprelude.c" ++#line 1657 "miniprelude.c" + }; + + static const char prelude_name7[] = ""; +@@ -2111,7 +2040,7 @@ + " Primitive.tracepoint_attr_instruction_sequence\n" + " end\n" + "end\n" +-#line 2115 "miniprelude.c" ++#line 2044 "miniprelude.c" + }; + + static const char prelude_name8[] = ""; +@@ -2172,7 +2101,7 @@ + " Primitive.rb_warn_m(msgs, uplevel, category)\n" + " end\n" + "end\n" +-#line 2176 "miniprelude.c" ++#line 2105 "miniprelude.c" + }; + + static const char prelude_name9[] = ""; +@@ -2249,7 +2178,7 @@ + " end\n" + " end\n" + "end\n" +-#line 2253 "miniprelude.c" ++#line 2182 "miniprelude.c" + }; + + static const char prelude_name10[] = ""; +@@ -2438,7 +2367,7 @@ + " end\n" + " end\n" + "end\n" +-#line 2442 "miniprelude.c" ++#line 2371 "miniprelude.c" + }; + + static const char prelude_name11[] = ""; +@@ -3309,7 +3238,7 @@ + " }\n" + " end\n" + "end\n" +-#line 3313 "miniprelude.c" ++#line 3242 "miniprelude.c" + }; + + static const char prelude_name12[] = ""; +@@ -3632,7 +3561,7 @@ + " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" + " end\n" + "end\n" +-#line 3636 "miniprelude.c" ++#line 3565 "miniprelude.c" + }; + + static const char prelude_name13[] = ""; +@@ -3665,7 +3594,7 @@ + " return 0.0\n" + " end\n" + "end\n" +-#line 3669 "miniprelude.c" ++#line 3598 "miniprelude.c" + }; + + static const char prelude_name14[] = ""; +@@ -3695,7 +3624,7 @@ + "\n" + " private :pp\n" + "end\n" +-#line 3699 "miniprelude.c" ++#line 3628 "miniprelude.c" + }; + + static const char prelude_name15[] = ""; +@@ -3722,7 +3651,7 @@ + "rescue LoadError\n" + " warn \"`did_you_mean' was not loaded.\"\n" + "end if defined?(DidYouMean)\n" +-#line 3726 "miniprelude.c" ++#line 3655 "miniprelude.c" + }; + + static const char prelude_name16[] = ""; +@@ -4063,7 +3992,7 @@ + " end\n" + " end\n" + "end\n" +-#line 4067 "miniprelude.c" ++#line 3996 "miniprelude.c" + }; + + COMPILER_WARNING_POP diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch deleted file mode 100644 index 09d11f9..0000000 --- a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 9b7cb6a40d73bb86ee0de34360068e90e80f4e7e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 7 Sep 2023 13:13:02 +0200 -Subject: [PATCH] Disable syntax-suggest test case. - -This requires internet connection. ---- - common.mk | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/common.mk b/common.mk -index dae7d9dc00..111e859d1b 100644 ---- a/common.mk -+++ b/common.mk -@@ -1619,8 +1619,6 @@ no-test-bundled-gems-spec: - - test-syntax-suggest: - --check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest -- - test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck - no-test-bundler-precheck: - yes-test-bundler-precheck: main $(arch)-fake.rb diff --git a/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch b/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch deleted file mode 100644 index 8238b58..0000000 --- a/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 1cfb11bc8d01e4fc1ff47807721e29b250f0f19f Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Mon, 22 Dec 2025 10:13:34 +0100 -Subject: [PATCH] Support customizable rustc_flags for rustc builds. - -Add `rustc_flags` option for configure that appends to RUSTC_FLAGS -flags used when compiling with rustc for customizable build flags. -It appends to existing defaults in RUSTC_FLAGS. - -Co-authored-by: Alan Wu ---- - common.mk | 10 ++-------- - configure.ac | 8 ++++++++ - defs/jit.mk | 2 ++ - template/Makefile.in | 1 + - 4 files changed, 13 insertions(+), 8 deletions(-) - -diff --git a/common.mk b/common.mk -index 08fee9119a..9ac5ae919f 100644 ---- a/common.mk -+++ b/common.mk -@@ -270,21 +270,15 @@ MAKE_LINK = $(MINIRUBY) -rfileutils -e "include FileUtils::Verbose" \ - # For release builds - YJIT_RUSTC_ARGS = --crate-name=yjit \ - $(JIT_RUST_FLAGS) \ -+ $(RUSTC_FLAGS) \ - --edition=2021 \ -- -g \ -- -C lto=thin \ -- -C opt-level=3 \ -- -C overflow-checks=on \ - '--out-dir=$(CARGO_TARGET_DIR)/release/' \ - '$(top_srcdir)/yjit/src/lib.rs' - - ZJIT_RUSTC_ARGS = --crate-name=zjit \ - $(JIT_RUST_FLAGS) \ -+ $(RUSTC_FLAGS) \ - --edition=2024 \ -- -g \ -- -C lto=thin \ -- -C opt-level=3 \ -- -C overflow-checks=on \ - '--out-dir=$(CARGO_TARGET_DIR)/release/' \ - '$(top_srcdir)/zjit/src/lib.rs' - -diff --git a/configure.ac b/configure.ac -index 2bbce78fd0..a3aa6dc383 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -69,6 +69,7 @@ dnl 93(bright yellow) is copied from .github/workflows/mingw.yml - AC_ARG_VAR([cflags], [additional CFLAGS (ignored when CFLAGS is given)])dnl - AC_ARG_VAR([cppflags], [additional CPPFLAGS (ignored when CPPFLAGS is given)])dnl - AC_ARG_VAR([cxxflags], [additional CXXFLAGS (ignored when CXXFLAGS is given)])dnl -+AC_ARG_VAR([rustc_flags], [additional RUSTC_FLAGS])dnl - - [begin]_group "environment section" && { - HAVE_BASERUBY=yes -@@ -4054,6 +4055,11 @@ AS_CASE(["${ZJIT_SUPPORT}"], - AC_DEFINE(USE_ZJIT, 0) - ]) - -+RUSTC_FLAGS='-g -C lto=thin -C opt-level=3 -C overflow-checks=on' -+AS_IF([test -n "${rustc_flags}"], [ -+ RUSTC_FLAGS="${RUSTC_FLAGS} ${rustc_flags}" -+]) -+ - JIT_RUST_FLAGS='--crate-type=staticlib --cfg feature=\"stats_allocator\"' - RLIB_DIR= - AS_CASE(["$JIT_CARGO_SUPPORT:$YJIT_SUPPORT:$ZJIT_SUPPORT"], -@@ -4111,6 +4117,7 @@ AS_IF([test -n "$RUST_LIB"], [ - dnl These variables end up in ::RbConfig::CONFIG - AC_SUBST(RUSTC)dnl Rust compiler command - AC_SUBST(JIT_RUST_FLAGS)dnl the common rustc flags for JIT crates such as zjit -+AC_SUBST(RUSTC_FLAGS)dnl user-configurable rustc compiler flags - AC_SUBST(CARGO)dnl Cargo command for Rust builds - AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles - AC_SUBST(YJIT_SUPPORT)dnl what flavor of YJIT the Ruby build includes -@@ -4855,6 +4862,7 @@ config_summary "strip command" "$STRIP" - config_summary "install doc" "$DOCTARGETS" - config_summary "YJIT support" "$YJIT_SUPPORT" - config_summary "ZJIT support" "$ZJIT_SUPPORT" -+config_summary "RUSTC_FLAGS" "$RUSTC_FLAGS" - config_summary "man page type" "$MANTYPE" - config_summary "search path" "$search_path" - config_summary "static-linked-ext" ${EXTSTATIC:+"yes"} -diff --git a/defs/jit.mk b/defs/jit.mk -index 42b56c4cd9..27b14e7a07 100644 ---- a/defs/jit.mk -+++ b/defs/jit.mk -@@ -40,6 +40,7 @@ else ifneq ($(strip $(RLIB_DIR)),) # combo build - $(RUST_LIB): $(srcdir)/ruby.rs - $(ECHO) 'building $(@F)' - $(gnumake_recursive)$(Q) $(RUSTC) --edition=2024 \ -+ $(RUSTC_FLAGS) \ - '-L$(@D)' \ - --extern=yjit \ - --extern=zjit \ -@@ -58,6 +59,7 @@ $(JIT_RLIB): - $(gnumake_recursive)$(Q) $(RUSTC) --crate-name=jit \ - --edition=2024 \ - $(JIT_RUST_FLAGS) \ -+ $(RUSTC_FLAGS) \ - '--out-dir=$(@D)' \ - '$(top_srcdir)/jit/src/lib.rs' - endif # ifneq ($(JIT_CARGO_SUPPORT),no) -diff --git a/template/Makefile.in b/template/Makefile.in -index 443c394cb4..0b7b50e3aa 100644 ---- a/template/Makefile.in -+++ b/template/Makefile.in -@@ -115,6 +115,7 @@ CARGO_TARGET_DIR=@abs_top_builddir@/target - CARGO_BUILD_ARGS=@CARGO_BUILD_ARGS@ - ZJIT_TEST_FEATURES=@ZJIT_TEST_FEATURES@ - JIT_RUST_FLAGS=@JIT_RUST_FLAGS@ -+RUSTC_FLAGS=@RUSTC_FLAGS@ - RLIB_DIR=@RLIB_DIR@ - RUST_LIB=@RUST_LIB@ - RUST_LIBOBJ = $(RUST_LIB:.a=.@OBJEXT@) diff --git a/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch b/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch new file mode 100644 index 0000000..711c514 --- /dev/null +++ b/ruby-irb-1.4.1-drop-rdoc-hard-dep.patch @@ -0,0 +1,24 @@ +From 54c8df06ff9e161012f89d19a4e3aa2e0e37e1b0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Tue, 23 Aug 2022 10:41:28 +0200 +Subject: [PATCH] Drop hard dependency on RDoc. + +This has been introduced in 026700499dfd640b2072d7bf0370247a98d5ac40, +but it seems that this is just be mistake, otherwise the later handling +of `LoadError` would not be needed. +--- + lib/irb/input-method.rb | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb +index fd68239e..a8227caa 100644 +--- a/lib/irb/input-method.rb ++++ b/lib/irb/input-method.rb +@@ -14,7 +14,6 @@ + require_relative 'completion' + require 'io/console' + require 'reline' +-require 'rdoc' + + module IRB + STDIN_FILE_NAME = "(line)" # :nodoc: diff --git a/ruby-irb-1.4.1-set-rdoc-soft-dep.patch b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch new file mode 100644 index 0000000..db8aba7 --- /dev/null +++ b/ruby-irb-1.4.1-set-rdoc-soft-dep.patch @@ -0,0 +1,35 @@ +From b24852058fc87c940252c8a711c60ae2eb298082 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Thu, 25 Aug 2022 20:11:34 +0200 +Subject: [PATCH] Require RDoc in `input-method.rb` again in a limited scope. + +RDoc is implemented as soft dependency in IRB. See how the rdoc is required in +the files. I reverted the commit below. + +``` +$ grep -ril rdoc lib/ +lib/irb/cmd/help.rb +lib/irb/completion.rb +lib/irb/easter-egg.rb +lib/irb/input-method.rb +``` +--- + lib/irb/input-method.rb | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb +index a8227ca..b77fd32 100644 +--- a/lib/irb/input-method.rb ++++ b/lib/irb/input-method.rb +@@ -320,6 +320,11 @@ def auto_indent(&block) + [195, 164], # The "ä" that appears when Alt+d is pressed on xterm. + [226, 136, 130] # The "∂" that appears when Alt+d in pressed on iTerm2. + ] ++ begin ++ require 'rdoc' ++ rescue LoadError ++ return nil ++ end + + if just_cursor_moving and completion_journey_data.nil? + return nil diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index ec8ac11..0c2b585 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -13,13 +13,15 @@ addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan # The template files do not have to have executable bits. addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') -# Samples don't really need executable bits. -addFilter(r'^rubygem-bigdecimal\.x86_64: E: non-executable-script /usr/share/gems/gems/bigdecimal-[\d\.]+/sample/\w+.rb 644 /usr/local/bin/ruby$') - # The bundled gem files permissions are overridden as 644 by `make install`. # https://bugs.ruby-lang.org/issues/17840 # https://github.com/rubygems/rubygems/issues/5255 -addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\d\.]+/bin/\w+ 644 ') +# https://github.com/ruby/debug/pull/481 +# https://github.com/ruby/net-ftp/pull/12 +# https://github.com/ruby/net-imap/pull/53 +# https://github.com/ruby/net-pop/pull/7 +# https://github.com/ruby/prime/pull/16 +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(debug|net-(ftp|imap|pop)|prime)-[\d\.]+/bin/\w+ 644 ') # Ruby provides API to set the cipher list. addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64)?/ruby/openssl.so SSL_CTX_set_cipher_list$') @@ -29,11 +31,31 @@ addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64 # https://bugs.ruby-lang.org/issues/17944 addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$') +# Nothing referred and no dependency information should be no problem. +# https://bugs.ruby-lang.org/issues/16558#note-2 +addFilter(r'^ruby-libs\.\w+: E: shared-library-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') +# Compatibility for rpmlint 1.11. +addFilter(r'^ruby-libs\.\w+: E: shared-lib-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') + +# These are Ruby plugins, where Ruby always load glibc prior the library. +addFilter(r'^ruby-libs\.\w+: W: library-not-linked-against-libc /usr/lib(64)?/ruby/.*.so$') + +# The function `chroot` without using `chdir` is detected by rpmlint with the +# following message. However it looks a false positive as the `chroot` in the +# `dir.c` is just used as a Ruby binding `Dir.chroot` for the function. +# +# ruby-libs.x86_64: E: missing-call-to-chdir-with-chroot /usr/lib64/libruby.so.N.N.N +# This executable appears to call chroot without using chdir to change the +# current directory. This is likely an error and permits an attacker to break +# out of the chroot by using fchdir. While that's not always a security issue, +# this has to be checked. +addFilter(r'^ruby-libs\.\w+: E: missing-call-to-chdir-with-chroot /usr/lib(64)?/libruby.so.[\d/.]+$') + # Rake ships some examples. addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') # Some executables don't have their manual pages. Is it worth of use help2man? -addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$') +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|rbs|rdbg|rdoc|ruby-mri|typeprof)$') # Default gems does not come with any documentation. addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') @@ -42,18 +64,6 @@ addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentatio # by RPM and can't be modified. addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') -# Ignore some spelling false positives. -# Ignore spelling of technical terms -addFilter(r'^ruby-default-gems.noarch: E: spelling-error \(\'gemspec\'') -addFilter(r'^ruby-libs.x86_64: E: spelling-error \(\'libruby\'') -addFilter(r'^rubygem-test-unit.noarch: E: spelling-error \(\'xUnit\'') -addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'libyaml\'') -addFilter(r'^rubygem-io-console.x86_64: E: spelling-error \(\'readline\'') -# `pyaml` is part of URL -addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'pyyaml\'') -# `de-` is actually prefix -addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'de\'') - -# It does not seemt to be worth of changing rubygems to archful package due to -# single directory, unless it causes some real troubles. -addFilter(r'^rubygems.noarch: E: noarch-with-lib64$') +# The empty gem.build_complete file is false positive. This error is gone in rpmlint 2.0+. +# https://github.com/rpm-software-management/rpmlint/commit/e34ce874f27d733628f51c9884ac951af072bed2 +addFilter(r'^ruby(gem)?-(bigdecimal|bundled-gems|io-console|json|psych|rbs)\.\w+: E: zero-length /usr/lib(64)?/gems/ruby/.*/gem.build_complete') diff --git a/ruby.spec b/ruby.spec index a364fe6..3bc2c0d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,155 +1,80 @@ -%global major_version 4 -%global minor_version 0 -%global teeny_version 1 +%global major_version 3 +%global minor_version 1 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -%dnl %global milestone preview2 +#%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -%dnl %global revision d428d086c2 +#%%global revision fb4df44d16 %global ruby_archive %{name}-%{ruby_version} # If revision and milestone are removed/commented out, the official release build is expected. -%if 0%{?milestone:1} != 0 -%global ruby_archive %{ruby_archive}-%{?milestone} -%endif - -%if 0%{?revision:1} != 0 -%global ruby_archive %{ruby_archive}-%{?revision} -%define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d") -%endif - %if 0%{?milestone:1}%{?revision:1} != 0 -%define development_release ~%{?ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}} +%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision}} +%define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d") +%define development_release %{?milestone}%{?!milestone:%{?revision:%{ruby_archive_timestamp}git%{revision}}} %endif +%global release 176 +%{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} + # The RubyGems library has to stay out of Ruby directory tree, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems -## BUNDLED_GEMS_VERSIONS - # Bundled libraries versions -%global rubygems_version 4.0.3 -%global rubygems_molinillo_version 0.8.0 -%global rubygems_net_http_version 0.7.0 -%global rubygems_net_protocol_version 0.2.2 -%global rubygems_optparse_version 0.8.0 -%global rubygems_resolv_version 0.6.2 -%global rubygems_securerandom_version 0.4.1 -%global rubygems_timeout_version 0.4.4 -%global rubygems_tsort_version 0.2.0 -%global rubygems_uri_version 1.1.1 +%global rubygems_version 3.3.26 +%global rubygems_molinillo_version 0.7.0 +%global rubygems_optparse_version 0.2.0 +%global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 4.0.3 -%global bundler_connection_pool_version 2.5.4 -%global bundler_fileutils_version 1.8.0 -%global bundler_net_http_persistent_version 4.0.6 -%global bundler_pub_grub_version 0.5.0 -%global bundler_securerandom_version 0.4.1 -%global bundler_thor_version 1.4.0 -%global bundler_tsort_version 0.2.0 -%global bundler_uri_version 1.1.1 +%global bundler_version 2.3.26 +%global bundler_connection_pool_version 2.3.0 +%global bundler_fileutils_version 1.4.1 +%global bundler_molinillo_version 0.8.0 +%global bundler_net_http_persistent_version 4.0.0 +%global bundler_thor_version 1.2.1 +%global bundler_tmpdir_version 0.1.0 +# TODO: Check the version if/when available in library. +%global bundler_tsort_version 0.1.1 +%global bundler_uri_version 0.10.2 -%global date_version 3.5.1 -%global delegate_version 0.6.1 -%global did_you_mean_version 2.0.0 -%global digest_version 3.2.1 -%global english_version 0.8.1 -%global erb_version 6.0.1 -%global error_highlight_version 0.7.1 -%global etc_version 1.4.6 -%global fcntl_version 1.3.0 -%global fileutils_version 1.8.0 -%global find_version 0.2.0 -%global forwardable_version 1.4.0 -%global io_console_version 0.8.2 -%global io_nonblock_version 0.3.2 -%global io_wait_version 0.4.0 -%global ipaddr_version 1.2.8 -%global json_version 2.18.0 -%global net_http_version 0.9.1 -%global net_protocol_version 0.2.2 -%global open_uri_version 0.5.0 -%global open3_version 0.2.1 -%global openssl_version 4.0.0 -%global optparse_version 0.8.1 -%global pp_version 0.6.3 -%global prettyprint_version 0.2.0 -%global prism_version 1.8.0 -%global psych_version 5.3.1 -%global resolv_version 0.7.0 -%global ruby2_keywords_version 0.0.5 -%global securerandom_version 0.4.1 -%global shellwords_version 0.2.2 -%global singleton_version 0.3.0 -%global stringio_version 3.2.0 -%global strscan_version 3.1.6 -%global syntax_suggest_version 2.0.2 -%global tempfile_version 0.3.1 -%global time_version 0.4.2 -%global timeout_version 0.6.0 -%global tmpdir_version 0.3.1 -%global tsort_version 0.2.0 -%global un_version 0.3.0 -%global uri_version 1.1.1 -%global weakref_version 0.1.4 -%global win32_registry_version 0.1.2 -%global yaml_version 0.4.0 -%global zlib_version 3.2.2 +%global bigdecimal_version 3.1.1 +%global did_you_mean_version 1.6.1 +%global erb_version 2.2.3 +%global io_console_version 0.5.11 +%global irb_version 1.4.1 +%global json_version 2.6.1 +%global openssl_version 3.0.1 +%global psych_version 4.0.4 +%global racc_version 1.6.0 +%global rdoc_version 6.4.0 +%global stringio_version 3.0.1 # Bundled gems. -%global abbrev_version 0.1.2 -%global base64_version 0.3.0 -%global benchmark_version 0.5.0 -%global bigdecimal_version 4.0.1 -%global csv_version 3.3.5 -%global debug_version 1.11.1 -%global drb_version 2.2.3 -%global fiddle_version 1.1.8 -%global getoptlong_version 0.2.1 -%global irb_version 1.16.0 -%global logger_version 1.7.0 -%global matrix_version 0.4.3 -%global minitest_version 6.0.0 -%global mutex_m_version 0.3.0 -%global net_ftp_version 0.3.9 -%global net_imap_version 0.6.2 -%global net_pop_version 0.1.2 -%global net_smtp_version 0.5.1 -%global nkf_version 0.2.0 -%global observer_version 0.1.2 -%global ostruct_version 0.6.3 -%global power_assert_version 3.0.1 -%global prime_version 0.1.4 -%global pstore_version 0.2.0 -%global racc_version 1.8.1 -%global rake_version 13.3.1 -%global rbs_version 3.10.0 -%global rdoc_version 7.0.3 -%global readline_version 0.0.4 -%global reline_version 0.6.3 -%global repl_type_completor_version 0.1.12 -%global resolv_replace_version 0.1.1 -%global rexml_version 3.4.4 -%global rinda_version 0.2.0 -%global rss_version 0.3.2 -%global syslog_version 0.3.0 -%global test_unit_version 3.7.5 -%global typeprof_version 0.31.1 -%global win32ole_version 1.9.2 - -## END_BUNDLED_GEMS_VERSIONS - -# Bundled nkf version -%global bundled_nkf_version 2.1.5 +%global minitest_version 5.15.0 +%global power_assert_version 2.0.1 +%global rake_version 13.0.6 +%global test_unit_version 3.5.3 +%global rexml_version 3.2.5 +%global rss_version 0.2.9 +%global net_ftp_version 0.1.3 +%global net_imap_version 0.2.3 +%global net_pop_version 0.1.1 +%global net_smtp_version 0.3.1 +%global matrix_version 0.4.2 +%global prime_version 0.1.2 +%global rbs_version 2.7.0 +%global typeprof_version 0.21.3 +%global debug_version 1.6.3 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -162,22 +87,8 @@ %bcond_without gmp %bcond_without hostname %bcond_without systemtap -%bcond_without rust - -# Don't build rust parts if we are not building with rust bits. -%if 0%{?with_rust} -# YJIT and ZJIT is supported on x86_64 and aarch64. -# https://github.com/ruby/ruby/blob/master/doc/jit/yjit.md -# https://github.com/ruby/ruby/blob/master/doc/jit/zjit.md -%ifarch x86_64 aarch64 -%bcond_without yjit -%bcond_without zjit -%endif -%endif - # Enable test when building on local. %bcond_with bundler_tests -%bcond_without parallel_tests %if 0%{?fedora} %bcond_without hardening_test @@ -189,41 +100,13 @@ Summary: An interpreter of object-oriented scripting language Name: ruby -Version: %{ruby_version}%{?development_release} -Release: 31%{?dist} -# Licenses, which are likely not included in binary RPMs: -# Apache-2.0: -# benchmark/gc/redblack.rb -# But this file might be BSD-2-Clause licensed after all: -# https://bugs.ruby-lang.org/issues/20420 -# GPL-1.0-or-later: ext/win32/lib/win32/sspi.rb -# GPL-1.0-or-later OR Artistic-1.0-Perl: win32/win32.c, include/ruby/win32.h, -# ext/win32ole/win32ole.c -# IETF (this is not official SPDX identifier) -# .bundle/gems/net-imap-0.4.9/LICENSE.txt -# Licenses in this file covers fair use and don't need to be listed: -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 -# -# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c, addr2line.c:2652 -# CC0: ccan/{build_assert/build_assert.h,check_type/check_type.h, -# container_of/container_of.h,str/str.h} -# Allowed based on 'grandfather clause': -# https://gitlab.com/fedora/legal/fedora-license-data/-/blob/7d9720b2cfd8ccb98d1975312942d99588a0da7c/data/CC0-1.0.toml#L11-14 -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/499 -# dtoa: missing/dtoa.c -# GPL-3.0-or-later WITH Bison-exception-2.2: parse.{c,h}, ext/ripper/ripper.c -# HPND-Markus-Kuhn: missing/langinfo.c -# ISC: missing/strl{cat,cpy}.c -# LicenseRef-Fedora-Public-Domain: include/ruby/st.h, strftime.c, missing/*, ... -# https://gitlab.com/fedora/legal/fedora-license-data/-/merge_requests/145 -# MIT: ccan/list/list.h -# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb -# Ruby-pty: ext/pty/pty.c -# Unicode-DFS-2015: some of enc/trans/**/*.src -# There is also license review ticket here: -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/500 +Version: %{ruby_version} +Release: %{release_string} +# Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... +# MIT and CCO: ccan/* # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c -License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR GPL-1.0-or-later) AND BSD-3-Clause AND (GPL-3.0-or-later WITH Bison-exception-2.2) AND ISC AND LicenseRef-Fedora-Public-Domain AND MIT AND CC0-1.0 AND zlib AND Unicode-DFS-2015 AND HPND-Markus-Kuhn AND Ruby-pty +# UCD: some of enc/trans/**/*.src +License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD URL: https://www.ruby-lang.org/ Source0: https://cache.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz Source1: operating_system.rb @@ -233,53 +116,35 @@ Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems # RPM dependency generators. -Source6: rubygems.attr -Source7: rubygems.req -Source8: rubygems.prov -Source9: rubygems.con +Source8: rubygems.attr +Source9: rubygems.req +Source10: rubygems.prov +Source11: rubygems.con # ABRT hoook test case. -Source10: test_abrt.rb +Source13: test_abrt.rb # SystemTap tests. -Source11: test_systemtap.rb -# Ruby OpenSSL FIPS tests. -Source12: test_openssl_fips.rb -# RPM gem Requires dependency generator tests. -Source13: rpm_test_helper.rb -Source14: test_rubygems_req.rb -Source15: test_rubygems_prov.rb -Source16: test_rubygems_con.rb +Source14: test_systemtap.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. %{load:%{SOURCE4}} %{load:%{SOURCE5}} -%define _local_file_attrs local_generator -%define __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE7}" -%define __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE8}" -%define __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" -%define __local_generator_path ^%{gem_dir}/specifications/.*\.gemspec$ - # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 Patch0: ruby-2.3.0-ruby_version.patch -# Fix ruby_version abuse for rdoc. -# Since rdoc is bundled gem, the patch is split from ruby-2.3.0-ruby_version.patch -# re-made in ruby/rdoc git source and will be applied in correct path in the -# specfile where we have the exact rdoc version that is part of the path. -Patch1: ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch # http://bugs.ruby-lang.org/issues/7807 -Patch2: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +Patch1: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch # Allows to override libruby.so placement. Hopefully we will be able to return # to plain --with-rubyarchprefix. # http://bugs.ruby-lang.org/issues/8973 -Patch3: ruby-2.1.0-Enable-configuration-of-archlibdir.patch +Patch2: ruby-2.1.0-Enable-configuration-of-archlibdir.patch # Force multiarch directories for i.86 to be always named i386. This solves # some differencies in build between Fedora and RHEL. -Patch4: ruby-2.1.0-always-use-i386.patch +Patch3: ruby-2.1.0-always-use-i386.patch # Allows to install RubyGems into custom directory, outside of Ruby's tree. # http://bugs.ruby-lang.org/issues/5617 -Patch5: ruby-2.1.0-custom-rubygems-location.patch +Patch4: ruby-2.1.0-custom-rubygems-location.patch # The ABRT hook used to be initialized by preludes via following patches: # https://bugs.ruby-lang.org/issues/8566 # https://bugs.ruby-lang.org/issues/15306 @@ -289,69 +154,93 @@ Patch5: ruby-2.1.0-custom-rubygems-location.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch -# Disable syntax_suggest test suite, which tries to download its dependencies. -# https://bugs.ruby-lang.org/issues/19297 -Patch7: ruby-3.3.0-Disable-syntax-suggest-test-case.patch -# Add a way to provide %%build_rustflags to JIT's rustc. -# https://github.com/ruby/ruby/pull/15695 -Patch8: ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch -# https://github.com/ruby/rdoc/pull/1531 -# Fix error with `gem install --document=rdoc,ri` -Patch9: rdoc-pr1531-fix-mutilple-document-installation.patch +# Prevent segfaults running with SystemTap due to `RubyVM::FrozenCore` being +# corrupted by GC. +# https://bugzilla.redhat.com/show_bug.cgi?id=2015441 +# https://bugzilla.redhat.com/show_bug.cgi?id=1986206 +# https://bugs.ruby-lang.org/issues/18257 +Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch +# Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. +# https://bugs.ruby-lang.org/issues/16492 +Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +# If GC compaction is not supported on platform, define the +# corresponding GC methods as not implemented. +# https://bugs.ruby-lang.org/issues/18779 +# https://github.com/ruby/ruby/pull/5934 +Patch22: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +# To regenerate the patch you need to have ruby, autoconf, xz, tar and make installed: +# tar -Jxvf ./ruby-3.1.4.tar.xz +# git clone https://github.com/ruby/ruby.git +# cd ruby && git checkout v3_1_4 +# patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +# ./autogen.sh && ./configure +# make gc.rbinc miniprelude.c +# cd .. +# diff -u {ruby-3.1.4,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# diff -u {ruby-3.1.4,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +# Define the GC compaction support macro at run time. +# https://bugs.ruby-lang.org/issues/18829 +# https://github.com/ruby/ruby/pull/6019 +# https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 +Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch +# Drop hard dependency on RDoc in IRB. +# https://github.com/ruby/irb/pull/393 +Patch27: ruby-irb-1.4.1-drop-rdoc-hard-dep.patch +# Set soft dependency on RDoc in input-method.rb in IRB. +# https://github.com/ruby/irb/pull/395 +Patch28: ruby-irb-1.4.1-set-rdoc-soft-dep.patch +# A Weakmap test uses compaction without safeguarding if the method is defined. +# This test should be skipped if compaction is not supported on the platform. +# https://github.com/ruby/ruby/commit/bffadcd6d46ccfccade79ce0efb60ced8eac4483 +# https://bugs.ruby-lang.org/issues/19529#note-7 +Patch29: ruby-3.1.4-Skip-test_compaction_bug_19529-if-compaction-unsupported.patch +# Bundler does not correctly resolve archful gems in 2.3.26. +# Example of such an issue +# https://github.com/sclorg/s2i-ruby-container/issues/469 +# The patch is an amalgamation of the following: +# https://github.com/rubygems/rubygems/pull/6225 +# https://github.com/rubygems/rubygems/commit/7b64c64262a7a980c0eb23b96ea56cf72ea06e89 +# Backport requested in +# https://bugs.ruby-lang.org/issues/19576 +Patch30: rubygem-bundler-2.3.26-Provide-fix-for-bundler-Gemfile-resolving-regression.patch +Patch31: rubygem-bundler-2.3.26-Tests-from-bundler-PR-6225.patch +# Continuation of the bundler fix for s2i-ruby-container #469 issue. +# Additionally to already described problem, when bundler is run with +# --deployment it again resolves to the incorrect gem from Rubygems repository. +# Fix and test from: +# https://github.com/rubygems/rubygems/pull/6261 +# https://bugs.ruby-lang.org/issues/19576#note-4 +Patch32: rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back.patch +Patch33: rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back-test.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} -%{?with_rubypick:Suggests: rubypick} +Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} -Recommends: ruby-default-gems >= %{version}-%{release} -Recommends: ruby-bundled-gems >= %{version}-%{release} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} -# Build dependencies BuildRequires: autoconf -BuildRequires: gcc -BuildRequires: make -BuildRequires: libffi-devel -BuildRequires: libxcrypt-devel -BuildRequires: libyaml-devel -BuildRequires: openssl-devel -BuildRequires: zlib-devel %{?with_gmp:BuildRequires: gmp-devel} -%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} -%{?with_systemtap:BuildRequires: systemtap-sdt-devel} -%if 0%{?with_rust} -BuildRequires: %{_bindir}/rustc - -# We need the %%{build_rustflags}, EL needs different package than Fedora. -%if 0%{?fedora} -BuildRequires: rust-srpm-macros -%else -Buildrequires: rust-toolset -%endif - -%endif - -# Install section -BuildRequires: multilib-rpm-config - -# Check dependencies - -# Required to test hardening. -%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} - +BuildRequires: libffi-devel +BuildRequires: openssl-devel +BuildRequires: libyaml-devel +BuildRequires: readline-devel # Needed to pass test_set_program_name(TestRubyOptions) BuildRequires: procps -# Neede by `Socket.gethostname returns the host name ERROR` -%{?with_hostname:BuildRequires: %{_bindir}/hostname} - +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} # RubyGems test suite optional dependencies. %{?with_git:BuildRequires: git} -# `cmake` is required for test/rubygems/test_gem_ext_cmake_builder.rb. %{?with_cmake:BuildRequires: %{_bindir}/cmake} - +# Required to test hardening. +%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} +%{?with_hostname:BuildRequires: %{_bindir}/hostname} +BuildRequires: multilib-rpm-config +BuildRequires: gcc +BuildRequires: make +BuildRequires: zlib-devel # The bundler/spec/runtime/setup_spec.rb requires the command `man`. %{?with_bundler_tests:BuildRequires: %{_bindir}/man} - # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} @@ -379,6 +268,7 @@ Ruby or an application embedding Ruby. %package libs Summary: Libraries necessary to run Ruby +License: Ruby or BSD Provides: ruby(release) = %{ruby_release} # Virtual provides for CCAN copylibs. @@ -391,6 +281,16 @@ Provides: bundled(ccan-list) # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} +Provides: bundled(rubygem-racc) = %{racc_version} + +# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe. +Obsoletes: ruby-tcltk < 2.4.0 + +# The Net::Telnet and XMLRPC were removed in Ruby 2.8, i.e. F34 timeframe. +# https://bugs.ruby-lang.org/issues/16484 +# TODO: Update the versions prior landing in Fedora. +Obsoletes: rubygem-net-telnet < 0.2.0-%{release} +Obsoletes: rubygem-xmlrpc < 0.3.0-%{release} %description libs @@ -401,35 +301,16 @@ This package includes the libruby, necessary to run Ruby. %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -# BSD-2-Clause OR Ruby: -# lib/rubygems/net-http/ -# lib/rubygems/net-protocol/ -# lib/rubygems/optparse/ -# lib/rubygems/resolv/ -# lib/rubygems/timeout/ -# lib/rubygems/tsort/ -# MIT: lib/rubygems/resolver/molinillo -# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb -License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND (Ruby OR BSD-2-Clause OR GPL-1.0-or-later) AND MIT +License: Ruby or MIT Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} -Recommends: rubygem(io-console) -Requires: rubygem(psych) >= %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} +Recommends: rubygem(io-console) >= %{io_console_version} +Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} -Provides: bundled(rubygems) = %{rubygems_version} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 Provides: bundled(rubygem-molinillo) = %{rubygems_molinillo_version} -Provides: bundled(rubygem-net-http) = %{rubygems_net_http_version} -Provides: bundled(rubygem-net-protocol) = %{rubygems_net_protocol_version} -Provides: bundled(rubygem-optparse) = %{rubygems_optparse_version} -Provides: bundled(rubygem-resolv) = %{rubygems_resolv_version} -Provides: bundled(rubygem-securerandom) = %{rubygems_securerandom_version} -Provides: bundled(rubygem-timeout) = %{rubygems_timeout_version} -Provides: bundled(rubygem-tsort) = %{rubygems_tsort_version} -Provides: bundled(rubygem-uri) = %{rubygems_uri_version} - BuildArch: noarch %description -n rubygems @@ -440,7 +321,7 @@ libraries. %package -n rubygems-devel Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} -License: MIT +License: Ruby or MIT Requires: ruby(rubygems) >= %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} @@ -458,9 +339,17 @@ Macros and development tools for packaging RubyGems. %package default-gems Summary: Default gems which are part of Ruby StdLib +Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) +# Include the io-console dependency for reline. +Requires: rubygem(io-console) +# Obsoleted by Ruby 2.7 in F32 timeframe. +Obsoletes: rubygem-did_you_mean < 1.4.0-130 +Obsoletes: rubygem-racc < 1.4.16-130 # Obsoleted by Ruby 3.0 in F34 timeframe. Obsoletes: rubygem-openssl < 2.2.0-145 +Provides: rubygem(openssl) = %{openssl_version}-%{release} +Provides: rubygem(stringio) = %{stringio_version} BuildArch: noarch %description default-gems @@ -471,9 +360,18 @@ StdLib. %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} -License: Ruby OR BSD-2-Clause +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +# ruby-default-gems is required to run irb. +# https://bugs.ruby-lang.org/issues/16951 +Requires: ruby-default-gems >= %{ruby_version} +Recommends: rubygem(rdoc) >= %{rdoc_version} Provides: irb = %{version}-%{release} -Provides: bundled(rubygem-irb) = %{irb_version} +Provides: rubygem(irb) = %{version}-%{release} +# Obsoleted by Ruby 2.6 in F30 timeframe. +Provides: ruby(irb) = %{ruby_version}-%{release} +Provides: ruby-irb = %{ruby_version}-%{release} +Obsoletes: ruby-irb < %{ruby_version}-%{release} BuildArch: noarch %description -n rubygem-irb @@ -484,21 +382,16 @@ from the terminal. %package -n rubygem-rdoc Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} -# BSD-3-Clause: lib/rdoc/generator/darkfish.rb -# CC-BY-2.5: lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif -# OFL-1.1-RFN: lib/rdoc/generator/template/darkfish/css/fonts.css -# MIT: lib/rdoc/generator/aliki.rb -# MIT: lib/rdoc/generator/template/aliki/* -# Note that RDoc now embeds Racc parser: -# https://github.com/ruby/rdoc/pull/1019 -# Luckily, this should have no license impact: -# https://github.com/ruby/racc/blob/5eb07b28bfb3e193a1cac07798fe7be7e1e246c4/lib/racc/parser.rb#L8-L10 -License: GPL-2.0-only AND Ruby AND BSD-3-Clause AND CC-BY-2.5 AND OFL-1.1-RFN AND MIT -Requires: rubygem(io-console) +# SIL: lib/rdoc/generator/template/darkfish/css/fonts.css +License: GPLv2 and Ruby and MIT and OFL +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(io-console) >= %{io_console_version} Requires: rubygem(json) >= %{json_version} +Requires: rubygem(psych) >= %{psych_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} -Provides: bundled(rubygem-rdoc) = %{rdoc_version} +Provides: rubygem(rdoc) = %{version}-%{release} BuildArch: noarch %description -n rubygem-rdoc @@ -519,9 +412,10 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -# dtoa: missing/dtoa.c -License: (Ruby OR BSD-2-Clause) AND dtoa -Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(bigdecimal) = %{version}-%{release} %description -n rubygem-bigdecimal Ruby provides built-in support for arbitrary precision integer arithmetic. @@ -539,8 +433,9 @@ conversion between base 10 and base 2. %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} -License: Ruby OR BSD-2-Clause -Provides: bundled(rubygem-io-console) = %{io_console_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(io-console) = %{version}-%{release} %description -n rubygem-io-console IO/Console provides very simple and portable access to console. It doesn't @@ -550,18 +445,11 @@ provide higher layer features, such like curses and readline. %package -n rubygem-json Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} -# Apache-2.0 OR BSL-1.0: ext/json/vendor/ryu.h -# MIT: ext/json/vendor/jeaiii-ltoa.h -# BSL-1.0: ext/json/vendor/fpconv.c -License: (Ruby OR BSD-2-Clause) AND (Apache-2.0 OR BSL-1.0) AND MIT AND BSL-1.0 -Provides: bundled(rubygem-json) = %{json_version} -# https://github.com/ulfjack/ryu -Provides: bundled(ryu) -# jeaiii-ltoa.h -# https://github.com/jeaiii/itoa -Provides: bundled(itoa) -# https://github.com/night-shift/fpconv -Provides: bundled(fpconv) +# UCD: ext/json/generator/generator.c +License: (Ruby or GPLv2) and UCD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(json) = %{version}-%{release} %description -n rubygem-json This is a implementation of the JSON specification according to RFC 4627. @@ -572,9 +460,12 @@ markup language. %package -n rubygem-psych Summary: A libyaml wrapper for Ruby -Version: %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} +Version: %{psych_version} License: MIT -Provides: bundled(rubygem-psych) = %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(stringio) >= %{stringio_version} +Provides: rubygem(psych) = %{version}-%{release} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -586,27 +477,18 @@ serialize and de-serialize most Ruby objects to and from the YAML format. %package -n rubygem-bundler Summary: Library and utilities to manage a Ruby application's gem dependencies Version: %{bundler_version} -# BSD-2-Clause OR Ruby: -# lib/bundler/vendor/fileutils -# lib/bundler/vendor/tsort -# lib/bundler/vendor/uri -# MIT: -# lib/bundler/vendor/connection_pool -# lib/bundler/vendor/net-http-persistent -# lib/bundler/vendor/pub_brub -# lib/bundler/vendor/thor -# lib/rubygems/resolver/molinillo -License: MIT AND (Ruby OR BSD-2-Clause) +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} Requires: rubygem(io-console) -Provides: bundled(rubygem-bundler) = %{bundler_version} +Provides: rubygem(bundler) = %{version}-%{release} # https://github.com/bundler/bundler/issues/3647 Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} -Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} -Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} -Provides: bundled(rubygem-securerandom) = %{bundler_securerandom_version} +Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} +Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} -Provides: bundled(rubygem-tsort) = %{bundler_tsort_version} +Provides: bundled(rubygem-tmpdir) = %{bundler_tmpdir_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -622,37 +504,16 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib -Provides: bundled(rubygem-abbrev) = %{abbrev_version} -Provides: bundled(rubygem-base64) = %{base64_version} -Provides: bundled(rubygem-benchmark) = %{benchmark_version} -Provides: bundled(rubygem-csv) = %{csv_version} -Provides: bundled(rubygem-debug) = %{debug_version} -Provides: bundled(rubygem-drb) = %{drb_version} -Provides: bundled(rubygem-getoptlong) = %{getoptlong_version} -Provides: bundled(rubygem-fiddle) = %{fiddle_version} -Provides: bundled(rubygem-logger) = %{logger_version} -Provides: bundled(rubygem-matrix) = %{matrix_version} -Provides: bundled(rubygem-mutex_m) = %{mutex_m_version} -Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} -Provides: bundled(rubygem-net-imap) = %{net_imap_version} -Provides: bundled(rubygem-net-pop) = %{net_pop_version} -Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} -Provides: bundled(rubygem-nkf) = %{nkf_version} -Provides: bundled(rubygem-observer) = %{observer_version} -Provides: bundled(rubygem-ostruct) = %{ostruct_version} -Provides: bundled(rubygem-prime) = %{prime_version} -Provides: bundled(rubygem-pstore) = %{pstore_version} -Provides: bundled(rubygem-readline) = %{readline_version} -Provides: bundled(rubygem-reline) = %{reline_version} -Provides: bundled(rubygem-repl_type_completor) = %{repl_type_completor_version} -Provides: bundled(rubygem-resolv-replace) = %{resolv_replace_version} -Provides: bundled(rubygem-rinda) = %{rinda_version} -Provides: bundled(rubygem-syslog) = %{syslog_version} -# https://github.com/nurse/nkf -# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: -# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d -Provides: bundled(nkf) = %{bundled_nkf_version} - +Requires: ruby(rubygems) >= %{rubygems_version} +# Runtime dependency of rubygem(debug). +Recommends: rubygem(irb) >= %{irb_version} +Provides: rubygem(net-ftp) = %{net_ftp_version} +Provides: rubygem(net-imap) = %{net_imap_version} +Provides: rubygem(net-pop) = %{net_pop_version} +Provides: rubygem(net-smtp) = %{net_smtp_version} +Provides: rubygem(matrix) = %{matrix_version} +Provides: rubygem(prime) = %{prime_version} +Provides: rubygem(debug) = %{debug_version} %description bundled-gems Bundled gems which are part of Ruby StdLib. While being part of Ruby, these @@ -663,17 +524,22 @@ needs to be listed in Gemfile to be used by Bundler. Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} License: MIT -Provides: bundled(rubygem-minitest) = %{minitest_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(minitest) = %{version}-%{release} BuildArch: noarch %description -n rubygem-minitest -minitest/test is a small and incredibly fast unit testing framework. +minitest/unit is a small and incredibly fast unit testing framework. minitest/spec is a functionally complete spec engine. minitest/benchmark is an awesome way to assert the performance of your algorithms in a repeatable manner. +minitest/mock by Steven Baker, is a beautifully tiny mock object +framework. + minitest/pride shows pride in testing and adds coloring to your test output. @@ -681,8 +547,10 @@ output. %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} -License: Ruby OR BSD-2-Clause -Provides: bundled(rubygem-power_assert) = %{power_assert_version} +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(power_assert) = %{version}-%{release} BuildArch: noarch %description -n rubygem-power_assert @@ -695,8 +563,10 @@ condition is not satisfied. Summary: Ruby based make-like utility Version: %{rake_version} License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} -Provides: bundled(rubygem-rake) = %{rake_version} +Provides: rubygem(rake) = %{version}-%{release} BuildArch: noarch %description -n rubygem-rake @@ -707,8 +577,10 @@ specified in standard Ruby syntax. %package -n rubygem-rbs Summary: Type signature for Ruby Version: %{rbs_version} -License: Ruby OR BSD-2-Clause -Provides: bundled(rubygem-rbs) = %{rbs_version} +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(rbs) = %{version}-%{release} %description -n rubygem-rbs RBS is the language for type signatures for Ruby and standard library @@ -719,8 +591,12 @@ definitions. Summary: An xUnit family unit testing framework for Ruby Version: %{test_unit_version} # lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. -License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR Python-2.0.1) -Provides: bundled(rubygem-test-unit) = %{test_unit_version} +# lib/test-unit.rb is a dual license of the Ruby license and LGPLv2.1 or later. +License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+) +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(power_assert) +Provides: rubygem(test-unit) = %{version}-%{release} BuildArch: noarch %description -n rubygem-test-unit @@ -730,24 +606,14 @@ programming software development methodology, for Smalltalk's SUnit. It allows writing tests, checking results and automated testing in Ruby. -%package -n rubygem-racc -Version: %{racc_version} -Summary: Racc is a LALR(1) parser generator -License: Ruby OR BSD-2-Clause -URL: https://github.com/ruby/racc -Provides: bundled(rubygem-racc) = %{racc_version} - -%description -n rubygem-racc -Racc is a LALR(1) parser generator. -It is written in Ruby itself, and generates Ruby program. - - %package -n rubygem-rexml Summary: An XML toolkit for Ruby Version: %{rexml_version} -License: BSD-2-Clause +License: BSD URL: https://github.com/ruby/rexml -Provides: bundled(rubygem-rexml) = %{rexml_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(rexml) = %{version}-%{release} BuildArch: noarch %description -n rubygem-rexml @@ -765,9 +631,11 @@ features such as XPath. %package -n rubygem-rss Summary: Family of libraries that support various formats of XML "feeds" Version: %{rss_version} -License: BSD-2-Clause +License: BSD URL: https://github.com/ruby/rss -Provides: bundled(rubygem-rss) = %{rss_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(rss) = %{version}-%{release} BuildArch: noarch %description -n rubygem-rss @@ -782,7 +650,10 @@ Summary: TypeProf is a type analysis tool for Ruby code based on abstract int Version: %{typeprof_version} License: MIT URL: https://github.com/ruby/typeprof -Provides: bundled(rubygem-typeprof) = %{typeprof_version} +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Requires: rubygem(rbs) >= %{rbs_version} +Provides: rubygem(typeprof) = %{version}-%{release} BuildArch: noarch %description -n rubygem-typeprof @@ -796,32 +667,38 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -%patch 0 -p1 +# Remove bundled libraries to be sure they are not used. +rm -rf ext/psych/yaml +rm -rf ext/fiddle/libffi* -pushd .bundle/gems/rdoc-%{rdoc_version} -%patch 1 -p1 -%patch 9 -p1 +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch6 -p1 +%patch7 -p1 +%patch19 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p2 +%patch32 -p2 + +pushd spec/bundler +%patch31 -p3 +%patch33 -p3 popd -%patch 2 -p1 -%patch 3 -p1 -%patch 4 -p1 -%patch 5 -p1 -%patch 6 -p1 -%patch 7 -p1 -%patch 8 -p1 - # Provide an example of usage of the tapset: cp -a %{SOURCE3} . %build autoconf -%global _configure %{_builddir}/%{buildsubdir}/configure - -mkdir -p %{_vpath_builddir} -pushd %{_vpath_builddir} - %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -842,36 +719,24 @@ pushd %{_vpath_builddir} --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ - %{?with_yjit: --enable-yjit} \ - %{?with_zjit: --enable-zjit} \ - %{?with_rust: rustc_flags='%{build_rustflags}'} \ - -popd # V=1 in %%make_build outputs the compiler options more verbosely. # https://bugs.ruby-lang.org/issues/18756 -%make_build COPY="cp -p" -C %{_vpath_builddir} +%make_build COPY="cp -p" %install rm -rf %{buildroot} -%make_install -C %{_vpath_builddir} +%make_install # TODO: Regenerate RBS parser in lib/rbs/parser.rb # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h - -# `ruby` executable is placed in some strange directory for some unknow -# reasons. -# https://bugs.ruby-lang.org/issues/20800 -# https://github.com/ruby/ruby/pull/12043 -CONFIG_TARGET_DIR=%{buildroot}%{_exec_prefix}/$( \ - %{_vpath_builddir}/miniruby -I%{_vpath_builddir} -rrbconfig -e 'puts RbConfig::CONFIG["config_target"]' -) -mv ${CONFIG_TARGET_DIR}/bin/ruby %{buildroot}%{_bindir} -rm -rd ${CONFIG_TARGET_DIR} +# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%%{ruby_version}.h +# https://bugs.ruby-lang.org/issues/15425 +%multilib_fix_c_header --file %{_includedir}/rb_mjit_min_header-%{ruby_version}.h # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -882,7 +747,8 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Kill bundled certificates, as they should be part of ca-certificates. for cert in \ - rubygems.org/GlobalSign.pem + rubygems.org/GlobalSignRootCA.pem \ + rubygems.org/GlobalSignRootCA_R3.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : @@ -892,18 +758,18 @@ test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_rpmmacrodir} -install -m 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems # Install dependency generators. -mkdir -p %{buildroot}%{_fileattrsdir} -install -m 644 %{SOURCE6} %{buildroot}%{_fileattrsdir} -install -m 755 %{SOURCE7} %{buildroot}%{_rpmconfigdir} -install -m 755 %{SOURCE8} %{buildroot}%{_rpmconfigdir} +mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE11} %{buildroot}%{_rpmconfigdir} # Install custom operating_system.rb. mkdir -p %{buildroot}%{rubygems_dir}/rubygems/defaults @@ -919,42 +785,67 @@ mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri -# make symlinks for io-console, which is considered to be part of stdlib by other Gems +# make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems +mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb.rb %{buildroot}%{ruby_libdir}/irb.rb +# TODO: This should be possible to replaced by simple directory symlink +# after ~ F31 EOL (rhbz#1691039). +mkdir -p %{buildroot}%{ruby_libdir}/irb +pushd %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib +find irb -type d -mindepth 1 -exec mkdir %{buildroot}%{ruby_libdir}/'{}' \; +find irb -type f -exec ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/'{}' %{buildroot}%{ruby_libdir}/'{}' \; +popd + +mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib +mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications + +mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal +mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib +mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} +touch %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/gem.build_complete +mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal +ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so + # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 -mkdir -p %{buildroot}%{gem_libdir bundler} -mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_libdir bundler} -mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_libdir bundler} -mv %{buildroot}%{gem_spec -d bundler} %{buildroot}%{gem_spec bundler} +mkdir -p %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib +mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications -mkdir -p %{buildroot}%{gem_libdir io-console} -mkdir -p %{buildroot}%{gem_extdir_mri io-console}/io -mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_libdir io-console} -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{gem_extdir_mri io-console}/io -touch %{buildroot}%{gem_extdir_mri io-console}/gem.build_complete -mv %{buildroot}%{gem_spec -d io-console} %{buildroot}%{gem_spec io-console} -ln -s %{gem_libdir io-console}/io %{buildroot}%{ruby_libdir}/io -ln -s %{gem_extdir_mri io-console}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io +mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io +touch %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/gem.build_complete +mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io +ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so -mkdir -p %{buildroot}%{gem_libdir json} -mkdir -p %{buildroot}%{gem_extdir_mri json} -mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_libdir json} -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{gem_extdir_mri json} -touch %{buildroot}%{gem_extdir_mri json}/gem.build_complete -mv %{buildroot}%{gem_spec -d json} %{buildroot}%{gem_spec json} -ln -s %{gem_libdir json}/json.rb %{buildroot}%{ruby_libdir}/json.rb -ln -s %{gem_libdir json}/json %{buildroot}%{ruby_libdir}/json -ln -s %{gem_extdir_mri json}/json/ %{buildroot}%{ruby_libarchdir}/json +mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} +mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/gem.build_complete +mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir}/json.rb +ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json +ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json -mkdir -p %{buildroot}%{gem_libdir psych} -mkdir -p %{buildroot}%{gem_extdir_mri psych} -mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_libdir psych} -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{gem_extdir_mri psych} -touch %{buildroot}%{gem_extdir_mri psych}/gem.build_complete -mv %{buildroot}%{gem_spec -d psych} %{buildroot}%{gem_spec psych} -ln -s %{gem_libdir psych}/psych %{buildroot}%{ruby_libdir}/psych -ln -s %{gem_libdir psych}/psych.rb %{buildroot}%{ruby_libdir}/psych.rb -ln -s %{gem_extdir_mri psych}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib +mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} +mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ +touch %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/gem.build_complete +mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). @@ -969,12 +860,10 @@ find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete # Move man pages into proper location mkdir -p %{buildroot}%{_mandir}/man{1,5} -mv %{buildroot}%{gem_instdir irb}/man/irb.1 %{buildroot}%{_mandir}/man1 -mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 -mv %{buildroot}%{gem_instdir rdoc}/man/ri.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 # https://bugs.ruby-lang.org/issues/17778 -cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 -cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 +cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. @@ -991,231 +880,114 @@ echo 'doc/images' >> .ruby-doc.en echo 'doc/syntax' >> .ruby-doc.en find doc -maxdepth 1 -type f -name '*.ja*' > .ruby-doc.ja +echo 'doc/irb' >> .ruby-doc.ja echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja +# Remove useless .github directory from Rake. +# https://github.com/ruby/rake/pull/333 +rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github + %check %if 0%{?with_hardening_test} # Check Ruby hardening. -%define fortification_x86_64 fortified="10" fortify-able="26" -%define fortification_i686 fortified="10" fortify-able="26" -%define fortification_aarch64 fortified="11" fortify-able="28" -%define fortification_ppc64le fortified="7" fortify-able="24" -%define fortification_s390x fortified="10" fortify-able="24" -%define fortification_riscv64 fortified="10" fortify-able="26" -# https://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches -checksec --format=xml --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ - sed -r "s//\1/" | \ - sed -nr $'/relro="full" canary="yes" nx="yes" pie="dso" rpath="no" runpath="no" symbols="yes" fortify_source="partial" %{expand:%{fortification_%{_target_cpu}}} filename='\''redhat-linux-build\/libruby.so.%{ruby_version}'\''/h; ${p;x;/./Q0;Q1}' +checksec --file=libruby.so.%{ruby_version} | \ + grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" %endif # Check RubyGems version. -[ "`make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT='%{_builddir}/%{buildsubdir}/bin/gem -v' | tail -1`" == '%{rubygems_version}' ] +[ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] # Check Rubygems bundled dependencies versions. # Molinillo. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Gem; module Resolver; end; end; \ - require 'rubygems/vendor/molinillo/lib/molinillo/gem_metadata'; \ - puts '%%{rubygems_molinillo_version}: %{rubygems_molinillo_version}'; \ - puts %Q[Gem::Molinillo::VERSION: #{Gem::Molinillo::VERSION}]; \ - exit 1 if Gem::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ -\"" - -# Net::HTTP. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; module Net; end; end; \ - require 'rbconfig'; \ - require 'rubygems/vendor/net-http/lib/net/http'; \ - puts '%%{rubygems_net_http_version}: %{rubygems_net_http_version}'; \ - puts %Q[Gem::Net::HTTP::VERSION: #{Gem::Net::HTTP::VERSION}]; \ - exit 1 if Gem::Net::HTTP::VERSION != '%{rubygems_net_http_version}'; \ -\"" - -# Net::Protocol. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; module Net; end; end; \ - require 'rubygems/vendor/net-protocol/lib/net/protocol'; \ - puts '%%{rubygems_net_protocol_version}: %{rubygems_net_protocol_version}'; \ - puts %Q[Gem::Net::Protocol::VERSION: #{Gem::Net::Protocol::VERSION}]; \ - exit 1 if Gem::Net::Protocol::VERSION != '%{rubygems_net_protocol_version}'; \ -\"" + require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ + puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ + == '%{rubygems_molinillo_version}' ] # OptParse. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +make runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ - require 'rubygems/vendor/optparse/lib/optparse'; \ + require 'rubygems/optparse/lib/optparse'; \ puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \ puts %Q[Gem::OptionParser::Version: #{Gem::OptionParser::Version}]; \ exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ \"" -# Resolv. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end; \ - require 'rbconfig'; \ - require 'rubygems/vendor/resolv/lib/resolv'; \ - puts '%%{rubygems_resolv_version}: %{rubygems_resolv_version}'; \ - puts %Q[Gem::Resolv::VERSION: #{Gem::Resolv::VERSION}]; \ - exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ -\"" - -# SecureRandom. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; module Random; end; end; \ - require 'rubygems/vendor/securerandom/lib/securerandom'; \ - puts '%%{rubygems_securerandom_version}: %{rubygems_securerandom_version}'; \ - puts %Q[Gem::SecureRandom::VERSION: #{Gem::SecureRandom::VERSION}]; \ - exit 1 if Gem::SecureRandom::VERSION != '%{rubygems_securerandom_version}'; \ -\"" - -# Timeout. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end; \ - require 'rubygems/vendor/timeout/lib/timeout'; \ - puts '%%{rubygems_timeout_version}: %{rubygems_timeout_version}'; \ - puts %Q[Gem::Timeout::VERSION: #{Gem::Timeout::VERSION}]; \ - exit 1 if Gem::Timeout::VERSION != '%{rubygems_timeout_version}'; \ -\"" - -# TSort -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end; \ - require 'rubygems/vendor/tsort/lib/tsort'; \ - puts '%%{rubygems_tsort_version}: %{rubygems_tsort_version}'; \ - puts %Q[Gem::TSort::VERSION: #{Gem::TSort::VERSION}]; \ - exit 1 if Gem::TSort::VERSION != '%{rubygems_tsort_version}'; \ -\"" - -# URI. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end; \ - require 'rubygems/vendor/uri/lib/uri/version'; \ - puts '%%{rubygems_uri_version}: %{rubygems_uri_version}'; \ - puts %Q[Gem::URI::VERSION: #{Gem::URI::VERSION}]; \ - exit 1 if Gem::URI::VERSION != '%{rubygems_uri_version}'; \ -\"" +# tsort +# TODO: Provide some real version test if version is available. +make runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end;\ + require 'rubygems/tsort/lib/tsort'\"" # Check Bundler bundled dependencies versions. # connection_pool. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \ - puts '%%{bundler_connection_pool_version}; %{bundler_connection_pool_version}'; \ - puts %Q[Bundler::ConnectionPool::VERSION: #{Bundler::ConnectionPool::VERSION}]; \ - exit 1 if Bundler::ConnectionPool::VERSION != '%{bundler_connection_pool_version}'; \ -\"" + puts Bundler::ConnectionPool::VERSION\\\"\" | tail -1`" \ + == '%{bundler_connection_pool_version}' ] # FileUtils. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ require 'bundler/vendor/fileutils/lib/fileutils'; \ - puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \ - puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \ - exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \ -\"" + puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ + == '%{bundler_fileutils_version}' ] -# PubGrub -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +# Molinillo. +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ - require 'bundler/vendor/pub_grub/lib/pub_grub/version'; \ - puts '%%{bundler_pub_grub_version}: %{bundler_pub_grub_version}'; \ - puts %Q[Bundler::PubGrub::VERSION: #{Bundler::PubGrub::VERSION}]; \ - exit 1 if Bundler::PubGrub::VERSION != '%{bundler_pub_grub_version}'; \ -\"" + require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'; \ + puts Bundler::Molinillo::VERSION\\\"\" | tail -1`" \ + == '%{bundler_molinillo_version}' ] # Net::HTTP::Persistent. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end; \ - module Bundler; end; \ - require 'rbconfig'; \ +# Require `rubygems` to workaround the `': uninitialized +# constant Gem (NameError) issue. +# https://github.com/rubygems/rubygems/issues/5119 +[ "`make runruby TESTRUN_SCRIPT=\"-rrubygems -e \\\" \ + module Bundler; module Persistent; module Net; module HTTP; \ + end; end; end; end; \ require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ - puts '%%{bundler_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \ - puts %Q[Gem::Net::HTTP::Persistent::VERSION: #{Gem::Net::HTTP::Persistent::VERSION}]; \ - exit 1 if Gem::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ -\"" - -# SecureRandom. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Bundler; module Random; end; end; \ - require 'bundler/vendor/securerandom/lib/securerandom'; \ - puts '%%{bundler_securerandom_version}: %{bundler_securerandom_version}'; \ - puts %Q[Bundler::SecureRandom::VERSION: #{Bundler::SecureRandom::VERSION}]; \ - exit 1 if Bundler::SecureRandom::VERSION != '%{bundler_securerandom_version}'; \ -\"" + puts Bundler::Persistent::Net::HTTP::Persistent::VERSION\\\"\" | tail -1`" \ + == '%{bundler_net_http_persistent_version}' ] # Thor. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ require 'bundler/vendor/thor/lib/thor/version'; \ - puts '%%{bundler_thor_version}: %{bundler_thor_version}'; \ - puts %Q[Bundler::Thor::VERSION: #{Bundler::Thor::VERSION}]; \ - exit 1 if Bundler::Thor::VERSION != '%{bundler_thor_version}'; \ -\"" + puts Bundler::Thor::VERSION\\\"\" | tail -1`" \ + == '%{bundler_thor_version}' ] -# TSort -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Bundler; end; \ - require 'bundler/vendor/tsort/lib/tsort'; \ - puts '%%{bundler_tsort_version}: %{bundler_tsort_version}'; \ - puts %Q[Bundler::TSort::VERSION: #{Bundler::TSort::VERSION}]; \ - exit 1 if Bundler::TSort::VERSION != '%{bundler_tsort_version}'; \ -\"" +# tmpdir. +# TODO: There is no version in bundled tmpdir yet. +#%%{global bundler_tmpdir_version} # URI. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ +[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ module Bundler; end; \ require 'bundler/vendor/uri/lib/uri/version'; \ - puts '%%{bundler_uri_version}: %{bundler_uri_version}'; \ - puts %Q[Bundler::URI::VERSION: #{Bundler::URI::VERSION}]; \ - exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \ -\"" - -# Check bundled libraries versions. - -# Nkf. -make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - require 'rubygems'; \ - require 'nkf'; \ - puts '%%{bundled_nkf_version}: %{bundled_nkf_version}'; \ - puts %Q[NKF::NKF_VERSION: #{NKF::NKF_VERSION}]; \ - exit 1 if NKF::NKF_VERSION != '%{bundled_nkf_version}'; \ -\"" + puts Bundler::URI::VERSION\\\"\" | tail -1`" \ + == '%{bundler_uri_version}' ] # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). -touch %{_vpath_builddir}/abrt.rb +touch abrt.rb # Check if abrt hook is required (RubyGems are disabled by default when using # runruby, so re-enable them). -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" +make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" # Check if systemtap is supported. -%if %{with systemtap} -ln -sfr probes.d %{_vpath_builddir}/ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE11} -%endif - -# Test dependency generators for RPM -GENERATOR_SCRIPT="%{SOURCE7}" \ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ - %{SOURCE14} --verbose" -GENERATOR_SCRIPT="%{SOURCE8}" \ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ - %{SOURCE15} --verbose" -GENERATOR_SCRIPT="%{SOURCE9}" \ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ - %{SOURCE16} --verbose" - +%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}} DISABLE_TESTS="" MSPECOPTS="" @@ -1223,17 +995,27 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} +%ifarch armv7hl +# TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according +# to upstream, but the test is disabled just on Travis, not in test suite. +# https://bugs.ruby-lang.org/issues/18393 +DISABLE_TESTS="$DISABLE_TESTS -n !/TestReadline#test_interrupt_in_other_thread/" +%endif + +# Several test broken by libffi-3.4.2. There should be fix in libffi, once +# other components are fixed. +# https://bugzilla.redhat.com/show_bug.cgi?id=2040380 +mv test/fiddle/test_import.rb{,.disable} +mv test/fiddle/test_closure.rb{,.disable} +DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunc#test_qsort1/" +DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" + # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ - make -C %{_vpath_builddir} %{?with_parallel_tests:%{?_smp_mflags}} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" + make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" -# Run Ruby OpenSSL tests in OpenSSL FIPS. -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ - %{SOURCE12} %{_builddir}/%{buildsubdir} --verbose" - -%{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} +%{?with_bundler_tests:make test-bundler-parallel} %files %license BSDL @@ -1241,7 +1023,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %lang(ja) %license COPYING.ja %license GPL %license LEGAL +%{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} +%{_mandir}/man1/erb* %{_mandir}/man1/ruby* %files devel @@ -1251,7 +1035,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %license GPL %license LEGAL -%{_rpmmacrodir}/macros.ruby +%{_rpmconfigdir}/macros.d/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -1274,43 +1058,60 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} +%exclude %{ruby_libdir}/bigdecimal* +%exclude %{ruby_libdir}/irb* %exclude %{ruby_libdir}/json* %exclude %{ruby_libdir}/psych* -%{ruby_libdir}/bundled_gems.rb +%{ruby_libdir}/abbrev.rb +%{ruby_libdir}/base64.rb +%{ruby_libdir}/benchmark* %{ruby_libdir}/cgi* %{ruby_libdir}/coverage.rb +%{ruby_libdir}/csv* %{ruby_libdir}/date.rb %{ruby_libdir}/delegate* %{ruby_libdir}/digest* +%{ruby_libdir}/drb* %{ruby_libdir}/English.rb %{ruby_libdir}/erb* %{ruby_libdir}/error_highlight* %{ruby_libdir}/expect.rb +%{ruby_libdir}/fiddle* %{ruby_libdir}/fileutils.rb %{ruby_libdir}/find.rb %{ruby_libdir}/forwardable* +%{ruby_libdir}/getoptlong* %{ruby_libdir}/ipaddr.rb +%{ruby_libdir}/kconv.rb +%{ruby_libdir}/logger* %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb +%{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net %{ruby_libdir}/objspace* +%{ruby_libdir}/observer* %{ruby_libdir}/open-uri.rb %{ruby_libdir}/open3* %{ruby_libdir}/optionparser.rb %{ruby_libdir}/optparse* +%{ruby_libdir}/ostruct* %{ruby_libdir}/pathname.rb %{ruby_libdir}/pp.rb %{ruby_libdir}/prettyprint.rb +%{ruby_libdir}/pstore* %{ruby_libdir}/random +%{ruby_libdir}/readline.rb +%{ruby_libdir}/reline* %{ruby_libdir}/resolv.rb +%{ruby_libdir}/resolv-replace.rb +%{ruby_libdir}/rinda %{ruby_libdir}/ripper* %{ruby_libdir}/securerandom.rb -%{ruby_libdir}/set/subclass_compatible.rb +%{ruby_libdir}/set* %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb -%{ruby_libdir}/strscan -%{ruby_libdir}/syntax_suggest* +%{ruby_libdir}/syslog %{ruby_libdir}/tempfile.rb %{ruby_libdir}/timeout* %{ruby_libdir}/time.rb @@ -1321,7 +1122,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/uri* %{ruby_libdir}/weakref* %{ruby_libdir}/yaml* -%{ruby_libdir}/prism* # Platform specific libraries. %{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} @@ -1401,28 +1201,35 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libarchdir}/enc/windows_1254.so %{ruby_libarchdir}/enc/windows_1257.so %{ruby_libarchdir}/enc/windows_31j.so -%{ruby_libarchdir}/erb/escape.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so +%{ruby_libarchdir}/fiddle.so %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so %{ruby_libarchdir}/monitor.so +%{ruby_libarchdir}/nkf.so %{ruby_libarchdir}/objspace.so +%{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so %dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/rbconfig/sizeof.so +%{ruby_libarchdir}/readline.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so +%{ruby_libarchdir}/syslog.so %{ruby_libarchdir}/zlib.so # Default gems %{ruby_libdir}/did_you_mean* %{ruby_libdir}/openssl* %{ruby_libarchdir}/openssl.so +%{ruby_libdir}/racc* +%dir %{ruby_libarchdir}/racc +%{ruby_libarchdir}/racc/cparse.so %{?with_systemtap:%{_systemtap_datadir}} @@ -1449,84 +1256,98 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_rpmmacrodir}/macros.rubygems -%{_fileattrsdir}/rubygems.attr +%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmconfigdir}/fileattrs/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con %files default-gems -%gem_spec -d date -%gem_spec -d delegate -%gem_spec -d did_you_mean -%gem_spec -d digest -%gem_spec -d english -%gem_spec -d erb -%gem_instdir erb -%{_bindir}/erb -%{_mandir}/man1/erb* -%gem_spec -d error_highlight -%gem_spec -d etc -%gem_spec -d fcntl -%gem_spec -d fileutils -%gem_spec -d find -%gem_spec -d forwardable -%gem_spec -d io-nonblock -%gem_spec -d io-wait -%gem_spec -d ipaddr -%gem_spec -d net-http -%gem_spec -d net-protocol -%gem_spec -d open3 -%gem_spec -d open-uri -%gem_spec -d optparse -%gem_spec -d openssl -%gem_spec -d pp -%gem_spec -d prettyprint -%gem_spec -d resolv -%gem_spec -d ruby2_keywords -%gem_spec -d securerandom -%gem_spec -d shellwords -%gem_spec -d singleton -%gem_spec -d stringio -%gem_spec -d strscan -%gem_spec -d syntax_suggest -%{_bindir}/syntax_suggest -%gem_instdir syntax_suggest -%gem_spec -d tempfile -%gem_spec -d time -%gem_spec -d timeout -%gem_spec -d tmpdir -%gem_spec -d tsort -%gem_spec -d un -%gem_spec -d uri -%gem_spec -d weakref -#%%gem_spec -d win32ole -#%%gem_spec -d win32-registry -%gem_spec -d yaml -%gem_spec -d prism -%gem_spec -d zlib +%{gem_dir}/specifications/default/abbrev-0.1.0.gemspec +%{gem_dir}/specifications/default/base64-0.1.1.gemspec +%{gem_dir}/specifications/default/benchmark-0.2.0.gemspec +%{gem_dir}/specifications/default/cgi-0.3.6.gemspec +%{gem_dir}/specifications/default/csv-3.2.5.gemspec +%{gem_dir}/specifications/default/date-3.2.2.gemspec +%{gem_dir}/specifications/default/delegate-0.2.0.gemspec +%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec +%{gem_dir}/specifications/default/digest-3.1.0.gemspec +%{gem_dir}/specifications/default/drb-2.1.0.gemspec +%{gem_dir}/specifications/default/english-0.7.1.gemspec +%{gem_dir}/specifications/default/erb-%{erb_version}.gemspec +%{gem_dir}/specifications/default/error_highlight-0.3.0.gemspec +%{gem_dir}/specifications/default/etc-1.3.0.gemspec +%{gem_dir}/specifications/default/fcntl-1.0.1.gemspec +%{gem_dir}/specifications/default/fiddle-1.1.0.gemspec +%{gem_dir}/specifications/default/fileutils-1.6.0.gemspec +%{gem_dir}/specifications/default/find-0.1.1.gemspec +%{gem_dir}/specifications/default/forwardable-1.3.2.gemspec +%{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec +%{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec +%{gem_dir}/specifications/default/io-wait-0.2.1.gemspec +%{gem_dir}/specifications/default/ipaddr-1.2.4.gemspec +%{gem_dir}/specifications/default/logger-1.5.0.gemspec +%{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec +%{gem_dir}/specifications/default/net-http-0.3.0.gemspec +%{gem_dir}/specifications/default/net-protocol-0.1.2.gemspec +%{gem_dir}/specifications/default/nkf-0.1.1.gemspec +%{gem_dir}/specifications/default/observer-0.1.1.gemspec +%{gem_dir}/specifications/default/open3-0.1.1.gemspec +%{gem_dir}/specifications/default/open-uri-0.2.0.gemspec +%{gem_dir}/specifications/default/optparse-0.2.0.gemspec +%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec +%{gem_dir}/specifications/default/ostruct-0.5.2.gemspec +%{gem_dir}/specifications/default/pathname-0.2.0.gemspec +%{gem_dir}/specifications/default/pp-0.3.0.gemspec +%{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec +%{gem_dir}/specifications/default/pstore-0.1.1.gemspec +%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec +%{gem_dir}/specifications/default/readline-0.0.3.gemspec +%{gem_dir}/specifications/default/readline-ext-0.1.4.gemspec +%{gem_dir}/specifications/default/reline-0.3.1.gemspec +%{gem_dir}/specifications/default/resolv-0.2.1.gemspec +%{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec +%{gem_dir}/specifications/default/rinda-0.1.1.gemspec +%{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec +%{gem_dir}/specifications/default/securerandom-0.2.0.gemspec +%{gem_dir}/specifications/default/set-1.0.2.gemspec +%{gem_dir}/specifications/default/shellwords-0.1.0.gemspec +%{gem_dir}/specifications/default/singleton-0.1.1.gemspec +%{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec +%{gem_dir}/specifications/default/strscan-3.0.1.gemspec +%{gem_dir}/specifications/default/syslog-0.1.0.gemspec +%{gem_dir}/specifications/default/tempfile-0.1.2.gemspec +%{gem_dir}/specifications/default/time-0.2.2.gemspec +%{gem_dir}/specifications/default/timeout-0.2.0.gemspec +%{gem_dir}/specifications/default/tmpdir-0.1.2.gemspec +%{gem_dir}/specifications/default/tsort-0.1.0.gemspec +%{gem_dir}/specifications/default/un-0.2.0.gemspec +%{gem_dir}/specifications/default/uri-0.12.1.gemspec +%{gem_dir}/specifications/default/weakref-0.1.1.gemspec +#%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec +%{gem_dir}/specifications/default/yaml-0.2.0.gemspec +%{gem_dir}/specifications/default/zlib-2.1.1.gemspec + +%{gem_dir}/gems/erb-%{erb_version} +# Use standalone rubygem-racc if Racc binary is required. Shipping this +# executable in both packages might possibly cause conflicts. The situation +# could be better if Ruby generated these files: +# https://github.com/ruby/ruby/pull/2545 +%exclude %{_bindir}/racc +%exclude %{gem_dir}/gems/racc-%{racc_version}/bin %files -n rubygem-irb %{_bindir}/irb -%dir %{gem_instdir irb} -%{gem_libdir irb} -%{gem_spec irb} -%{gem_instdir irb}/exe - -%{gem_instdir irb}/Gemfile -%license %{gem_instdir irb}/LICENSE.txt -%doc %{gem_instdir irb}/doc -%doc %{gem_instdir irb}/README.md -%doc %{gem_instdir irb}/CONTRIBUTING.md -%doc %{gem_instdir irb}/EXTEND_IRB.md +%{ruby_libdir}/irb* +%{gem_dir}/gems/irb-%{irb_version} +%{gem_dir}/specifications/irb-%{irb_version}.gemspec %{_mandir}/man1/irb.1* %files -n rubygem-rdoc %{_bindir}/rdoc %{_bindir}/ri -%{gem_instdir rdoc} -%{gem_spec rdoc} -%{gem_plugin rdoc} +%{gem_dir}/gems/rdoc-%{rdoc_version} +%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec %{_mandir}/man1/ri* %files doc -f .ruby-doc.en -f .ruby-doc.ja @@ -1536,592 +1357,226 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_datadir}/ri %files -n rubygem-bigdecimal -%{gem_extdir_mri bigdecimal} -%{gem_instdir bigdecimal} -%{gem_spec bigdecimal} +%{ruby_libdir}/bigdecimal* +%{ruby_libarchdir}/bigdecimal* +%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} +%{gem_dir}/gems/bigdecimal-%{bigdecimal_version} +%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{gem_extdir_mri io-console} -%{gem_instdir io-console} -%{gem_spec io-console} +%{_libdir}/gems/%{name}/io-console-%{io_console_version} +%{gem_dir}/gems/io-console-%{io_console_version} +%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec %files -n rubygem-json %{ruby_libdir}/json* %{ruby_libarchdir}/json* -%{gem_extdir_mri json} -%{gem_instdir json} -%{gem_spec json} +%{_libdir}/gems/%{name}/json-%{json_version} +%{gem_dir}/gems/json-%{json_version} +%{gem_dir}/specifications/json-%{json_version}.gemspec %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so -%{gem_extdir_mri psych} -%dir %{gem_instdir psych} -%{gem_libdir psych} -%{gem_spec psych} +%{_libdir}/gems/%{name}/psych-%{psych_version} +%dir %{gem_dir}/gems/psych-%{psych_version} +%{gem_dir}/gems/psych-%{psych_version}/lib +%{gem_dir}/specifications/psych-%{psych_version}.gemspec %files -n rubygem-bundler %{_bindir}/bundle %{_bindir}/bundler -%{gem_instdir bundler} -%{gem_spec bundler} +%{gem_dir}/gems/bundler-%{bundler_version} +%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* %files bundled-gems -# abbrev -%dir %{gem_instdir abbrev} -%license %{gem_instdir abbrev}/LICENSE.txt -%{gem_instdir abbrev}/bin -%{gem_libdir abbrev} -%{gem_spec abbrev} -%{gem_instdir abbrev}/Gemfile -%doc %{gem_instdir abbrev}/README.md -%{gem_instdir abbrev}/Rakefile - -# base64 -%dir %{gem_instdir base64} -%license %{gem_instdir base64}/BSDL -%license %{gem_instdir base64}/COPYING -%license %{gem_instdir base64}/LEGAL -%{gem_instdir base64}/sig -%{gem_libdir base64} -%{gem_spec base64} -%doc %{gem_instdir base64}/README.md - -# benchmark -%dir %{gem_instdir benchmark} -%license %{gem_instdir benchmark}/BSDL -%license %{gem_instdir benchmark}/COPYING -%doc %{gem_instdir benchmark}/README.md -%{gem_instdir benchmark}/Gemfile -%{gem_instdir benchmark}/Rakefile -%{gem_instdir benchmark}/bin -%{gem_libdir benchmark} -%{gem_spec benchmark} - -# csv -%dir %{gem_instdir csv} -%license %{gem_instdir csv}/LICENSE.txt -%doc %{gem_instdir csv}/NEWS.md -%{gem_libdir csv} -%{gem_spec csv} -%doc %{gem_instdir csv}/README.md -%doc %{gem_instdir csv}/doc - -# drb -%dir %{gem_instdir drb} -%license %{gem_instdir drb}/LICENSE.txt -%{gem_libdir drb} -%{gem_instdir drb}/drb.gemspec -%{gem_spec drb} - -# getoptlong -%dir %{gem_instdir getoptlong} -%license %{gem_instdir getoptlong}/LICENSE.txt -%{gem_instdir getoptlong}/bin -%{gem_libdir getoptlong} -%{gem_instdir getoptlong}/sample -%{gem_spec getoptlong} -%{gem_instdir getoptlong}/Gemfile -%doc %{gem_instdir getoptlong}/README.md -%{gem_instdir getoptlong}/Rakefile - -# fiddle -%dir %{gem_instdir fiddle} -%license %{gem_instdir fiddle}/LICENSE.txt -%doc %{gem_instdir fiddle}/README.md -%{gem_instdir fiddle}/Rakefile -%{gem_libdir fiddle} -%dir %{gem_extdir_mri fiddle} -%{gem_extdir_mri fiddle}/fiddle.so -%{gem_extdir_mri fiddle}/gem.build_complete -%{gem_instdir fiddle}/fiddle.gemspec -%{gem_spec fiddle} - -# logger -%dir %{gem_instdir logger} -%license %{gem_instdir logger}/BSDL -%license %{gem_instdir logger}/COPYING -%doc %{gem_instdir logger}/README.md -%{gem_libdir logger} -%{gem_spec logger} - -# matrix -%dir %{gem_instdir matrix} -%license %{gem_instdir matrix}/BSDL -%license %{gem_instdir matrix}/COPYING -%{gem_libdir matrix} -%{gem_instdir matrix}/matrix.gemspec -%{gem_spec matrix} - -# mutex_m -%dir %{gem_instdir mutex_m} -%license %{gem_instdir mutex_m}/BSDL -%license %{gem_instdir mutex_m}/COPYING -%{gem_libdir mutex_m} -%{gem_instdir mutex_m}/sig -%{gem_spec mutex_m} -%doc %{gem_instdir mutex_m}/README.md - -# net-ftp -%dir %{gem_instdir net-ftp} -%license %{gem_instdir net-ftp}/BSDL -%license %{gem_instdir net-ftp}/COPYING -%{gem_instdir net-ftp}/Gemfile -%license %{gem_instdir net-ftp}/LICENSE.txt -%doc %{gem_instdir net-ftp}/README.md -%{gem_instdir net-ftp}/Rakefile -%{gem_libdir net-ftp} -%{gem_spec net-ftp} - -# net-imap -%dir %{gem_instdir net-imap} -%license %{gem_instdir net-imap}/BSDL -%license %{gem_instdir net-imap}/COPYING -%{gem_instdir net-imap}/Gemfile -%license %{gem_instdir net-imap}/LICENSE.txt -%doc %{gem_instdir net-imap}/README.md -%{gem_instdir net-imap}/Rakefile -%{gem_instdir net-imap}/docs -%{gem_libdir net-imap} -%{gem_instdir net-imap}/rakelib -%{gem_instdir net-imap}/sample -%{gem_spec net-imap} - -# net-pop -%dir %{gem_instdir net-pop} -%{gem_instdir net-pop}/Gemfile -%license %{gem_instdir net-pop}/LICENSE.txt -%doc %{gem_instdir net-pop}/README.md -%{gem_instdir net-pop}/Rakefile -%{gem_libdir net-pop} -%{gem_spec net-pop} - -# net-smtp -%dir %{gem_instdir net-smtp} -%doc %{gem_instdir net-smtp}/NEWS.md -%doc %{gem_instdir net-smtp}/README.md -%license %{gem_instdir net-smtp}/LICENSE.txt -%{gem_libdir net-smtp} -%{gem_spec net-smtp} - -# nkf -%dir %{gem_instdir nkf} -%{gem_extdir_mri nkf} -%license %{gem_instdir nkf}/LICENSE.txt -%{gem_instdir nkf}/bin -%{gem_libdir nkf} -%{gem_spec nkf} -%{gem_instdir nkf}/Gemfile -%doc %{gem_instdir nkf}/README.md -%{gem_instdir nkf}/Rakefile - -# observer -%dir %{gem_instdir observer} -%license %{gem_instdir observer}/LICENSE.txt -%{gem_instdir observer}/bin -%{gem_libdir observer} -%exclude %{gem_cache observer} -%{gem_spec observer} -%{gem_instdir observer}/Gemfile -%doc %{gem_instdir observer}/README.md -%{gem_instdir observer}/Rakefile - -# ostruct -%dir %{gem_instdir ostruct} -%license %{gem_instdir ostruct}/BSDL -%license %{gem_instdir ostruct}/COPYING -%doc %{gem_instdir ostruct}/README.md -%{gem_instdir ostruct}/Gemfile -%{gem_instdir ostruct}/Rakefile -%{gem_instdir ostruct}/bin -%{gem_libdir ostruct} -%{gem_instdir ostruct}/ostruct.gemspec -%{gem_spec ostruct} - -# prime -%dir %{gem_instdir prime} -%license %{gem_instdir prime}/BSDL -%license %{gem_instdir prime}/COPYING -%doc %{gem_instdir prime}/README.md -%{gem_instdir prime}/Rakefile -%{gem_libdir prime} -%{gem_instdir prime}/sig -%{gem_instdir prime}/prime.gemspec -%{gem_spec prime} - -# pstore -%dir %{gem_instdir pstore} -%license %{gem_instdir pstore}/BSDL -%license %{gem_instdir pstore}/COPYING -%doc %{gem_instdir pstore}/README.md -%{gem_instdir pstore}/Gemfile -%{gem_instdir pstore}/Rakefile -%{gem_instdir pstore}/bin -%{gem_libdir pstore} -%{gem_spec pstore} - -# rdbg %{_bindir}/rdbg -%dir %{gem_extdir_mri debug} -%{gem_extdir_mri debug}/gem.build_complete -%dir %{gem_extdir_mri debug}/debug -%{gem_extdir_mri debug}/debug/debug.so -%dir %{gem_instdir debug} -%exclude %{gem_instdir debug}/.* -%doc %{gem_instdir debug}/CONTRIBUTING.md -%{gem_instdir debug}/Gemfile -%license %{gem_instdir debug}/LICENSE.txt -%doc %{gem_instdir debug}/README.md -%{gem_instdir debug}/Rakefile -%doc %{gem_instdir debug}/TODO.md -%{gem_instdir debug}/exe -%{gem_libdir debug} -%{gem_instdir debug}/misc -%{gem_spec debug} +%dir %{_libdir}/gems/%{name}/debug-%{debug_version} +%{_libdir}/gems/%{name}/debug-%{debug_version}/gem.build_complete +%dir %{_libdir}/gems/%{name}/debug-%{debug_version}/debug +%{_libdir}/gems/%{name}/debug-%{debug_version}/debug/debug.so +%dir %{gem_dir}/gems/debug-%{debug_version} +%exclude %{gem_dir}/gems/debug-%{debug_version}/.* +%doc %{gem_dir}/gems/debug-%{debug_version}/CONTRIBUTING.md +%{gem_dir}/gems/debug-%{debug_version}/Gemfile +%license %{gem_dir}/gems/debug-%{debug_version}/LICENSE.txt +%doc %{gem_dir}/gems/debug-%{debug_version}/README.md +%{gem_dir}/gems/debug-%{debug_version}/Rakefile +%doc %{gem_dir}/gems/debug-%{debug_version}/TODO.md +%{gem_dir}/gems/debug-%{debug_version}/exe +%{gem_dir}/gems/debug-%{debug_version}/lib +%{gem_dir}/gems/debug-%{debug_version}/misc +%{gem_dir}/specifications/debug-%{debug_version}.gemspec -# readline -%dir %{gem_instdir readline} -%license %{gem_instdir readline}/BSDL -%license %{gem_instdir readline}/COPYING -%doc %{gem_instdir readline}/README.md -%{gem_libdir readline} -%{gem_spec readline} +%dir %{gem_dir}/gems/net-ftp-%{net_ftp_version} +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Gemfile +%license %{gem_dir}/gems/net-ftp-%{net_ftp_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-ftp-%{net_ftp_version}/README.md +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Rakefile +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/bin +%{gem_dir}/gems/net-ftp-%{net_ftp_version}/lib +%{gem_dir}/specifications/net-ftp-%{net_ftp_version}.gemspec -# reline -%dir %{gem_instdir reline} -%license %{gem_instdir reline}/BSDL -%license %{gem_instdir reline}/COPYING -%license %{gem_instdir reline}/license_of_rb-readline -%doc %{gem_instdir reline}/README.md -%{gem_libdir reline} -%{gem_spec reline} +%dir %{gem_dir}/gems/net-imap-%{net_imap_version} +%{gem_dir}/gems/net-imap-%{net_imap_version}/Gemfile +%license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md +%{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile +%{gem_dir}/gems/net-imap-%{net_imap_version}/lib +%{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec -# repl_type_completor -%dir %{gem_instdir repl_type_completor} -%license %{gem_instdir repl_type_completor}/LICENSE.txt -%{gem_libdir repl_type_completor} -%{gem_instdir repl_type_completor}/sig -%exclude %{gem_cache repl_type_completor} -%{gem_spec repl_type_completor} -%{gem_instdir repl_type_completor}/Gemfile -%doc %{gem_instdir repl_type_completor}/README.md -%{gem_instdir repl_type_completor}/Rakefile +%dir %{gem_dir}/gems/net-pop-%{net_pop_version} +%{gem_dir}/gems/net-pop-%{net_pop_version}/Gemfile +%license %{gem_dir}/gems/net-pop-%{net_pop_version}/LICENSE.txt +%doc %{gem_dir}/gems/net-pop-%{net_pop_version}/README.md +%{gem_dir}/gems/net-pop-%{net_pop_version}/Rakefile +%{gem_dir}/gems/net-pop-%{net_pop_version}/bin +%{gem_dir}/gems/net-pop-%{net_pop_version}/lib +%{gem_dir}/specifications/net-pop-%{net_pop_version}.gemspec -# rinda -%dir %{gem_instdir rinda} -%license %{gem_instdir rinda}/LICENSE.txt -%{gem_instdir rinda}/bin -%{gem_libdir rinda} -%{gem_spec rinda} -%{gem_instdir rinda}/Gemfile -%doc %{gem_instdir rinda}/README.md -%{gem_instdir rinda}/Rakefile +%dir %{gem_dir}/gems/net-smtp-%{net_smtp_version} +%license %{gem_dir}/gems/net-smtp-%{net_smtp_version}/LICENSE.txt +%{gem_dir}/gems/net-smtp-%{net_smtp_version}/lib +%{gem_dir}/specifications/net-smtp-%{net_smtp_version}.gemspec -# resolv-replace -%dir %{gem_instdir resolv-replace} -%license %{gem_instdir resolv-replace}/LICENSE.txt -%{gem_instdir resolv-replace}/bin -%{gem_libdir resolv-replace} -%{gem_spec resolv-replace} -%{gem_instdir resolv-replace}/Gemfile -%doc %{gem_instdir resolv-replace}/README.md -%{gem_instdir resolv-replace}/Rakefile +%dir %{gem_dir}/gems/matrix-%{matrix_version} +%license %{gem_dir}/gems/matrix-%{matrix_version}/LICENSE.txt +%{gem_dir}/gems/matrix-%{matrix_version}/lib +%{gem_dir}/specifications/matrix-%{matrix_version}.gemspec -# syslog -%dir %{gem_instdir syslog} -%{gem_extdir_mri syslog} -%license %{gem_instdir syslog}/BSDL -%license %{gem_instdir syslog}/COPYING -%{gem_instdir syslog}/bin -%{gem_libdir syslog} -%exclude %{gem_cache syslog} -%{gem_spec syslog} -%{gem_instdir syslog}/Gemfile -%doc %{gem_instdir syslog}/README.md -%{gem_instdir syslog}/Rakefile +%dir %{gem_dir}/gems/prime-%{prime_version} +%{gem_dir}/gems/prime-%{prime_version}/Gemfile +%license %{gem_dir}/gems/prime-%{prime_version}/LICENSE.txt +%doc %{gem_dir}/gems/prime-%{prime_version}/README.md +%{gem_dir}/gems/prime-%{prime_version}/Rakefile +%{gem_dir}/gems/prime-%{prime_version}/bin +%{gem_dir}/gems/prime-%{prime_version}/lib +%{gem_dir}/specifications/prime-%{prime_version}.gemspec %files -n rubygem-minitest -%{_bindir}/minitest -%dir %{gem_instdir minitest} -%exclude %{gem_instdir minitest}/.* -%{gem_instdir minitest}/Manifest.txt -%{gem_instdir minitest}/design_rationale.rb -%{gem_instdir minitest}/bin -%{gem_libdir minitest} -%{gem_spec minitest} -%doc %{gem_instdir minitest}/History.rdoc -%doc %{gem_instdir minitest}/README.rdoc -%{gem_instdir minitest}/Rakefile -%{gem_instdir minitest}/test +%dir %{gem_dir}/gems/minitest-%{minitest_version} +%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* +%{gem_dir}/gems/minitest-%{minitest_version}/Manifest.txt +%{gem_dir}/gems/minitest-%{minitest_version}/design_rationale.rb +%{gem_dir}/gems/minitest-%{minitest_version}/lib +%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%doc %{gem_dir}/gems/minitest-%{minitest_version}/History.rdoc +%doc %{gem_dir}/gems/minitest-%{minitest_version}/README.rdoc +%{gem_dir}/gems/minitest-%{minitest_version}/Rakefile +%{gem_dir}/gems/minitest-%{minitest_version}/test %files -n rubygem-power_assert -%dir %{gem_instdir power_assert} -%exclude %{gem_instdir power_assert}/.* -%license %{gem_instdir power_assert}/BSDL -%license %{gem_instdir power_assert}/COPYING -%license %{gem_instdir power_assert}/LEGAL -%{gem_libdir power_assert} -%{gem_spec power_assert} -%{gem_instdir power_assert}/Gemfile -%doc %{gem_instdir power_assert}/README.md -%{gem_instdir power_assert}/Rakefile +%dir %{gem_dir}/gems/power_assert-%{power_assert_version} +%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/BSDL +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/COPYING +%license %{gem_dir}/gems/power_assert-%{power_assert_version}/LEGAL +%{gem_dir}/gems/power_assert-%{power_assert_version}/lib +%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec +%{gem_dir}/gems/power_assert-%{power_assert_version}/Gemfile +%doc %{gem_dir}/gems/power_assert-%{power_assert_version}/README.md +%{gem_dir}/gems/power_assert-%{power_assert_version}/Rakefile %files -n rubygem-rake %{_bindir}/rake -%{gem_instdir rake} -%{gem_spec rake} +%{gem_dir}/gems/rake-%{rake_version} +%{gem_dir}/specifications/rake-%{rake_version}.gemspec %{_mandir}/man1/rake.1* %files -n rubygem-rbs %{_bindir}/rbs -%dir %{gem_extdir_mri rbs} -%{gem_extdir_mri rbs}/gem.build_complete -%{gem_extdir_mri rbs}/rbs_extension.so -%dir %{gem_instdir rbs} -%license %{gem_instdir rbs}/BSDL -%doc %{gem_instdir rbs}/CHANGELOG.md -%license %{gem_instdir rbs}/COPYING -%doc %{gem_instdir rbs}/README.md -%{gem_instdir rbs}/Rakefile -%{gem_instdir rbs}/Steepfile -%{gem_instdir rbs}/config.yml -%{gem_instdir rbs}/core -%doc %{gem_instdir rbs}/docs -%{gem_instdir rbs}/exe -%{gem_instdir rbs}/goodcheck.yml -%{gem_instdir rbs}/include -%{gem_libdir rbs} -%{gem_instdir rbs}/schema -%{gem_instdir rbs}/sig -%{gem_instdir rbs}/src -%{gem_instdir rbs}/stdlib -%{gem_spec rbs} +%dir %{_libdir}/gems/%{name}/rbs-%{rbs_version} +%{_libdir}/gems/%{name}/rbs-%{rbs_version}/gem.build_complete +%{_libdir}/gems/%{name}/rbs-%{rbs_version}/rbs_extension.so +%dir %{gem_dir}/gems/rbs-%{rbs_version} +%exclude %{gem_dir}/gems/rbs-%{rbs_version}/.* +%license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL +%doc %{gem_dir}/gems/rbs-%{rbs_version}/CHANGELOG.md +%license %{gem_dir}/gems/rbs-%{rbs_version}/COPYING +%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile* +%doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md +%{gem_dir}/gems/rbs-%{rbs_version}/Rakefile +%{gem_dir}/gems/rbs-%{rbs_version}/Steepfile +%{gem_dir}/gems/rbs-%{rbs_version}/core +%doc %{gem_dir}/gems/rbs-%{rbs_version}/docs +%{gem_dir}/gems/rbs-%{rbs_version}/exe +%{gem_dir}/gems/rbs-%{rbs_version}/goodcheck.yml +%{gem_dir}/gems/rbs-%{rbs_version}/lib +%{gem_dir}/gems/rbs-%{rbs_version}/schema +%{gem_dir}/gems/rbs-%{rbs_version}/sig +%{gem_dir}/gems/rbs-%{rbs_version}/stdlib +%{gem_dir}/gems/rbs-%{rbs_version}/steep +%{gem_dir}/specifications/rbs-%{rbs_version}.gemspec %files -n rubygem-test-unit -%{_bindir}/test-unit -%dir %{gem_instdir test-unit} -%license %{gem_instdir test-unit}/BSDL -%license %{gem_instdir test-unit}/COPYING -%license %{gem_instdir test-unit}/PSFL -%{gem_libdir test-unit} -%{gem_instdir test-unit}/sample -%{gem_instdir test-unit}/bin -%{gem_spec test-unit} -%doc %{gem_instdir test-unit}/README.md -%{gem_instdir test-unit}/Rakefile -%doc %{gem_instdir test-unit}/doc - -%files -n rubygem-racc -%dir %{gem_instdir racc} -%{_bindir}/racc -%{gem_extdir_mri racc} -%license %{gem_instdir racc}/BSDL -%license %{gem_instdir racc}/COPYING -%doc %{gem_instdir racc}/ChangeLog -%lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc -%doc %{gem_instdir racc}/README.rdoc -%doc %{gem_instdir racc}/TODO -%{gem_instdir racc}/bin -%doc %{gem_instdir racc}/doc -%{gem_libdir racc} -%{gem_spec racc} +%dir %{gem_dir}/gems/test-unit-%{test_unit_version} +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/BSDL +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/COPYING +%license %{gem_dir}/gems/test-unit-%{test_unit_version}/PSFL +%{gem_dir}/gems/test-unit-%{test_unit_version}/lib +%{gem_dir}/gems/test-unit-%{test_unit_version}/sample +%{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec +%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/README.md +%{gem_dir}/gems/test-unit-%{test_unit_version}/Rakefile +%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/doc %files -n rubygem-rexml -%dir %{gem_instdir rexml} -%license %{gem_instdir rexml}/LICENSE.txt -%doc %{gem_instdir rexml}/NEWS.md -%doc %{gem_instdir rexml}/doc -%{gem_libdir rexml} -%{gem_spec rexml} -%doc %{gem_instdir rexml}/README.md +%dir %{gem_dir}/gems/rexml-%{rexml_version} +%license %{gem_dir}/gems/rexml-%{rexml_version}/LICENSE.txt +%doc %{gem_dir}/gems/rexml-%{rexml_version}/NEWS.md +%doc %{gem_dir}/gems/rexml-%{rexml_version}/doc +%{gem_dir}/gems/rexml-%{rexml_version}/lib +%{gem_dir}/specifications/rexml-%{rexml_version}.gemspec +%doc %{gem_dir}/gems/rexml-%{rexml_version}/README.md %files -n rubygem-rss -%dir %{gem_instdir rss} -%exclude %{gem_instdir rss}/.* -%license %{gem_instdir rss}/LICENSE.txt -%doc %{gem_instdir rss}/NEWS.md -%{gem_libdir rss} -%{gem_spec rss} -%doc %{gem_instdir rss}/README.md +%dir %{gem_dir}/gems/rss-%{rss_version} +%exclude %{gem_dir}/gems/rss-%{rss_version}/.* +%license %{gem_dir}/gems/rss-%{rss_version}/LICENSE.txt +%doc %{gem_dir}/gems/rss-%{rss_version}/NEWS.md +%{gem_dir}/gems/rss-%{rss_version}/lib +%{gem_dir}/specifications/rss-%{rss_version}.gemspec +%doc %{gem_dir}/gems/rss-%{rss_version}/Gemfile +%doc %{gem_dir}/gems/rss-%{rss_version}/README.md +%doc %{gem_dir}/gems/rss-%{rss_version}/Rakefile +%doc %{gem_dir}/gems/rss-%{rss_version}/test %files -n rubygem-typeprof -%dir %{gem_instdir typeprof} +%dir %{gem_dir}/gems/typeprof-%{typeprof_version} %{_bindir}/typeprof -%exclude %{gem_instdir typeprof}/.* -%license %{gem_instdir typeprof}/LICENSE -%{gem_instdir typeprof}/bin -%{gem_instdir typeprof}/typeprof.conf.jsonc -%doc %{gem_instdir typeprof}/doc -%{gem_libdir typeprof} -%{gem_spec typeprof} -%doc %{gem_instdir typeprof}/README.md +%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/.* +%license %{gem_dir}/gems/typeprof-%{typeprof_version}/LICENSE +%{gem_dir}/gems/typeprof-%{typeprof_version}/exe +%{gem_dir}/gems/typeprof-%{typeprof_version}/lib +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools +%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/typeprof-lsp +%{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md +%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Rakefile %changelog -* Tue Jan 13 2026 Vít Ondruch - 4.0.1-31 -- Upgrade to Ruby 4.0.1. - Resolves: rhbz#2428861 +* Tue Jun 06 2023 Jarek Prokop jprokop@redhat.com - 3.1.4-176 +- Fix bundler improperly resolving with --deployment. + Resolves: rhbz#2178171 -* Fri Jan 02 2026 Jarek Prokop - 4.0.0-30 -- Upgrade to Ruby 4.0.0. - Resolves: rhbz#2425358 +* Fri Mar 31 2023 Jarek Prokop jprokop@redhat.com - 3.1.4-175 +- Upgrade to Ruby 3.1.4. +- Fix ReDoS vulnerability in URI (CVE-2023-28755) +- Fix ReDoS vulnerability in Time (CVE-2023-28756) +- Fix bundler improperly resolving archful gems in Gemfile.lock. + Resolves: rhbz#2178171 -* Wed Dec 17 2025 Vít Ondruch - 3.4.8-29 -- Update to Ruby 3.4.8. - Resolves: rhbz#2422963 - Resolves: rhbz#2412227 - -* Tue Oct 21 2025 Jun Aruga - 3.4.7-28 -- Upgrade to Ruby 3.4.7. - Resolves: rhbz#2402422 -- Fix URI Credential Leakage Bypass previous fixes. - Resolves: CVE-2025-61594 -- Fix REXML denial of service. - Resolves: CVE-2025-58767 - -* Mon Aug 18 2025 Jarek Prokop - 3.4.5-27 -- Upgrade to Ruby 3.4.5. - Resolves: rhbz#2380246 - -* Fri Jul 25 2025 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Wed Jun 11 2025 Jarek Prokop - 3.4.4-25 -- Upgrade to Ruby 3.4.4. - Resolves: rhbz#2359563 - -* Tue Apr 08 2025 Jun Aruga - 3.4.2-24 -- Fix the tests using SHA-1 Probabilistic Signature Scheme (PSS) parameters. - Resolves: rhbz#2358256 - -* Wed Feb 19 2025 Vít Ondruch - 3.4.2-23 -- Upgrade to Ruby 3.4.2. - Resolves: rhbz#2345875 - -* Sat Feb 01 2025 Björn Esser - 3.4.1-23 -- Add explicit BR: libxcrypt-devel - -* Fri Jan 24 2025 Jarek Prokop - 3.4.1-22 -- Stop including C++ header, it is deprecated since C++17. - Resolves: rhbz#2336567 - -* Sat Jan 18 2025 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jan 08 2025 Vít Ondruch - 3.4.1-20 -- Re-enable FIPS test cases. - -* Thu Jan 02 2025 Vít Ondruch - 3.4.1-19 -- Upgrade to Ruby 3.4.1. - Resolves: rhbz#2334047 - -* Mon Dec 16 2024 Jun Aruga - 3.3.6-18 -- Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. - -* Wed Nov 20 2024 David Abdurachmanov - 3.3.6-17 -- Add riscv64 information for checksec - -* Mon Nov 11 2024 Vít Ondruch - 3.3.6-16 -- Upgrade to Ruby 3.3.6. - -* Fri Sep 13 2024 Vít Ondruch - 3.3.5-15 -- Fix Bundler `--local` option - Resolves: rhbz#2311898 - -* Tue Sep 03 2024 Vít Ondruch - 3.3.5-14 -- Upgrade to Ruby 3.3.5. - Resolves: rhbz#2309364 - -* Mon Jul 29 2024 Jun Aruga - 3.3.4-13 -- Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. - Co-authored-by: Lumír Balhar - -* Fri Jul 19 2024 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jul 10 2024 Vít Ondruch - 3.3.4-11 -- Upgrade to Ruby 3.3.4. - Resolves: rhbz#2292052 - -* Tue Jun 18 2024 Vít Ondruch - 3.3.2-10 -- Make sure hardening configuration flags are correctly applied. - -* Thu Jun 06 2024 Vít Ondruch - 3.3.2-9 -- Upgrade to Ruby 3.3.2. - Resolves: rhbz#2284020 - -* Tue May 28 2024 Vít Ondruch - 3.3.1-8 -- Adjust the test to updated `checksec` output. - Resolves: rhbz#2282953 -- Make sure fortification flags are applied. - -* Tue Apr 23 2024 Vít Ondruch - 3.3.1-7 -- Upgrade to Ruby 3.3.1. - Resolves: rhbz#2276680 - -* Fri Apr 12 2024 Vít Ondruch - 3.3.0-6 -- Add `bundled` provide for NKF. -- License review and fixes of SPDX syntax. - -* Wed Mar 06 2024 Vít Ondruch - 3.3.0-5 -- Fix FTBFS caused by OpenSSL 3.2.1 update. - -* Fri Jan 26 2024 Jarek Prokop - 3.3.0-4 -- Do not set AI_ADDRCONFIG by default when calling getaddrinfo(3). - -* Mon Jan 22 2024 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Mon Jan 15 2024 Jarek Prokop - 3.3.0-2 -- Fix compiling coroutines with aarch64's branch protection. - -* Tue Jan 02 2024 Vít Ondruch - 3.3.0-1 -- Upgrade to Ruby 3.3.0. - Resolves: rhbz#2255918 - -* Thu Nov 09 2023 Jun Aruga - 3.2.2-183 -- ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters - -* Thu Nov 02 2023 Jarek Prokop - 3.2.2-183 -- Fix typo in bundled provide of rubygem-bundler for rubygem-net-http-persistent. - -* Wed Sep 20 2023 Jun Aruga - 3.2.2-182 -- Fix OpenSSL.fips_mode and OpenSSL::PKey.read in OpenSSL 3 FIPS. - -* Fri Jul 21 2023 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 -- Upgrade to Ruby 3.2.2. - Resolves: rhbz#2183284 - -* Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 -- Upgrade to Ruby 3.2.1. - Resolves: rhbz#2168292 - -* Fri Jan 20 2023 Fedora Release Engineering -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Jan 05 2023 Vít Ondruch - 3.2.0-177 -- Fix ELN FTBFS due to stronger crypto settings. - -* Mon Jan 02 2023 Vít Ondruch - 3.2.0-176 -- Upgrade to Ruby 3.2.0. - -* Thu Dec 22 2022 Yaakov Selkowitz - 3.1.3-175 -- Use SHA256 instead of SHA1 where needed in Openssl tests -- Let OpenSSL choose the digest if digest for Openssl::OCSP::BasicResponse#sign is nil - -* Wed Dec 21 2022 Vít Ondruch - 3.1.3-174 +* Fri Jan 20 2023 Jun Aruga - 3.1.3-174 - Fix for tzdata-2022g. * Thu Dec 08 2022 Vít Ondruch - 3.1.3-173 -- Disable MJIT test cases on i686 due to issues with PCH. - Fix CGI causing issue with leading '.' in domain names. * Thu Nov 24 2022 Vít Ondruch - 3.1.3-172 diff --git a/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back-test.patch b/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back-test.patch new file mode 100644 index 0000000..e082682 --- /dev/null +++ b/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back-test.patch @@ -0,0 +1,72 @@ +diff --git a/bundler/spec/install/gemfile/specific_platform_spec.rb b/bundler/spec/install/gemfile/specific_platform_spec.rb +index a29446305..e35d8bc16 100644 +--- a/bundler/spec/install/gemfile/specific_platform_spec.rb ++++ b/bundler/spec/install/gemfile/specific_platform_spec.rb +@@ -104,40 +104,53 @@ + L + end + +- it "still installs the generic RUBY variant if necessary even when running on a legacy lockfile locked only to RUBY" do +- build_repo4 do +- build_gem "nokogiri", "1.3.10" +- build_gem "nokogiri", "1.3.10" do |s| +- s.platform = "arm64-darwin" +- s.required_ruby_version = "< #{Gem.ruby_version}" ++ context "when running on a legacy lockfile locked only to RUBY" do ++ around do |example| ++ build_repo4 do ++ build_gem "nokogiri", "1.3.10" ++ build_gem "nokogiri", "1.3.10" do |s| ++ s.platform = "arm64-darwin" ++ s.required_ruby_version = "< #{Gem.ruby_version}" ++ end ++ ++ build_gem "bundler", "2.1.4" + end + +- build_gem "bundler", "2.1.4" +- end +- +- gemfile <<~G ++ gemfile <<~G + source "#{file_uri_for(gem_repo4)}" ++ + gem "nokogiri" +- G ++ G + +- lockfile <<-L ++ lockfile <<-L + GEM + remote: #{file_uri_for(gem_repo4)}/ + specs: + nokogiri (1.3.10) ++ + PLATFORMS + ruby ++ + DEPENDENCIES + nokogiri ++ + RUBY VERSION + 2.5.3p105 ++ + BUNDLED WITH + 2.1.4 +- L ++ L + +- simulate_platform "arm64-darwin-22" do ++ simulate_platform "arm64-darwin-22", &example ++ end ++ ++ it "still installs the generic RUBY variant if necessary" do + bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } + end ++ ++ it "still installs the generic RUBY variant if necessary, even in frozen mode" do ++ bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s, "BUNDLE_FROZEN" => "true" } ++ end + end + + it "doesn't discard previously installed platform specific gem and fall back to ruby on subsequent bundles" do diff --git a/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back.patch b/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back.patch new file mode 100644 index 0000000..7617e02 --- /dev/null +++ b/rubygem-bundler-2.3.26-Backport-Fix-another-issue-of-Bundler-not-falling-back.patch @@ -0,0 +1,54 @@ +From 891246c3865ed0af7e277ca50c079f466d035f7c Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Thu, 1 Jun 2023 13:22:24 +0200 +Subject: [PATCH] Backport "Fix another issue of Bundler not falling back to an + installable candidate" + +In this case, when materializing a legacy lockfile using only "ruby" +platform, and in frozen mode. + +===== + +Commit adapted from: https://github.com/rubygems/rubygems/pull/6261 +--- + bundler/lib/bundler/lazy_specification.rb | 11 +++-- + .../install/gemfile/specific_platform_spec.rb | 41 ++++++++++++------- + 2 files changed, 35 insertions(+), 17 deletions(-) + +diff --git a/bundler/lib/bundler/lazy_specification.rb b/bundler/lib/bundler/lazy_specification.rb +index e8bee25ab..a65020e6c 100644 +--- a/bundler/lib/bundler/lazy_specification.rb ++++ b/bundler/lib/bundler/lazy_specification.rb +@@ -85,7 +85,7 @@ def materialize_for_installation + + installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform) + +- specification = __materialize__(installable_candidates) ++ specification = __materialize__(installable_candidates, :fallback_to_non_installable => false) + return specification unless specification.nil? + + if target_platform != platform +@@ -98,13 +98,18 @@ def materialize_for_installation + __materialize__(candidates) + end + +- def __materialize__(candidates) ++ # If in frozen mode, we fallback to a non-installable candidate because by ++ # doing this we avoid re-resolving and potentially end up changing the ++ # lock file, which is not allowed. In that case, we will give a proper error ++ # about the mismatch higher up the stack, right before trying to install the ++ # bad gem. ++ def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?) + search = candidates.reverse.find do |spec| + spec.is_a?(StubSpecification) || + (spec.matches_current_ruby? && + spec.matches_current_rubygems?) + end +- if search.nil? && Bundler.frozen_bundle? ++ if search.nil? && fallback_to_non_installable + search = candidates.last + else + search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)) +-- +2.41.0.rc1 + diff --git a/rubygem-bundler-2.3.26-Provide-fix-for-bundler-Gemfile-resolving-regression.patch b/rubygem-bundler-2.3.26-Provide-fix-for-bundler-Gemfile-resolving-regression.patch new file mode 100644 index 0000000..157a5be --- /dev/null +++ b/rubygem-bundler-2.3.26-Provide-fix-for-bundler-Gemfile-resolving-regression.patch @@ -0,0 +1,144 @@ +From 0985592ad2d815ac461100807f5b2621e5f49b21 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 31 Mar 2023 11:54:07 +0200 +Subject: [PATCH 1/2] Provide fix for bundler Gemfile resolving regression. + +Instead of resolving to correct Ruby platform, it preferred the +archful package, that is actually incompatible. + +See https://github.com/sclorg/s2i-ruby-container/issues/469 +for an example of the bug. + +Commit taken from: + +and adapted: + +for the PR#6225. +--- + bundler/lib/bundler/index.rb | 5 ++ + bundler/lib/bundler/lazy_specification.rb | 64 ++++++++++------------- + 2 files changed, 34 insertions(+), 35 deletions(-) + +diff --git a/bundler/lib/bundler/index.rb b/bundler/lib/bundler/index.rb +index ed16c90a3..903e220d5 100644 +--- a/bundler/lib/bundler/index.rb ++++ b/bundler/lib/bundler/index.rb +@@ -71,6 +71,7 @@ def local_search(query) + when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query) + when String then specs_by_name(query) + when Gem::Dependency then search_by_dependency(query) ++ when Array then search_by_name_and_version(*query) + else + raise "You can't search for a #{query.inspect}." + end +@@ -173,6 +174,10 @@ def search_by_dependency(dependency) + end + end + ++ def search_by_name_and_version(name, version) ++ specs_by_name(name).select { |spec| spec.version == version } ++ end ++ + EMPTY_SEARCH = [].freeze + + def search_by_spec(spec) +diff --git a/bundler/lib/bundler/lazy_specification.rb b/bundler/lib/bundler/lazy_specification.rb +index 949e8264b..e8bee25ab 100644 +--- a/bundler/lib/bundler/lazy_specification.rb ++++ b/bundler/lib/bundler/lazy_specification.rb +@@ -13,7 +13,6 @@ def initialize(name, version, platform, source = nil) + @dependencies = [] + @platform = platform || Gem::Platform::RUBY + @source = source +- @specification = nil + end + + def full_name +@@ -76,37 +75,41 @@ def to_lock + def materialize_for_installation + source.local! + +- candidates = if source.is_a?(Source::Path) || !ruby_platform_materializes_to_ruby_platform? +- target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform ++ matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version]) ++ return self if matching_specs.empty? + +- GemHelpers.select_best_platform_match(source.specs.search(Dependency.new(name, version)), target_platform) +- else +- source.specs.search(self) +- end ++ candidates = if use_exact_resolved_specifications? ++ matching_specs ++ else ++ target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform ++ ++ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform) ++ ++ specification = __materialize__(installable_candidates) ++ return specification unless specification.nil? + +- return self if candidates.empty? ++ if target_platform != platform ++ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform) ++ end ++ ++ installable_candidates ++ end + + __materialize__(candidates) + end + + def __materialize__(candidates) +- @specification = begin +- search = candidates.reverse.find do |spec| +- spec.is_a?(StubSpecification) || +- (spec.matches_current_ruby? && +- spec.matches_current_rubygems?) +- end +- if search.nil? && Bundler.frozen_bundle? +- search = candidates.last +- else +- search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)) +- end +- search ++ search = candidates.reverse.find do |spec| ++ spec.is_a?(StubSpecification) || ++ (spec.matches_current_ruby? && ++ spec.matches_current_rubygems?) + end +- end +- +- def respond_to?(*args) +- super || @specification ? @specification.respond_to?(*args) : nil ++ if search.nil? && Bundler.frozen_bundle? ++ search = candidates.last ++ else ++ search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification)) ++ end ++ search + end + + def to_s +@@ -127,17 +130,8 @@ def git_version + end + + private +- +- def to_ary +- nil +- end +- +- def method_missing(method, *args, &blk) +- raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification +- +- return super unless respond_to?(method) +- +- @specification.send(method, *args, &blk) ++ def use_exact_resolved_specifications? ++ @use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform? + end + + # +-- +2.40.0 + diff --git a/rubygem-bundler-2.3.26-Tests-from-bundler-PR-6225.patch b/rubygem-bundler-2.3.26-Tests-from-bundler-PR-6225.patch new file mode 100644 index 0000000..33f29d4 --- /dev/null +++ b/rubygem-bundler-2.3.26-Tests-from-bundler-PR-6225.patch @@ -0,0 +1,60 @@ +From cb3d287a91e9b6762e47635137d6024fe39e117d Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 31 Mar 2023 12:06:21 +0200 +Subject: [PATCH] Tests from bundler's PR#6225. + +See . +--- + .../install/gemfile/specific_platform_spec.rb | 36 +++++++++++++++++++ + 1 file changed, 36 insertions(+) + +diff --git a/bundler/spec/install/gemfile/specific_platform_spec.rb b/bundler/spec/install/gemfile/specific_platform_spec.rb +index 98efec396..a29446305 100644 +--- a/bundler/spec/install/gemfile/specific_platform_spec.rb ++++ b/bundler/spec/install/gemfile/specific_platform_spec.rb +@@ -104,6 +104,42 @@ + L + end + ++ it "still installs the generic RUBY variant if necessary even when running on a legacy lockfile locked only to RUBY" do ++ build_repo4 do ++ build_gem "nokogiri", "1.3.10" ++ build_gem "nokogiri", "1.3.10" do |s| ++ s.platform = "arm64-darwin" ++ s.required_ruby_version = "< #{Gem.ruby_version}" ++ end ++ ++ build_gem "bundler", "2.1.4" ++ end ++ ++ gemfile <<~G ++ source "#{file_uri_for(gem_repo4)}" ++ gem "nokogiri" ++ G ++ ++ lockfile <<-L ++ GEM ++ remote: #{file_uri_for(gem_repo4)}/ ++ specs: ++ nokogiri (1.3.10) ++ PLATFORMS ++ ruby ++ DEPENDENCIES ++ nokogiri ++ RUBY VERSION ++ 2.5.3p105 ++ BUNDLED WITH ++ 2.1.4 ++ L ++ ++ simulate_platform "arm64-darwin-22" do ++ bundle "update --bundler", :artifice => "compact_index", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } ++ end ++ end ++ + it "doesn't discard previously installed platform specific gem and fall back to ruby on subsequent bundles" do + build_repo2 do + build_gem("libv8", "8.4.255.0") +-- +2.40.0 + diff --git a/rubygems.con b/rubygems.con index bcdeddc..1a99ed0 100644 --- a/rubygems.con +++ b/rubygems.con @@ -19,7 +19,7 @@ module RubyGemsReq end # Report conflicting gem dependencies including their version. - def self.gem_dependencies(specification) + def self.gem_depenencies(specification) specification.runtime_dependencies.each do |dependency| conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| requirement_string = "rubygem(#{dependency.name}) #{requirement}" @@ -39,7 +39,7 @@ module RubyGemsReq begin specification = Gem::Specification.load filename - gem_dependencies(specification) + gem_depenencies(specification) rescue => e # Ignore all errors. end diff --git a/rubygems.req b/rubygems.req index 70aebd4..38e4a9c 100644 --- a/rubygems.req +++ b/rubygems.req @@ -58,7 +58,7 @@ module RubyGemsReq end # Report all gem dependencies including their version. - def self.gem_dependencies(specification) + def self.gem_depenencies(specification) specification.runtime_dependencies.each do |dependency| dependency_name = "rubygem(#{dependency.name})" requirements = Helpers::requirement_versions_to_rpm(dependency.requirement) @@ -75,7 +75,7 @@ module RubyGemsReq specification = Gem::Specification.load filename rubygems_dependency(specification) - gem_dependencies(specification) + gem_depenencies(specification) rescue => e # Ignore all errors. end diff --git a/sources b/sources index f1f97eb..b2e2ad7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b +SHA512 (ruby-3.1.4.tar.xz) = a627bb629a10750b8b2081ad451a41faea0fc85d95aa1e267e3d2a0f56a35bb58195d4a8d13bbdbd82f4197a96dae22b1cee1dfc83861ec33a67ece07aef5633 diff --git a/test_openssl_fips.rb b/test_openssl_fips.rb deleted file mode 100644 index ffc7883..0000000 --- a/test_openssl_fips.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'openssl' - -# Run openssl tests in OpenSSL FIPS. See the link below for how to test. -# https://github.com/ruby/openssl/blob/master/.github/workflows/test.yml -# - step name: test on fips module - -# Listing the testing files by an array explicitly rather than the `Dir.glob` -# to prevent the test files from not loading unintentionally. -TEST_FILES = %w[ - test/openssl/test_fips.rb - test/openssl/test_pkey.rb -].freeze - -if ARGV.empty? - puts 'ERROR: Argument base_dir required.' - puts "Usage: #{__FILE__} base_dir [options]" - exit false -end -BASE_DIR = ARGV[0] -abs_test_files = TEST_FILES.map { |file| File.join(BASE_DIR, file) } - -# Set Fedora/RHEL downstream OpenSSL downstream environment variable to enable -# FIPS module in non-FIPS OS environment. It is available in Fedora 38 or later -# versions. -# https://src.fedoraproject.org/rpms/openssl/blob/rawhide/f/0009-Add-Kernel-FIPS-mode-flag-support.patch -ENV['OPENSSL_FORCE_FIPS_MODE'] = '1' -# A flag to tell the tests the current environment is FIPS enabled. -# https://github.com/ruby/openssl/blob/master/test/openssl/test_fips.rb -ENV['TEST_RUBY_OPENSSL_FIPS_ENABLED'] = 'true' - -abs_test_files.each do |file| - puts "INFO: Loading #{file}." - require file -end diff --git a/test_rubygems_con.rb b/test_rubygems_con.rb deleted file mode 100644 index e124a49..0000000 --- a/test_rubygems_con.rb +++ /dev/null @@ -1,124 +0,0 @@ -# frozen_string_literal: true - -require 'test/unit' -require 'rpm_test_helper' - -class TestRubyGemsCon < Test::Unit::TestCase - include RPMTestHelper - - def test_filter_out_regular_requirements - gem_i = GemInfo.new - - lines = run_generator_single_file(gem_i) - - assert_equal(0, lines.size) - - deps = [ Dependency.new('bar') ] - gem_i.dependencies = deps - - lines = run_generator_single_file(gem_i) - - assert_equal(0, lines.size) - - deps = [ - Dependency.new('bar'), - Dependency.new('baq'), - Dependency.new('quz') - ] - - gem_i.dependencies = deps - lines = run_generator_single_file(gem_i) - - assert_equal(0, lines.size) - - deps = [ - Dependency.new('bar', ['>= 4.1']), - Dependency.new('baz', ['~> 3.2']), - Dependency.new('quz', ['>= 5.6']) - ] - - gem_i.dependencies = deps - - lines = run_generator_single_file(gem_i) - - assert_equal(0, lines.size) - end - - def test_single_gem_single_version_conflict - con = Dependency.new('bar', ['!= 0.4.4']) - - gem_i = GemInfo.new(dependencies: [ con ]) - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{con.to_rpm_str} = 0.4.4\n", lines.first) - end - - def test_multiple_gems_with_single_conflict - cons = [ - Dependency.new('bar', ['!= 1.1']), - Dependency.new('baq', ['!= 1.2.2']), - Dependency.new('quz', ['!= 1.3']) - ] - - gem_i = GemInfo.new(dependencies: cons) - - lines = run_generator_single_file(gem_i) - - assert_equal(3, lines.size) - - assert_equal("#{cons[0].to_rpm_str} = 1.1\n" , lines[0]) - assert_equal("#{cons[1].to_rpm_str} = 1.2.2\n", lines[1]) - assert_equal("#{cons[2].to_rpm_str} = 1.3\n" , lines[2]) - end - - def test_multiple_conflicts_on_single_gem - con = Dependency.new('bar', ['!= 2.3', '!= 2.4']) - - gem_i = GemInfo.new(dependencies: [con]) - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - rpm_name = con.to_rpm_str - left_rpm_constraint = "(#{rpm_name} = 2.3 with " - right_rpm_constraint = "#{rpm_name} = 2.4)\n" - assert_equal((left_rpm_constraint + right_rpm_constraint), lines[0]) - - con = Dependency.new('bar', ['!= 2.3', '!= 2.4', '!= 4.5']) - - gem_i = GemInfo.new(dependencies: [ con ]) - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - - rpm_name = con.to_rpm_str - left_rpm_constraint = "(#{rpm_name} = 2.3 with " - middle_rpm_constraint = "#{rpm_name} = 2.4 with " - right_rpm_constraint = "#{rpm_name} = 4.5)\n" - - assert_equal((left_rpm_constraint + middle_rpm_constraint + right_rpm_constraint), lines[0]) - end - - def test_generates_conflicts_while_ignoring_regular_requirements - deps = [ - Dependency.new('bar', ['>= 2.3', '!= 2.4.2']), - Dependency.new('quz', ['~> 3.0', '!= 3.2']) - ] - - gem_i = GemInfo.new(dependencies: deps) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - - rpm_name = deps[0].to_rpm_str - rpm_constraint = "#{rpm_name} = 2.4.2\n" - assert_equal(rpm_constraint, lines[0]) - - rpm_name = deps[1].to_rpm_str - rpm_constraint = "#{rpm_name} = 3.2\n" - assert_equal(rpm_constraint, lines[1]) - end -end diff --git a/test_rubygems_prov.rb b/test_rubygems_prov.rb deleted file mode 100644 index b660ff6..0000000 --- a/test_rubygems_prov.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -require 'test/unit' -require 'rpm_test_helper' - -class TestRubyGemsProv < Test::Unit::TestCase - include RPMTestHelper - - def test_provides_the_gem_version - gem_i = GemInfo.new(version: '1.2') - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) - - gem_i = GemInfo.new(name: 'somegem_foo', version: '4.5.6') - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) - - deps = [ - Dependency.new('bar'), - Dependency.new('baq', [">= 1.2"]), - Dependency.new('quz', ["!= 3.2"]) - ] - gem_i = GemInfo.new(dependencies: deps) - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) - end - - def test_translates_prelease_version_provides_from_rubygems_to_rpm - gem_i = GemInfo.new(version: '1.2.3.dev') - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev\n", lines.first) - - gem_i = GemInfo.new(name: 'foo2', version: '1.2.3.dev.2') - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev.2\n", lines.first) - end -end diff --git a/test_rubygems_req.rb b/test_rubygems_req.rb deleted file mode 100644 index 490923e..0000000 --- a/test_rubygems_req.rb +++ /dev/null @@ -1,205 +0,0 @@ -# frozen_string_literal: true - -require 'test/unit' -require 'rpm_test_helper' - -class TestRubyGemsReq < Test::Unit::TestCase - include RPMTestHelper - - def test_depends_on_rubygems - gem_i = GemInfo.new - - lines = run_generator_single_file(gem_i) - - assert_equal(1, lines.size) - assert_equal("#{helper_rubygems_dependency}\n", lines.first) - end - - def test_requires_rubygems_and_dependency - dep = Dependency.new('bar') - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{helper_rubygems_dependency}\n", lines.first) - assert_equal("#{dep.to_rpm_str}\n", lines[1]) - end - - def test_requires_multiple_dependencies_with_constraint - constraints = [ - '>= 3.0', - '>= 3.0.0', - '>= 3', - '= 1.0.2', - '= 3.0', - '< 3.2', - '<= 3.4' - ] - - dependencies = [] - constraints.each_with_index do |constraint, idx| - dependencies << Dependency.new("bar#{idx}", [constraint]) - end - - gem_i = GemInfo.new(dependencies: dependencies) - - lines = run_generator_single_file(gem_i) - # + 1 for the rubygems dependency - assert_equal(constraints.size + 1, lines.size) - dependencies.each_with_index do |dep, idx| - rpm_dep_name = dep.to_rpm_str - # Start indexing lines at 1, to jump over rubygems dependency - assert_equal("#{rpm_dep_name} #{constraints[idx]}\n", lines[idx + 1]) - end - end - - def test_expands_pessimistic_constraint_for_rpm - dep = Dependency.new('bar', ['~> 1.2']) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - - rpm_dep_name = dep.to_rpm_str - left_constraint = "#{rpm_dep_name} >= 1.2" - right_constraint = "#{rpm_dep_name} < 2" - expected_constraint = "(#{left_constraint} with #{right_constraint})\n" - assert_equal(expected_constraint, lines[1]) - end - - def test_multiple_pessimistically_constrained_dependencies - dependencies = [] - dep_map = [ - { - constraint: '~> 1.2.3', - expanded_left: '>= 1.2.3', - expanded_rigth: '< 1.3', - gem_name: 'bar1' - }, - { - constraint: '~> 1.2', - expanded_left: '>= 1.2', - expanded_rigth: '< 2', - gem_name: 'bar2' - }, - { - constraint: '~> 3', - expanded_left: '>= 3', - expanded_rigth: '< 4', - gem_name: 'bar3' - } - ].each do |deps| - dependencies << Dependency.new(deps[:gem_name], [deps[:constraint]]) - end - - gem_i = GemInfo.new(dependencies: dependencies) - - lines = run_generator_single_file(gem_i) - - assert_equal(dep_map.size + 1, lines.size) - - dep_map.each_with_index do |hash, idx| - rpm_dep_name = dependencies[idx].to_rpm_str - left_constraint = rpm_dep_name + ' ' + hash[:expanded_left] - right_constraint = rpm_dep_name + ' ' + hash[:expanded_rigth] - expected_constraint = "(#{left_constraint} with #{right_constraint})\n" - assert_equal(expected_constraint, lines[idx + 1]) - end - end - - def test_multiple_constraints_on_one_dependency_composes_constraints_for_RPM - # The quoting here depends on how the constraint is expanded in the helpers. - # right now the form is `["#{constraint}"]`, therefore we have to not specify - # left and right quotes. - constraints = ['>= 0.2.3', '<= 0.2.5'] - dep = Dependency.new('baz', constraints) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - rpm_dep_name = dep.to_rpm_str - assert_equal("(#{rpm_dep_name} >= 0.2.3 with #{rpm_dep_name} <= 0.2.5)\n", lines[1]) - - # Not sure who would compose a dependency like this, but it's possible - # to do with the current generator - constraints = ['> 0.4.5', '< 0.6.4', '>= 2.3', '<= 2.5.3'] - dep = Dependency.new('qux', constraints) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - rpm_dep = dep.to_rpm_str - expected_str = "(#{rpm_dep} > 0.4.5 with #{rpm_dep} < 0.6.4 with " \ - "#{rpm_dep} >= 2.3 with #{rpm_dep} <= 2.5.3)\n" - - assert_equal(2, lines.size) - assert_equal(expected_str, lines[1]) - end - - # https://bugzilla.redhat.com/show_bug.cgi?id=1561487 - def test_depends_on_gem_with_version_conflict - dep = Dependency.new('baz', ['!= 0.4']) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{dep.to_rpm_str}\n", lines[1]) - end - - def test_filters_conflict_from_regular_version_constraints - constraint = ['> 1.2.4', '!= 1.2.7'] - dep = Dependency.new('baq', constraint) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) - end - - def test_filtering_conflicts_is_not_depending_on_contraint_ordering - constraints = ['!= 1.2.7', '> 1.2.4'] - dep = Dependency.new('baq', constraints) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) - end - - def test_filters_multiple_conflicts_from_dependency - omit "Case not yet supported." - constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '!= 4.8'] - dep = Dependency.new('baf', constraints) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{dep.to_rpm_str}\n", lines[1]) - end - - def test_filters_multiple_conflicts_from_dependency_but_keeps_regular_constraint - constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '<= 4.8'] - dep = Dependency.new('bam', constraints) - - gem_i = GemInfo.new(dependencies: [dep]) - - lines = run_generator_single_file(gem_i) - - assert_equal(2, lines.size) - assert_equal("#{dep.to_rpm_str} <= 4.8\n", lines[1]) - end -end