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 3523d77..d2399ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ /*/ -/ruby-2.*.tar.bz2 -/ruby-2.*.tar.xz +/ruby-*.tar.xz +/rexml-*.gem /*.rpm + +!/plans/ diff --git a/macros.rubygems b/macros.rubygems index b55a402..7146c77 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,13 +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} +# +# 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. @@ -21,7 +63,7 @@ %gem_install(d:n:) \ mkdir -p %{-d*}%{!?-d:.%{gem_dir}} \ \ -CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' $CONFIGURE_ARGS" \\\ +CONFIGURE_ARGS="--with-cflags='%{optflags}' --with-cxxflags='%{optflags}' --with-ldflags='%{build_ldflags}' $CONFIGURE_ARGS" \\\ gem install \\\ -V \\\ --local \\\ 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 b9c2c6f..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 -@@ -1930,7 +1930,7 @@ def configuration(srcdir) - SHELL = /bin/sh - - # V=0 quiet, V=1 verbose. other values don't work. --V = 0 -+V = 1 - Q1 = $(V:1=) - Q = $(Q1:0=@) - ECHO1 = $(V:1=@ #{CONFIG['NULLCMD']}) --- -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 c249372..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 -@@ -3115,6 +3115,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 1694f87..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 -@@ -3753,7 +3753,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,7 +63,7 @@ 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 @@ -114,7 +114,7 @@ @@ -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 f41bd0b..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 -@@ -3817,6 +3817,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 dde1098..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 -@@ -3789,6 +3789,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='' -@@ -3813,6 +3817,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 b47b6e1..0b99408 100755 +index a9e6365b27..7117e65e82 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -343,6 +343,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 b47b6e1..0b99408 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -570,7 +571,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 b47b6e1..0b99408 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 7efe039..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 -@@ -3704,9 +3704,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], -@@ -3729,56 +3726,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) -@@ -3795,6 +3798,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,49 +131,32 @@ 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 -@@ -9,6 +9,7 @@ MAJOR=@MAJOR@ +@@ -2,6 +2,7 @@ MAJOR=@MAJOR@ MINOR=@MINOR@ TEENY=@TEENY@ ruby_version=@ruby_version@ +ruby_version_dir_name=@ruby_version_dir_name@ RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ - RUBY_BASE_NAME=@RUBY_BASE_NAME@ --- -2.1.0 + arch=@arch@ - -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 = if RbConfig::CONFIG.key? 'ridir' then - 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 -@@ -433,7 +433,7 @@ def CONFIG.[](name, mandatory = false) +@@ -1053,7 +1053,7 @@ def (bins = []).add(name) install?(:doc, :rdoc) do if $rdocdir @@ -180,87 +165,74 @@ 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. --- - lib/rubygems/defaults.rb | 9 +++++---- + lib/rubygems/defaults.rb | 7 ++++--- test/rubygems/test_gem.rb | 5 +++-- - 2 files changed, 8 insertions(+), 6 deletions(-) + 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 -@@ -32,13 +32,13 @@ def self.default_dir - [ - File.dirname(RbConfig::CONFIG['sitedir']), - 'Gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - ] - else - [ - RbConfig::CONFIG['rubylibprefix'], - 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] - ] - end +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir + # specified in the environment -@@ -75,7 +75,8 @@ def self.default_specifications_dir + 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"]) + end - def self.user_dir - parts = [Gem.user_home, '.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'] + ## +@@ -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 << ruby_version_dir_name unless ruby_version_dir_name.empty? File.join parts end -@@ -158,7 +159,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 -@@ -1378,7 +1378,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? - assert_equal File.join(parts), Gem.user_dir - end -@@ -1454,7 +1455,7 @@ def test_self_vendor_dir - vendordir(File.join(@tempdir, 'vendor')) do + FileUtils.mkdir_p File.join(parts) + +@@ -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 @@ -271,18 +243,15 @@ 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 -@@ -98,7 +98,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) -AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version}') +AC_SUBST(RUBY_VERSION_NAME, '${RUBY_BASE_NAME}-${ruby_version_dir_name}') - AC_CANONICAL_TARGET - test x"$target_alias" = x && --- -2.1.0 - + dnl checks for alternative programs + AC_CANONICAL_BUILD diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch deleted file mode 100644 index 9718d6e..0000000 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ /dev/null @@ -1,136 +0,0 @@ -From 346e147ba6480839b87046e9a9efab0bf6ed3660 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 10 Aug 2016 17:35:48 +0200 -Subject: [PATCH] Rely on ldd to detect glibc. - -This is just workaround, since we know we are quite sure this will be successful -on Red Hat platforms. - -This workaround rhbz#1361037 ---- - test/fiddle/helper.rb | 111 ------------------------------------------ - 1 file changed, 111 deletions(-) - -diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb -index 1da3d93..65148a1 100644 ---- a/test/fiddle/helper.rb -+++ b/test/fiddle/helper.rb -@@ -6,115 +6,6 @@ - - libc_so = libm_so = nil - --case RUBY_PLATFORM --when /cygwin/ -- libc_so = "cygwin1.dll" -- libm_so = "cygwin1.dll" --when /android/ -- libdir = '/system/lib' -- if [0].pack('L!').size == 8 -- libdir = '/system/lib64' -- end -- libc_so = File.join(libdir, "libc.so") -- libm_so = File.join(libdir, "libm.so") --when /linux/ -- libdir = '/lib' -- case RbConfig::SIZEOF['void*'] -- when 4 -- # 32-bit ruby -- case RUBY_PLATFORM -- when /armv\w+-linux/ -- # In the ARM 32-bit libc package such as libc6:armhf libc6:armel, -- # libc.so and libm.so are installed to /lib/arm-linux-gnu*. -- # It's not installed to /lib32. -- dirs = Dir.glob('/lib/arm-linux-gnu*') -- libdir = dirs[0] if dirs && File.directory?(dirs[0]) -- else -- libdir = '/lib32' if File.directory? '/lib32' -- end -- when 8 -- # 64-bit ruby -- libdir = '/lib64' if File.directory? '/lib64' -- end -- libc_so = File.join(libdir, "libc.so.6") -- libm_so = File.join(libdir, "libm.so.6") --when /mingw/, /mswin/ -- require "rbconfig" -- crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase' -- libc_so = libm_so = "#{crtname}.dll" --when /darwin/ -- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" --when /kfreebsd/ -- libc_so = "/lib/libc.so.0.1" -- libm_so = "/lib/libm.so.1" --when /gnu/ #GNU/Hurd -- libc_so = "/lib/libc.so.0.3" -- libm_so = "/lib/libm.so.6" --when /mirbsd/ -- libc_so = "/usr/lib/libc.so.41.10" -- libm_so = "/usr/lib/libm.so.7.0" --when /freebsd/ -- libc_so = "/lib/libc.so.7" -- libm_so = "/lib/libm.so.5" --when /bsd|dragonfly/ -- libc_so = "/usr/lib/libc.so" -- libm_so = "/usr/lib/libm.so" --when /solaris/ -- libdir = '/lib' -- case RbConfig::SIZEOF['void*'] -- when 4 -- # 32-bit ruby -- libdir = '/lib' if File.directory? '/lib' -- when 8 -- # 64-bit ruby -- libdir = '/lib/64' if File.directory? '/lib/64' -- end -- libc_so = File.join(libdir, "libc.so") -- libm_so = File.join(libdir, "libm.so") --when /aix/ -- pwd=Dir.pwd -- libc_so = libm_so = "#{pwd}/libaixdltest.so" -- unless File.exist? libc_so -- cobjs=%w!strcpy.o! -- mobjs=%w!floats.o sin.o! -- funcs=%w!sin sinf strcpy strncpy! -- expfile='dltest.exp' -- require 'tmpdir' -- Dir.mktmpdir do |dir| -- begin -- Dir.chdir dir -- %x!/usr/bin/ar x /usr/lib/libc.a #{cobjs.join(' ')}! -- %x!/usr/bin/ar x /usr/lib/libm.a #{mobjs.join(' ')}! -- %x!echo "#{funcs.join("\n")}\n" > #{expfile}! -- require 'rbconfig' -- if RbConfig::CONFIG["GCC"] = 'yes' -- lflag='-Wl,' -- else -- lflag='' -- end -- flags="#{lflag}-bE:#{expfile} #{lflag}-bnoentry -lm" -- %x!#{RbConfig::CONFIG["LDSHARED"]} -o #{libc_so} #{(cobjs+mobjs).join(' ')} #{flags}! -- ensure -- Dir.chdir pwd -- end -- end -- end --else -- libc_so = ARGV[0] if ARGV[0] && ARGV[0][0] == ?/ -- libm_so = ARGV[1] if ARGV[1] && ARGV[1][0] == ?/ -- if( !(libc_so && libm_so) ) -- $stderr.puts("libc and libm not found: #{$0} ") -- end --end -- --libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so)) --libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so)) -- --# macOS 11.0+ removed libSystem.B.dylib from /usr/lib. But It works with dlopen. --if RUBY_PLATFORM =~ /darwin/ -- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" --end -- - if !libc_so || !libm_so - ruby = EnvUtil.rubybin - # When the ruby binary is 32-bit and the host is 64-bit, --- -2.9.2 - diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 5dd2654..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 -@@ -81,7 +81,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 -@@ -1451,10 +1451,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.0-Remove-RubyGems-dependency.patch b/ruby-2.7.0-Remove-RubyGems-dependency.patch deleted file mode 100644 index 4166900..0000000 --- a/ruby-2.7.0-Remove-RubyGems-dependency.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 6532dbecf36d1f24dab1f2143afd171e0b7699eb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 4 Sep 2019 15:07:07 +0200 -Subject: [PATCH] Remove RubyGems dependency. - -Since `Process::RLIMIT_NOFILE` is platform specific, better to use Ruby -introspection than detecting platform. ---- - .../vendor/net-http-persistent/lib/net/http/persistent.rb | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -index a54be2a..06739f1 100644 ---- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -+++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -@@ -197,10 +197,10 @@ class Bundler::Persistent::Net::HTTP::Persistent - ## - # The default connection pool size is 1/4 the allowed open files. - -- if Gem.win_platform? then -- DEFAULT_POOL_SIZE = 256 -- else -+ if Process.const_defined? :RLIMIT_NOFILE - DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4 -+ else -+ DEFAULT_POOL_SIZE = 256 - end - - ## --- -2.23.0 - 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 81384ba..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 -@@ -19,7 +19,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-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch deleted file mode 100644 index c6923ee..0000000 --- a/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 0689147586c6cb56b91bf0f368890f19d630ece1 Mon Sep 17 00:00:00 2001 -From: nobletrout -Date: Tue, 5 Feb 2019 08:14:02 -0500 -Subject: [PATCH] remove unneeded gem require for ipaddr - -ipaddr is a builtin class for ruby, that is occasionally merged. If the version isn't specified by the runtime dependency, then it will default to needing the latest gem rather than the version that ships with that version of ruby. That will lead to all kinds of potential dependency fails that are most likely unneeded since this gem already requires ruby > 2.3.0 ---- - ext/openssl/openssl.gemspec | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec -index 7c17cd54..f721f247 100644 ---- a/ext/openssl/openssl.gemspec -+++ b/ext/openssl/openssl.gemspec -@@ -21,7 +21,6 @@ Gem::Specification.new do |spec| - s.rubygems_version = "3.0.0.beta1" - s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography." - -- s.add_runtime_dependency("ipaddr", [">= 0"]) - s.add_development_dependency("rake", [">= 0"]) - s.add_development_dependency("rake-compiler", [">= 0"]) - s.add_development_dependency("test-unit", ["~> 3.0"]) diff --git a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch deleted file mode 100644 index decb45f..0000000 --- a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch +++ /dev/null @@ -1,178 +0,0 @@ -From c5806d668f84a86e9e6a522f84b8aa6cb4cdaae9 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 20:46:28 -0500 -Subject: [PATCH 1/3] Enable unaligned accesses on arm64 - -64-bit Arm platforms support unaligned accesses. - -Running the string benchmarks this change improves performance -by an average of 1.04x, min .96x, max 1.21x, median 1.01x ---- - include/ruby/defines.h | 2 +- - regint.h | 2 +- - siphash.c | 2 +- - st.c | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/include/ruby/defines.h b/include/ruby/defines.h -index 49f673ef936a..0193275e8b78 100644 ---- a/include/ruby/defines.h -+++ b/include/ruby/defines.h -@@ -485,7 +485,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # else -diff --git a/regint.h b/regint.h -index a2f5bbba1d1f..0740429688bc 100644 ---- a/regint.h -+++ b/regint.h -@@ -52,7 +52,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # else -diff --git a/siphash.c b/siphash.c -index 153d2c690ab9..ddf8ee245d81 100644 ---- a/siphash.c -+++ b/siphash.c -@@ -30,7 +30,7 @@ - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # endif -diff --git a/st.c b/st.c -index c11535ef9779..8be466bf733f 100644 ---- a/st.c -+++ b/st.c -@@ -1815,7 +1815,7 @@ st_values_check(st_table *tab, st_data_t *values, st_index_t size, - #ifndef UNALIGNED_WORD_ACCESS - # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ -- defined(__powerpc64__) || \ -+ defined(__powerpc64__) || defined(__aarch64__) || \ - defined(__mc68020__) - # define UNALIGNED_WORD_ACCESS 1 - # endif - -From 79b7b9143fda0f33fc9375980cecc61eb42c6f66 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 21:04:37 -0500 -Subject: [PATCH 2/3] arm64 enable gc optimizations - -Similar to x86 and powerpc optimizations. - -| |compare-ruby|built-ruby| -|:------|-----------:|---------:| -|hash1 | 0.225| 0.237| -| | -| 1.05x| -|hash2 | 0.110| 0.110| -| | 1.00x| -| ---- - gc.c | 13 +++++++++++++ - gc.h | 2 ++ - 2 files changed, 15 insertions(+) - -diff --git a/gc.c b/gc.c -index 22972dfc806c..788f06f1586e 100644 ---- a/gc.c -+++ b/gc.c -@@ -1153,6 +1153,19 @@ tick(void) - return val; - } - -+#elif defined(__aarch64__) && defined(__GNUC__) -+typedef unsigned long tick_t; -+#define PRItick "lu" -+ -+static __inline__ tick_t -+tick(void) -+{ -+ unsigned long val; -+ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val)); -+ return val; -+} -+ -+ - #elif defined(_WIN32) && defined(_MSC_VER) - #include - typedef unsigned __int64 tick_t; -diff --git a/gc.h b/gc.h -index 6568079c54e5..47a4ca19a0c5 100644 ---- a/gc.h -+++ b/gc.h -@@ -8,6 +8,8 @@ - #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p))) - #elif defined(__powerpc64__) && defined(__GNUC__) - #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p))) -+#elif defined(__aarch64__) && defined(__GNUC__) -+#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p))) - #else - NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p)); - #define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p) - -From c985b8c6868a380e44e285368af4a4f414ce3309 Mon Sep 17 00:00:00 2001 -From: Ali Saidi -Date: Wed, 5 Aug 2020 21:15:55 -0500 -Subject: [PATCH 3/3] vm_exec.c: improve performance for arm64 - -| |compare-ruby|built-ruby| -|:------------------------------|-----------:|---------:| -|vm_array | 26.501M| 27.959M| -| | -| 1.06x| -|vm_attr_ivar | 21.606M| 31.429M| -| | -| 1.45x| -|vm_attr_ivar_set | 21.178M| 26.113M| -| | -| 1.23x| -|vm_backtrace | 6.621| 6.668| -| | -| 1.01x| -|vm_bigarray | 26.205M| 29.958M| -| | -| 1.14x| -|vm_bighash | 504.155k| 479.306k| -| | 1.05x| -| -|vm_block | 16.692M| 21.315M| -| | -| 1.28x| -|block_handler_type_iseq | 5.083| 7.004| -| | -| 1.38x| ---- - vm_exec.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/vm_exec.c b/vm_exec.c -index ce2e053ee745..7aa56f6ad620 100644 ---- a/vm_exec.c -+++ b/vm_exec.c -@@ -27,6 +27,9 @@ static void vm_insns_counter_count_insn(int insn) {} - #elif defined(__GNUC__) && defined(__powerpc64__) - #define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg) - -+#elif defined(__GNUC__) && defined(__aarch64__) -+#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg) -+ - #else - #define DECL_SC_REG(type, r, reg) register type reg_##r - #endif -@@ -74,6 +77,11 @@ vm_exec_core(rb_execution_context_t *ec, VALUE initial) - DECL_SC_REG(rb_control_frame_t *, cfp, "15"); - #define USE_MACHINE_REGS 1 - -+#elif defined(__GNUC__) && defined(__aarch64__) -+ DECL_SC_REG(const VALUE *, pc, "19"); -+ DECL_SC_REG(rb_control_frame_t *, cfp, "20"); -+#define USE_MACHINE_REGS 1 -+ - #else - register rb_control_frame_t *reg_cfp; - const VALUE *reg_pc; 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.rpmlintrc b/ruby.rpmlintrc new file mode 100644 index 0000000..ec8ac11 --- /dev/null +++ b/ruby.rpmlintrc @@ -0,0 +1,59 @@ +# Keep matching patterns enough not to hide unintended errors and warnings. + +# There is no way to implement this with `%{SOURCE0}` without `%{_sourcedir}`. +# The order in the .spec file could be possibly different. +addFilter(r'ruby\.(spec|src):20: E: use-of-RPM_SOURCE_DIR$') + +# The used version is not obvious. +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-build_assert\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-check_type\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-container_of\)$') +addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan-list\)$') + +# The template files do not have to have executable bits. +addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') + +# Samples don't really need executable bits. +addFilter(r'^rubygem-bigdecimal\.x86_64: E: non-executable-script /usr/share/gems/gems/bigdecimal-[\d\.]+/sample/\w+.rb 644 /usr/local/bin/ruby$') + +# The bundled gem files permissions are overridden as 644 by `make install`. +# https://bugs.ruby-lang.org/issues/17840 +# https://github.com/rubygems/rubygems/issues/5255 +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\d\.]+/bin/\w+ 644 ') + +# 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$') + +# `gethostbyname` is part of deprecated Ruby API. There is also request to drop the API altogether: +# https://bugs.ruby-lang.org/issues/13097 +# https://bugs.ruby-lang.org/issues/17944 +addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$') + +# Rake ships some examples. +addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') + +# Some executables don't have their manual pages. Is it worth of use help2man? +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$') + +# Default gems does not come with any documentation. +addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') + +# rubygems-devel ships only RPM macros and generators. Their placement is given +# by RPM and can't be modified. +addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') + +# Ignore some spelling false positives. +# Ignore spelling of technical terms +addFilter(r'^ruby-default-gems.noarch: E: spelling-error \(\'gemspec\'') +addFilter(r'^ruby-libs.x86_64: E: spelling-error \(\'libruby\'') +addFilter(r'^rubygem-test-unit.noarch: E: spelling-error \(\'xUnit\'') +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'libyaml\'') +addFilter(r'^rubygem-io-console.x86_64: E: spelling-error \(\'readline\'') +# `pyaml` is part of URL +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'pyyaml\'') +# `de-` is actually prefix +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'de\'') + +# It does not seemt to be worth of changing rubygems to archful package due to +# single directory, unless it causes some real troubles. +addFilter(r'^rubygems.noarch: E: noarch-with-lib64$') diff --git a/ruby.spec b/ruby.spec index c0b2d8b..a364fe6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,72 +1,158 @@ -%global major_version 2 -%global minor_version 7 -%global teeny_version 3 +%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 SVN. -#%%global revision af11efd377 +# Keep the revision enabled for pre-releases from GIT. +%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' %{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 136 -%{!?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.1.6 -%global rubygems_molinillo_version 0.5.7 +%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.1.4 -%global bundler_connection_pool_version 2.2.2 -%global bundler_fileutils_version 1.3.0 -%global bundler_molinillo_version 0.6.6 -%global bundler_net_http_persistent_version 3.1.0 -%global bundler_thor_version 1.0.0 +%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 2.0.0 -%global did_you_mean_version 1.4.0 -%global io_console_version 0.5.6 -%global irb_version 1.2.6 -%global json_version 2.3.0 -%global net_telnet_version 0.2.0 -%global openssl_version 2.1.2 -%global psych_version 3.1.0 -%global racc_version 1.4.16 -%global rdoc_version 6.2.1 -%global xmlrpc_version 0.3.0 +%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.13.0 -%global power_assert_version 1.1.7 -%global rake_version 13.0.1 -%global test_unit_version 3.3.4 +%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 -# Might not be needed in the future, if we are lucky enough. -# https://bugzilla.redhat.com/show_bug.cgi?id=888262 -%global tapset_root %{_datadir}/systemtap -%global tapset_dir %{tapset_root}/tapset %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* -%global _normalized_cpu %(echo %{_target_cpu} | sed 's/^ppc/powerpc/;s/i.86/i386/;s/sparcv./sparc/') - %if 0%{?fedora} >= 19 %bcond_without rubypick %endif @@ -76,21 +162,69 @@ %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 %endif +# The additional linker flags break binary rubygem- packages. +# https://bugzilla.redhat.com/show_bug.cgi?id=2043092 +%undefine _package_note_flags + 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 -URL: http://ruby-lang.org/ +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 # TODO: Try to push SystemTap support upstream. @@ -99,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}} +%{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 @@ -139,47 +289,68 @@ 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 -# Workaround "an invalid stdio handle" error on PPC, due to recently introduced -# hardening features of glibc (rhbz#1361037). -# https://bugs.ruby-lang.org/issues/12666 -Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch -# Revert commit which breaks bundled net-http-persistent version check. -# https://github.com/drbrain/net-http-persistent/pull/109 -Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch -# Prevent issues with openssl loading when RubyGems are disabled. -# https://github.com/ruby/openssl/pull/242 -Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.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 +# 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} -# Change this to requires, hopefully just as temporary measure. -# https://bugs.ruby-lang.org/issues/16431 -Recommends: rubygem(openssl) >= %{openssl_version} +# Build dependencies BuildRequires: autoconf -BuildRequires: gdbm-devel -%{?with_gmp:BuildRequires: gmp-devel} +BuildRequires: gcc +BuildRequires: make BuildRequires: libffi-devel -BuildRequires: openssl-devel +BuildRequires: libxcrypt-devel BuildRequires: libyaml-devel -BuildRequires: readline-devel -# Needed to pass test_set_program_name(TestRubyOptions) -BuildRequires: procps +BuildRequires: openssl-devel +BuildRequires: zlib-devel +%{?with_gmp:BuildRequires: gmp-devel} %{?with_systemtap:BuildRequires: %{_bindir}/dtrace} -# RubyGems test suite optional dependencies. -%{?with_git:BuildRequires: git} -%{?with_cmake:BuildRequires: %{_bindir}/cmake} +%{?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} -BuildRequires: multilib-rpm-config -BuildRequires: gcc -BuildRequires: zlib-devel + +# 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. @@ -198,6 +369,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release} # This would not be needed if ~50 packages depending on -devel used # --disable-gems Requires: rubygems +# Users need CFLAGS from /usr/lib/rpm/redhat/redhat-hardened-cc1 +# for building gems with binary extensions (rhbz#1905222). +Recommends: redhat-rpm-config %description devel Header files and libraries for building an extension library for the @@ -205,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. @@ -217,13 +390,7 @@ Provides: bundled(ccan-list) # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} -Provides: bundled(rubygem-racc) = %{racc_version} - -# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe -# so lets obsolete it. This is not the best place, but we don't have -# better, unless https://fedorahosted.org/fpc/ticket/645 provides some -# generic solution. -Obsoletes: ruby-tcltk < 2.4.0 +Provides: bundled(rubygem-openssl) = %{openssl_version} %description libs @@ -234,17 +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(openssl) >= %{openssl_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 @@ -255,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} @@ -272,12 +457,10 @@ Macros and development tools for packaging RubyGems. # with disabled RubyGems. %package default-gems -Summary: Default gems which are part of Ruby StdLib. -Requires: ruby(rubygems) >= %{rubygems_version} +Summary: Default gems which are part of Ruby StdLib Supplements: ruby(rubygems) -# 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 BuildArch: noarch %description default-gems @@ -288,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 @@ -309,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(irb) >= %{irb_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} 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 @@ -339,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. @@ -360,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 @@ -372,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. @@ -385,26 +570,11 @@ data to disk or transmit it over a network rather than use a verbose markup language. -%package -n rubygem-openssl -Summary: OpenSSL provides SSL, TLS and general purpose cryptography -Version: %{openssl_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(openssl) = %{version}-%{release} - -%description -n rubygem-openssl -OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the -OpenSSL library. - - %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} -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 @@ -416,17 +586,28 @@ 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(connection_pool) = %{bundler_connection_pool_version} +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-tsort) = %{bundler_tsort_version} +Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch %description -n rubygem-bundler @@ -439,26 +620,60 @@ many machines, systematically and repeatably. # These are regular packages, which might be installed just optionally. Users # should list them among their dependencies (in Gemfile). +%package bundled-gems +Summary: Bundled gems which are part of Ruby StdLib +Provides: bundled(rubygem-abbrev) = %{abbrev_version} +Provides: bundled(rubygem-base64) = %{base64_version} +Provides: bundled(rubygem-benchmark) = %{benchmark_version} +Provides: bundled(rubygem-csv) = %{csv_version} +Provides: bundled(rubygem-debug) = %{debug_version} +Provides: bundled(rubygem-drb) = %{drb_version} +Provides: bundled(rubygem-getoptlong) = %{getoptlong_version} +Provides: bundled(rubygem-fiddle) = %{fiddle_version} +Provides: bundled(rubygem-logger) = %{logger_version} +Provides: bundled(rubygem-matrix) = %{matrix_version} +Provides: bundled(rubygem-mutex_m) = %{mutex_m_version} +Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} +Provides: bundled(rubygem-net-imap) = %{net_imap_version} +Provides: bundled(rubygem-net-pop) = %{net_pop_version} +Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} +Provides: bundled(rubygem-nkf) = %{nkf_version} +Provides: bundled(rubygem-observer) = %{observer_version} +Provides: bundled(rubygem-ostruct) = %{ostruct_version} +Provides: bundled(rubygem-prime) = %{prime_version} +Provides: bundled(rubygem-pstore) = %{pstore_version} +Provides: bundled(rubygem-readline) = %{readline_version} +Provides: bundled(rubygem-reline) = %{reline_version} +Provides: bundled(rubygem-repl_type_completor) = %{repl_type_completor_version} +Provides: bundled(rubygem-resolv-replace) = %{resolv_replace_version} +Provides: bundled(rubygem-rinda) = %{rinda_version} +Provides: bundled(rubygem-syslog) = %{syslog_version} +# https://github.com/nurse/nkf +# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: +# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d +Provides: bundled(nkf) = %{bundled_nkf_version} + + +%description bundled-gems +Bundled gems which are part of Ruby StdLib. While being part of Ruby, these +needs to be listed in Gemfile to be used by Bundler. + + %package -n rubygem-minitest 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. @@ -466,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 @@ -482,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 @@ -493,35 +704,23 @@ Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. -%package -n rubygem-net-telnet -Summary: Provides telnet client functionality -Version: %{net_telnet_version} -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(net-telnet) = %{version}-%{release} -BuildArch: noarch +%package -n rubygem-rbs +Summary: Type signature for Ruby +Version: %{rbs_version} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-rbs) = %{rbs_version} -%description -n rubygem-net-telnet -Provides telnet client functionality. - -This class also has, through delegation, all the methods of a socket object -(by default, a TCPSocket, but can be set by the Proxy option to new()). This -provides methods such as close() to end the session and sysread() to read data -directly from the host, instead of via the waitfor() mechanism. Note that if -you do use sysread() directly when in telnet mode, you should probably pass -the output through preprocess() to extract telnet command sequences. +%description -n rubygem-rbs +RBS is the language for type signatures for Ruby and standard library +definitions. %package -n rubygem-test-unit 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 @@ -531,38 +730,86 @@ programming software development methodology, for Smalltalk's SUnit. It allows writing tests, checking results and automated testing in Ruby. -%package -n rubygem-xmlrpc -Summary: XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP -Version: %{xmlrpc_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(xmlrpc) = %{version}-%{release} +%package -n rubygem-racc +Version: %{racc_version} +Summary: Racc is a LALR(1) parser generator +License: Ruby OR BSD-2-Clause +URL: https://github.com/ruby/racc +Provides: bundled(rubygem-racc) = %{racc_version} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. +It is written in Ruby itself, and generates Ruby program. + + +%package -n rubygem-rexml +Summary: An XML toolkit for Ruby +Version: %{rexml_version} +License: BSD-2-Clause +URL: https://github.com/ruby/rexml +Provides: bundled(rubygem-rexml) = %{rexml_version} BuildArch: noarch -%description -n rubygem-xmlrpc -XMLRPC is a lightweight protocol that enables remote procedure calls over -HTTP. +%description -n rubygem-rexml +REXML was inspired by the Electric XML library for Java, which features an +easy-to-use API, small size, and speed. Hopefully, REXML, designed with the same +philosophy, has these same features. I've tried to keep the API as intuitive as +possible, and have followed the Ruby methodology for method naming and code +flow, rather than mirroring the Java API. + +REXML supports both tree and stream document parsing. Stream parsing is faster +(about 1.5 times as fast). However, with stream parsing, you don't get access to +features such as XPath. + + +%package -n rubygem-rss +Summary: Family of libraries that support various formats of XML "feeds" +Version: %{rss_version} +License: BSD-2-Clause +URL: https://github.com/ruby/rss +Provides: bundled(rubygem-rss) = %{rss_version} +BuildArch: noarch + +%description -n rubygem-rss +Really Simple Syndication (RSS) is a family of formats that describe 'feeds', +specially constructed XML documents that allow an interested person to subscribe +and receive updates from a particular web service. This library provides tooling +to read and create these feeds. + + +%package -n rubygem-typeprof +Summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation +Version: %{typeprof_version} +License: MIT +URL: https://github.com/ruby/typeprof +Provides: bundled(rubygem-typeprof) = %{typeprof_version} +BuildArch: noarch + +%description -n rubygem-typeprof +TypeProf performs a type analysis of non-annotated Ruby code. +It abstractly executes input Ruby code in a level of types instead of values, +gathers what types are passed to and returned by methods, and prints the +analysis result in RBS format, a standard type description format for Ruby +3.0. %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 -%patch9 -p1 -%patch10 -p1 -%patch13 -p1 -%patch19 -p1 +pushd .bundle/gems/rdoc-%{rdoc_version} +%patch 1 -p1 +%patch 9 -p1 +popd + +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 +%patch 5 -p1 +%patch 6 -p1 +%patch 7 -p1 +%patch 8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -570,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}' \ @@ -586,24 +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 %{?_smp_mflags} 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 DESTDIR=%{buildroot} + +%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}} @@ -614,30 +882,28 @@ 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.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem \ - rubygems.org/AddTrustExternalCARoot.pem \ - index.rubygems.org/GlobalSignRootCA.pem + rubygems.org/GlobalSign.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert - rm -r $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) + rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : done # Ensure there is not forgotten any certificate. -test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" +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 @@ -653,94 +919,70 @@ 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} -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 -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}/ -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/openssl-%{openssl_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version} -mv %{buildroot}%{ruby_libdir}/openssl* %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib -mv %{buildroot}%{ruby_libarchdir}/openssl.so %{buildroot}%{_libdir}/gems/%{name}/openssl-%{openssl_version}/ -mv %{buildroot}%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec %{buildroot}%{gem_dir}/specifications -# This used to be directory when OpenSSL was integral part of StdLib => Keep -# it as directory and link everything in it to prevent directory => symlink -# conversion RPM issues. -mkdir -p %{buildroot}%{ruby_libdir}/openssl -find %{buildroot}%{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl -maxdepth 1 -type f -exec \ - sh -c 'ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl/`basename {}` %{buildroot}%{ruby_libdir}/openssl' \; -ln -s %{gem_dir}/gems/openssl-%{openssl_version}/lib/openssl.rb %{buildroot}%{ruby_libdir}/openssl.rb -ln -s %{_libdir}/gems/%{name}/openssl-%{openssl_version}/openssl.so %{buildroot}%{ruby_libarchdir}/openssl.so - -mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} -mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ -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). -find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ +# TODO: Get information about extension form .gemspec files. +find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{major_minor_version}.*/* -maxdepth 0 \ -exec mv '{}' %{buildroot}%{_libdir}/gems/%{name}/ \; \ || echo "No gem binary extensions to move." +# Remove the extension sources and library copies from `lib` dir. +find %{buildroot}%{gem_dir}/gems/*/ext -maxdepth 0 -exec rm -rf '{}' + +find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete + # Move man pages into proper location -mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mkdir -p %{buildroot}%{_mandir}/man{1,5} +mv %{buildroot}%{gem_instdir irb}/man/irb.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rdoc}/man/ri.1 %{buildroot}%{_mandir}/man1 +# https://bugs.ruby-lang.org/issues/17778 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. -mkdir -p %{buildroot}%{tapset_dir} +mkdir -p %{buildroot}%{_systemtap_tapsetdir} sed -e "s|@LIBRARY_PATH@|%{tapset_libdir}/libruby.so.%{major_minor_version}|" \ - %{SOURCE2} > %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp + %{SOURCE2} > %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp # Escape '*/' in comment. -sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{tapset_dir}/libruby.so.%{major_minor_version}.stp +sed -i -r "s|( \*.*\*)\/(.*)|\1\\\/\2|" %{buildroot}%{_systemtap_tapsetdir}/libruby.so.%{major_minor_version}.stp %endif # Prepare -doc subpackage file lists. @@ -749,89 +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 - -# Remove accidentaly added files -# https://bugs.ruby-lang.org/issues/17784 -rm -rf %{buildroot}%{ruby_libdir}/exe/ - %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/version'; \ - puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ - == '%{bundler_fileutils_version}' ] + require 'bundler/vendor/fileutils/lib/fileutils'; \ + puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \ + puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \ + exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \ +\"" -# 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. -[ "`make runruby TESTRUN_SCRIPT=\"-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}'; \ +\"" + +# 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 -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/uri/lib/uri/version'; \ + puts '%%{bundler_uri_version}: %{bundler_uri_version}'; \ + puts %Q[Bundler::URI::VERSION: #{Bundler::URI::VERSION}]; \ + exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \ +\"" + +# Check bundled libraries versions. + +# Nkf. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + require 'rubygems'; \ + require 'nkf'; \ + puts '%%{bundled_nkf_version}: %{bundled_nkf_version}'; \ + puts %Q[NKF::NKF_VERSION: #{NKF::NKF_VERSION}]; \ + exit 1 if NKF::NKF_VERSION != '%{bundled_nkf_version}'; \ +\"" # 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="" @@ -839,22 +1223,17 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# Disable "File.utime allows Time instances in the far future to set -# mtime and atime". -# https://bugs.ruby-lang.org/issues/16410 -MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to set mtime and atime'" - -# Increase timeout for TestBugReporter#test_bug_reporter_add test, which fails -# quite often. -# https://bugs.ruby-lang.org/issues/16492 -%ifarch s390x -sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bug_reporter.rb -%endif - # 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" + +# 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 @@ -862,9 +1241,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %lang(ja) %license COPYING.ja %license GPL %license LEGAL -%{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_mandir}/man1/erb* %{_mandir}/man1/ruby* %files devel @@ -874,7 +1251,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %license GPL %license LEGAL -%{_rpmconfigdir}/macros.d/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -886,7 +1263,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %license GPL %license LEGAL %doc README.md -%doc NEWS +%doc NEWS.md # Exclude /usr/local directory since it is supposed to be managed by # local system administrator. %exclude %{ruby_sitelibdir} @@ -897,86 +1274,63 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu # 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}/openssl* %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}/debug.rb %{ruby_libdir}/delegate* %{ruby_libdir}/digest* -%{ruby_libdir}/drb* %{ruby_libdir}/English.rb -%{ruby_libdir}/erb.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}/io %{ruby_libdir}/ipaddr.rb -%{ruby_libdir}/kconv.rb -%{ruby_libdir}/logger* -%{ruby_libdir}/matrix* %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb -%{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net -%{ruby_libdir}/observer* +%{ruby_libdir}/objspace* %{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}/prime.rb -%{ruby_libdir}/pstore* -%{ruby_libdir}/readline.rb -%{ruby_libdir}/reline* +%{ruby_libdir}/random %{ruby_libdir}/resolv.rb -%{ruby_libdir}/resolv-replace.rb -%{ruby_libdir}/rexml -%{ruby_libdir}/rinda %{ruby_libdir}/ripper* -%{ruby_libdir}/rss* %{ruby_libdir}/securerandom.rb -%{ruby_libdir}/set.rb +%{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 %{ruby_libdir}/tmpdir.rb -%{ruby_libdir}/tracer* %{ruby_libdir}/tsort.rb %{ruby_libdir}/unicode_normalize %{ruby_libdir}/un.rb %{ruby_libdir}/uri* %{ruby_libdir}/weakref* -%{ruby_libdir}/webrick* %{ruby_libdir}/yaml* +%{ruby_libdir}/prism* # Platform specific libraries. -%{_libdir}/libruby.so.* +%{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} %dir %{ruby_libarchdir} %dir %{ruby_libarchdir}/cgi %{ruby_libarchdir}/cgi/escape.so %{ruby_libarchdir}/continuation.so %{ruby_libarchdir}/coverage.so %{ruby_libarchdir}/date_core.so -%{ruby_libarchdir}/dbm.so %dir %{ruby_libarchdir}/digest %{ruby_libarchdir}/digest.so %{ruby_libarchdir}/digest/bubblebabble.so @@ -1047,38 +1401,30 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %{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}/fiber.so -%{ruby_libarchdir}/fiddle.so -%{ruby_libarchdir}/gdbm.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}/sdbm.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}/racc* -%dir %{ruby_libarchdir}/racc -%{ruby_libarchdir}/racc/cparse.so +%{ruby_libdir}/openssl* +%{ruby_libarchdir}/openssl.so -%{?with_systemtap:%{tapset_root}} +%{?with_systemtap:%{_systemtap_datadir}} %files -n rubygems %{_bindir}/gem @@ -1094,6 +1440,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %dir %{gem_dir}/doc %dir %{gem_dir}/extensions %dir %{gem_dir}/gems +%dir %{gem_dir}/plugins %dir %{gem_dir}/specifications %dir %{gem_dir}/specifications/default %dir %{_exec_prefix}/lib*/gems @@ -1102,79 +1449,84 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %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/benchmark-0.1.0.gemspec -%{gem_dir}/specifications/default/cgi-0.1.0.gemspec -%{gem_dir}/specifications/default/csv-3.1.2.gemspec -%{gem_dir}/specifications/default/date-3.0.0.gemspec -%{gem_dir}/specifications/default/dbm-1.1.0.gemspec -%{gem_dir}/specifications/default/delegate-0.1.0.gemspec -%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec -%{gem_dir}/specifications/default/etc-1.1.0.gemspec -%{gem_dir}/specifications/default/fcntl-1.0.0.gemspec -%{gem_dir}/specifications/default/fiddle-1.0.0.gemspec -%{gem_dir}/specifications/default/fileutils-1.4.1.gemspec -%{gem_dir}/specifications/default/forwardable-1.3.1.gemspec -%{gem_dir}/specifications/default/gdbm-2.1.0.gemspec -%{gem_dir}/specifications/default/getoptlong-0.1.0.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.2.gemspec -%{gem_dir}/specifications/default/logger-1.4.2.gemspec -%{gem_dir}/specifications/default/matrix-0.2.0.gemspec -%{gem_dir}/specifications/default/mutex_m-0.1.0.gemspec -%{gem_dir}/specifications/default/net-pop-0.1.0.gemspec -%{gem_dir}/specifications/default/net-smtp-0.1.0.gemspec -%{gem_dir}/specifications/default/observer-0.1.0.gemspec -%{gem_dir}/specifications/default/open3-0.1.0.gemspec -%{gem_dir}/specifications/default/ostruct-0.2.0.gemspec -%{gem_dir}/specifications/default/prime-0.1.1.gemspec -%{gem_dir}/specifications/default/pstore-0.1.0.gemspec -%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec -%{gem_dir}/specifications/default/readline-0.0.2.gemspec -%{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.5.gemspec -%{gem_dir}/specifications/default/rexml-3.2.3.1.gemspec -%{gem_dir}/specifications/default/rss-0.2.8.gemspec -%{gem_dir}/specifications/default/sdbm-1.0.0.gemspec -%{gem_dir}/specifications/default/singleton-0.1.0.gemspec -%{gem_dir}/specifications/default/stringio-0.1.0.gemspec -%{gem_dir}/specifications/default/strscan-1.0.3.gemspec -%{gem_dir}/specifications/default/timeout-0.1.0.gemspec -%{gem_dir}/specifications/default/tracer-0.1.0.gemspec -%{gem_dir}/specifications/default/uri-0.10.0.gemspec -%{gem_dir}/specifications/default/webrick-1.6.1.gemspec -%{gem_dir}/specifications/default/yaml-0.1.0.gemspec -%{gem_dir}/specifications/default/zlib-1.1.0.gemspec - -# 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 -# These have wrong shebangs. Exclude them for now and let's see what upstream -# thinks about them. -# https://bugs.ruby-lang.org/issues/15982 -%exclude %{_bindir}/{racc2y,y2racc} -%exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -%{gem_dir}/gems/racc-%{racc_version} +%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 @@ -1184,98 +1536,757 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %{_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 - -%files -n rubygem-openssl -%{ruby_libdir}/openssl -%{ruby_libdir}/openssl.rb -%{ruby_libarchdir}/openssl.so -%{_libdir}/gems/%{name}/openssl-%{openssl_version} -%{gem_dir}/gems/openssl-%{openssl_version} -%{gem_dir}/specifications/openssl-%{openssl_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} -%{gem_dir}/gems/psych-%{psych_version} -%{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 -n rubygem-minitest -%{gem_dir}/gems/minitest-%{minitest_version} -%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec +%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 -%files -n rubygem-net-telnet -%{gem_dir}/gems/net-telnet-%{net_telnet_version} -%exclude %{gem_dir}/gems/net-telnet-%{net_telnet_version}/.* -%{gem_dir}/specifications/net-telnet-%{net_telnet_version}.gemspec +# base64 +%dir %{gem_instdir base64} +%license %{gem_instdir base64}/BSDL +%license %{gem_instdir base64}/COPYING +%license %{gem_instdir base64}/LEGAL +%{gem_instdir base64}/sig +%{gem_libdir base64} +%{gem_spec base64} +%doc %{gem_instdir base64}/README.md + +# benchmark +%dir %{gem_instdir benchmark} +%license %{gem_instdir benchmark}/BSDL +%license %{gem_instdir benchmark}/COPYING +%doc %{gem_instdir benchmark}/README.md +%{gem_instdir benchmark}/Gemfile +%{gem_instdir benchmark}/Rakefile +%{gem_instdir benchmark}/bin +%{gem_libdir benchmark} +%{gem_spec benchmark} + +# csv +%dir %{gem_instdir csv} +%license %{gem_instdir csv}/LICENSE.txt +%doc %{gem_instdir csv}/NEWS.md +%{gem_libdir csv} +%{gem_spec csv} +%doc %{gem_instdir csv}/README.md +%doc %{gem_instdir csv}/doc + +# drb +%dir %{gem_instdir drb} +%license %{gem_instdir drb}/LICENSE.txt +%{gem_libdir drb} +%{gem_instdir drb}/drb.gemspec +%{gem_spec drb} + +# getoptlong +%dir %{gem_instdir getoptlong} +%license %{gem_instdir getoptlong}/LICENSE.txt +%{gem_instdir getoptlong}/bin +%{gem_libdir getoptlong} +%{gem_instdir getoptlong}/sample +%{gem_spec getoptlong} +%{gem_instdir getoptlong}/Gemfile +%doc %{gem_instdir getoptlong}/README.md +%{gem_instdir getoptlong}/Rakefile + +# fiddle +%dir %{gem_instdir fiddle} +%license %{gem_instdir fiddle}/LICENSE.txt +%doc %{gem_instdir fiddle}/README.md +%{gem_instdir fiddle}/Rakefile +%{gem_libdir fiddle} +%dir %{gem_extdir_mri fiddle} +%{gem_extdir_mri fiddle}/fiddle.so +%{gem_extdir_mri fiddle}/gem.build_complete +%{gem_instdir fiddle}/fiddle.gemspec +%{gem_spec fiddle} + +# logger +%dir %{gem_instdir logger} +%license %{gem_instdir logger}/BSDL +%license %{gem_instdir logger}/COPYING +%doc %{gem_instdir logger}/README.md +%{gem_libdir logger} +%{gem_spec logger} + +# matrix +%dir %{gem_instdir matrix} +%license %{gem_instdir matrix}/BSDL +%license %{gem_instdir matrix}/COPYING +%{gem_libdir matrix} +%{gem_instdir matrix}/matrix.gemspec +%{gem_spec matrix} + +# mutex_m +%dir %{gem_instdir mutex_m} +%license %{gem_instdir mutex_m}/BSDL +%license %{gem_instdir mutex_m}/COPYING +%{gem_libdir mutex_m} +%{gem_instdir mutex_m}/sig +%{gem_spec mutex_m} +%doc %{gem_instdir mutex_m}/README.md + +# net-ftp +%dir %{gem_instdir net-ftp} +%license %{gem_instdir net-ftp}/BSDL +%license %{gem_instdir net-ftp}/COPYING +%{gem_instdir net-ftp}/Gemfile +%license %{gem_instdir net-ftp}/LICENSE.txt +%doc %{gem_instdir net-ftp}/README.md +%{gem_instdir net-ftp}/Rakefile +%{gem_libdir net-ftp} +%{gem_spec net-ftp} + +# net-imap +%dir %{gem_instdir net-imap} +%license %{gem_instdir net-imap}/BSDL +%license %{gem_instdir net-imap}/COPYING +%{gem_instdir net-imap}/Gemfile +%license %{gem_instdir net-imap}/LICENSE.txt +%doc %{gem_instdir net-imap}/README.md +%{gem_instdir net-imap}/Rakefile +%{gem_instdir net-imap}/docs +%{gem_libdir net-imap} +%{gem_instdir net-imap}/rakelib +%{gem_instdir net-imap}/sample +%{gem_spec net-imap} + +# net-pop +%dir %{gem_instdir net-pop} +%{gem_instdir net-pop}/Gemfile +%license %{gem_instdir net-pop}/LICENSE.txt +%doc %{gem_instdir net-pop}/README.md +%{gem_instdir net-pop}/Rakefile +%{gem_libdir net-pop} +%{gem_spec net-pop} + +# net-smtp +%dir %{gem_instdir net-smtp} +%doc %{gem_instdir net-smtp}/NEWS.md +%doc %{gem_instdir net-smtp}/README.md +%license %{gem_instdir net-smtp}/LICENSE.txt +%{gem_libdir net-smtp} +%{gem_spec net-smtp} + +# nkf +%dir %{gem_instdir nkf} +%{gem_extdir_mri nkf} +%license %{gem_instdir nkf}/LICENSE.txt +%{gem_instdir nkf}/bin +%{gem_libdir nkf} +%{gem_spec nkf} +%{gem_instdir nkf}/Gemfile +%doc %{gem_instdir nkf}/README.md +%{gem_instdir nkf}/Rakefile + +# observer +%dir %{gem_instdir observer} +%license %{gem_instdir observer}/LICENSE.txt +%{gem_instdir observer}/bin +%{gem_libdir observer} +%exclude %{gem_cache observer} +%{gem_spec observer} +%{gem_instdir observer}/Gemfile +%doc %{gem_instdir observer}/README.md +%{gem_instdir observer}/Rakefile + +# ostruct +%dir %{gem_instdir ostruct} +%license %{gem_instdir ostruct}/BSDL +%license %{gem_instdir ostruct}/COPYING +%doc %{gem_instdir ostruct}/README.md +%{gem_instdir ostruct}/Gemfile +%{gem_instdir ostruct}/Rakefile +%{gem_instdir ostruct}/bin +%{gem_libdir ostruct} +%{gem_instdir ostruct}/ostruct.gemspec +%{gem_spec ostruct} + +# prime +%dir %{gem_instdir prime} +%license %{gem_instdir prime}/BSDL +%license %{gem_instdir prime}/COPYING +%doc %{gem_instdir prime}/README.md +%{gem_instdir prime}/Rakefile +%{gem_libdir prime} +%{gem_instdir prime}/sig +%{gem_instdir prime}/prime.gemspec +%{gem_spec prime} + +# pstore +%dir %{gem_instdir pstore} +%license %{gem_instdir pstore}/BSDL +%license %{gem_instdir pstore}/COPYING +%doc %{gem_instdir pstore}/README.md +%{gem_instdir pstore}/Gemfile +%{gem_instdir pstore}/Rakefile +%{gem_instdir pstore}/bin +%{gem_libdir pstore} +%{gem_spec pstore} + +# rdbg +%{_bindir}/rdbg +%dir %{gem_extdir_mri debug} +%{gem_extdir_mri debug}/gem.build_complete +%dir %{gem_extdir_mri debug}/debug +%{gem_extdir_mri debug}/debug/debug.so +%dir %{gem_instdir debug} +%exclude %{gem_instdir debug}/.* +%doc %{gem_instdir debug}/CONTRIBUTING.md +%{gem_instdir debug}/Gemfile +%license %{gem_instdir debug}/LICENSE.txt +%doc %{gem_instdir debug}/README.md +%{gem_instdir debug}/Rakefile +%doc %{gem_instdir debug}/TODO.md +%{gem_instdir debug}/exe +%{gem_libdir debug} +%{gem_instdir debug}/misc +%{gem_spec debug} + +# 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} + +# 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} + +# 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 + +# 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 + +# 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 + +# 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 +%{_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 -%{gem_dir}/gems/power_assert-%{power_assert_version} -%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* -%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec +%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-test-unit -%{gem_dir}/gems/test-unit-%{test_unit_version} -%{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec +%files -n rubygem-rbs +%{_bindir}/rbs +%dir %{gem_extdir_mri rbs} +%{gem_extdir_mri rbs}/gem.build_complete +%{gem_extdir_mri rbs}/rbs_extension.so +%dir %{gem_instdir rbs} +%license %{gem_instdir rbs}/BSDL +%doc %{gem_instdir rbs}/CHANGELOG.md +%license %{gem_instdir rbs}/COPYING +%doc %{gem_instdir rbs}/README.md +%{gem_instdir rbs}/Rakefile +%{gem_instdir rbs}/Steepfile +%{gem_instdir rbs}/config.yml +%{gem_instdir rbs}/core +%doc %{gem_instdir rbs}/docs +%{gem_instdir rbs}/exe +%{gem_instdir rbs}/goodcheck.yml +%{gem_instdir rbs}/include +%{gem_libdir rbs} +%{gem_instdir rbs}/schema +%{gem_instdir rbs}/sig +%{gem_instdir rbs}/src +%{gem_instdir rbs}/stdlib +%{gem_spec rbs} -%files -n rubygem-xmlrpc -%license %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/LICENSE.txt -%dir %{gem_dir}/gems/xmlrpc-%{xmlrpc_version} -%exclude %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/.* -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Gemfile -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/Rakefile -%doc %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/README.md -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/bin -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/lib -%{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec -%{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec +%files -n rubygem-test-unit +%{_bindir}/test-unit +%dir %{gem_instdir test-unit} +%license %{gem_instdir test-unit}/BSDL +%license %{gem_instdir test-unit}/COPYING +%license %{gem_instdir test-unit}/PSFL +%{gem_libdir test-unit} +%{gem_instdir test-unit}/sample +%{gem_instdir test-unit}/bin +%{gem_spec test-unit} +%doc %{gem_instdir test-unit}/README.md +%{gem_instdir test-unit}/Rakefile +%doc %{gem_instdir test-unit}/doc + +%files -n rubygem-racc +%dir %{gem_instdir racc} +%{_bindir}/racc +%{gem_extdir_mri racc} +%license %{gem_instdir racc}/BSDL +%license %{gem_instdir racc}/COPYING +%doc %{gem_instdir racc}/ChangeLog +%lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc +%doc %{gem_instdir racc}/README.rdoc +%doc %{gem_instdir racc}/TODO +%{gem_instdir racc}/bin +%doc %{gem_instdir racc}/doc +%{gem_libdir racc} +%{gem_spec racc} + +%files -n rubygem-rexml +%dir %{gem_instdir rexml} +%license %{gem_instdir rexml}/LICENSE.txt +%doc %{gem_instdir rexml}/NEWS.md +%doc %{gem_instdir rexml}/doc +%{gem_libdir rexml} +%{gem_spec rexml} +%doc %{gem_instdir rexml}/README.md + +%files -n rubygem-rss +%dir %{gem_instdir rss} +%exclude %{gem_instdir rss}/.* +%license %{gem_instdir rss}/LICENSE.txt +%doc %{gem_instdir rss}/NEWS.md +%{gem_libdir rss} +%{gem_spec rss} +%doc %{gem_instdir rss}/README.md + +%files -n rubygem-typeprof +%dir %{gem_instdir typeprof} +%{_bindir}/typeprof +%exclude %{gem_instdir typeprof}/.* +%license %{gem_instdir typeprof}/LICENSE +%{gem_instdir typeprof}/bin +%{gem_instdir typeprof}/typeprof.conf.jsonc +%doc %{gem_instdir typeprof}/doc +%{gem_libdir typeprof} +%{gem_spec typeprof} +%doc %{gem_instdir typeprof}/README.md %changelog -* Wed Apr 07 2021 Pavel Valena - 2.7.3-136 -- Upgrade to Ruby 2.7.3. +* 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. + +* Mon Apr 04 2022 Vít Ondruch - 3.1.1-163 +- Properly build binary gem extensions. + +* Mon Mar 14 2022 Vít Ondruch - 3.1.1-162 +- Upgrade to Ruby 3.1.1. + +* Thu Feb 10 2022 Vít Ondruch - 3.1.0-161 +- Prevent segfaults running with SystemTap. + +* Wed Jan 26 2022 Vít Ondruch - 3.1.0-160 +- Upgrade to Ruby 3.1.0. + +* Tue Jan 25 2022 Vít Ondruch - 3.0.3-159 +- Update OpenSSL 3 compatibility patches. + +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-158 +- Disable package notes to prevent rubygem- build breakage. + +* Thu Jan 20 2022 Vít Ondruch - 3.0.3-157 +- Fix segfault in `TestArray#test_sample` on s390x. + +* Tue Jan 11 2022 Jun Aruga - 3.0.3-157 +- Remove the patch applied to pass the test/fiddle/test_import.rb on PPC. + +* Mon Jan 10 2022 Miro Hrončok - 3.0.3-156 +- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34 + +* Thu Dec 09 2021 Vít Ondruch - 3.0.3-155 +- Fix loading of default gems. + Resolves: rhbz#2027099 + +* Thu Nov 25 2021 Vít Ondruch - 3.0.3-154 +- Upgrade to Ruby 3.0.3. + +* Fri Nov 05 2021 Vít Ondruch - 3.0.2-153 +- Fix OpenSSL 3.0 compatibility. + Resolves: rhbz#2021922 + +* Tue Sep 14 2021 Sahana Prasad +- Rebuilt with OpenSSL 3.0.0 + +* Tue Aug 24 2021 Vít Ondruch - 3.0.2-152 +- Enable LTO. +- Load user installed RubyGems plugins. + +* Fri Jul 23 2021 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jul 13 2021 Jarek Prokop - 3.0.2-150 +- Upgrade to Ruby 3.0.2. +- Fix command injection vulnerability in RDoc. + Resolves: CVE-2021-31799 +- Fix FTP PASV command response can cause Net::FTP to connect to arbitrary host. + Resolves: CVE-2021-31810 +- Fix StartTLS stripping vulnerability in Net::IMAP. + Resolves: CVE-2021-32066 +- Fix dependencies of gems with explicit source installed from a different + source. + Resolves: CVE-2020-36327 + +* Mon May 17 2021 Timm Bäder - 3.0.1-149 +- Pass ldflags to gem install via CONFIGURE_ARGS + +* Tue Apr 06 2021 Vít Ondruch - 3.0.1-148 +- Upgrade to Ruby 3.0.1. + +* Thu Apr 01 2021 Vít Ondruch - 3.0.0-147 +- Remove IRB dependency from rubygem-rdoc. + +* Tue Mar 02 2021 Vít Ondruch - 3.0.0-146 +- Fix flaky excon test suite. +- Properly support DWARF5 debug information. + Resolves: rhbz#1920533 + +* Mon Jan 25 2021 Vít Ondruch - 3.0.0-145 +- Bundle OpenSSL into StdLib. +- Use proper path for plugin wrappers. + +* Sat Jan 16 2021 Vít Ondruch - 3.0.0-144 +- Fix SEGFAULT in rubygem-shoulda-matchers test suite. + +* Tue Jan 12 2021 Vít Ondruch - 3.0.0-143 +- Provide `gem.build_complete` file for binary gems. + +* Mon Jan 11 2021 Vít Ondruch - 3.0.0-142 +- Re-enable test suite. + +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-141 +- ruby-default-gems have to depend on rubygem(io-console) due to reline. + +* Fri Jan 8 2021 Vít Ondruch - 3.0.0-140 +- Fix SEGFAULT preventing rubygem-unicode to build on armv7hl. + +* Wed Jan 6 2021 Vít Ondruch - 3.0.0-139 +- Add support for reworked RubyGems plugins. + +* Mon Jan 04 2021 Vít Ondruch - 3.0.0-138 +- Upgrade to Ruby 3.0.0. +- Extract RSS and REXML into separate subpackages, because they were moved from + default gems to bundled gems. +- Obsolete Net::Telnet and XMLRPC packages, because they were dropped from Ruby. + +* Tue Dec 15 16:26:46 CET 2020 Pavel Valena - 2.7.2-137 +- Add Recommends: redhat-rpm-config to devel subpackage. + Resolves: rhbz#1905222 + +* Tue Nov 24 18:16:02 CET 2020 Vít Ondruch - 2.7.2-136 +- Add explicit `BR: make`. * Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 - Upgrade to Ruby 2.7.2. +* Wed Jul 29 2020 Fedora Release Engineering - 2.7.1-134 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 +- Disable LTO, which appear to cause issues with SIGSEV handler. - Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. +* Tue Jul 14 2020 Tom Stellard - 2.7.1-133 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + * Wed Jun 24 2020 Jun Aruga - 2.7.1-132 - Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 @@ -1298,6 +2309,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 - Upgrade to Ruby 2.7.1. +- Fix FTBFS due to glibc 2.31.9000 implementing lchmod(2). * Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 - Provide StdLib links for Racc and install it by default. diff --git a/rubygems-3.1.3-Fix-I-require-priority.patch b/rubygems-3.1.3-Fix-I-require-priority.patch deleted file mode 100644 index 6ed2f76..0000000 --- a/rubygems-3.1.3-Fix-I-require-priority.patch +++ /dev/null @@ -1,167 +0,0 @@ -From 912d141a351053d0f6d915b5e7807f6a8f4c0631 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 4 Feb 2020 17:25:56 +0100 -Subject: [PATCH 1/2] Make non "test_" method private - ---- - test/rubygems/test_require.rb | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index aa2675af5d..d618a93473 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -532,6 +532,8 @@ def test_require_bundler_with_bundler_version - end - end - -+ private -+ - def silence_warnings - old_verbose, $VERBOSE = $VERBOSE, false - yield - -From b3944384f44b869985051863d8b05b545d09a585 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 4 Feb 2020 17:26:28 +0100 -Subject: [PATCH 2/2] Fix require issue with file extension priority - -If `require "a"` is run when two folders have been specified in the -I -option including a "a.rb" file and a "a.so" file respectively, the ruby -spec says that the ".rb" file should always be preferred. However, the -logic we added in https://github.com/rubygems/rubygems/commit/6b81076d9 -to make the -I option always beat default gems does not respect this -spec, creating a difference from the original ruby-core's require. - -[the ruby spec says]: https://github.com/ruby/spec/blob/d80a6e2b221d4f17a8cadcac75ef950c59cba901/core/kernel/shared/require.rb#L234-L246 ---- - lib/rubygems/core_ext/kernel_require.rb | 28 +++++------ - test/rubygems/test_require.rb | 62 +++++++++++++++++++++++++ - 2 files changed, 74 insertions(+), 16 deletions(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 60f4d18712..369f2c743e 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,18 +43,18 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -- safe_lp = lp.dup.tap(&Gem::UNTAINT) -- begin -- if File.symlink? safe_lp # for backward compatibility -- next -+ Gem.suffixes.each do |s| -+ $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -+ safe_lp = lp.dup.tap(&Gem::UNTAINT) -+ begin -+ if File.symlink? safe_lp # for backward compatibility -+ next -+ end -+ rescue SecurityError -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ raise - end -- rescue SecurityError -- RUBYGEMS_ACTIVATION_MONITOR.exit -- raise -- end - -- Gem.suffixes.each do |s| - full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) - if File.file?(full_path) - rp = full_path -@@ -67,12 +67,8 @@ def require(path) - end - - if resolved_path -- begin -- RUBYGEMS_ACTIVATION_MONITOR.exit -- return gem_original_require(resolved_path) -- rescue LoadError -- RUBYGEMS_ACTIVATION_MONITOR.enter -- end -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ return gem_original_require(resolved_path) - end - - if spec = Gem.find_unresolved_default_spec(path) -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index d618a93473..7cffbfa7fe 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -120,6 +120,24 @@ def test_dash_i_beats_default_gems - Object.send :remove_const, :HELLO if Object.const_defined? :HELLO - end - -+ def test_dash_i_respects_default_library_extension_priority -+ skip "extensions don't quite work on jruby" if Gem.java_platform? -+ -+ dash_i_ext_arg = util_install_extension_file('a') -+ dash_i_lib_arg = util_install_ruby_file('a') -+ -+ lp = $LOAD_PATH.dup -+ -+ begin -+ $LOAD_PATH.unshift dash_i_lib_arg -+ $LOAD_PATH.unshift dash_i_ext_arg -+ assert_require 'a' -+ assert_match(/a\.rb$/, $LOADED_FEATURES.last) -+ ensure -+ $LOAD_PATH.replace lp -+ end -+ end -+ - def test_concurrent_require - Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) - Object.const_set :FILE_EXIT_LATCH, Latch.new(1) -@@ -541,4 +559,48 @@ def silence_warnings - $VERBOSE = old_verbose - end - -+ def util_install_extension_file(name) -+ spec = quick_gem name -+ util_build_gem spec -+ -+ spec.extensions << "extconf.rb" -+ write_file File.join(@tempdir, "extconf.rb") do |io| -+ io.write <<-RUBY -+ require "mkmf" -+ create_makefile("#{name}") -+ RUBY -+ end -+ -+ write_file File.join(@tempdir, "#{name}.c") do |io| -+ io.write <<-C -+ #include -+ void Init_#{name}() { } -+ C -+ end -+ -+ spec.files += ["extconf.rb", "#{name}.c"] -+ -+ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") -+ refute_path_exists so -+ -+ path = Gem::Package.build spec -+ installer = Gem::Installer.at path -+ installer.install -+ assert_path_exists so -+ -+ spec.gem_dir -+ end -+ -+ def util_install_ruby_file(name) -+ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir) -+ dash_i_lib_arg = File.join dir_lib -+ -+ a_rb = File.join dash_i_lib_arg, "#{name}.rb" -+ -+ FileUtils.mkdir_p File.dirname a_rb -+ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" } -+ -+ dash_i_lib_arg -+ end -+ - end diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch deleted file mode 100644 index ae6ecbb..0000000 --- a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch +++ /dev/null @@ -1,324 +0,0 @@ -From 00d98eb8a3245fb93a475ecbbbc4c7ec7e6704cd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:00:00 +0200 -Subject: [PATCH 1/5] Fix performance regression in `require` - -Our check for `-I` paths should not go through all activated gems. ---- - lib/rubygems.rb | 10 ++++++++++ - lib/rubygems/core_ext/kernel_require.rb | 2 +- - lib/rubygems/test_case.rb | 1 + - test/rubygems/test_require.rb | 11 +++++++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index 843cb49e4a..d1a9a1c7e1 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -662,10 +662,20 @@ def self.load_path_insert_index - index - end - -+ ## -+ # The number of paths in the `$LOAD_PATH` from activated gems. Used to -+ # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`. -+ -+ def self.activated_gem_paths -+ @activated_gem_paths ||= 0 -+ end -+ - ## - # Add a list of paths to the $LOAD_PATH at the proper place. - - def self.add_to_load_path(*paths) -+ @activated_gem_paths = activated_gem_paths + paths.size -+ - insert_index = load_path_insert_index - - if insert_index -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index ed24111bd5..7625ce1bee 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -47,7 +47,7 @@ def require(path) - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - -- $LOAD_PATH[0...load_path_insert_index].each do |lp| -+ $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility -diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb -index a05a2898d1..53dd495aef 100644 ---- a/lib/rubygems/test_case.rb -+++ b/lib/rubygems/test_case.rb -@@ -385,6 +385,7 @@ def setup - Gem::Security.reset - - Gem.loaded_specs.clear -+ Gem.instance_variable_set(:@activated_gem_paths, 0) - Gem.clear_default_specs - Bundler.reset! - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index f36892f8cc..9f2fe3439a 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -382,6 +382,17 @@ def test_default_gem_require_activates_just_once - assert_equal 0, times_called - end - -+ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require -+ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb" -+ install_gem a1 -+ -+ assert_require "test_gem_require_a" -+ -+ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do -+ require "test_gem_require_a" -+ end -+ end -+ - def test_realworld_default_gem - testing_ruby_repo = !ENV["GEM_COMMAND"].nil? - skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform? - -From ae95885dff6189c5ac59bbdf685cb4ec4751fdef Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:08:19 +0200 -Subject: [PATCH 2/5] Refactor `Gem.load_path_insert_index` - ---- - lib/rubygems.rb | 13 +++---------- - lib/rubygems/core_ext/kernel_require.rb | 5 +---- - 2 files changed, 4 insertions(+), 14 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index d1a9a1c7e1..ca80326459 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -659,7 +659,7 @@ def self.load_path_insert_index - - index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] - -- index -+ index || 0 - end - - ## -@@ -676,15 +676,8 @@ def self.activated_gem_paths - def self.add_to_load_path(*paths) - @activated_gem_paths = activated_gem_paths + paths.size - -- insert_index = load_path_insert_index -- -- if insert_index -- # gem directories must come after -I and ENV['RUBYLIB'] -- $LOAD_PATH.insert(insert_index, *paths) -- else -- # we are probably testing in core, -I and RUBYLIB don't apply -- $LOAD_PATH.unshift(*paths) -- end -+ # gem directories must come after -I and ENV['RUBYLIB'] -+ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths) - end - - @yaml_loaded = false -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 7625ce1bee..decf4829f1 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -44,10 +44,7 @@ def require(path) - resolved_path = begin - rp = nil - Gem.suffixes.each do |s| -- load_path_insert_index = Gem.load_path_insert_index -- break unless load_path_insert_index -- -- $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| -+ $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From da1492e9d7b28d068fbfbb0ba1cafcc516681567 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 19 May 2020 14:32:12 +0200 -Subject: [PATCH 3/5] Extract a local outside the loop - ---- - lib/rubygems/core_ext/kernel_require.rb | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index decf4829f1..6a7faaf2d1 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,8 +43,9 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths - Gem.suffixes.each do |s| -- $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| -+ $LOAD_PATH[0...load_path_check_index].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From 22ad5717c38feda2375b53628d15ae3db2195684 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 21 May 2020 15:20:57 +0200 -Subject: [PATCH 4/5] Fix `$LOADED_FEATURES` cache sometimes not respected - -In the cases where the initial manually `-I` path resolution succeeded, -we were passing a full path to the original require effectively skipping -the `$LOADED_FEATURES` cache. With this change, we _only_ do the -resolution when a matching requirable path is found in a default gem. In -that case, we skip activation of the default gem if we detect that the -required file will be picked up for a `-I` path. ---- - lib/rubygems/core_ext/kernel_require.rb | 53 +++++++++++-------------- - test/rubygems/test_require.rb | 29 ++++++++++++++ - 2 files changed, 53 insertions(+), 29 deletions(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 6a7faaf2d1..81e37b98bf 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -39,46 +39,41 @@ def require(path) - - path = path.to_path if path.respond_to? :to_path - -- # Ensure -I beats a default gem -- # https://github.com/rubygems/rubygems/pull/1868 -- resolved_path = begin -- rp = nil -- load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths -- Gem.suffixes.each do |s| -- $LOAD_PATH[0...load_path_check_index].each do |lp| -- safe_lp = lp.dup.tap(&Gem::UNTAINT) -- begin -- if File.symlink? safe_lp # for backward compatibility -- next -+ if spec = Gem.find_unresolved_default_spec(path) -+ # Ensure -I beats a default gem -+ # https://github.com/rubygems/rubygems/pull/1868 -+ resolved_path = begin -+ rp = nil -+ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths -+ Gem.suffixes.each do |s| -+ $LOAD_PATH[0...load_path_check_index].each do |lp| -+ safe_lp = lp.dup.tap(&Gem::UNTAINT) -+ begin -+ if File.symlink? safe_lp # for backward compatibility -+ next -+ end -+ rescue SecurityError -+ RUBYGEMS_ACTIVATION_MONITOR.exit -+ raise - end -- rescue SecurityError -- RUBYGEMS_ACTIVATION_MONITOR.exit -- raise -- end - -- full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) -- if File.file?(full_path) -- rp = full_path -- break -+ full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) -+ if File.file?(full_path) -+ rp = full_path -+ break -+ end - end -+ break if rp - end -- break if rp -+ rp - end -- rp -- end - -- if resolved_path -- RUBYGEMS_ACTIVATION_MONITOR.exit -- return gem_original_require(resolved_path) -- end -- -- if spec = Gem.find_unresolved_default_spec(path) - begin - Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) - rescue Exception - RUBYGEMS_ACTIVATION_MONITOR.exit - raise -- end -+ end unless resolved_path - end - - # If there are no unresolved deps, then we can use just try -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index 9f2fe3439a..2b11e26dfe 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -45,6 +45,35 @@ def refute_require(path) - refute require(path), "'#{path}' was not yet required" - end - -+ def test_respect_loaded_features_caching_like_standard_require -+ dir = Dir.mktmpdir("test_require", @tempdir) -+ -+ lp1 = File.join dir, 'foo1' -+ foo1 = File.join lp1, 'foo.rb' -+ -+ FileUtils.mkdir_p lp1 -+ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" } -+ -+ lp = $LOAD_PATH.dup -+ -+ $LOAD_PATH.unshift lp1 -+ assert_require 'foo' -+ assert_equal "foo1", ::Object::HELLO -+ -+ lp2 = File.join dir, 'foo2' -+ foo2 = File.join lp2, 'foo.rb' -+ -+ FileUtils.mkdir_p lp2 -+ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" } -+ -+ $LOAD_PATH.unshift lp2 -+ refute_require 'foo' -+ assert_equal "foo1", ::Object::HELLO -+ ensure -+ $LOAD_PATH.replace lp -+ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO -+ end -+ - # Providing -I on the commandline should always beat gems - def test_dash_i_beats_gems - a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" - -From db872c7a18d616f4447bdcca3130be6db9e5cb03 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Sat, 23 May 2020 20:18:41 +0200 -Subject: [PATCH 5/5] Remove direct reference to PR - -The code is quite different now, so I think the link might be even -confusing. If you want to know more, use git history. ---- - lib/rubygems/core_ext/kernel_require.rb | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 81e37b98bf..115ae0cb50 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -41,7 +41,6 @@ def require(path) - - if spec = Gem.find_unresolved_default_spec(path) - # Ensure -I beats a default gem -- # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil - load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths diff --git a/rubygems-3.1.3-Improve-require.patch b/rubygems-3.1.3-Improve-require.patch deleted file mode 100644 index 2df5c4f..0000000 --- a/rubygems-3.1.3-Improve-require.patch +++ /dev/null @@ -1,92 +0,0 @@ -From c5197b2ab35ba389f48918e0c773b43b6dca2fa5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Fri, 7 Feb 2020 17:16:05 +0100 -Subject: [PATCH 1/3] Tweaks to get test passing more reliably - ---- - test/rubygems/test_require.rb | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb -index 7cffbfa7fe..67c55416d4 100644 ---- a/test/rubygems/test_require.rb -+++ b/test/rubygems/test_require.rb -@@ -567,18 +567,20 @@ def util_install_extension_file(name) - write_file File.join(@tempdir, "extconf.rb") do |io| - io.write <<-RUBY - require "mkmf" -+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||' - create_makefile("#{name}") - RUBY - end - - write_file File.join(@tempdir, "#{name}.c") do |io| - io.write <<-C -- #include - void Init_#{name}() { } - C - end - -- spec.files += ["extconf.rb", "#{name}.c"] -+ write_file File.join(@tempdir, "depend") -+ -+ spec.files += ["extconf.rb", "depend", "#{name}.c"] - - so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") - refute_path_exists so - -From 7bfd7319cd751837c3ccaf1d97b02846eaaf39d5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 11 Feb 2020 11:56:06 +0100 -Subject: [PATCH 2/3] Fix bug bug calculating $LOAD_PATH's to check in - `require` - -In `Gem.load_path_insert_index` is not set, we end up having -`$LOAD_PATH[0...-1]`, unintentionally skipping the last $LOAD_PATH entry -from the check. - -The correct thing to do in that case is to not even try since we have no -way of distinguisng default LOAD_PATH entries from those added with -I. ---- - lib/rubygems/core_ext/kernel_require.rb | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 369f2c743e..a8d170f13a 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -44,7 +44,10 @@ def require(path) - resolved_path = begin - rp = nil - Gem.suffixes.each do |s| -- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| -+ load_path_insert_index = Gem.load_path_insert_index -+ break unless load_path_insert_index -+ -+ $LOAD_PATH[0...load_path_insert_index].each do |lp| - safe_lp = lp.dup.tap(&Gem::UNTAINT) - begin - if File.symlink? safe_lp # for backward compatibility - -From 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Fri, 14 Feb 2020 02:03:04 +0100 -Subject: [PATCH 3/3] Exclude empty suffix from `-I` require loop - ---- - lib/rubygems/core_ext/kernel_require.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index a8d170f13a..9712fb6ac0 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,7 +43,7 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- Gem.suffixes.each do |s| -+ Gem.suffixes[1..-1].each do |s| - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - diff --git a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch deleted file mode 100644 index 463047c..0000000 --- a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 301e30bf97dd603ca81d52b90186908575c4ddf8 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Tue, 25 Feb 2020 15:01:44 +0100 -Subject: [PATCH] Revert "Exclude empty suffix from `-I` require loop" - -This reverts commit 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3. - -Technically, extensionless ruby files are valid ruby files that can be -required. For example, `bin/bundle` is sometimes required from other -binstubs even if it's also runnable directly. - -So, we should technically consider this kind of files too. ---- - lib/rubygems/core_ext/kernel_require.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb -index 9712fb6ac0..a8d170f13a 100644 ---- a/lib/rubygems/core_ext/kernel_require.rb -+++ b/lib/rubygems/core_ext/kernel_require.rb -@@ -43,7 +43,7 @@ def require(path) - # https://github.com/rubygems/rubygems/pull/1868 - resolved_path = begin - rp = nil -- Gem.suffixes[1..-1].each do |s| -+ Gem.suffixes.each do |s| - load_path_insert_index = Gem.load_path_insert_index - break unless load_path_insert_index - 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 79172c3..f1f97eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.3.tar.xz) = b755d418b3bab2f9f6a8893afd13869269f17065643dde78b9e85ae3538a6d0617893db6e9c3908e00a40c7577a5c912a7c822d8f245cdcfb857be76dfb66c1e +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