[packages/ruby/dev-3.4-rawhide] up to 3.4.9; follow rawhide spec - macros, patches, convetions; wip

mis mis at pld-linux.org
Mon Mar 16 17:37:47 CET 2026


commit 794fdf77d5ea6cd44e0e4f76ec144b9a22eb6a8e
Author: mis <mistoo at gmail.com>
Date:   Mon Mar 16 17:37:25 2026 +0100

    up to 3.4.9; follow rawhide spec - macros, patches, convetions; wip

 operating_system.rb                                |   8 +
 ...-2.1.0-Enable-configuration-of-archlibdir.patch |   0
 ...licated-paths-when-empty-version-string-i.patch |  77 ++
 ...ch => ruby-2.1.0-custom-rubygems-location.patch |   8 +-
 ...-version.patch => ruby-2.3.0-ruby_version.patch |  62 +-
 ruby-2.7.0-Initialize-ABRT-hook.patch              |  88 +++
 ruby-3.3.0-Disable-syntax-suggest-test-case.patch  |  23 +
 ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch       | 136 ++++
 ruby.spec                                          | 778 ++++++++++++++-------
 9 files changed, 874 insertions(+), 306 deletions(-)
---
diff --git a/ruby.spec b/ruby.spec
index 2aa17a4..37e551c 100644
--- a/ruby.spec
+++ b/ruby.spec
@@ -10,14 +10,13 @@
 %bcond_without	default_ruby	# use this Ruby as default system Ruby
 %bcond_without	dtrace		# disable tracing with dtrace
 %bcond_with	bootstrap	# build bootstrap version
-%bcond_with	tests		# build without tests
+%bcond_with	tests		# build with tests
 
-%define		rel		2
-%define		ruby_version	3.2
-%define		patchlevel	10
+%define		rel		1
+%define		ruby_version	3.4
+%define		patchlevel	9
 %define		pkg_version	%{ruby_version}.%{patchlevel}
 %define		ruby_suffix	%{!?with_default_ruby:%{ruby_version}}
-%define		doc_version	3_1_2
 %define		unicode_version	12.1.0
 %define		oname	ruby
 Summary:	Ruby - interpreted scripting language
@@ -36,41 +35,35 @@ Epoch:		1
 License:	(Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD
 Group:		Development/Languages
 # https://www.ruby-lang.org/en/downloads/
-Source0:	https://cache.ruby-lang.org/pub/ruby/%{ruby_version}/%{oname}-%{pkg_version}.tar.xz
-# Source0-md5:	48eba639bdc9bfb589450f8a6f91fad1
-Source2:	https://ruby-doc.org/downloads/%{oname}_%{doc_version}_stdlib_rdocs.tgz
-# Source2-md5:	d8b945c2da4f60d9ea2886e163f0203c
-Source3:	https://ruby-doc.org/downloads/%{oname}_%{doc_version}_core_rdocs.tgz
-# Source3-md5:	84f245aff74470bb90c69ecc8c8b7664
-%if 0
-Source50:	https://www.unicode.org/Public/%{unicode_version}/ucd/CaseFolding.txt
-# Source50-md5:	e3fbf2f626f10070000fe66f3a2ff5ef
-Source51:	https://www.unicode.org/Public/%{unicode_version}/ucd/CompositionExclusions.txt
-# Source51-md5:	263381d7b4b5e2d52a91e1bbbd4722d4
-Source52:	https://www.unicode.org/Public/%{unicode_version}/ucd/NormalizationTest.txt
-# Source52-md5:	aacb8a8acfc449d09136fe39f3f97cf1
-Source53:	https://www.unicode.org/Public/%{unicode_version}/ucd/SpecialCasing.txt
-# Source53-md5:	fea30f45a2f81ffa474fd984d297e2ea
-Source54:	https://www.unicode.org/Public/%{unicode_version}/ucd/UnicodeData.txt
-# Source54-md5:	dde25b1cf9bbb4ba1140ac12e4128b0b
-%endif
+Source0:	https://cache.ruby-lang.org/pub/ruby/%{ruby_version}/%{oname}-%{version}.tar.xz
 Source4:	rdoc.1
 Source5:	testrb.1
 Source6:	operating_system.rb
-Patch2:		fix-bison-invocation.patch
-#Patch3:		mkmf-verbose.patch
-Patch4:		strip-ccache.patch
-Patch5:		ruby-version.patch
-Patch6:		duplicated-paths.patch
-Patch9:		custom-rubygems-location.patch
-Patch10:	ruby-3.2.0-build-extension-libraries-in-bundled-gems.patch
-Patch12:	archlibdir.patch
+Patch0:		ruby-2.3.0-ruby_version.patch
+Patch1:		ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch
+Patch2:		ruby-2.1.0-Enable-configuration-of-archlibdir.patch
+Patch3:		strip-ccache.patch
+Patch4:		ruby-2.1.0-custom-rubygems-location.patch
+# The ABRT hook used to be initialized by preludes via following patches:
+# https://bugs.ruby-lang.org/issues/8566
+# https://bugs.ruby-lang.org/issues/15306
+# Unfortunately, due to https://bugs.ruby-lang.org/issues/16254
+# and especially since https://github.com/ruby/ruby/pull/2735
+# this would require boostrapping:
+# https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/
+# For now, load the ABRT hook via this simple patch:
+Patch6:		ruby-2.7.0-Initialize-ABRT-hook.patch
+# Disable syntax_suggest test suite, which tries to download its dependencies.
+# https://bugs.ruby-lang.org/issues/19297
+Patch9:		ruby-3.3.0-Disable-syntax-suggest-test-case.patch
+# Fix the tests using SHA-1 Probabilistic Signature Scheme (PSS) parameters.
+# https://github.com/ruby/openssl/pull/879
+Patch10:	ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch
 URL:		http://www.ruby-lang.org/
 BuildRequires:	autoconf >= 2.67
 BuildRequires:	automake
 BuildRequires:	bison >= 1.875
 BuildRequires:	db-devel
-BuildRequires:  gcc-c++
 BuildRequires:	gdbm-devel >= 1.8.3
 BuildRequires:	gmp-devel
 BuildRequires:	libffi-devel
@@ -109,54 +102,138 @@ BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 # hack: skip rubygem(ipaddr)
 %define	_noautoreq	ipaddr
 
-%define rubygems_ver 3.4.19
+# Bundled libraries versions
+%define rubygems_ver 3.6.9
 %define rubygems_molinillo_ver 0.8.0
-%define rubygems_optparse_ver 0.3.0
-%define rubygems_tsort_ver 0.1.0
+%define rubygems_net_http_ver 0.6.0
+%define rubygems_net_protocol_ver 0.2.2
+%define rubygems_optparse_ver 0.6.0
+%define rubygems_resolv_ver 0.6.0
+%define rubygems_securerandom_ver 0.4.1
+%define rubygems_timeout_ver 0.4.3
+%define rubygems_tsort_ver 0.2.0
+%define rubygems_uri_ver 1.0.4
 
 # Default gems.
-%define bundler_ver 2.4.19
-%define bundler_connection_pool_ver 2.3.0
-%define bundler_fileutils_ver 1.7.0
+%define bundler_ver 2.6.9
+%define bundler_connection_pool_ver 2.5.0
+%define bundler_fileutils_ver 1.7.3
+%define bundler_net_http_persistent_ver 4.0.4
 %define bundler_pub_grub_ver 0.5.0
-%define bundler_net_http_persistent_ver 4.0.1
-%define bundler_thor_ver 1.2.1
-%define bundler_tsort_ver 0.1.1
-%define bundler_uri_ver 0.12.1
-
-%define bigdecimal_ver 3.1.3
-%define did_you_mean_ver 1.6.3
-%define erb_ver 4.0.2
-%define io_console_ver 0.6.0
-%define irb_ver 1.6.2
-%define json_ver 2.6.3
-%define openssl_ver 3.1.0
-%define psych_ver 5.0.1
-%define racc_ver 1.6.2
-%define rdoc_ver 6.5.1.1
-%define stringio_ver 3.0.4
+%define bundler_securerandom_ver 0.4.1
+%define bundler_thor_ver 1.3.2
+%define bundler_tsort_ver 0.2.0
+%define bundler_uri_ver 1.0.4
+
+
+%define benchmark_ver 0.4.0
+%define cgi_ver 0.4.2
+%define date_ver 3.4.1
+%define delegate_ver 0.4.0
+%define did_you_mean_ver 2.0.0
+%define digest_ver 3.2.0
+%define english_ver 0.8.0
+%define erb_ver 4.0.4
+%define error_highlight_ver 0.7.0
+%define etc_ver 1.4.6
+%define fcntl_ver 1.2.0
+%define fiddle_ver 1.1.6
+%define fileutils_ver 1.7.3
+%define find_ver 0.2.0
+%define forwardable_ver 1.3.3
+%define io_console_ver 0.8.1
+%define io_nonblock_ver 0.3.2
+%define io_wait_ver 0.3.2
+%define ipaddr_ver 1.2.7
+%define irb_ver 1.14.3
+%define json_ver 2.9.1
+%define logger_ver 1.6.4
+%define net_http_ver 0.6.0
+%define net_protocol_ver 0.2.2
+%define open_uri_ver 0.5.0
+%define open3_ver 0.2.1
+%define openssl_ver 3.3.1
+%define optparse_ver 0.6.0
+%define ostruct_ver 0.6.1
+%define pathname_ver 0.4.0
+%define pp_ver 0.6.2
+%define prettyprint_ver 0.2.0
+%define prism_ver 1.5.2
+%define pstore_ver 0.1.4
+%define psych_ver 5.2.2
+%define rdoc_ver 6.14.0
+%define readline_ver 0.0.4
+%define reline_ver 0.6.0
+%define resolv_ver 0.6.2
+%define ruby2_keywords_ver 0.0.5
+%define securerandom_ver 0.4.1
+%define set_ver 1.1.1
+%define shellwords_ver 0.2.2
+%define singleton_ver 0.3.0
+%define stringio_ver 3.1.2
+%define strscan_ver 3.1.2
+%define syntax_suggest_ver 2.0.2
+%define tempfile_ver 0.3.1
+%define time_ver 0.4.1
+%define timeout_ver 0.4.3
+%define tmpdir_ver 0.3.1
+%define tsort_ver 0.2.0
+%define un_ver 0.3.0
+%define uri_ver 1.0.4
+%define weakref_ver 0.1.3
+%define win32_registry_ver 0.1.0
+%define win32ole_ver 1.9.1
+%define yaml_ver 0.4.0
+%define zlib_ver 3.2.1
 
 # Bundled gems.
-%define minitest_ver 5.25.1
-%define power_assert_ver 2.0.3
-%define rake_ver 13.0.6
-%define test_unit_ver 3.5.7
+%define abbrev_ver 0.1.2
+%define base64_ver 0.2.0
+%define bigdecimal_ver 3.1.8
+%define csv_ver 3.3.2
+%define debug_ver 1.11.0
+%define drb_ver 2.2.1
+%define getoptlong_ver 0.2.1
+%define matrix_ver 0.4.2
+%define minitest_ver 5.25.4
+%define mutex_m_ver 0.3.0
+%define net_ftp_ver 0.3.8
+%define net_imap_ver 0.5.8
+%define net_pop_ver 0.1.2
+%define net_smtp_ver 0.5.1
+%define nkf_ver 0.2.0
+%define observer_ver 0.1.2
+%define power_assert_ver 2.0.5
+%define prime_ver 0.1.3
+%define racc_ver 1.8.1
+%define rake_ver 13.2.1
+%define rbs_ver 3.8.0
+%define repl_type_completor_ver 0.1.9
+%define resolv_replace_ver 0.1.1
 %define rexml_ver 3.4.4
+%define rinda_ver 0.2.0
 %define rss_ver 0.3.1
-%define net_ftp_ver 0.2.1
-%define net_imap_ver 0.3.9
-%define net_pop_ver 0.1.2
-%define net_smtp_ver 0.3.4
-%define matrix_ver 0.4.2
-%define prime_ver 0.1.2
-%define rbs_ver 2.8.2
-%define typeprof_ver 0.21.3
-%define debug_ver 1.7.1
+%define syslog_ver 0.2.0
+%define test_unit_ver 3.6.7
+%define typeprof_ver 0.30.1
 
+# Bundled nkf version
+%global bundled_nkf_ver 2.1.5
 
 %define	ruby_ridir		%{_datadir}/ri/system
 %define	gem_dir			%{_datadir}/gems
-%define	gem_libdir		%{_libdir}/gems/%{oname}
+%define	gem_archdir		%{_libdir}/gems/%{oname}
+
+# Fedora macros
+%define gem_version() %{?1:%{expand:%{%{gsub %{1} - _}_ver}}}%{!?1:%{version}}
+%define gem_name_version() %{?1}%{!?1:%{gem_name}}-%{gem_version %{?1}}
+%define gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}}
+%define gem_libdir() %{gem_instdir %{?1}}/lib
+%define gem_extdir_mri() %{gem_archdir}/%{gem_name_version %{?1}}
+%define gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec
+%define gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem
+%define gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}}
+%define gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb
 
 # location where rubygems is installed
 %define	rubygems_dir		%{ruby_libdir}
