diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index a59f941..d2399ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /*/ /ruby-*.tar.xz +/rexml-*.gem /*.rpm + +!/plans/ diff --git a/macros.rubygems b/macros.rubygems index 8c4d067..7146c77 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,14 +2,55 @@ %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. -%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 +# +# 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_install - Install gem into appropriate directory. diff --git a/operating_system.rb b/operating_system.rb index d95b303..fd56386 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,41 +87,51 @@ 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 - Gem.default_dirs[:system][:gem_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 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 new file mode 100644 index 0000000..7b06cfb --- /dev/null +++ b/plans/all.fmf @@ -0,0 +1,6 @@ +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 new file mode 100644 index 0000000..192863f --- /dev/null +++ b/rdoc-pr1531-fix-mutilple-document-installation.patch @@ -0,0 +1,28 @@ +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 new file mode 100644 index 0000000..671ca55 --- /dev/null +++ b/rpm_test_helper.rb @@ -0,0 +1,166 @@ +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-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch deleted file mode 100644 index 2113bea..0000000 --- a/ruby-1.9.3-mkmf-verbose.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 15:14:51 +0100 -Subject: [PATCH] Verbose mkmf. - ---- - lib/mkmf.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index 682eb46..e6b1445 100644 ---- a/lib/mkmf.rb -+++ b/lib/mkmf.rb -@@ -1974,7 +1974,7 @@ def configuration(srcdir) - SHELL = /bin/sh - - # V=0 quiet, V=1 verbose. other values don't work. --V = 0 -+V = 1 - V0 = $(V:0=) - Q1 = $(V:1=) - Q = $(Q1:0=@) --- -1.8.3.1 - diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index f82660f..8551d79 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 07c666ba5c3360dd6f43605a8ac7c85c99c1721f Mon Sep 17 00:00:00 2001 +From e1293f665128b0d9c5bfa0b5beeab4afebf07e6a 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 d261ea57b5..3c13076b82 100644 +index a64358fada..b3bdfad1eb 100644 --- a/configure.ac +++ b/configure.ac -@@ -3368,6 +3368,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' @@ -23,6 +23,3 @@ index d261ea57b5..3c13076b82 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 041f475..045d6ae 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 e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001 +From 6062f4976c5b51f8b952b9f6745175be7b1c5ff9 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 c42436c23d..d261ea57b5 100644 +index 2bc5153141..a64358fada 100644 --- a/configure.ac +++ b/configure.ac -@@ -4026,7 +4026,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4472,7 +4472,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 c42436c23d..d261ea57b5 100644 rubylibdir='${rubylibprefix}'${ruby_version_dir} diff --git a/loadpath.c b/loadpath.c -index 9160031..0d4d953 100644 +index b8969e6998..bbfd4daa78 100644 --- a/loadpath.c +++ b/loadpath.c @@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] = @@ -63,10 +63,10 @@ index 9160031..0d4d953 100644 RUBY_LIB "\0" diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index 07076d4..35e6c3c 100755 +index db74115730..2b01796abf 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -115,7 +115,7 @@ +@@ -114,7 +114,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ @@ -75,6 +75,3 @@ index 07076d4..35e6c3c 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 dffeb91..6ecfb2e 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -1,4 +1,4 @@ -From 2089cab72b38d6d5e7ba2b596e41014209acad30 Mon Sep 17 00:00:00 2001 +From 9e70f6e4b8771965a30ecfb6d1c6015df350ca55 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 3c13076b82..93af30321d 100644 +index b3bdfad1eb..411322a27f 100644 --- a/configure.ac +++ b/configure.ac -@@ -4090,6 +4090,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4536,6 +4536,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,6 +20,3 @@ index 3c13076b82..93af30321d 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 fdf0dfe..969fefa 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -1,4 +1,4 @@ -From 94da59aafacc6a9efe829529eb51385588d6f149 Mon Sep 17 00:00:00 2001 +From c7952996ac9738a14bea0a1a971fea13460a6c94 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 93af30321d..bc13397e0e 100644 +index 411322a27f..b5f842a512 100644 --- a/configure.ac +++ b/configure.ac -@@ -4062,6 +4062,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4508,6 +4508,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4086,6 +4090,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -35,7 +35,7 @@ index 93af30321d..bc13397e0e 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 623dc9d..74c5d9e 100644 +index bbfd4daa78..69677a9297 100644 --- a/loadpath.c +++ b/loadpath.c @@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] = @@ -50,7 +50,7 @@ index 623dc9d..74c5d9e 100644 #ifdef RUBY_THINARCH RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl -index 79c003e..34f2382 100644 +index 9ba2bd6de5..4ec4ce9353 100644 --- a/template/verconf.h.tmpl +++ b/template/verconf.h.tmpl @@ -36,6 +36,9 @@ @@ -64,10 +64,10 @@ index 79c003e..34f2382 100644 % R = {} % R["ruby_version"] = '"RUBY_LIB_VERSION"' diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index e9110a17ca..76a1f0a315 100755 +index a9e6365b27..7117e65e82 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false) +@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -590,7 +591,16 @@ def stub +@@ -1082,7 +1083,16 @@ def (bins = []).add(name) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] @@ -92,6 +92,3 @@ index e9110a17ca..76a1f0a315 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 new file mode 100644 index 0000000..82f5963 --- /dev/null +++ b/ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch @@ -0,0 +1,22 @@ +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 1f42472..2eb5d00 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -1,4 +1,4 @@ -From 4fc1be3af3f58621bb751c9e63c208b15c0e8d16 Mon Sep 17 00:00:00 2001 +From 5406ea4b4b13db747e5c1f8341bb257b4da04435 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 | 64 ++++++++++++++++++++++++--------------------- + configure.ac | 66 ++++++++++++++++++++++++--------------------- template/ruby.pc.in | 1 + - 2 files changed, 35 insertions(+), 30 deletions(-) + 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac -index 80b137e380..63cd3b4f8b 100644 +index 2bbce78fd0..9d8662369c 100644 --- a/configure.ac +++ b/configure.ac -@@ -3977,9 +3977,6 @@ AS_CASE(["$target_os"], +@@ -4422,9 +4422,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4002,56 +3999,62 @@ AC_ARG_WITH(ridir, +@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -46,6 +46,7 @@ index 80b137e380..63cd3b4f8b 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"' @@ -61,6 +62,7 @@ index 80b137e380..63cd3b4f8b 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"' @@ -120,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4068,6 +4071,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4514,6 +4517,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -129,7 +131,7 @@ index 80b137e380..63cd3b4f8b 100644 AC_SUBST(rubyarchdir)dnl AC_SUBST(sitedir)dnl diff --git a/template/ruby.pc.in b/template/ruby.pc.in -index 8a2c066..c81b211 100644 +index 6901ec2320..9b7b787208 100644 --- a/template/ruby.pc.in +++ b/template/ruby.pc.in @@ -2,6 +2,7 @@ MAJOR=@MAJOR@ @@ -140,38 +142,21 @@ index 8a2c066..c81b211 100644 RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ arch=@arch@ --- -2.1.0 - -From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001 +From baff562149499973123d2187620201be641c6538 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. --- - lib/rdoc/ri/paths.rb | 2 +- - tool/rbinstall.rb | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + tool/rbinstall.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -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 d4c110e..d39c9a6 100755 +index 874c3ef1d9..a9e6365b27 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false) +@@ -1053,7 +1053,7 @@ def (bins = []).add(name) install?(:doc, :rdoc) do if $rdocdir @@ -180,11 +165,8 @@ index d4c110e..d39c9a6 100755 prepare "rdoc", ridatadir install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end --- -2.23.0 - -From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001 +From 7cf872a9a34f38d71cd2ca04ac114b4ea85cc56c 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. @@ -195,65 +177,62 @@ 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 d4ff4a262c..3f9a5bf590 100644 +index 90f09fc191..f6b8a03b95 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -34,7 +34,7 @@ def self.default_spec_cache_dir +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir # specified in the environment def self.default_dir -- @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version']) -+ @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']) +- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"]) ++ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]) end ## -@@ -103,7 +103,8 @@ def self.user_dir +@@ -104,7 +104,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] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? File.join parts end -@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: - return nil unless RbConfig::CONFIG.key? 'vendordir' +@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc: + return nil unless RbConfig::CONFIG.key? "vendordir" - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] end ## diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb -index b25068405d..e9fef4a311 100644 +index 74c8953904..1f3bd91d51 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1410,7 +1410,8 @@ def test_self_use_paths +@@ -1339,7 +1339,8 @@ def test_self_use_paths def test_self_user_dir - parts = [@userhome, '.gem', Gem.ruby_engine] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + parts = [@userhome, ".gem", Gem.ruby_engine] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? FileUtils.mkdir_p File.join(parts) -@@ -1486,7 +1487,7 @@ def test_self_vendor_dir - vendordir(File.join(@tempdir, 'vendor')) do +@@ -1415,7 +1416,7 @@ def test_self_vendor_dir + vendordir(File.join(@tempdir, "vendor")) do expected = - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] assert_equal expected, Gem.vendor_dir end --- -2.1.0 - -From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001 +From 17cb98b7b78f8bfc511feffbe061747f676055b1 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 @@ -264,10 +243,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 a00f2b6776..999e2d6d5d 100644 +index 9d8662369c..2bc5153141 100644 --- a/configure.ac +++ b/configure.ac -@@ -108,7 +108,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -151,7 +151,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) @@ -276,6 +255,3 @@ index a00f2b6776..999e2d6d5d 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 fc2bd08..86d97fc 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -1,4 +1,4 @@ -From eca084e4079c77c061045df9c21b219175b05228 Mon Sep 17 00:00:00 2001 +From 03b44a86b574dc0b63fd57c5f9b52b56ad3ced37 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,15 +15,16 @@ 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 | 3 ++- - ruby.c | 4 ++++ - 3 files changed, 18 insertions(+), 1 deletion(-) + abrt.c | 12 ++++++++++++ + common.mk | 1 + + ruby.c | 4 ++++ + spec/ruby/core/kernel/require_spec.rb | 2 ++ + 4 files changed, 19 insertions(+) create mode 100644 abrt.c diff --git a/abrt.c b/abrt.c new file mode 100644 -index 0000000000..74b0bd5c0f +index 0000000000..e99cb432e6 --- /dev/null +++ b/abrt.c @@ -0,0 +1,12 @@ @@ -40,24 +41,22 @@ index 0000000000..74b0bd5c0f + ); +} diff --git a/common.mk b/common.mk -index b2e5b2b6d0..f39f81da5c 100644 +index 08fee9119a..dae7d9dc00 100644 --- a/common.mk +++ b/common.mk -@@ -82,7 +82,8 @@ ENC_MK = enc.mk - MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ - RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) +@@ -116,6 +116,7 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ + prism_init.$(OBJEXT) --COMMONOBJS = array.$(OBJEXT) \ -+COMMONOBJS = abrt.$(OBJEXT) \ -+ array.$(OBJEXT) \ + COMMONOBJS = \ ++ abrt.$(OBJEXT) \ + array.$(OBJEXT) \ ast.$(OBJEXT) \ bignum.$(OBJEXT) \ - class.$(OBJEXT) \ diff --git a/ruby.c b/ruby.c -index 60c57d6259..1eec16f2c8 100644 +index b00fc1502d..32b88f7496 100644 --- a/ruby.c +++ b/ruby.c -@@ -1611,10 +1611,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1773,10 +1773,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -69,9 +68,19 @@ index 60c57d6259..1eec16f2c8 100644 { Init_builtin_features(); + Init_abrt(); - rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } --- -2.24.1 - + 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') } 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 deleted file mode 100644 index 5c7afe8..0000000 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index 973fe72..0000000 --- a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch +++ /dev/null @@ -1,43 +0,0 @@ -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.2.0-Build-extension-libraries-in-bundled-gems.patch b/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch deleted file mode 100644 index de8d4d3..0000000 --- a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 111f8422427d78becc9183ae149b2105a16bf327 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 5 Apr 2022 23:24:00 +0900 -Subject: [PATCH 1/5] Bundled gems are expanded under `.bundle/gems` now - ---- - ext/extmk.rb | 13 +++++++------ - template/exts.mk.tmpl | 2 +- - 2 files changed, 8 insertions(+), 7 deletions(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 4a087f294ac9..1da9e2704521 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) - top_srcdir = $top_srcdir - topdir = $topdir - hdrdir = $hdrdir -- prefix = "../" * (target.count("/")+1) -+ prefix = "../" * (basedir.count("/")+target.count("/")+1) - $top_srcdir = relative_from(top_srcdir, prefix) - $hdrdir = relative_from(hdrdir, prefix) - $topdir = prefix + $topdir -@@ -460,10 +460,11 @@ def $mflags.defined?(var) - end unless $extstatic - - @gemname = nil --if ARGV[0] -- ext_prefix, exts = ARGV.shift.split('/', 2) -+if exts = ARGV.shift -+ ext_prefix = exts[%r[\A(?>\.bundle/)?[^/]+(?:/(?=(.+)?)|\z)]] -+ exts = $1 - $extension = [exts] if exts -- if ext_prefix == 'gems' -+ if ext_prefix.start_with?('.') - @gemname = exts - elsif exts - $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} -@@ -515,7 +516,7 @@ def $mflags.defined?(var) - exts.delete_if {|d| File.fnmatch?("-*", d)} - end - end --ext_prefix = File.basename(ext_prefix) -+ext_prefix = ext_prefix[$top_srcdir.size+1..-2] - - extend Module.new { - def timestamp_file(name, target_prefix = nil) -@@ -634,7 +635,7 @@ def initialize(src) - end - } - --Dir.chdir ".." -+Dir.chdir dir - unless $destdir.to_s.empty? - $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" - end -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 2f37f4480ac5..964939e365a1 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -25,7 +25,7 @@ macros["old_extensions"] = [] - - contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ - Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| -- gem = /\Agems(?=\/)/ =~ e -+ gem = e.start_with?(".bundle/gems/") - s = File.read(e) - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - -From 6ea34cac22131d28a9cc50e7875e854aed9bdb88 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:25:53 +0900 -Subject: [PATCH 2/5] Retrieve configured gems info - ---- - template/configure-ext.mk.tmpl | 2 +- - template/exts.mk.tmpl | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl -index 6636a7759c54..8ba6b963e3ec 100644 ---- a/template/configure-ext.mk.tmpl -+++ b/template/configure-ext.mk.tmpl -@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> - EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ - --make-flags="MINIRUBY='$(MINIRUBY)'" - --all: exts # gems -+all: exts gems - exts: - gems: - -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 964939e365a1..e544c4c88bd7 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -19,7 +19,7 @@ opt = OptionParser.new do |o| - o.on('--configure-exts=FILE') {|v| confexts = v} - o.order!(ARGV) - end --confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil -+confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil - confexts ||= [] - macros["old_extensions"] = [] - -@@ -30,7 +30,7 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - next if v.empty? -- next if gem and n != "extensions" -+ next if n != "extensions" - n = "old_extensions" if n == "extensions" and !confexts.include?(e) - v = v.split - m = macros[n] ||= [] - -From be9d00ee7c72766551ba8c3530f1538034498a6a Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:28:00 +0900 -Subject: [PATCH 3/5] Move the target directory of bundled gems like as - rubygems - ---- - ext/extmk.rb | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 1da9e2704521..a440af27fc5d 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -2,6 +2,9 @@ - # -*- mode: ruby; coding: us-ascii -*- - # frozen_string_literal: false - -+module Gem; end # only needs Gem::Platform -+require 'rubygems/platform' -+ - # :stopdoc: - $extension = nil - $extstatic = nil -@@ -535,11 +538,12 @@ def create_makefile(*args, &block) - super(*args) do |conf| - conf.find do |s| - s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { -- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ -+ "TARGET_GEM_DIR = $(topdir)/.bundle/extensions/$(gem_platform)/$(ruby_version)/#{@gemname}\n"\ - "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" - } - end - conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{ -+gem_platform = #{Gem::Platform.local} - - # default target - all: - -From c4daf8e445925695c34bab8bf5135dcd1e8575a3 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 22:57:01 +0900 -Subject: [PATCH 4/5] Obey spec file locations to rubygems - ---- - common.mk | 3 ++- - defs/gmake.mk | 2 +- - tool/gem-unpack.rb | 5 +++-- - 3 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/common.mk b/common.mk -index 7c552cba1e04..b4adb2729c0e 100644 ---- a/common.mk -+++ b/common.mk -@@ -1359,10 +1359,11 @@ extract-gems$(gnumake:yes=-nongnumake): PHONY - $(Q) $(RUNRUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack -answ \ - -e 'BEGIN {FileUtils.mkdir_p(d = ".bundle/gems")}' \ -+ -e 'BEGIN {FileUtils.mkdir_p(s = ".bundle/specifications")}' \ - -e 'gem, ver = *$$F' \ - -e 'next if !ver or /^#/=~gem' \ - -e 'g = "#{gem}-#{ver}"' \ -- -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d)' \ -+ -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d, s)' \ - gems/bundled_gems - - update-bundled_gems: PHONY -diff --git a/defs/gmake.mk b/defs/gmake.mk -index a625379a6804..27e3e21cc4d6 100644 ---- a/defs/gmake.mk -+++ b/defs/gmake.mk -@@ -290,7 +290,7 @@ extract-gems: | $(patsubst %,.bundle/gems/%,$(bundled-gems)) - $(ECHO) Extracting bundle gem $*... - $(Q) $(BASERUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack \ -- -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems")' -+ -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems", ".bundle/specifications")' - - $(srcdir)/.bundle/gems: - $(MAKEDIRS) $@ -diff --git a/tool/gem-unpack.rb b/tool/gem-unpack.rb -index cb05719463f2..fe10b0e420fa 100644 ---- a/tool/gem-unpack.rb -+++ b/tool/gem-unpack.rb -@@ -5,13 +5,14 @@ - # This library is used by "make extract-gems" to - # unpack bundled gem files. - --def Gem.unpack(file, dir = nil) -+def Gem.unpack(file, dir = nil, spec_dir = nil) - pkg = Gem::Package.new(file) - spec = pkg.spec - target = spec.full_name - target = File.join(dir, target) if dir - pkg.extract_files target -- spec_file = File.join(target, "#{spec.name}-#{spec.version}.gemspec") -+ FileUtils.mkdir_p(spec_dir ||= target) -+ spec_file = File.join(spec_dir, "#{spec.name}-#{spec.version}.gemspec") - open(spec_file, 'wb') do |f| - f.print spec.to_ruby - end - -From 3de652d8198be9cd2998c095903889a80e738275 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 7 Apr 2022 01:44:43 +0900 -Subject: [PATCH 5/5] Install built gem extension binaries - ---- - tool/rbinstall.rb | 56 ++++++++++++++--------------------------------- - 1 file changed, 16 insertions(+), 40 deletions(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 9d9b672be472..624961b4eee6 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -858,6 +858,9 @@ class UnpackedInstaller < GemInstaller - def write_cache_file - end - -+ def build_extensions -+ end -+ - def shebang(bin_file_name) - path = File.join(gem_dir, spec.bindir, bin_file_name) - first_line = File.open(path, "rb") {|file| file.gets} -@@ -940,13 +943,12 @@ def ensure_writable_dir(dir) - install_default_gem('ext', srcdir, bindir) - end - --def load_gemspec(file, expanded = false) -+def load_gemspec(file, base = nil) - file = File.realpath(file) - code = File.read(file, encoding: "utf-8:-") - code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do - files = [] -- if expanded -- base = File.dirname(file) -+ if base - Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| - case File.basename(n); when ".", ".."; next; end - next if File.directory?(File.join(base, n)) -@@ -959,7 +961,7 @@ def load_gemspec(file, expanded = false) - unless Gem::Specification === spec - raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." - end -- spec.loaded_from = file -+ spec.loaded_from = base ? File.join(base, File.basename(file)) : file - spec.files.reject! {|n| n.end_with?(".gemspec") or n.start_with?(".git")} - - spec -@@ -1014,20 +1016,6 @@ def install_default_gem(dir, srcdir, bindir) - end - - install?(:ext, :comm, :gem, :'bundled-gems') do -- if CONFIG['CROSS_COMPILING'] == 'yes' -- # The following hacky steps set "$ruby = BASERUBY" in tool/fake.rb -- $hdrdir = '' -- $extmk = nil -- $ruby = nil # ... -- ruby_path = $ruby + " -I#{Dir.pwd}" # $baseruby + " -I#{Dir.pwd}" -- else -- # ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) -- ENV['RUBYLIB'] = nil -- ENV['RUBYOPT'] = nil -- ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) + " --disable=gems -I#{with_destdir(archlibdir)}" -- end -- Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path -- - gem_dir = Gem.default_dir - install_dir = with_destdir(gem_dir) - prepare "bundled gems", gem_dir -@@ -1047,40 +1035,28 @@ def install_default_gem(dir, srcdir, bindir) - :wrappers => true, - :format_executable => true, - } -- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" -- extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) -+ -+ extensions_dir = Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir -+ specifications_dir = File.join(gem_dir, "specifications") -+ build_dir = Gem::StubSpecification.gemspec_stub("", ".bundle", ".bundle").extensions_dir - - File.foreach("#{srcdir}/gems/bundled_gems") do |name| - next if /^\s*(?:#|$)/ =~ name - next unless /^(\S+)\s+(\S+).*/ =~ name - gem_name = "#$1-#$2" -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec" -- if File.exist?(path) -- spec = load_gemspec(path) -- else -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#$1.gemspec" -- next unless File.exist?(path) -- spec = load_gemspec(path, true) -- end -+ path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec" -+ next unless File.exist?(path) -+ spec = load_gemspec(path, "#{srcdir}/.bundle/gems/#{gem_name}") - next unless spec.platform == Gem::Platform::RUBY - next unless spec.full_name == gem_name -- if !spec.extensions.empty? && CONFIG["EXTSTATIC"] == "static" -- puts "skip installation of #{spec.name} #{spec.version}; bundled gem with an extension library is not supported on --with-static-linked-ext" -- next -- end - spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" -- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") -- spec.extensions[0] ||= "-" -- end - package = RbInstall::DirPackage.new spec - ins = RbInstall::UnpackedInstaller.new(package, options) - puts "#{INDENT}#{spec.name} #{spec.version}" - ins.install -- unless $dryrun -- File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) -- end -- unless spec.extensions.empty? -- install_recursive(ext, spec.extension_dir) -+ install_recursive("#{build_dir}/#{gem_name}", "#{extensions_dir}/#{gem_name}") do |src, dest| -+ # puts "#{INDENT} #{dest[extensions_dir.size+gem_name.size+2..-1]}" -+ install src, dest, :mode => (File.executable?(src) ? $prog_mode : $data_mode) - end - installed_gems[spec.full_name] = true - end diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch new file mode 100644 index 0000000..09d11f9 --- /dev/null +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000..8238b58 --- /dev/null +++ b/ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch @@ -0,0 +1,117 @@ +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-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch b/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch deleted file mode 100644 index b208537..0000000 --- a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch +++ /dev/null @@ -1,31 +0,0 @@ -From bfa2f72cfa3bfde34049d26dcb24976316074ad7 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Mon, 21 Mar 2022 15:36:51 +0100 -Subject: [PATCH] Fix a test for `bin/bundle update --bundler` to pass on - ruby/ruby. - -Consider the case that the latest Bundler version on RubyGems is higher than -the `system_bundler_version` (= `Bundler::VERSION`) in `make test-bundler` on -ruby/ruby. - -See . ---- - spec/bundler/commands/binstubs_spec.rb | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/spec/bundler/commands/binstubs_spec.rb b/spec/bundler/commands/binstubs_spec.rb -index 198226207bc..2634f43417c 100644 ---- a/spec/bundler/commands/binstubs_spec.rb -+++ b/spec/bundler/commands/binstubs_spec.rb -@@ -226,7 +226,10 @@ - - it "calls through to the latest bundler version" do - sys_exec "bin/bundle update --bundler", :env => { "DEBUG" => "1" } -- expect(out).to include %(Using bundler #{system_bundler_version}\n) -+ using_bundler_line = /Using bundler ([\w\.]+)\n/.match(out) -+ expect(using_bundler_line).to_not be_nil -+ latest_version = using_bundler_line[1] -+ expect(Gem::Version.new(latest_version)).to be >= Gem::Version.new(system_bundler_version) - end - - it "calls through to the explicit bundler version" do diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 0c2b585..ec8ac11 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -13,15 +13,13 @@ 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 -# 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 ') +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\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$') @@ -31,31 +29,11 @@ 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|rbs|rdbg|rdoc|ruby-mri|typeprof)$') +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$') # Default gems does not come with any documentation. addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') @@ -64,6 +42,18 @@ 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$') -# 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') +# 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$') diff --git a/ruby.spec b/ruby.spec index f5d028d..a364fe6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,78 +1,155 @@ -%global major_version 3 -%global minor_version 1 -%global teeny_version 2 +%global major_version 4 +%global minor_version 0 +%global teeny_version 1 %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. -#%%global milestone rc1 +%dnl %global milestone preview2 # Keep the revision enabled for pre-releases from GIT. -#%%global revision fb4df44d16 +%dnl %global revision d428d086c2 %global ruby_archive %{name}-%{ruby_version} # If revision and milestone are removed/commented out, the official release build is expected. -%if 0%{?milestone:1}%{?revision:1} != 0 -%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}}} +%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}}} +%endif -%global release 164 -%{!?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 3.3.7 -%global rubygems_molinillo_version 0.7.0 +%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 # Default gems. -%global bundler_version 2.3.7 -%global bundler_connection_pool_version 2.3.0 -%global bundler_fileutils_version 1.4.1 -%global bundler_molinillo_version 0.7.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.1 +%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 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.0 -%global psych_version 4.0.3 -%global racc_version 1.6.0 -%global rdoc_version 6.4.0 -%global stringio_version 3.0.1 +%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 # Bundled gems. -%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.1.0 -%global typeprof_version 0.21.2 -%global debug_version 1.4.0 +%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 tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -85,8 +162,22 @@ %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 @@ -98,13 +189,41 @@ Summary: An interpreter of object-oriented scripting language Name: ruby -Version: %{ruby_version} -Release: %{release_string} -# Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... -# MIT and CCO: ccan/* +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 # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c -# UCD: some of enc/trans/**/*.src -License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD +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 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 @@ -114,37 +233,53 @@ Source3: ruby-exercise.stp Source4: macros.ruby Source5: macros.rubygems # RPM dependency generators. -Source8: rubygems.attr -Source9: rubygems.req -Source10: rubygems.prov -Source11: rubygems.con +Source6: rubygems.attr +Source7: rubygems.req +Source8: rubygems.prov +Source9: rubygems.con # ABRT hoook test case. -Source13: test_abrt.rb +Source10: test_abrt.rb # SystemTap tests. -Source14: test_systemtap.rb +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 # 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 -Patch1: ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +Patch2: 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 -Patch2: ruby-2.1.0-Enable-configuration-of-archlibdir.patch +Patch3: 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. -Patch3: ruby-2.1.0-always-use-i386.patch +Patch4: 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 -Patch4: ruby-2.1.0-custom-rubygems-location.patch -# Make mkmf verbose by default -Patch5: ruby-1.9.3-mkmf-verbose.patch +Patch5: 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 @@ -154,51 +289,69 @@ Patch5: ruby-1.9.3-mkmf-verbose.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 -# 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 -# Fix a test for `bin/bundle update --bundler` in `make test-bundler`. -# https://bugs.ruby-lang.org/issues/18643 -# https://github.com/rubygems/rubygems/commit/bfa2f72cfa3bfde34049d26dcb24976316074ad7 -Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch -# Workaround gem binary extensions build and installation issues. -# https://bugs.ruby-lang.org/issues/18373 -# https://github.com/ruby/ruby/pull/5774 -Patch21: ruby-3.2.0-Build-extension-libraries-in-bundled-gems.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 Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Suggests: rubypick +%{?with_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 -%{?with_gmp:BuildRequires: gmp-devel} -BuildRequires: libffi-devel -BuildRequires: openssl-devel -BuildRequires: libyaml-devel -BuildRequires: readline-devel -# Needed to pass test_set_program_name(TestRubyOptions) -BuildRequires: procps -%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} -# RubyGems test suite optional dependencies. -%{?with_git:BuildRequires: git} -%{?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: 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} + +# Needed to pass test_set_program_name(TestRubyOptions) +BuildRequires: procps +# Neede by `Socket.gethostname returns the host name ERROR` +%{?with_hostname:BuildRequires: %{_bindir}/hostname} + +# 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} + # 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} @@ -226,7 +379,6 @@ 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. @@ -239,16 +391,6 @@ 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 @@ -259,16 +401,35 @@ This package includes the libruby, necessary to run Ruby. %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -License: Ruby or MIT +# 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 Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} -Recommends: rubygem(io-console) >= %{io_console_version} -Requires: rubygem(psych) >= %{psych_version} +Recommends: rubygem(io-console) +Requires: rubygem(psych) >= %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} 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 @@ -279,7 +440,7 @@ libraries. %package -n rubygems-devel Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} -License: Ruby or MIT +License: MIT Requires: ruby(rubygems) >= %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} @@ -297,17 +458,9 @@ 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 @@ -318,17 +471,9 @@ StdLib. %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} -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} +License: Ruby OR BSD-2-Clause Provides: irb = %{version}-%{release} -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} +Provides: bundled(rubygem-irb) = %{irb_version} BuildArch: noarch %description -n rubygem-irb @@ -339,16 +484,21 @@ from the terminal. %package -n rubygem-rdoc Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} -# 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} +# 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) Requires: rubygem(json) >= %{json_version} -Requires: rubygem(psych) >= %{psych_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} -Provides: rubygem(rdoc) = %{version}-%{release} +Provides: bundled(rubygem-rdoc) = %{rdoc_version} BuildArch: noarch %description -n rubygem-rdoc @@ -369,10 +519,9 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(bigdecimal) = %{version}-%{release} +# dtoa: missing/dtoa.c +License: (Ruby OR BSD-2-Clause) AND dtoa +Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} %description -n rubygem-bigdecimal Ruby provides built-in support for arbitrary precision integer arithmetic. @@ -390,9 +539,8 @@ 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} -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(io-console) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-io-console) = %{io_console_version} %description -n rubygem-io-console IO/Console provides very simple and portable access to console. It doesn't @@ -402,11 +550,18 @@ 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} -# 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} +# 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) %description -n rubygem-json This is a implementation of the JSON specification according to RFC 4627. @@ -417,12 +572,9 @@ markup language. %package -n rubygem-psych Summary: A libyaml wrapper for Ruby -Version: %{psych_version} +Version: %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(stringio) >= %{stringio_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: bundled(rubygem-psych) = %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -434,18 +586,27 @@ 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} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_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) Requires: rubygem(io-console) -Provides: rubygem(bundler) = %{version}-%{release} +Provides: bundled(rubygem-bundler) = %{bundler_version} # 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-molinillo) = %{bundler_molinillo_version} -Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_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-thor) = %{bundler_thor_version} -Provides: bundled(rubygem-tmpdir) = %{bundler_tmpdir_version} +Provides: bundled(rubygem-tsort) = %{bundler_tsort_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -461,14 +622,37 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib -Requires: ruby(rubygems) >= %{rubygems_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} +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} + %description bundled-gems Bundled gems which are part of Ruby StdLib. While being part of Ruby, these @@ -479,22 +663,17 @@ 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 -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(minitest) = %{version}-%{release} +Provides: bundled(rubygem-minitest) = %{minitest_version} BuildArch: noarch %description -n rubygem-minitest -minitest/unit is a small and incredibly fast unit testing framework. +minitest/test 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. @@ -502,10 +681,8 @@ output. %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(power_assert) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-power_assert) = %{power_assert_version} BuildArch: noarch %description -n rubygem-power_assert @@ -518,10 +695,8 @@ 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: rubygem(rake) = %{version}-%{release} +Provides: bundled(rubygem-rake) = %{rake_version} BuildArch: noarch %description -n rubygem-rake @@ -532,10 +707,8 @@ specified in standard Ruby syntax. %package -n rubygem-rbs Summary: Type signature for Ruby Version: %{rbs_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rbs) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-rbs) = %{rbs_version} %description -n rubygem-rbs RBS is the language for type signatures for Ruby and standard library @@ -546,12 +719,8 @@ 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. -# 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} +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} BuildArch: noarch %description -n rubygem-test-unit @@ -561,14 +730,24 @@ 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 +License: BSD-2-Clause URL: https://github.com/ruby/rexml -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rexml) = %{version}-%{release} +Provides: bundled(rubygem-rexml) = %{rexml_version} BuildArch: noarch %description -n rubygem-rexml @@ -586,11 +765,9 @@ features such as XPath. %package -n rubygem-rss Summary: Family of libraries that support various formats of XML "feeds" Version: %{rss_version} -License: BSD +License: BSD-2-Clause URL: https://github.com/ruby/rss -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rss) = %{version}-%{release} +Provides: bundled(rubygem-rss) = %{rss_version} BuildArch: noarch %description -n rubygem-rss @@ -605,10 +782,7 @@ 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 -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(rbs) >= %{rbs_version} -Provides: rubygem(typeprof) = %{version}-%{release} +Provides: bundled(rubygem-typeprof) = %{typeprof_version} BuildArch: noarch %description -n rubygem-typeprof @@ -622,27 +796,20 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -# Remove bundled libraries to be sure they are not used. -rm -rf ext/psych/yaml -rm -rf ext/fiddle/libffi* +%patch 0 -p1 -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch19 -p1 -%patch20 -p1 +pushd .bundle/gems/rdoc-%{rdoc_version} +%patch 1 -p1 +%patch 9 -p1 +popd -# Once the upstream tarball contains the files on the right place, this code -# won't be necessary. This should happen at the same moment when the patch21 -# is not needed anymore. -mkdir .bundle/specifications -find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} + -%patch21 -p1 +%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} . @@ -650,6 +817,11 @@ 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}' \ @@ -666,27 +838,40 @@ autoconf --with-ruby-pc='%{name}.pc' \ --with-compress-debug-sections=no \ --disable-rpath \ + --enable-mkmf-verbose \ --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ + %{?with_yjit: --enable-yjit} \ + %{?with_zjit: --enable-zjit} \ + %{?with_rust: rustc_flags='%{build_rustflags}'} \ -# Q= makes the build output more verbose and allows to check Fedora -# compiler options. -%make_build COPY="cp -p" Q= +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} %install rm -rf %{buildroot} -%make_install +%make_install -C %{_vpath_builddir} # 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 -# 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 + +# `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} # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -697,8 +882,7 @@ 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/GlobalSignRootCA.pem \ - rubygems.org/GlobalSignRootCA_R3.pem + rubygems.org/GlobalSign.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : @@ -708,18 +892,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}%{_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 +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 # Install dependency generators. -mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs -install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +mkdir -p %{buildroot}%{_fileattrsdir} +install -m 644 %{SOURCE6} %{buildroot}%{_fileattrsdir} +install -m 755 %{SOURCE7} %{buildroot}%{_rpmconfigdir} +install -m 755 %{SOURCE8} %{buildroot}%{_rpmconfigdir} 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 @@ -735,67 +919,42 @@ 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 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 - +# make symlinks for io-console, which is considered to be part of stdlib by other Gems # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 -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 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/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 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/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 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/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 +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 # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). @@ -810,10 +969,12 @@ 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_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +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 # https://bugs.ruby-lang.org/issues/17778 -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 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. @@ -830,99 +991,231 @@ 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. -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}" +%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}' %endif # Check RubyGems version. -[ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] +[ "`make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT='%{_builddir}/%{buildsubdir}/bin/gem -v' | tail -1`" == '%{rubygems_version}' ] # Check Rubygems bundled dependencies versions. # Molinillo. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; module Resolver; end; end; \ - require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ - puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ - == '%{rubygems_molinillo_version}' ] + 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}'; \ +\"" + +# OptParse. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/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}'; \ +\"" # Check Bundler bundled dependencies versions. # connection_pool. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \ - puts Bundler::ConnectionPool::VERSION\\\"\" | tail -1`" \ - == '%{bundler_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}'; \ +\"" # FileUtils. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/fileutils/lib/fileutils'; \ - puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ - == '%{bundler_fileutils_version}' ] + puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \ + puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \ + exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \ +\"" -# Molinillo. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +# PubGrub +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ - require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'; \ - puts Bundler::Molinillo::VERSION\\\"\" | tail -1`" \ - == '%{bundler_molinillo_version}' ] + 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}'; \ +\"" # Net::HTTP::Persistent. -# 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; \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + module Bundler; end; \ + require 'rbconfig'; \ require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ - puts Bundler::Persistent::Net::HTTP::Persistent::VERSION\\\"\" | tail -1`" \ - == '%{bundler_net_http_persistent_version}' ] + 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}'; \ +\"" # Thor. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/thor/lib/thor/version'; \ - puts Bundler::Thor::VERSION\\\"\" | tail -1`" \ - == '%{bundler_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}'; \ +\"" -# tmpdir. -# TODO: There is no version in bundled tmpdir yet. -#%%{global bundler_tmpdir_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}'; \ +\"" # URI. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/uri/lib/uri/version'; \ - puts Bundler::URI::VERSION\\\"\" | tail -1`" \ - == '%{bundler_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}'; \ +\"" # 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 abrt.rb +touch %{_vpath_builddir}/abrt.rb # Check if abrt hook is required (RubyGems are disabled by default when using # runruby, so re-enable them). -make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" # Check if systemtap is supported. -%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}} +%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" + DISABLE_TESTS="" MSPECOPTS="" @@ -930,27 +1223,17 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# https://bugs.ruby-lang.org/issues/18380 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" - -%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} - # 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 check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" + make -C %{_vpath_builddir} %{?with_parallel_tests:%{?_smp_mflags}} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" -%{?with_bundler_tests:make test-bundler-parallel} +# 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} %files %license BSDL @@ -958,9 +1241,7 @@ mv test/fiddle/test_import.rb{,.disable} %lang(ja) %license COPYING.ja %license GPL %license LEGAL -%{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_mandir}/man1/erb* %{_mandir}/man1/ruby* %files devel @@ -970,7 +1251,7 @@ mv test/fiddle/test_import.rb{,.disable} %license GPL %license LEGAL -%{_rpmconfigdir}/macros.d/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -993,60 +1274,43 @@ mv test/fiddle/test_import.rb{,.disable} # 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}/abbrev.rb -%{ruby_libdir}/base64.rb -%{ruby_libdir}/benchmark* +%{ruby_libdir}/bundled_gems.rb %{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* +%{ruby_libdir}/set/subclass_compatible.rb %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb -%{ruby_libdir}/syslog +%{ruby_libdir}/strscan +%{ruby_libdir}/syntax_suggest* %{ruby_libdir}/tempfile.rb %{ruby_libdir}/timeout* %{ruby_libdir}/time.rb @@ -1057,6 +1321,7 @@ mv test/fiddle/test_import.rb{,.disable} %{ruby_libdir}/uri* %{ruby_libdir}/weakref* %{ruby_libdir}/yaml* +%{ruby_libdir}/prism* # Platform specific libraries. %{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} @@ -1136,35 +1401,28 @@ mv test/fiddle/test_import.rb{,.disable} %{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}} @@ -1191,98 +1449,84 @@ mv test/fiddle/test_import.rb{,.disable} %exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmmacrodir}/macros.rubygems +%{_fileattrsdir}/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con %files default-gems -%{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.1.gemspec -%{gem_dir}/specifications/default/csv-3.2.2.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.2.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.0.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.1.1.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.0.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.11.0.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 +%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 %files -n rubygem-irb %{_bindir}/irb -%{ruby_libdir}/irb* -%{gem_dir}/gems/irb-%{irb_version} -%{gem_dir}/specifications/irb-%{irb_version}.gemspec +%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 %{_mandir}/man1/irb.1* %files -n rubygem-rdoc %{_bindir}/rdoc %{_bindir}/ri -%{gem_dir}/gems/rdoc-%{rdoc_version} -%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +%{gem_instdir rdoc} +%{gem_spec rdoc} +%{gem_plugin rdoc} %{_mandir}/man1/ri* %files doc -f .ruby-doc.en -f .ruby-doc.ja @@ -1292,213 +1536,630 @@ mv test/fiddle/test_import.rb{,.disable} %{_datadir}/ri %files -n rubygem-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 +%{gem_extdir_mri bigdecimal} +%{gem_instdir bigdecimal} +%{gem_spec bigdecimal} %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{_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 +%{gem_extdir_mri io-console} +%{gem_instdir io-console} +%{gem_spec io-console} %files -n rubygem-json %{ruby_libdir}/json* %{ruby_libarchdir}/json* -%{_libdir}/gems/%{name}/json-%{json_version} -%{gem_dir}/gems/json-%{json_version} -%{gem_dir}/specifications/json-%{json_version}.gemspec +%{gem_extdir_mri json} +%{gem_instdir json} +%{gem_spec json} %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so -%{_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 +%{gem_extdir_mri psych} +%dir %{gem_instdir psych} +%{gem_libdir psych} +%{gem_spec psych} %files -n rubygem-bundler %{_bindir}/bundle %{_bindir}/bundler -%{gem_dir}/gems/bundler-%{bundler_version} -%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{gem_instdir bundler} +%{gem_spec bundler} %{_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 %{_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}/bin -%{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 +%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 %{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 +# 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-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 +# 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-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 +# 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-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 +# 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/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 +# 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/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 +# 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 %files -n rubygem-minitest -%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 +%{_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 %files -n rubygem-power_assert -%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 +%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 %files -n rubygem-rake %{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec +%{gem_instdir rake} +%{gem_spec rake} %{_mandir}/man1/rake.1* %files -n rubygem-rbs %{_bindir}/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 +%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} %files -n rubygem-test-unit -%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 +%{_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} %files -n rubygem-rexml -%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 +%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 %files -n rubygem-rss -%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 +%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 %files -n rubygem-typeprof -%dir %{gem_dir}/gems/typeprof-%{typeprof_version} +%dir %{gem_instdir typeprof} %{_bindir}/typeprof -%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 -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/vscode -%{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 +%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 %changelog +* Tue Jan 13 2026 Vít Ondruch - 4.0.1-31 +- Upgrade to Ruby 4.0.1. + Resolves: rhbz#2428861 + +* Fri Jan 02 2026 Jarek Prokop - 4.0.0-30 +- Upgrade to Ruby 4.0.0. + Resolves: rhbz#2425358 + +* 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 +- 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 +- Upgrade to Ruby 3.1.3. + +* Tue Nov 22 2022 Vít Ondruch - 3.1.2-171 +- Re-disable package notes. It causes additional issues with installing binary + gems. + +* Thu Sep 29 2022 Vít Ondruch - 3.1.2-170 +- Re-enable package notes. + +* Fri Sep 02 2022 Jarek Prokop - 3.1.2-169 +- Disable fiddle tests that use FFI closures. + Related: rhbz#2040380 + +* Mon Aug 29 2022 Jun Aruga - 3.1.2-168 +- Make RDoc soft dependnecy in IRB. + Resolves: rhbz#2119964 +- Add IRB to ruby-bundled-gems recommends. + Resolves: rhbz#2120562 + +* Wed Aug 24 2022 Jun Aruga - 3.1.2-168 +- Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. + Resolves: rhbz#2120354 + +* Mon Jul 25 2022 Jarek Prokop - 3.1.2-167 +- Fix directory permissions in one of the rubygems tests. + +* Sat Jul 23 2022 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 16 2022 Jarek Prokop - 3.1.2-166 +- Detect compaction support during run time. + +* Tue Jun 07 2022 Jarek Prokop - 3.1.2-165 +- Define GC compaction methods as rb_f_notimplement on unsupported platforms. + * Thu Apr 14 2022 Vít Ondruch - 3.1.2-164 - Upgrade to Ruby 3.1.2. - Use upstream patch for correct build of gem extensions. diff --git a/rubygems.con b/rubygems.con index 1a99ed0..bcdeddc 100644 --- a/rubygems.con +++ b/rubygems.con @@ -19,7 +19,7 @@ module RubyGemsReq end # Report conflicting gem dependencies including their version. - def self.gem_depenencies(specification) + def self.gem_dependencies(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_depenencies(specification) + gem_dependencies(specification) rescue => e # Ignore all errors. end diff --git a/rubygems.req b/rubygems.req index 38e4a9c..70aebd4 100644 --- a/rubygems.req +++ b/rubygems.req @@ -58,7 +58,7 @@ module RubyGemsReq end # Report all gem dependencies including their version. - def self.gem_depenencies(specification) + def self.gem_dependencies(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_depenencies(specification) + gem_dependencies(specification) rescue => e # Ignore all errors. end diff --git a/sources b/sources index 9cefc8d..f1f97eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.1.2.tar.xz) = 4a74e9efc6ea4b3eff4fec7534eb1fff4794d021531defc2e9937e53c6668db8ecdc0fff2bc23d5e6602d0df344a2caa85b31c5414309541e3d5313ec82b6e21 +SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b diff --git a/test_openssl_fips.rb b/test_openssl_fips.rb new file mode 100644 index 0000000..ffc7883 --- /dev/null +++ b/test_openssl_fips.rb @@ -0,0 +1,34 @@ +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 new file mode 100644 index 0000000..e124a49 --- /dev/null +++ b/test_rubygems_con.rb @@ -0,0 +1,124 @@ +# 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 new file mode 100644 index 0000000..b660ff6 --- /dev/null +++ b/test_rubygems_prov.rb @@ -0,0 +1,52 @@ +# 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 new file mode 100644 index 0000000..490923e --- /dev/null +++ b/test_rubygems_req.rb @@ -0,0 +1,205 @@ +# 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