@@ -252,19 +329,6 @@ Ruby development libraries.
 %description devel -l pl.UTF-8
 Biblioteki programistyczne interpretera języka Ruby.
 
-%package doc
-Summary:	Ruby HTML documentation
-Summary(pl.UTF-8):	Dokumentacja HTML do Ruby
-Group:		Documentation
-BuildArch:	noarch
-
-%description doc
-Ruby HTML documentation: FAQ, guide, core and standard library.
-
-%description doc -l pl.UTF-8
-Dokumentacja HTML do Ruby: FAQ, przewodnik, dokumentacja dla core i
-stdlib.
-
 %package doc-ri
 Summary:	Ruby ri documentation
 Summary(pl.UTF-8):	Dokumentacja Ruby w formacie ri
@@ -527,6 +591,16 @@ programowaniem ekstremalnym, dla szkieletu SUnit dla Smalltalka.
 Szkielet pozwala na pisanie testów, sprawdzanie wyników i automatyczne
 testowanie w Rubym.
 
+%package racc
+Summary:	Racc is a LALR(1) parser generator
+Version:	%{racc_ver}
+License:	Ruby OR BSD-2-Clause
+URL:		https://github.com/ruby/racc
+
+%description racc
+Racc is a LALR(1) parser generator. It is written in Ruby itself, and
+generates Ruby program.
+
 %package rbs
 Summary:	Type signature for Ruby
 Version:	%{rbs_ver}
@@ -662,39 +736,41 @@ Summary:	Bundled gems which are part of Ruby StdLib
 Requires:	ruby-rubygems >= %{rubygems_ver}
 # Runtime dependency of rubygem(debug).
 Recommends:	rubygem(irb) >= %{irb_ver}
+Provides:	rubygem(abbrev) = %{abbrev_ver}
+Provides:	rubygem(base64) = %{base64_ver}
+Provides:	rubygem(csv) = %{csv_ver}
 Provides:	rubygem(debug) = %{debug_ver}
+Provides:	rubygem(drb) = %{drb_ver}
+Provides:	rubygem(getoptlong) = %{getoptlong_ver}
 Provides:	rubygem(matrix) = %{matrix_ver}
+Provides:	rubygem(mutex_m) = %{mutex_m_ver}
 Provides:	rubygem(net-ftp) = %{net_ftp_ver}
 Provides:	rubygem(net-imap) = %{net_imap_ver}
 Provides:	rubygem(net-pop) = %{net_pop_ver}
 Provides:	rubygem(net-smtp) = %{net_smtp_ver}
+Provides:	rubygem(nkf) = %{bundled_nkf_ver}
+Provides:	rubygem(nkf) = %{nkf_ver}
+Provides:	rubygem(observer) = %{observer_ver}
 Provides:	rubygem(prime) = %{prime_ver}
+Provides:	rubygem(repl_type_completor) = %{repl_type_completor_ver}
+Provides:	rubygem(resolv-replace) = %{resolv_replace_ver}
+Provides:	rubygem(rinda) = %{rinda_ver}
+Provides:	rubygem(syslog) = %{syslog_ver}
 
 %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.
 
 %prep
-%setup -q -n %{oname}-%{pkg_version} -a2 -a3
+%setup -q -n %{oname}-%{pkg_version}
+%patch 0 -p1
+%patch 1 -p1
 %patch 2 -p1
-#%patch3 -p1
+%patch 3 -p1
 %patch 4 -p1
-%patch 5 -p1
 %patch 6 -p1
 %patch 9 -p1
-
-# (from rawhide) Once the upstream tarball contains the files on the right place, this code
-# won't be necessary. This should happen at the same moment when the patch10
-# is not needed anymore.
-##mkdir .bundle/specifications
-#find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} +
-#%patch10 -p1
-%patch 12 -p1
-
-%if 0
-install -d enc/unicode/data/%{unicode_version}
-cp -p %{SOURCE50} %{SOURCE51} %{SOURCE52} %{SOURCE53} %{SOURCE54} enc/unicode/data/%{unicode_version}
-%endif
+%patch 10 -p1
 
 # must be regenerated with new bison
 %{__rm} parse.{c,h}
@@ -711,7 +787,7 @@ find '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
 
 find -type f '(' -name '*.rb' -o -name '*.cgi' -o -name '*.test' \
 	-o -name 'ruby.1' -o -name '*.html' -o -name '*.tcl' ')' \
-	| xargs %{__sed} -i 's,/usr/local/bin/,%{_bindir}/,'
+| xargs %{__sed} -i 's,%{_prefix}/local/bin/,%{_bindir}/,'
 
 %if %{with bootstrap}
 # avoid regeneration, needs iostring module
@@ -749,13 +825,9 @@ cp -f /usr/share/automake/config.sub .
 	--with-sitearchhdrdir='$(sitehdrdir)/$(arch)' \
 	--with-vendorarchhdrdir='$(vendorhdrdir)/$(arch)' \
 	--without-compress-debug-sections \
-        --enable-mkmf-verbose \
+		--enable-mkmf-verbose \
 %ifarch %{x8664} aarch64
-        --enable-yjit \
-%endif
-%ifarch x32
-	--disable-yjit \
-	--with-coroutine=ucontext \
+		--enable-yjit \
 %endif
 	--enable-multiarch \
 	--enable-shared \
@@ -795,10 +867,6 @@ touch abrt.rb
 # http://bugs.ruby-lang.org/issues/8997
 sed -i '/def test_hup_me/,/end if Process.respond_to/ s/^/#/' test/ruby/test_signal.rb
 
-# Fix "Could not find 'minitest'" error.
-# http://bugs.ruby-lang.org/issues/9259
-sed -i "/^  gem 'minitest', '~> 4.0'/ s/^/#/" lib/rubygems/test_case.rb
-
 # Segmentation fault.
 # https://bugs.ruby-lang.org/issues/9198
 sed -i '/^  def test_machine_stackoverflow/,/^  end/ s/^/#/' test/ruby/test_exception.rb
@@ -817,6 +885,7 @@ sed -i '/def test_ctx_server_session_cb$/,/^  end$/ s/^/#/' test/openssl/test_ss
 %endif
 
 %install
+
 rm -rf $RPM_BUILD_ROOT
 install -d $RPM_BUILD_ROOT{%{ruby_rdocdir},%{ruby_ridir}} \
 	$RPM_BUILD_ROOT%{ruby_vendorarchdir} \
@@ -825,18 +894,25 @@ install -d $RPM_BUILD_ROOT{%{ruby_rdocdir},%{ruby_ridir}} \
 
 
 %{__make} install %{?with_doc:install-doc -j1} \
-	DESTDIR=$RPM_BUILD_ROOT
+ DESTDIR=$RPM_BUILD_ROOT
+
+# `ruby` executable is placed in some strange directory
+# https://bugs.ruby-lang.org/issues/20800
+# https://github.com/ruby/ruby/pull/12043
+target_dir=$(./miniruby -I. -rrbconfig -e 'puts RbConfig::CONFIG["config_target"]')
+mv $RPM_BUILD_ROOT%{_exec_prefix}/$target_dir/bin/%{name} $RPM_BUILD_ROOT%{_bindir}/
 
+# FIXED?
 # Version is empty if --with-ruby-version is specified.
 # http://bugs.ruby-lang.org/issues/7807
-sed -i -e 's/Version: \${ruby_version}/Version: %{ruby_version}/' $RPM_BUILD_ROOT%{_pkgconfigdir}/%{oname}-%{ruby_version}.pc
+#sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' $RPM_BUILD_ROOT%{_pkgconfigdir}/%{oname}-%{ruby_version}.pc
 
 # Kill bundled certificates, as they should be part of ca-certificates.
-for cert in \
-	GlobalSignRootCA.pem \
-; do
-	%{__rm} $RPM_BUILD_ROOT%{rubygems_dir}/rubygems/ssl_certs/*/$cert
+for cert in GlobalSignRootCA.pem GlobalSignRootCA_R3.pem; do \
+    %{__rm} $RPM_BUILD_ROOT%{rubygems_dir}/rubygems/ssl_certs/*/$cert
 done
+# Ensure there is not forgotten any certificate.
+##test ! "$(ls -A $RPM_BUILD_ROOT%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)"
 
 install -d $RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{pkg_version}
 cp -Rf sample/* $RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{pkg_version}
@@ -851,6 +927,7 @@ gem_dir=$(./miniruby -Ilib -I. -I.ext/common ./tool/runruby.rb -- --disable-gems
 # Move gems root into common directory, out of Ruby directory structure.
 install -d $RPM_BUILD_ROOT%{gem_dir}
 %{__mv} $RPM_BUILD_ROOT${gem_dir}/{gems,specifications} $RPM_BUILD_ROOT%{gem_dir}
+%{__rm} $RPM_BUILD_ROOT${gem_dir}/cache/*.gem
 
 # Move bundled rubygems to %gem_dir
 # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems
@@ -858,79 +935,73 @@ install -d $RPM_BUILD_ROOT%{gem_dir}
 # NOTE: when making symlinks, do not symlink paths that could be directories,
 # as there may came files from other packages as well. actually, unlikely as
 # the links to got system dir and only ruby may package there (other distro
-# packages should go to vendor dirs)
-%if 0
-install -d $RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/rake* $RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/lib
-ln -s %{gem_dir}/gems/rake-%{rake_ver}/lib/rake $RPM_BUILD_ROOT%{ruby_libdir}
-ln -s %{gem_dir}/gems/rake-%{rake_ver}/lib/rake.rb $RPM_BUILD_ROOT%{ruby_libdir}
-%{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/rake-%{rake_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-%endif
-
+# packages should go to vendor dirs)%
 install -d $RPM_BUILD_ROOT%{gem_dir}/gems/rdoc-%{rdoc_ver}/lib
 %{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/rdoc* $RPM_BUILD_ROOT%{gem_dir}/gems/rdoc-%{rdoc_ver}/lib
-ln -s %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc $RPM_BUILD_ROOT%{ruby_libdir}
-ln -s %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc.rb $RPM_BUILD_ROOT%{ruby_libdir}
+ln -sr %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc $RPM_BUILD_ROOT%{ruby_libdir}
+ln -sr %{gem_dir}/gems/rdoc-%{rdoc_ver}/lib/rdoc.rb $RPM_BUILD_ROOT%{ruby_libdir}
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/rdoc-%{rdoc_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
 
-install -d $RPM_BUILD_ROOT%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib
-install -d $RPM_BUILD_ROOT%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal
-touch $RPM_BUILD_ROOT%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/gem.build_complete
-%{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/bigdecimal $RPM_BUILD_ROOT%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal.so $RPM_BUILD_ROOT%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal $RPM_BUILD_ROOT%{ruby_libdir}/bigdecimal
-ln -s %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal.so $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal.so
-#install -d $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal
+ln -sr %{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal $RPM_BUILD_ROOT%{ruby_libdir}/bigdecimal
+ln -sr %{gem_archdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal.so $RPM_BUILD_ROOT%{ruby_libarchdir}/bigdecimal.so
 
 install -d $RPM_BUILD_ROOT%{gem_dir}/gems/io-console-%{io_console_ver}/lib
-install -d $RPM_BUILD_ROOT%{gem_libdir}/io-console-%{io_console_ver}/lib/io
-touch $RPM_BUILD_ROOT%{gem_libdir}/io-console-%{io_console_ver}/gem.build_complete
+install -d $RPM_BUILD_ROOT%{gem_archdir}/io-console-%{io_console_ver}/lib/io
+touch $RPM_BUILD_ROOT%{gem_archdir}/io-console-%{io_console_ver}/gem.build_complete
 %{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/io $RPM_BUILD_ROOT%{gem_dir}/gems/io-console-%{io_console_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so $RPM_BUILD_ROOT%{gem_libdir}/io-console-%{io_console_ver}/lib/io
+%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so $RPM_BUILD_ROOT%{gem_archdir}/io-console-%{io_console_ver}/lib/io
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/io-console-%{io_console_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-ln -s %{gem_dir}/gems/io-console-%{io_console_ver}/lib/io $RPM_BUILD_ROOT%{ruby_libdir}/io
-ln -s %{gem_libdir}/io-console-%{io_console_ver}/lib/io/console.so $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so
+ln -sr %{gem_dir}/gems/io-console-%{io_console_ver}/lib/io $RPM_BUILD_ROOT%{ruby_libdir}/io
+ln -sr %{gem_archdir}/io-console-%{io_console_ver}/lib/io/console.so $RPM_BUILD_ROOT%{ruby_libarchdir}/io/console.so
 
 install -d $RPM_BUILD_ROOT%{gem_dir}/gems/json-%{json_ver}/lib
-install -d $RPM_BUILD_ROOT%{gem_libdir}/json-%{json_ver}/lib
-touch $RPM_BUILD_ROOT%{gem_libdir}/json-%{json_ver}/gem.build_complete
+install -d $RPM_BUILD_ROOT%{gem_archdir}/json-%{json_ver}/lib
+touch $RPM_BUILD_ROOT%{gem_archdir}/json-%{json_ver}/gem.build_complete
 %{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/json* $RPM_BUILD_ROOT%{gem_dir}/gems/json-%{json_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/json $RPM_BUILD_ROOT%{gem_libdir}/json-%{json_ver}/lib
+%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/json $RPM_BUILD_ROOT%{gem_archdir}/json-%{json_ver}/lib
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/json-%{json_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-ln -s %{gem_dir}/gems/json-%{json_ver}/lib/json $RPM_BUILD_ROOT%{ruby_libdir}/json
-ln -s %{gem_dir}/gems/json-%{json_ver}/lib/json.rb $RPM_BUILD_ROOT%{ruby_libdir}/json.rb
+ln -sr %{gem_dir}/gems/json-%{json_ver}/lib/json $RPM_BUILD_ROOT%{ruby_libdir}/json
+ln -sr %{gem_dir}/gems/json-%{json_ver}/lib/json.rb $RPM_BUILD_ROOT%{ruby_libdir}/json.rb
 install -d $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
-ln -s %{gem_libdir}/json-%{json_ver}/lib/json/ext/parser.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
-ln -s %{gem_libdir}/json-%{json_ver}/lib/json/ext/generator.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
+ln -sr %{gem_archdir}/json-%{json_ver}/lib/json/ext/parser.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
+ln -sr %{gem_archdir}/json-%{json_ver}/lib/json/ext/generator.so $RPM_BUILD_ROOT%{ruby_libarchdir}/json/ext
 
-ln -s %{gem_dir}/gems/minitest-%{minitest_ver}/lib/minitest $RPM_BUILD_ROOT%{ruby_libdir}
+ln -sr %{gem_dir}/gems/minitest-%{minitest_ver}/lib/minitest $RPM_BUILD_ROOT%{ruby_libdir}
 
 install -d $RPM_BUILD_ROOT%{ruby_libdir}/test
-ln -s %{gem_dir}/gems/test-unit-%{test_unit_ver}/lib/test/unit $RPM_BUILD_ROOT%{ruby_libdir}/test
+ln -sr %{gem_dir}/gems/test-unit-%{test_unit_ver}/lib/test/unit $RPM_BUILD_ROOT%{ruby_libdir}/test
 
 install -d $RPM_BUILD_ROOT%{gem_dir}/gems/psych-%{psych_ver}/lib
-install -d $RPM_BUILD_ROOT%{gem_libdir}/psych-%{psych_ver}/lib
-touch $RPM_BUILD_ROOT%{gem_libdir}/psych-%{psych_ver}/gem.build_complete
+install -d $RPM_BUILD_ROOT%{gem_archdir}/psych-%{psych_ver}/lib
+touch $RPM_BUILD_ROOT%{gem_archdir}/psych-%{psych_ver}/gem.build_complete
 %{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/psych* $RPM_BUILD_ROOT%{gem_dir}/gems/psych-%{psych_ver}/lib
-%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/psych.so $RPM_BUILD_ROOT%{gem_libdir}/psych-%{psych_ver}/lib/
+%{__mv} $RPM_BUILD_ROOT%{ruby_libarchdir}/psych.so $RPM_BUILD_ROOT%{gem_archdir}/psych-%{psych_ver}/lib/
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/psych-%{psych_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-ln -s %{gem_dir}/gems/psych-%{psych_ver}/lib/psych $RPM_BUILD_ROOT%{ruby_libdir}/psych
-ln -s %{gem_dir}/gems/psych-%{psych_ver}/lib/psych.rb $RPM_BUILD_ROOT%{ruby_libdir}/psych.rb
-ln -s %{gem_libdir}/psych-%{psych_ver}/lib/psych.so $RPM_BUILD_ROOT%{ruby_archdir}/psych.so
+ln -sr %{gem_dir}/gems/psych-%{psych_ver}/lib/psych $RPM_BUILD_ROOT%{ruby_libdir}/psych
+ln -sr %{gem_dir}/gems/psych-%{psych_ver}/lib/psych.rb $RPM_BUILD_ROOT%{ruby_libdir}/psych.rb
+ln -sr %{gem_archdir}/psych-%{psych_ver}/lib/psych.so $RPM_BUILD_ROOT%{ruby_archdir}/psych.so
+
+#install -d $RPM_BUILD_ROOT%{gem_libdir bundler}
+#%{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/bundler.rb $RPM_BUILD_ROOT%{gem_libdir bundler}
+#%{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/bundler $RPM_BUILD_ROOT%{gem_libdir bundler}
+#%{__mv} $RPM_BUILD_ROOT%{gem_spec -d bundler} $RPM_BUILD_ROOT%{gem_spec bundler}
 
 install -d $RPM_BUILD_ROOT%{gem_dir}/gems/bundler-%{bundler_ver}/lib
-install -d $RPM_BUILD_ROOT%{gem_libdir}/bundler-%{bundler_ver}/lib
+install -d $RPM_BUILD_ROOT%{gem_archdir}/bundler-%{bundler_ver}/lib
 %{__mv} $RPM_BUILD_ROOT%{ruby_libdir}/bundler* $RPM_BUILD_ROOT%{gem_dir}/gems/bundler-%{bundler_ver}/lib
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/specifications/default/bundler-%{bundler_ver}.gemspec $RPM_BUILD_ROOT%{gem_dir}/specifications
-ln -s %{gem_dir}/gems/bundler-%{bundler_ver}/lib/bundler $RPM_BUILD_ROOT%{ruby_libdir}/bundler
-ln -s %{gem_dir}/gems/bundler-%{bundler_ver}/lib/bundler.rb $RPM_BUILD_ROOT%{ruby_libdir}/bundler.rb
+ln -sr %{gem_dir}/gems/bundler-%{bundler_ver}/lib/bundler $RPM_BUILD_ROOT%{ruby_libdir}/bundler
+ln -sr %{gem_dir}/gems/bundler-%{bundler_ver}/lib/bundler.rb $RPM_BUILD_ROOT%{ruby_libdir}/bundler.rb
 
 # Move the binary extensions into proper place (if no gem has binary extension,
 # the extensions directory might be empty).
-find $RPM_BUILD_ROOT${gem_dir}/extensions/*-%{_target_os}/%{ruby_version}.*/* -maxdepth 0 \
+find ${RPM_BUILD_ROOT}${gem_dir}/extensions/*-%{_target_os}/%{ruby_version}.*/* -maxdepth 0 \
   -exec mv '{}' $RPM_BUILD_ROOT%{_libdir}/gems/%{name}/ \; \
-  || echo "No gem binary extensions to move."
+    || echo "No gem binary extensions to move."
+
+# Remove the extension sources and library copies from `lib` dir.
+find $RPM_BUILD_ROOT%{gem_dir}/gems/*/ext -maxdepth 0 -exec rm -rf '{}' +
+find $RPM_BUILD_ROOT%{gem_dir}/gems/*/lib -name \*.so -delete
 
 # replace default irb with its not gemified version
 %{__mv} $RPM_BUILD_ROOT%{gem_dir}/gems/irb-%{irb_ver}/exe/irb $RPM_BUILD_ROOT%{_bindir}/irb%{ruby_suffix}
@@ -970,34 +1041,25 @@ for s in rake-%{rake_ver}.gemspec rdoc-%{rdoc_ver}.gemspec json-%{json_ver}.gems
 done
 
 %{__sed} -i -e '1s,/usr/bin/env ruby,/usr/bin/ruby,' \
- 	$RPM_BUILD_ROOT%{_bindir}/irb \
-	$RPM_BUILD_ROOT%{ruby_libdir}/abbrev.rb \
-	$RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/exe/rake \
-	$RPM_BUILD_ROOT%{gem_dir}/gems/rdoc-%{rdoc_ver}/exe/{rdoc,ri} \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/bundler-%{bundler_ver}/libexec/{bundle,bundler} \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/debug-%{debug_ver}/exe/rdbg \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/rbs-%{rbs_ver}/exe/rbs \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/erb-%{erb_ver}/libexec/erb \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/typeprof-%{typeprof_ver}/exe/typeprof \
-        $RPM_BUILD_ROOT%{gem_dir}/gems/syntax_suggest-*/exe/syntax_suggest \
-	$RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{pkg_version}/{cal,test,time,uumerge}.rb \
-	$RPM_BUILD_ROOT%{_examplesdir}/%{oname}-%{pkg_version}/{drb,logger,openssl,ripper}/*.rb
+        $(find $RPM_BUILD_ROOT -type f | xargs grep '/usr/bin/env ruby' 2>/dev/null | cut -f1 -d:)
 
 # gem non library files
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/debug-%{debug_ver}/{[A-Z]*,misc,exts.mk}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/matrix-%{matrix_ver}/[A-Z]*
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/minitest-%{minitest_ver}/{[A-Z]*,test}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/net-ftp-%{net_ftp_ver}/[A-Z]*
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/net-pop-%{net_pop_ver}/[A-Z]*
-%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/net-imap-%{net_imap_ver}/{[A-Z]*,docs,benchmarks}
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/net-imap-%{net_imap_ver}/{[A-Z]*,docs}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/net-smtp-%{net_smtp_ver}/[A-Z]*
-%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/prime-%{prime_ver}/{[A-Z]*,bin}
-%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/debug-%{debug_ver}/{[A-Z]*,misc,ext}
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/nkf-%{nkf_ver}/exts.mk
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/power_assert-%{power_assert_ver}/[A-Z]*
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/prime-%{prime_ver}/[A-Z]*
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/racc-%{racc_ver}/{[A-Z]*,doc}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/rake-%{rake_ver}/{[A-Z]*,doc}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/test-unit-%{test_unit_ver}/{[A-Z]*,doc,sample}
-%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/racc-%{racc_ver}/bin $RPM_BUILD_ROOT%{_bindir}/racc # racc binary can be installed from ruby-racc package
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/rexml-%{rexml_ver}/{[A-Z]*,doc}
 %{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/rss-%{rss_ver}/[A-Z]*
+%{__rm} -r $RPM_BUILD_ROOT%{gem_dir}/gems/syslog-%{syslog_ver}/{[A-Z]*,exts.mk}
 
 %if %{without batteries}
 # packaged separately
@@ -1014,7 +1076,6 @@ done
 %if %{with doc}
 # too much .ri
 %{__rm} $RPM_BUILD_ROOT%{ruby_ridir}/cache.ri
-%{__rm} $RPM_BUILD_ROOT%{ruby_ridir}/win32/page-*.ri
 %endif
 
 %clean
@@ -1027,8 +1088,8 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %doc NEWS.md LEGAL BSDL README.md README.EXT ChangeLog
 %attr(755,root,root) %{_bindir}/ruby%{ruby_suffix}
-%attr(755,root,root) %{_libdir}/libruby.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libruby.so.%{ruby_version}
+%{_libdir}/libruby.so.*.*.*
+%ghost %{_libdir}/libruby.so.%{ruby_version}
 %{_mandir}/man1/ruby%{ruby_suffix}.1*
 
 %dir %{_libdir}/%{oname}
@@ -1050,7 +1111,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files devel
 %defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libruby.so
+%{_libdir}/libruby.so
 %{_includedir}/%{oname}-%{ruby_version}
 %{_pkgconfigdir}/%{oname}-%{ruby_version}.pc
 %{ruby_libdir}/mkmf.rb
@@ -1106,13 +1167,13 @@ rm -rf $RPM_BUILD_ROOT
 %dir %{ruby_archdir}/json/ext
 %attr(755,root,root) %{ruby_archdir}/json/ext/*.so
 
-%dir %{gem_libdir}/json-%{json_ver}
-%{gem_libdir}/json-%{json_ver}/gem.build_complete
-%dir %{gem_libdir}/json-%{json_ver}/lib
-%dir %{gem_libdir}/json-%{json_ver}/lib/json
-%dir %{gem_libdir}/json-%{json_ver}/lib/json/ext
-%attr(755,root,root) %{gem_libdir}/json-%{json_ver}/lib/json/ext/generator.so
-%attr(755,root,root) %{gem_libdir}/json-%{json_ver}/lib/json/ext/parser.so
+%dir %{gem_archdir}/json-%{json_ver}
+%{gem_archdir}/json-%{json_ver}/gem.build_complete
+%dir %{gem_archdir}/json-%{json_ver}/lib
+%dir %{gem_archdir}/json-%{json_ver}/lib/json
+%dir %{gem_archdir}/json-%{json_ver}/lib/json/ext
+%{gem_archdir}/json-%{json_ver}/lib/json/ext/generator.so
+%{gem_archdir}/json-%{json_ver}/lib/json/ext/parser.so
 
 %{gem_dir}/gems/json-%{json_ver}
 %{gem_dir}/specifications/json-%{json_ver}.gemspec
@@ -1137,12 +1198,28 @@ rm -rf $RPM_BUILD_ROOT
 %{gem_dir}/specifications/test-unit-%{test_unit_ver}.gemspec
 %{_mandir}/man1/testrb%{ruby_suffix}.1*
 
+%files racc
+%defattr(644,root,root,755)
+%dir %{gem_instdir racc}
+%attr(755,root,root) %{_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_instdir racc}/lib
+%{gem_spec racc}
+
 %files rbs
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_bindir}/rbs
-%dir %{gem_libdir}/rbs-%{rbs_ver}
-%{gem_libdir}/rbs-%{rbs_ver}/gem.build_complete
-%attr(755,root,root) %{gem_libdir}/rbs-%{rbs_ver}/rbs_extension.so
+%dir %{gem_archdir}/rbs-%{rbs_ver}
+%{gem_archdir}/rbs-%{rbs_ver}/gem.build_complete
+%attr(755,root,root) %{gem_archdir}/rbs-%{rbs_ver}/rbs_extension.so
 %{gem_dir}/gems/rbs-%{rbs_ver}
 %exclude %{gem_dir}/gems/rbs-%{rbs_ver}/.*
 %{gem_dir}/specifications/rbs-%{rbs_ver}.gemspec
@@ -1156,23 +1233,20 @@ rm -rf $RPM_BUILD_ROOT
 
 %files bigdecimal
 %defattr(644,root,root,755)
-%{gem_dir}/gems/bigdecimal-%{bigdecimal_ver}
-%dir %{gem_libdir}/bigdecimal-%{bigdecimal_ver}
-%dir %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib
-%{gem_libdir}/bigdecimal-%{bigdecimal_ver}/gem.build_complete
-%attr(755,root,root) %{gem_libdir}/bigdecimal-%{bigdecimal_ver}/lib/bigdecimal.so
-%{ruby_libdir}/bigdecimal.rb
-%{ruby_libdir}/bigdecimal
-%{gem_dir}/specifications/bigdecimal-%{bigdecimal_ver}.gemspec
+%{gem_instdir bigdecimal}
+%{gem_extdir_mri bigdecimal}
+%{gem_spec bigdecimal}
+# FIXME: is this symlink really needed?
+%{ruby_archdir}/bigdecimal.so
 
 %files io-console
 %defattr(644,root,root,755)
 %{gem_dir}/gems/io-console-%{io_console_ver}
-%dir %{gem_libdir}/io-console-%{io_console_ver}
-%{gem_libdir}/io-console-%{io_console_ver}/gem.build_complete
-%dir %{gem_libdir}/io-console-%{io_console_ver}/lib
-%dir %{gem_libdir}/io-console-%{io_console_ver}/lib/io
-%attr(755,root,root) %{gem_libdir}/io-console-%{io_console_ver}/lib/io/console.so
+%dir %{gem_archdir}/io-console-%{io_console_ver}
+%{gem_archdir}/io-console-%{io_console_ver}/gem.build_complete
+%dir %{gem_archdir}/io-console-%{io_console_ver}/lib
+%dir %{gem_archdir}/io-console-%{io_console_ver}/lib/io
+%{gem_archdir}/io-console-%{io_console_ver}/lib/io/console.so
 %{gem_dir}/specifications/io-console-%{io_console_ver}.gemspec
 
 %files psych
@@ -1181,10 +1255,10 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{ruby_archdir}/psych.so
 %{gem_dir}/gems/psych-%{psych_ver}
 %{ruby_libdir}/psych
-%dir %{gem_libdir}/psych-%{psych_ver}
-%{gem_libdir}/psych-%{psych_ver}/gem.build_complete
-%dir %{gem_libdir}/psych-%{psych_ver}/lib
-%attr(755,root,root) %{gem_libdir}/psych-%{psych_ver}/lib/psych.so
+%dir %{gem_archdir}/psych-%{psych_ver}
+%{gem_archdir}/psych-%{psych_ver}/gem.build_complete
+%dir %{gem_archdir}/psych-%{psych_ver}/lib
+%{gem_archdir}/psych-%{psych_ver}/lib/psych.so
 %{gem_dir}/specifications/psych-%{psych_ver}.gemspec
 
 %files rexml
@@ -1201,80 +1275,238 @@ rm -rf $RPM_BUILD_ROOT
 
 %files bundled-gems
 %defattr(644,root,root,755)
+# abbrev
+%dir %{gem_instdir abbrev}
+%doc %{gem_instdir abbrev}/LICENSE.txt
+%{gem_instdir abbrev}/bin
+%{gem_instdir abbrev}/lib
+%{gem_spec abbrev}
+%{gem_instdir abbrev}/Gemfile
+%doc %{gem_instdir abbrev}/README.md
+%{gem_instdir abbrev}/Rakefile
+
+# base64
+%dir %{gem_instdir base64}
+%doc %{gem_instdir base64}/LICENSE.txt
+%{gem_instdir base64}/lib
+%{gem_spec base64}
+%doc %{gem_instdir base64}/README.md
+
+# csv
+%dir %{gem_instdir csv}
+%doc %{gem_instdir csv}/LICENSE.txt
+%doc %{gem_instdir csv}/NEWS.md
+%{gem_instdir csv}/lib
+%{gem_spec csv}
+%doc %{gem_instdir csv}/README.md
+%doc %{gem_instdir csv}/doc
+
+# drb
+%dir %{gem_instdir drb}
+%doc %{gem_instdir drb}/LICENSE.txt
+%{gem_instdir drb}/lib
+%{gem_spec drb}
+
+# getoptlong
+%dir %{gem_instdir getoptlong}
+%doc %{gem_instdir getoptlong}/LICENSE.txt
+%{gem_instdir getoptlong}/bin
+%{gem_instdir getoptlong}/lib
+%{gem_instdir getoptlong}/sample
+%{gem_spec getoptlong}
+%{gem_instdir getoptlong}/Gemfile
+%doc %{gem_instdir getoptlong}/README.md
+%{gem_instdir getoptlong}/Rakefile
+
+# matrix
+%dir %{gem_instdir matrix}
+##%license %{gem_instdir matrix}/LICENSE.txt
+%{gem_instdir matrix}/lib
+%{gem_spec matrix}
+
+# mutex_m
+%dir %{gem_instdir mutex_m}
+%doc %{gem_instdir mutex_m}/BSDL
+%doc %{gem_instdir mutex_m}/COPYING
+%{gem_instdir mutex_m}/lib
+%{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_instdir net-ftp}/lib
+%{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_instdir net-imap}/lib
+%{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_instdir net-pop}/lib
+%{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_instdir net-smtp}/lib
+%{gem_spec net-smtp}
+
+# nkf
+%dir %{gem_instdir nkf}
+%{gem_extdir_mri nkf}
+%doc %{gem_instdir nkf}/LICENSE.txt
+%{gem_instdir nkf}/bin
+%{gem_instdir nkf}/lib
+%{gem_spec nkf}
+%{gem_instdir nkf}/Gemfile
+%doc %{gem_instdir nkf}/README.md
+%{gem_instdir nkf}/Rakefile
+
+# observer
+%dir %{gem_instdir observer}
+%doc %{gem_instdir observer}/LICENSE.txt
+%{gem_instdir observer}/bin
+%{gem_instdir observer}/lib
+#%exclude %{gem_cache observer}
+%{gem_spec observer}
+%{gem_instdir observer}/Gemfile
+%doc %{gem_instdir observer}/README.md
+%{gem_instdir observer}/Rakefile
+
+# 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_instdir prime}/lib
+%{gem_instdir prime}/sig
+%{gem_spec prime}
+
+# rdbg
 %attr(755,root,root) %{_bindir}/rdbg
-%dir %{gem_libdir}/debug-%{debug_ver}
-%{gem_libdir}/debug-%{debug_ver}/gem.build_complete
-%dir %{gem_libdir}/debug-%{debug_ver}/debug
-%attr(755,root,root) %{gem_libdir}/debug-%{debug_ver}/debug/debug.so
-%dir %{gem_dir}/gems/debug-%{debug_ver}
-%{gem_dir}/gems/debug-%{debug_ver}/exe
-%{gem_dir}/gems/debug-%{debug_ver}/lib
-%{gem_dir}/specifications/debug-%{debug_ver}.gemspec
-
-%dir %{gem_dir}/gems/net-ftp-%{net_ftp_ver}
-%{gem_dir}/gems/net-ftp-%{net_ftp_ver}/lib
-%{gem_dir}/specifications/net-ftp-%{net_ftp_ver}.gemspec
-
-%dir %{gem_dir}/gems/net-imap-%{net_imap_ver}
-%{gem_dir}/gems/net-imap-%{net_imap_ver}/lib
-%dir %{gem_dir}/gems/net-imap-%{net_imap_ver}/rakelib
-%{gem_dir}/gems/net-imap-%{net_imap_ver}/rakelib/*.*
-%{gem_dir}/specifications/net-imap-%{net_imap_ver}.gemspec
-
-%dir %{gem_dir}/gems/net-pop-%{net_pop_ver}
-%{gem_dir}/gems/net-pop-%{net_pop_ver}/lib
-%{gem_dir}/specifications/net-pop-%{net_pop_ver}.gemspec
-
-%dir %{gem_dir}/gems/net-smtp-%{net_smtp_ver}
-%{gem_dir}/gems/net-smtp-%{net_smtp_ver}/lib
-%{gem_dir}/specifications/net-smtp-%{net_smtp_ver}.gemspec
-
-%dir %{gem_dir}/gems/matrix-%{matrix_ver}
-%{gem_dir}/gems/matrix-%{matrix_ver}/lib
-%{gem_dir}/specifications/matrix-%{matrix_ver}.gemspec
-
-%dir %{gem_dir}/gems/prime-%{prime_ver}
-%{gem_dir}/gems/prime-%{prime_ver}/lib
-%{gem_dir}/specifications/prime-%{prime_ver}.gemspec
-
+%dir %{gem_extdir_mri debug}
+%{gem_extdir_mri debug}/gem.build_complete
+%dir %{gem_extdir_mri debug}/debug
+%{gem_extdir_mri debug}/debug/debug.so
+%dir %{gem_instdir debug}
+%exclude %{gem_instdir debug}/.*
+#%doc %{gem_instdir debug}/CONTRIBUTING.md
+#%{gem_instdir debug}/Gemfile
+#%license %{gem_instdir debug}/LICENSE.txt
+#%doc %{gem_instdir debug}/README.md
+#%{gem_instdir debug}/Rakefile
+#%doc %{gem_instdir debug}/TODO.md
+%{gem_instdir debug}/exe
+#%{gem_instdir debug}/misc
+%{gem_instdir debug}/lib
+%{gem_spec debug}
+
+# repl_type_completor
+%dir %{gem_instdir repl_type_completor}
+%doc %{gem_instdir repl_type_completor}/LICENSE.txt
+%{gem_instdir repl_type_completor}/lib
+%{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}
+%doc %{gem_instdir rinda}/LICENSE.txt
+%{gem_instdir rinda}/bin
+%{gem_instdir rinda}/lib
+%{gem_spec rinda}
+%{gem_instdir rinda}/Gemfile
+%doc %{gem_instdir rinda}/README.md
+%{gem_instdir rinda}/Rakefile
+
+# resolv-replace
+%dir %{gem_instdir resolv-replace}
+%doc %{gem_instdir resolv-replace}/LICENSE.txt
+%{gem_instdir resolv-replace}/bin
+%{gem_instdir resolv-replace}/lib
+%{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}/LICENSE.txt
+%{gem_instdir syslog}/bin
+%{gem_instdir syslog}/lib
+#%exclude %{gem_cache syslog}
+%{gem_spec syslog}
+#%{gem_instdir syslog}/Gemfile
+#%doc %{gem_instdir syslog}/README.md
+#%{gem_instdir syslog}/Rakefile
 
 %files modules
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_bindir}/erb%{ruby_suffix}
 %attr(755,root,root) %{_bindir}/syntax_suggest%{ruby_suffix}
+%{ruby_libdir}/bundled_gems.rb
 %{ruby_libdir}/cgi
 %{ruby_libdir}/digest
-%{ruby_libdir}/drb
+#%{ruby_libdir}/drb
 %{ruby_libdir}/fiddle
 %{ruby_libdir}/io
 %{ruby_libdir}/net
 %{ruby_libdir}/openssl
 %{ruby_libdir}/optparse
-%{ruby_libdir}/racc
-%{ruby_libdir}/rinda
+#%{ruby_libdir}/racc
+#%{ruby_libdir}/rinda
 %{ruby_libdir}/ripper
-%{ruby_libdir}/syslog
+#%{ruby_libdir}/syslog
 %{ruby_libdir}/test
 %{ruby_libdir}/uri
 %{ruby_libdir}/yaml
 %{ruby_libdir}/English.rb
-%{ruby_libdir}/abbrev.rb
-%{ruby_libdir}/base64.rb
+#%{ruby_libdir}/abbrev.rb
+#%{ruby_libdir}/base64.rb
 %{ruby_libdir}/benchmark.rb
-%dir %{ruby_libdir}/benchmark
-%{ruby_libdir}/benchmark/version.rb
+#%dir %{ruby_libdir}/benchmark
+#%{ruby_libdir}/benchmark/version.rb
 %{ruby_libdir}/bundler
 %{ruby_libdir}/bundler.rb
 %{ruby_libdir}/cgi.rb
-%{ruby_libdir}/csv.rb
-%{ruby_libdir}/csv
+#%{ruby_libdir}/csv.rb
+#%{ruby_libdir}/csv
 %{ruby_libdir}/coverage.rb
 %{ruby_libdir}/date.rb
 %{ruby_libdir}/delegate.rb
 %{ruby_libdir}/did_you_mean.rb
 %{ruby_libdir}/did_you_mean
 %{ruby_libdir}/digest.rb
-%{ruby_libdir}/drb.rb
+#%{ruby_libdir}/drb.rb
 %{ruby_libdir}/error_highlight.rb
 %dir %{ruby_libdir}/error_highlight
 %{ruby_libdir}/error_highlight/*.rb
@@ -1288,19 +1520,19 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/forwardable.rb
 %dir %{ruby_libdir}/forwardable
 %{ruby_libdir}/forwardable/impl.rb
-%{ruby_libdir}/getoptlong.rb
+#%{ruby_libdir}/getoptlong.rb
 %{ruby_libdir}/ipaddr.rb
 %{ruby_libdir}/json.rb
-%{ruby_libdir}/kconv.rb
+#%{ruby_libdir}/kconv.rb
 %{ruby_libdir}/logger.rb
 %dir %{ruby_libdir}/logger
 %{ruby_libdir}/logger/*.rb
 %{ruby_libdir}/monitor.rb
-%{ruby_libdir}/mutex_m.rb
+#%{ruby_libdir}/mutex_m.rb
 %{ruby_libdir}/objspace.rb
 %dir %{ruby_libdir}/objspace
 %{ruby_libdir}/objspace/*.rb
-%{ruby_libdir}/observer.rb
+#%{ruby_libdir}/observer.rb
 %{ruby_libdir}/open-uri.rb
 %{ruby_libdir}/open3.rb
 %dir %{ruby_libdir}/open3
@@ -1312,8 +1544,9 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/pathname.rb
 %{ruby_libdir}/pp.rb
 %{ruby_libdir}/prettyprint.rb
+%{ruby_libdir}/prism*
 %{ruby_libdir}/pstore.rb
-%{ruby_libdir}/racc.rb
+#%{ruby_libdir}/racc.rb
 %dir %{ruby_libdir}/random
 %{ruby_libdir}/random/*.rb
 %{ruby_libdir}/rdoc.rb
@@ -1321,15 +1554,18 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/reline.rb
 %dir %{ruby_libdir}/reline
 %{ruby_libdir}/reline/*.rb
+%dir %{ruby_libdir}/reline/io
+%{ruby_libdir}/reline/io/*.rb
 %dir %{ruby_libdir}/reline/key_actor
 %{ruby_libdir}/reline/key_actor/*.rb
 %dir %{ruby_libdir}/reline/unicode
 %{ruby_libdir}/reline/unicode/*.rb
-%{ruby_libdir}/resolv-replace.rb
+#%{ruby_libdir}/resolv-replace.rb
 %{ruby_libdir}/resolv.rb
 %{ruby_libdir}/ripper.rb
 %dir %{ruby_libdir}/ruby_vm
-%{ruby_libdir}/ruby_vm/mjit
+%dir %{ruby_libdir}/ruby_vm/rjit
+%{ruby_libdir}/ruby_vm/rjit/*.rb
 %{ruby_libdir}/securerandom.rb
 %{ruby_libdir}/set.rb
 %dir %{ruby_libdir}/set
@@ -1337,6 +1573,8 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_libdir}/shellwords.rb
 %{ruby_libdir}/singleton.rb
 %{ruby_libdir}/socket.rb
+%dir %{ruby_libdir}/strscan
+%{ruby_libdir}/strscan/*.rb
 %{ruby_libdir}/syntax_suggest.rb
 %dir %{ruby_libdir}/syntax_suggest
 %{ruby_libdir}/syntax_suggest/*.rb
@@ -1360,7 +1598,7 @@ rm -rf $RPM_BUILD_ROOT
 %exclude %{ruby_libdir}/mkmf.rb
 
 %{ruby_archdir}/rbconfig.rb
-%attr(755,root,root) %{ruby_archdir}/bigdecimal.so
+#%attr(755,root,root) %{ruby_archdir}/bigdecimal.so
 %attr(755,root,root) %{ruby_archdir}/continuation.so
 %attr(755,root,root) %{ruby_archdir}/coverage.so
 %attr(755,root,root) %{ruby_archdir}/date_core.so
@@ -1370,17 +1608,17 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{ruby_archdir}/fcntl.so
 %attr(755,root,root) %{ruby_archdir}/fiddle.so
 %attr(755,root,root) %{ruby_archdir}/monitor.so
-%attr(755,root,root) %{ruby_archdir}/nkf.so
+#%attr(755,root,root) %{ruby_archdir}/nkf.so
 %attr(755,root,root) %{ruby_archdir}/objspace.so
 %attr(755,root,root) %{ruby_archdir}/openssl.so
 %attr(755,root,root) %{ruby_archdir}/pathname.so
 %attr(755,root,root) %{ruby_archdir}/pty.so
-%attr(755,root,root) %{ruby_archdir}/readline.so
+#%attr(755,root,root) %{ruby_archdir}/readline.so
 %attr(755,root,root) %{ruby_archdir}/ripper.so
 %attr(755,root,root) %{ruby_archdir}/socket.so
 %attr(755,root,root) %{ruby_archdir}/stringio.so
 %attr(755,root,root) %{ruby_archdir}/strscan.so
-%attr(755,root,root) %{ruby_archdir}/syslog.so
+#%attr(755,root,root) %{ruby_archdir}/syslog.so
 %attr(755,root,root) %{ruby_archdir}/zlib.so
 
 %dir %{ruby_archdir}/cgi
@@ -1393,8 +1631,8 @@ rm -rf $RPM_BUILD_ROOT
 %attr(755,root,root) %{ruby_archdir}/enc/trans/*.so
 %dir %{ruby_archdir}/io
 %attr(755,root,root) %{ruby_archdir}/io/*.so
-%dir %{ruby_archdir}/racc
-%attr(755,root,root) %{ruby_archdir}/racc/*.so
+#%dir %{ruby_archdir}/racc
+#%attr(755,root,root) %{ruby_archdir}/racc/*.so
 %dir %{ruby_archdir}/rbconfig
 %attr(755,root,root) %{ruby_archdir}/rbconfig/sizeof.so
 
@@ -1414,18 +1652,13 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/ri%{ruby_suffix}.1*
 
 %if %{with doc}
-%files doc
-%defattr(644,root,root,755)
-%doc ruby_%{doc_version}_stdlib
-%doc ruby_%{doc_version}_core
-
 %files doc-ri
 %defattr(644,root,root,755)
 %{ruby_ridir}/[A-Z]*
 %{ruby_ridir}/contributing
+%{ruby_ridir}/date
 %{ruby_ridir}/fatal
 %{ruby_ridir}/syntax
-%{ruby_ridir}/win32
 %{ruby_ridir}/optparse
 %lang(ja) %{ruby_ridir}/page-COPYING_ja.ri
 %lang(ja) %{ruby_ridir}/page-README_ja_md.ri
@@ -1434,6 +1667,9 @@ rm -rf $RPM_BUILD_ROOT
 %{ruby_ridir}/page-NEWS_md.ri
 %{ruby_ridir}/page-README_md.ri
 %{ruby_ridir}/page-[a-z]*.ri
+%{ruby_ridir}/regexp
+%{ruby_ridir}/rjit
+%{ruby_ridir}/ruby
 %{ruby_ridir}/yjit
 %endif
 
diff --git a/operating_system.rb b/operating_system.rb
index e9051b2..fd56386 100644
--- a/operating_system.rb
+++ b/operating_system.rb
@@ -88,6 +88,7 @@ module Gem
     # warnings otherwise issued by Ruby.
 
     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
@@ -105,13 +106,20 @@ module Gem
       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
diff --git a/archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch
similarity index 100%
rename from archlibdir.patch
rename to ruby-2.1.0-Enable-configuration-of-archlibdir.patch
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
new file mode 100644
index 0000000..1dec456
--- /dev/null
+++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch
@@ -0,0 +1,77 @@
+From e24d97c938c481450ed80ec83e5399595946c1ae Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch at redhat.com>
+Date: Fri, 8 Feb 2013 22:48:41 +0100
+Subject: [PATCH] Prevent duplicated paths when empty version string is
+ configured.
+
+---
+ configure.ac     |  3 ++-
+ loadpath.c       | 12 ++++++++++++
+ tool/mkconfig.rb |  2 +-
+ 3 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c42436c23d..d261ea57b5 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4365,7 +4365,8 @@ AS_CASE(["$ruby_version_dir_name"],
+ ruby_version_dir=/'${ruby_version_dir_name}'
+ 
+ if test -z "${ruby_version_dir_name}"; then
+-    AC_MSG_ERROR([No ruby version, No place for bundled libraries])
++    unset ruby_version_dir
++    AC_DEFINE(RUBY_LIB_VERSION_BLANK, 1)
+ fi
+ 
+ rubylibdir='${rubylibprefix}'${ruby_version_dir}
+diff --git a/loadpath.c b/loadpath.c
+index 9160031..0d4d953 100644
+--- a/loadpath.c
++++ b/loadpath.c
+@@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] =
+     RUBY_SEARCH_PATH "\0"
+ #endif
+ #ifndef NO_RUBY_SITE_LIB
++#ifdef RUBY_LIB_VERSION_BLANK
++    RUBY_SITE_LIB "\0"
++#else
+     RUBY_SITE_LIB2 "\0"
++#endif
+ #ifdef RUBY_THINARCH
+     RUBY_SITE_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
+ #endif
+     RUBY_SITE_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
++#ifndef RUBY_LIB_VERSION_BLANK
+     RUBY_SITE_LIB "\0"
+ #endif
++#endif
+ 
+ #ifndef NO_RUBY_VENDOR_LIB
++#ifdef RUBY_LIB_VERSION_BLANK
++    RUBY_VENDOR_LIB "\0"
++#else
+     RUBY_VENDOR_LIB2 "\0"
++#endif
+ #ifdef RUBY_THINARCH
+     RUBY_VENDOR_ARCH_LIB_FOR(RUBY_THINARCH) "\0"
+ #endif
+     RUBY_VENDOR_ARCH_LIB_FOR(RUBY_SITEARCH) "\0"
++#ifndef RUBY_LIB_VERSION_BLANK
+     RUBY_VENDOR_LIB "\0"
++#endif
+ #endif
+ 
+     RUBY_LIB "\0"
+diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb
+index 07076d4..35e6c3c 100755
+--- a/tool/mkconfig.rb
++++ b/tool/mkconfig.rb
+@@ -116,7 +116,7 @@
+     val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump
+     case name
+     when /^prefix$/
+-      val = "(TOPDIR || DESTDIR + #{val})"
++      val = "(((TOPDIR && TOPDIR.empty?) ? nil : TOPDIR) || DESTDIR + #{val})"
+     when /^ARCH_FLAG$/
+       val = "arch_flag || #{val}" if universal
+     when /^UNIVERSAL_ARCHNAMES$/
diff --git a/custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch
similarity index 94%
rename from custom-rubygems-location.patch
rename to ruby-2.1.0-custom-rubygems-location.patch
index 0cb2012..2ff5594 100644
--- a/custom-rubygems-location.patch
+++ b/ruby-2.1.0-custom-rubygems-location.patch
@@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac
 index 93af30321d..bc13397e0e 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -4232,6 +4232,10 @@ AC_ARG_WITH(vendorarchdir,
+@@ -4401,6 +4401,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=''
-@@ -4256,6 +4260,7 @@ AC_SUBST(sitearchdir)dnl
+@@ -4425,6 +4429,7 @@ AC_SUBST(sitearchdir)dnl
  AC_SUBST(vendordir)dnl
  AC_SUBST(vendorlibdir)dnl
  AC_SUBST(vendorarchdir)dnl
@@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
 index e9110a17ca..76a1f0a315 100755
 --- a/tool/rbinstall.rb
 +++ b/tool/rbinstall.rb
-@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false)
+@@ -382,6 +382,7 @@ def CONFIG.[](name, mandatory = false)
    vendorlibdir = CONFIG["vendorlibdir"]
    vendorarchlibdir = CONFIG["vendorarchdir"]
  end
@@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755
  mandir = CONFIG["mandir", true]
  docdir = CONFIG["docdir", true]
  enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
-@@ -595,7 +596,16 @@ def stub
+@@ -974,7 +975,16 @@ def (bins = []).add(name)
  install?(:local, :comm, :lib) do
    prepare "library scripts", rubylibdir
    noinst = %w[*.txt *.rdoc *.gemspec]
diff --git a/ruby-version.patch b/ruby-2.3.0-ruby_version.patch
similarity index 95%
rename from ruby-version.patch
rename to ruby-2.3.0-ruby_version.patch
index 866fef4..96609a0 100644
--- a/ruby-version.patch
+++ b/ruby-2.3.0-ruby_version.patch
@@ -20,20 +20,20 @@ diff --git a/configure.ac b/configure.ac
 index 80b137e380..63cd3b4f8b 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -4146,9 +4146,6 @@ AS_CASE(["$target_os"],
+@@ -4315,9 +4315,6 @@ AS_CASE(["$target_os"],
      rubyw_install_name='$(RUBYW_INSTALL_NAME)'
      ])
- 
+
 -rubylibdir='${rubylibprefix}/${ruby_version}'
 -rubyarchdir=${multiarch+'${rubyarchprefix}/${ruby_version}'}${multiarch-'${rubylibdir}/${arch}'}
 -
  rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'}
  AC_ARG_WITH(rubyarchprefix,
  	    AS_HELP_STRING([--with-rubyarchprefix=DIR],
-@@ -4171,57 +4168,63 @@ AC_ARG_WITH(ridir,
+@@ -4340,57 +4337,63 @@ AC_ARG_WITH(ridir,
  AC_SUBST(ridir)
  AC_SUBST(RI_BASE_NAME)
- 
+
 -AC_ARG_WITH(ruby-version,
 -	    AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|minor|STR)]),
 -            [ruby_version=$withval],
@@ -75,7 +75,7 @@ index 80b137e380..63cd3b4f8b 100644
 +
  AC_SUBST(RUBY_LIB_VERSION_STYLE)
  AC_SUBST(RUBY_LIB_VERSION)
- 
+
 +AC_ARG_WITH(ruby-version,
 +	    AS_HELP_STRING([--with-ruby-version=STR], [ruby version string for version specific directories [[full]] (full|STR)]),
 +            [ruby_version_dir_name=$withval],
@@ -98,31 +98,31 @@ index 80b137e380..63cd3b4f8b 100644
              [sitedir='${rubylibprefix}/site_ruby'])
 -sitelibdir='${sitedir}/${ruby_version}'
 +sitelibdir='${sitedir}'${ruby_version_dir}
- 
+
  AC_ARG_WITH(sitearchdir,
  	    AS_HELP_STRING([--with-sitearchdir=DIR],
  			   [architecture dependent site libraries in DIR [[SITEDIR/SITEARCH]], "no" to disable site directory]),
              [sitearchdir=$withval],
 -            [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby/${ruby_version}'}${multiarch-'${sitelibdir}/${sitearch}'}])
 +            [sitearchdir=${multiarch+'${rubysitearchprefix}/site_ruby'${ruby_version_dir}}${multiarch-'${sitelibdir}/${sitearch}'}])
- 
+
  AC_ARG_WITH(vendordir,
  	    AS_HELP_STRING([--with-vendordir=DIR], [vendor libraries in DIR [[RUBY_LIB_PREFIX/vendor_ruby]], "no" to disable vendor directory]),
              [vendordir=$withval],
              [vendordir='${rubylibprefix}/vendor_ruby'])
 -vendorlibdir='${vendordir}/${ruby_version}'
 +vendorlibdir='${vendordir}'${ruby_version_dir}
- 
+
  AC_ARG_WITH(vendorarchdir,
  	    AS_HELP_STRING([--with-vendorarchdir=DIR],
  			   [architecture dependent vendor libraries in DIR [[VENDORDIR/SITEARCH]], "no" to disable vendor directory]),
              [vendorarchdir=$withval],
 -            [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby/${ruby_version}'}${multiarch-'${vendorlibdir}/${sitearch}'}])
 +            [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}])
- 
+
  AS_IF([test "${LOAD_RELATIVE+set}"], [
      AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
-@@ -4238,6 +4241,7 @@ AC_SUBST(sitearchincludedir)dnl
+@@ -4407,6 +4410,7 @@ AC_SUBST(sitearchincludedir)dnl
  AC_SUBST(arch)dnl
  AC_SUBST(sitearch)dnl
  AC_SUBST(ruby_version)dnl
@@ -161,18 +161,18 @@ index 970cb91..5bf8230 100644
 @@ -10,7 +10,7 @@ module RDoc::RI::Paths
    #:stopdoc:
    require 'rbconfig'
- 
+
 -  version = RbConfig::CONFIG['ruby_version']
 +  version = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']
- 
+
    BASE    = File.join RbConfig::CONFIG['ridir'], version
- 
+
 diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
 index d4c110e..d39c9a6 100755
 --- a/tool/rbinstall.rb
 +++ b/tool/rbinstall.rb
-@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false)
- 
+@@ -945,7 +945,7 @@ def (bins = []).add(name)
+
  install?(:doc, :rdoc) do
    if $rdocdir
 -    ridatadir = File.join(CONFIG['ridir'], CONFIG['ruby_version'], "system")
@@ -195,16 +195,16 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb
 index d4ff4a262c..3f9a5bf590 100644
 --- a/lib/rubygems/defaults.rb
 +++ b/lib/rubygems/defaults.rb
-@@ -34,7 +34,7 @@ def self.default_spec_cache_dir
+@@ -35,7 +35,7 @@ def self.default_spec_cache_dir
    # specified in the environment
- 
+
    def self.default_dir
 -    @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"])
 +    @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"])
    end
- 
+
    ##
-@@ -103,7 +103,8 @@ def self.user_dir
+@@ -104,7 +104,8 @@ def self.user_dir
      gem_dir = File.join(Gem.user_home, ".gem")
      gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir)
      parts = [gem_dir, ruby_engine]
@@ -213,37 +213,37 @@ index d4ff4a262c..3f9a5bf590 100644
 +    parts << ruby_version_dir_name unless ruby_version_dir_name.empty?
      File.join parts
    end
- 
-@@ -248,7 +249,7 @@ def self.vendor_dir # :nodoc:
+
+@@ -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"]
    end
- 
+
    ##
 diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb
 index b25068405d..e9fef4a311 100644
 --- a/test/rubygems/test_gem.rb
 +++ b/test/rubygems/test_gem.rb
-@@ -1337,7 +1337,8 @@ def test_self_use_paths
- 
+@@ -1365,7 +1365,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 << ruby_version_dir_name unless ruby_version_dir_name.empty?
- 
+
      FileUtils.mkdir_p File.join(parts)
- 
-@@ -1413,7 +1414,7 @@ def test_self_vendor_dir
+
+@@ -1441,7 +1442,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"]
- 
+
        assert_equal expected, Gem.vendor_dir
      end
 
@@ -262,12 +262,12 @@ diff --git a/configure.ac b/configure.ac
 index a00f2b6776..999e2d6d5d 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -124,7 +124,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
+@@ -143,7 +143,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}')
- 
+
  dnl checks for alternative programs
  AC_CANONICAL_BUILD
diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch
new file mode 100644
index 0000000..65d1e65
--- /dev/null
+++ b/ruby-2.7.0-Initialize-ABRT-hook.patch
@@ -0,0 +1,88 @@
+From eca084e4079c77c061045df9c21b219175b05228 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch at redhat.com>
+Date: Mon, 6 Jan 2020 13:56:04 +0100
+Subject: [PATCH] Initialize ABRT hook.
+
+The ABRT hook used to be initialized by preludes via patches [[1], [2]].
+Unfortunately, due to [[3]] and especially since [[4]], this would
+require boostrapping [[5]].
+
+To keep the things simple for now, load the ABRT hook via C.
+
+[1]: https://bugs.ruby-lang.org/issues/8566
+[2]: https://bugs.ruby-lang.org/issues/15306
+[3]: https://bugs.ruby-lang.org/issues/16254
+[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 ++++
+ spec/ruby/core/kernel/require_spec.rb |  2 ++
+ 4 files changed, 20 insertions(+), 1 deletion(-)
+ create mode 100644 abrt.c
+
+diff --git a/abrt.c b/abrt.c
+new file mode 100644
+index 0000000000..74b0bd5c0f
+--- /dev/null
++++ b/abrt.c
+@@ -0,0 +1,12 @@
++#include "internal.h"
++
++void
++Init_abrt(void)
++{
++  rb_eval_string(
++    "  begin\n"
++    "    require 'abrt'\n"
++    "  rescue LoadError\n"
++    "  end\n"
++  );
++}
+diff --git a/common.mk b/common.mk
+index b2e5b2b6d0..f39f81da5c 100644
+--- a/common.mk
++++ b/common.mk
+@@ -110,7 +110,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \
+ 		prism/prism.$(OBJEXT) \
+ 		prism_init.$(OBJEXT)
+ 
+-COMMONOBJS    = 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
+--- a/ruby.c
++++ b/ruby.c
+@@ -1744,10 +1744,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt)
+ 
+ void Init_builtin_features(void);
+ 
++/* abrt.c */
++void Init_abrt(void);
++
+ static void
+ ruby_init_prelude(void)
+ {
+     Init_builtin_features();
++    Init_abrt();
+     rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX"));
+ }
+ 
+diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb
+index 60c57d6259..1eec16f2c8 100644
+--- a/spec/ruby/core/kernel/require_spec.rb
++++ b/spec/ruby/core/kernel/require_spec.rb
+@@ -25,6 +25,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-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..40b7662
--- /dev/null
+++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch
@@ -0,0 +1,23 @@
+From 6365d1b79e10330fced83d00d4cb950380a3b0fe Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch at redhat.com>
+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 d55d1788aa..73755f6ccd 100644
+--- a/common.mk
++++ b/common.mk
+@@ -1668,8 +1668,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-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch b/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch
new file mode 100644
index 0000000..26ca3ec
--- /dev/null
+++ b/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch
@@ -0,0 +1,136 @@
+From e0e771b76fbede656fe51c8bf18ce810f4afeee0 Mon Sep 17 00:00:00 2001
+From: Jun Aruga <jaruga at redhat.com>
+Date: Tue, 8 Apr 2025 15:03:06 +0200
+Subject: [PATCH] Fix the tests using SHA-1 Probabilistic Signature Scheme
+ (PSS) parameters.
+
+Fedora OpenSSL 3.5 on rawhide stopped accepting SHA-1 PSS[1] parameters.
+This is different from the SHA-1 signatures which Fedora OpenSSL stopped
+accepting since Fedora 41.[2]
+
+This commit fixes the following test failures related to the SHA-1 PSS
+parameters with Fedora OpenSSL 3.5.
+Note these failures are the downstream Fedora OpenSSL RPM specific. The tests
+pass without this commit with the upstream OpenSSL 3.5.
+
+```
+$ rpm -q openssl-libs openssl-devel
+openssl-libs-3.5.0-2.fc43.x86_64
+openssl-devel-3.5.0-2.fc43.x86_64
+
+$ bundle exec rake test
+...
+E
+===============================================================================================
+Error: test_sign_verify_options(OpenSSL::TestPKeyRSA): OpenSSL::PKey::PKeyError: EVP_PKEY_CTX_ctrl_str(ctx, "rsa_mgf1_md", "SHA1"): digest not allowed (digest=SHA1)
+/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'Hash#each'
+/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::PKey::PKey#sign'
+/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::TestPKeyRSA#test_sign_verify_options'
+     110:       "rsa_pss_saltlen" => 20,
+     111:       "rsa_mgf1_md" => "SHA1"
+     112:     }
+  => 113:     sig_pss = key.sign("SHA256", data, pssopts)
+     114:     assert_equal 256, sig_pss.bytesize
+     115:     assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
+     116:     assert_equal true, key.verify_pss("SHA256", sig_pss, data,
+===============================================================================================
+E
+===============================================================================================
+Error: test_sign_verify_pss(OpenSSL::TestPKeyRSA): OpenSSL::PKey::RSAError: digest not allowed (digest=SHA1)
+/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::PKey::RSA#sign_pss'
+/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::TestPKeyRSA#test_sign_verify_pss'
+     188:     data = "Sign me!"
+     189:     invalid_data = "Sign me?"
+     190:
+  => 191:     signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1")
+     192:     assert_equal 256, signature.bytesize
+     193:     assert_equal true,
+     194:       key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
+===============================================================================================
+...
+577 tests, 4186 assertions, 0 failures, 2 errors, 0 pendings, 3 omissions, 0 notifications
+```
+
+[1] https://en.wikipedia.org/wiki/Probabilistic_signature_scheme
+[2] https://fedoraproject.org/wiki/Changes/OpenSSLDistrustSHA1SigVer
+---
+ test/openssl/test_pkey_rsa.rb | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb
+index 360309b..850c16a 100644
+--- a/test/openssl/test_pkey_rsa.rb
++++ b/test/openssl/test_pkey_rsa.rb
+@@ -108,13 +108,13 @@ def test_sign_verify_options
+     pssopts = {
+       "rsa_padding_mode" => "pss",
+       "rsa_pss_saltlen" => 20,
+-      "rsa_mgf1_md" => "SHA1"
++      "rsa_mgf1_md" => "SHA256"
+     }
+     sig_pss = key.sign("SHA256", data, pssopts)
+     assert_equal 256, sig_pss.bytesize
+     assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
+     assert_equal true, key.verify_pss("SHA256", sig_pss, data,
+-                                      salt_length: 20, mgf1_hash: "SHA1")
++                                      salt_length: 20, mgf1_hash: "SHA256")
+     # Defaults to PKCS #1 v1.5 padding => verification failure
+     assert_equal false, key.verify("SHA256", sig_pss, data)
+ 
+@@ -188,22 +188,22 @@ def test_sign_verify_pss
+     data = "Sign me!"
+     invalid_data = "Sign me?"
+ 
+-    signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1")
++    signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA256")
+     assert_equal 256, signature.bytesize
+     assert_equal true,
+-      key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA256")
+     assert_equal true,
+-      key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
+     assert_equal false,
+-      key.verify_pss("SHA256", signature, invalid_data, salt_length: 20, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, invalid_data, salt_length: 20, mgf1_hash: "SHA256")
+ 
+-    signature = key.sign_pss("SHA256", data, salt_length: :digest, mgf1_hash: "SHA1")
++    signature = key.sign_pss("SHA256", data, salt_length: :digest, mgf1_hash: "SHA256")
+     assert_equal true,
+-      key.verify_pss("SHA256", signature, data, salt_length: 32, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, data, salt_length: 32, mgf1_hash: "SHA256")
+     assert_equal true,
+-      key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
+     assert_equal false,
+-      key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
++      key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA256")
+ 
+     # The sign_pss with `salt_length: :max` raises the "invalid salt length"
+     # error in FIPS. We need to skip the tests in FIPS.
+@@ -213,18 +213,18 @@ def test_sign_verify_pss
+     # FIPS 186-5 section 5.4 PKCS #1
+     # https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
+     unless OpenSSL.fips_mode
+-      signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1")
++      signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA256")
+       # Should verify on the following salt_length (sLen).
+       # sLen <= emLen (octat) - 2 - hLen (octet) = 2048 / 8 - 2 - 256 / 8 = 222
+       # https://datatracker.ietf.org/doc/html/rfc8017#section-9.1.1
+       assert_equal true,
+-        key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA1")
++        key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA256")
+       assert_equal true,
+-        key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
++        key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
+     end
+ 
+     assert_raise(OpenSSL::PKey::RSAError) {
+-      key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA1")
++      key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA256")
+     }
+   end
+ 
+-- 
+2.48.1
+
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/ruby.git/commitdiff/794fdf77d5ea6cd44e0e4f76ec144b9a22eb6a8e



More information about the pld-cvs-commit mailing list