From 563fb688b3f8840b495ee06f294927330b99d06d Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 6 Aug 2025 10:41:35 +0200 Subject: [PATCH 01/16] Upgrade to Ruby 3.4.5. Resolves: rhbz#2380246 --- ruby-2.1.0-Enable-configuration-of-archlibdir.patch | 2 +- ...ent-duplicated-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 ++-- ruby-2.3.0-ruby_version.patch | 6 +++--- ruby-3.3.0-Disable-syntax-suggest-test-case.patch | 2 +- ruby.spec | 8 ++++++-- sources | 2 +- 8 files changed, 16 insertions(+), 12 deletions(-) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index e4142e9..158088d 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3520,6 +3520,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3518,6 +3518,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' 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 7990f77..8d79f56 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 @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4366,7 +4366,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4364,7 +4364,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index ba78846..9f25a19 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4430,6 +4430,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4428,6 +4428,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 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 7e199ac..1baf565 100644 --- a/ruby-2.1.0-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 -@@ -4402,6 +4402,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4400,6 +4400,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='' -@@ -4426,6 +4430,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4424,6 +4428,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index f089a33..1969f9e 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -4316,9 +4316,6 @@ AS_CASE(["$target_os"], +@@ -4314,9 +4314,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], -@@ -4341,57 +4338,63 @@ AC_ARG_WITH(ridir, +@@ -4339,57 +4336,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -122,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4408,6 +4411,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4406,6 +4409,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch index 6130a82..40b7662 100644 --- a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -12,7 +12,7 @@ diff --git a/common.mk b/common.mk index d55d1788aa..73755f6ccd 100644 --- a/common.mk +++ b/common.mk -@@ -1665,8 +1665,6 @@ no-test-bundled-gems-spec: +@@ -1668,8 +1668,6 @@ no-test-bundled-gems-spec: test-syntax-suggest: diff --git a/ruby.spec b/ruby.spec index c9a4b2d..02ed6dc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 4 -%global teeny_version 4 +%global teeny_version 5 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 26%{?dist} +Release: 27%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1879,6 +1879,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* 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 diff --git a/sources b/sources index eb999d0..dbc2225 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.4.4.tar.xz) = 0d258cf790daad424c866404b5cbdc8adba0e4e13764847a89adf2335229e5184095c9f3e9594705897697e48bcc322d9a9f919b04047abb2075daca9fce8871 +SHA512 (ruby-3.4.5.tar.xz) = 1f5d2fd527d15bd81ca8f49767d6426533367c1018a1d275d34721a96410b51204236173224e5198a42b56162c6e7a7b0c060fc032a9fd7f250b44e05c7af560 From 84309be01ead45a10afd51460cd929cf212ecec8 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 6 Aug 2025 10:42:20 +0200 Subject: [PATCH 02/16] Rebase versions of bundled libraries. Add `## BUNDLED_GEMS_VERSIONS` and the symmetric `## BUNDLED_GEMS_VERSIONS_END` for a script from ferut 'bundled_lib_versions.rb'. These tags are used to easily tell the beginning and end of the section we can and want to edit by the automation. Remove duplicate syslog entry. Move out default gemified libraries out into their place into either the bundled gems section or the default gems section. Reducing special cases helps lower complexity and length of the script. In this case, there does not seem a big case to have these gems specially handled in this section. Properly sort sections alphabetically using the ruby's `Array#sort` method. --- ruby.spec | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/ruby.spec b/ruby.spec index 02ed6dc..11e4004 100644 --- a/ruby.spec +++ b/ruby.spec @@ -26,8 +26,10 @@ # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems +## BUNDLED_GEMS_VERSIONS + # Bundled libraries versions -%global rubygems_version 3.6.7 +%global rubygems_version 3.6.9 %global rubygems_molinillo_version 0.8.0 %global rubygems_net_http_version 0.6.0 %global rubygems_net_protocol_version 0.2.2 @@ -39,7 +41,7 @@ %global rubygems_uri_version 1.0.3 # Default gems. -%global bundler_version 2.6.7 +%global bundler_version 2.6.9 %global bundler_connection_pool_version 2.5.0 %global bundler_fileutils_version 1.7.3 %global bundler_net_http_persistent_version 4.0.4 @@ -58,21 +60,24 @@ %global english_version 0.8.0 %global erb_version 4.0.4 %global error_highlight_version 0.7.0 -%global etc_version 1.4.5 +%global etc_version 1.4.6 %global fcntl_version 1.2.0 %global fiddle_version 1.1.6 %global fileutils_version 1.7.3 %global find_version 0.2.0 %global forwardable_version 1.3.3 -%global io_nonblock_version 0.3.1 -%global io_wait_version 0.3.1 +%global io_console_version 0.8.1 +%global io_nonblock_version 0.3.2 +%global io_wait_version 0.3.2 %global ipaddr_version 1.2.7 +%global irb_version 1.14.3 +%global json_version 2.9.1 %global logger_version 1.6.4 %global net_http_version 0.6.0 %global net_protocol_version 0.2.2 +%global open_uri_version 0.5.0 %global open3_version 0.2.1 %global openssl_version 3.3.0 -%global open_uri_version 0.5.0 %global optparse_version 0.6.0 %global ostruct_version 0.6.1 %global pathname_version 0.4.0 @@ -80,9 +85,11 @@ %global prettyprint_version 0.2.0 %global prism_version 1.2.0 %global pstore_version 0.1.4 +%global psych_version 5.2.2 +%global rdoc_version 6.14.0 %global readline_version 0.0.4 %global reline_version 0.6.0 -%global resolv_version 0.6.0 +%global resolv_version 0.6.2 %global ruby2_keywords_version 0.0.5 %global securerandom_version 0.4.1 %global set_version 1.1.1 @@ -91,7 +98,6 @@ %global stringio_version 3.1.2 %global strscan_version 3.1.2 %global syntax_suggest_version 2.0.2 -%global syslog_version 0.2.0 %global tempfile_version 0.3.1 %global time_version 0.4.1 %global timeout_version 0.4.3 @@ -100,34 +106,27 @@ %global un_version 0.3.0 %global uri_version 1.0.3 %global weakref_version 0.1.3 -%global win32ole_version 1.9.1 %global win32_registry_version 0.1.0 +%global win32ole_version 1.9.1 %global yaml_version 0.4.0 %global zlib_version 3.2.1 -# Gemified default gems. -%global io_console_version 0.8.0 -%global irb_version 1.14.3 -%global json_version 2.9.1 -%global psych_version 5.2.2 -%global rdoc_version 6.10.0 - # Bundled gems. %global abbrev_version 0.1.2 %global base64_version 0.2.0 %global bigdecimal_version 3.1.8 %global csv_version 3.3.2 -%global debug_version 1.10.0 +%global debug_version 1.11.0 %global drb_version 2.2.1 %global getoptlong_version 0.2.1 +%global matrix_version 0.4.2 +%global minitest_version 5.25.4 +%global mutex_m_version 0.3.0 %global net_ftp_version 0.3.8 %global net_imap_version 0.5.8 %global net_pop_version 0.1.2 %global net_smtp_version 0.5.1 %global nkf_version 0.2.0 -%global matrix_version 0.4.2 -%global minitest_version 5.25.4 -%global mutex_m_version 0.3.0 %global observer_version 0.1.2 %global power_assert_version 2.0.5 %global prime_version 0.1.3 @@ -143,6 +142,7 @@ %global test_unit_version 3.6.7 %global typeprof_version 0.30.1 +## END_BUNDLED_GEMS_VERSIONS # Bundled nkf version %global bundled_nkf_version 2.1.5 From f50637ef39b6d1831355864c2f4c4dbdef43e54c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 11 Apr 2025 11:42:42 +0200 Subject: [PATCH 03/16] Add missing bundled `tsort` provide. --- ruby.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby.spec b/ruby.spec index 11e4004..f229761 100644 --- a/ruby.spec +++ b/ruby.spec @@ -581,6 +581,7 @@ Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent 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 From 97eeae3d759edef845b269a60ba37f553b4be2c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 10 Sep 2025 12:45:34 +0200 Subject: [PATCH 04/16] Update IETF license information after legal review https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index f229761..619082d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -186,10 +186,10 @@ Release: 27%{?dist} # 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 -# -# Licenses under review: +# IETF (this is not official SPDX identifier) # .bundle/gems/net-imap-0.4.9/LICENSE.txt -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 +# 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, From aa9dd7be5fab191a215c022e0dbcef02c567dffe Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Tue, 14 Oct 2025 18:29:12 +0200 Subject: [PATCH 05/16] Enable parallel 'make check'. Use a build condition to turn the parallelization on and off when needed. The output is slightly different from the previous approach. The way results are collected and displayed remains the same. This allows us to scale down build time on multiple cores better. Chose to introduce a bcond explicitly for tests for debugging purposes. Running tests in parallel could hide issues that would show if everything was done in a single test-unit process. Limiting the number of cores available to RPM via a macro would also hinder parallelization of the compilation, which might not be desired in the case of only wanting to serializing the tests. Table from the associated ticket: The time represents total seconds that a full RPM build inside mock took from start to finish. PARALLEL TESTS ------------------------------------------------------------------------ Cores | Runs | Avg (s) | Min (s) | Max (s) | Speedup ------------------------------------------------------------------------ 2_core | 5 | 3196.0 | 3175.0 | 3218.0 | 1.00x 4_core | 5 | 3166.6 | 2949.0 | 3598.0 | 1.01x 8_core | 5 | 1129.2 | 1090.0 | 1257.0 | 2.83x 16_core | 5 | 807.4 | 794.0 | 820.0 | 3.96x SEQUENTIAL TESTS ------------------------------------------------------------------------ Cores | Runs | Avg (s) | Min (s) | Max (s) | Speedup ------------------------------------------------------------------------ 2_core | 5 | 3749.6 | 3728.0 | 3772.0 | 1.00x 4_core | 5 | 3368.8 | 3128.0 | 3539.0 | 1.11x 8_core | 5 | 1810.6 | 1764.0 | 1912.0 | 2.07x 16_core | 5 | 1612.8 | 1571.0 | 1646.0 | 2.32x PARALLEL vs SEQUENTIAL COMPARISON ------------------------------------------------------------------------- Cores | Sequential Avg | Parallel Avg | Difference ------------------------------------------------------------------------- 2_core | 3749.6 s | 3196.0 s | +17.3% 4_core | 3368.8 s | 3166.6 s | +6.4% 8_core | 1810.6 s | 1129.2 s | +60.3% 16_core | 1612.8 s | 807.4 s | +99.8% Resolves: rhbz#2401230 --- ruby.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 619082d..dc220ee 100644 --- a/ruby.spec +++ b/ruby.spec @@ -165,6 +165,7 @@ %endif # Enable test when building on local. %bcond_with bundler_tests +%bcond_without parallel_tests %if 0%{?fedora} %bcond_without hardening_test @@ -1212,7 +1213,7 @@ MSPECOPTS="" # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ - make -C %{_vpath_builddir} check TESTS="-v --show-skip $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=" \ From 6b81f1b80f7f46df25353519b968eb43ac12b270 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 21 Oct 2025 17:59:36 +0100 Subject: [PATCH 06/16] Upgrade to Ruby 3.4.7. - Fix URI Credential Leakage Bypass previous fixes. Resolves: rhbz#2402422 Resolves: CVE-2025-61594 --- ruby.spec | 14 ++++++++++---- sources | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index dc220ee..665a230 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 4 -%global teeny_version 5 +%global teeny_version 7 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -83,7 +83,7 @@ %global pathname_version 0.4.0 %global pp_version 0.6.2 %global prettyprint_version 0.2.0 -%global prism_version 1.2.0 +%global prism_version 1.5.1 %global pstore_version 0.1.4 %global psych_version 5.2.2 %global rdoc_version 6.14.0 @@ -104,7 +104,7 @@ %global tmpdir_version 0.3.1 %global tsort_version 0.2.0 %global un_version 0.3.0 -%global uri_version 1.0.3 +%global uri_version 1.0.4 %global weakref_version 0.1.3 %global win32_registry_version 0.1.0 %global win32ole_version 1.9.1 @@ -178,7 +178,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 27%{?dist} +Release: 28%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1881,6 +1881,12 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* 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 + * Mon Aug 18 2025 Jarek Prokop - 3.4.5-27 - Upgrade to Ruby 3.4.5. Resolves: rhbz#2380246 diff --git a/sources b/sources index dbc2225..da78c8c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.4.5.tar.xz) = 1f5d2fd527d15bd81ca8f49767d6426533367c1018a1d275d34721a96410b51204236173224e5198a42b56162c6e7a7b0c060fc032a9fd7f250b44e05c7af560 +SHA512 (ruby-3.4.7.tar.xz) = a6b99a2f1d0115d5e7efa710da440b9066c524c335928367c80852630f8db5da36c0a82d6e7ace90e8c40cb20c6097cbdca15a51c343254cadf5f0adf60f8505 From 9dc850b91128d67a61e23a32db9395ce78615af5 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 23 Oct 2025 18:03:49 +0100 Subject: [PATCH 07/16] Fix REXML denial of service. Upgrade to rexml gem 3.4.4. https://www.ruby-lang.org/en/news/2025/09/18/dos-rexml-cve-2025-58767/ Resolves: CVE-2025-58767 --- .gitignore | 1 + ruby.spec | 20 +++++++++++++++++++- sources | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 4ed5a91..d2399ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /*/ /ruby-*.tar.xz +/rexml-*.gem /*.rpm !/plans/ diff --git a/ruby.spec b/ruby.spec index 665a230..046bdab 100644 --- a/ruby.spec +++ b/ruby.spec @@ -135,7 +135,7 @@ %global rbs_version 3.8.0 %global repl_type_completor_version 0.1.9 %global resolv_replace_version 0.1.1 -%global rexml_version 3.4.0 +%global rexml_version 3.4.4 %global rinda_version 0.2.0 %global rss_version 0.3.1 %global syslog_version 0.2.0 @@ -240,6 +240,8 @@ Source19: test_rubygems_con.rb # default RDoc gem as shipped in Ruby tarball. This should not be needed for # Ruby 3.5+. Source20: https://github.com/ruby/rdoc/blob/master/lib/rubygems_plugin.rb +# rexml gem +Source21: https://rubygems.org/gems/rexml-%{rexml_version}.gem # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -780,6 +782,10 @@ analysis result in RBS format, a standard type description format for Ruby # Provide an example of usage of the tapset: cp -a %{SOURCE3} . +rm -rf .bundle/gems/rexml-3.4.0 +rm .bundle/specifications/rexml-3.4.0.gemspec +rm gems/rexml-3.4.0.gem + %build autoconf @@ -819,6 +825,16 @@ popd %install rm -rf %{buildroot} +cp -p %{SOURCE21} gems/ + +make -C %{_vpath_builddir} runruby \ + TESTRUN_SCRIPT="%{_builddir}/%{buildsubdir}/bin/gem unpack %{SOURCE21} --target='%{_builddir}/%{buildsubdir}/.bundle/gems'" +make --silent -C %{_vpath_builddir} runruby \ + TESTRUN_SCRIPT="%{_builddir}/%{buildsubdir}/bin/gem spec '%{SOURCE21}' --ruby" \ + > .bundle/specifications/rexml-%{rexml_version}.gemspec + +sed -i -e '/^rexml/ s/3.4.0/3.4.4/' gems/bundled_gems + %make_install -C %{_vpath_builddir} # TODO: Regenerate RBS parser in lib/rbs/parser.rb @@ -1886,6 +1902,8 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ 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. diff --git a/sources b/sources index da78c8c..02d1cf8 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ SHA512 (ruby-3.4.7.tar.xz) = a6b99a2f1d0115d5e7efa710da440b9066c524c335928367c80852630f8db5da36c0a82d6e7ace90e8c40cb20c6097cbdca15a51c343254cadf5f0adf60f8505 +SHA512 (rexml-3.4.4.gem) = 1d4e718504db4aa4481217f85068e79cf58a04cb46827b3baa88a55c3fd3804eafb98f8d295c62035ee05006818b49bc208fab98884e5caf262b66ae6f6dca8f From 4034e3e02c4691b5983eb1f43444f8d4694ae9ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 17 Dec 2025 12:43:46 +0100 Subject: [PATCH 08/16] Update to Ruby 3.4.8. Resolves: rhbz#2422963 Resolves: rhbz#2412227 --- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +-- ruby-2.3.0-ruby_version.patch | 6 ++-- ruby.spec | 33 +++++++------------ sources | 3 +- 6 files changed, 19 insertions(+), 31 deletions(-) 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 8d79f56..1dec456 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 @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4364,7 +4364,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -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 diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 9f25a19..624f34d 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4428,6 +4428,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4429,6 +4429,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 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 1baf565..2ff5594 100644 --- a/ruby-2.1.0-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 -@@ -4400,6 +4400,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='' -@@ -4424,6 +4428,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 diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 1969f9e..8fcdea2 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -4314,9 +4314,6 @@ AS_CASE(["$target_os"], +@@ -4315,9 +4315,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], -@@ -4339,57 +4336,63 @@ AC_ARG_WITH(ridir, +@@ -4340,57 +4337,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -122,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4406,6 +4409,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 diff --git a/ruby.spec b/ruby.spec index 046bdab..3880a0c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 4 -%global teeny_version 7 +%global teeny_version 8 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -38,7 +38,7 @@ %global rubygems_securerandom_version 0.4.1 %global rubygems_timeout_version 0.4.3 %global rubygems_tsort_version 0.2.0 -%global rubygems_uri_version 1.0.3 +%global rubygems_uri_version 1.0.4 # Default gems. %global bundler_version 2.6.9 @@ -49,7 +49,7 @@ %global bundler_securerandom_version 0.4.1 %global bundler_thor_version 1.3.2 %global bundler_tsort_version 0.2.0 -%global bundler_uri_version 1.0.3 +%global bundler_uri_version 1.0.4 %global benchmark_version 0.4.0 %global cgi_version 0.4.2 @@ -77,13 +77,13 @@ %global net_protocol_version 0.2.2 %global open_uri_version 0.5.0 %global open3_version 0.2.1 -%global openssl_version 3.3.0 +%global openssl_version 3.3.1 %global optparse_version 0.6.0 %global ostruct_version 0.6.1 %global pathname_version 0.4.0 %global pp_version 0.6.2 %global prettyprint_version 0.2.0 -%global prism_version 1.5.1 +%global prism_version 1.5.2 %global pstore_version 0.1.4 %global psych_version 5.2.2 %global rdoc_version 6.14.0 @@ -178,7 +178,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 28%{?dist} +Release: 29%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -240,8 +240,6 @@ Source19: test_rubygems_con.rb # default RDoc gem as shipped in Ruby tarball. This should not be needed for # Ruby 3.5+. Source20: https://github.com/ruby/rdoc/blob/master/lib/rubygems_plugin.rb -# rexml gem -Source21: https://rubygems.org/gems/rexml-%{rexml_version}.gem # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -782,10 +780,6 @@ analysis result in RBS format, a standard type description format for Ruby # Provide an example of usage of the tapset: cp -a %{SOURCE3} . -rm -rf .bundle/gems/rexml-3.4.0 -rm .bundle/specifications/rexml-3.4.0.gemspec -rm gems/rexml-3.4.0.gem - %build autoconf @@ -825,16 +819,6 @@ popd %install rm -rf %{buildroot} -cp -p %{SOURCE21} gems/ - -make -C %{_vpath_builddir} runruby \ - TESTRUN_SCRIPT="%{_builddir}/%{buildsubdir}/bin/gem unpack %{SOURCE21} --target='%{_builddir}/%{buildsubdir}/.bundle/gems'" -make --silent -C %{_vpath_builddir} runruby \ - TESTRUN_SCRIPT="%{_builddir}/%{buildsubdir}/bin/gem spec '%{SOURCE21}' --ruby" \ - > .bundle/specifications/rexml-%{rexml_version}.gemspec - -sed -i -e '/^rexml/ s/3.4.0/3.4.4/' gems/bundled_gems - %make_install -C %{_vpath_builddir} # TODO: Regenerate RBS parser in lib/rbs/parser.rb @@ -1897,6 +1881,11 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* 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 diff --git a/sources b/sources index 02d1cf8..dde7f58 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (ruby-3.4.7.tar.xz) = a6b99a2f1d0115d5e7efa710da440b9066c524c335928367c80852630f8db5da36c0a82d6e7ace90e8c40cb20c6097cbdca15a51c343254cadf5f0adf60f8505 -SHA512 (rexml-3.4.4.gem) = 1d4e718504db4aa4481217f85068e79cf58a04cb46827b3baa88a55c3fd3804eafb98f8d295c62035ee05006818b49bc208fab98884e5caf262b66ae6f6dca8f +SHA512 (ruby-3.4.8.tar.xz) = b6289654685c2d381d15123cf07a131fd088edf13a5336966af5a2e8fad9adda42d14caa7bb0998331831af71e35c546091db55c82089e89b9508603ff5f92d6 From c670682a9770b6a17c41d0126b0e97ec28f6d00a Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 19 Sep 2025 09:53:56 +0200 Subject: [PATCH 09/16] Upgrade to Ruby 4.0.0. * Define different expected archives macros for development. When revision was defined, there was also timestamp appended. That does not seem necessary for preview tarballs from upstream. Instead split it into their own separate conditionals. * irb and rdoc are now a bundled gem Don't ship the %ruby_libdir parts and the symlinking for irb and rdoc. The rdoc rubygems plugin should now be correctly present. Remove the additional source. * Multiple gems are now bundled gems. Add them to ruby-bundled-gems subpackage instead of their own separate packages. * Split the rdoc support for ruby version directory from ruby-2.3.0-ruby_version.patch. After Ruby moved RDoc to bundled gems from default gems, the directory in which RDoc is in the upstream tarball is not in the upstream source, necessitating a patch split for the Ruby version patch. It cannot be fully re-created including the rdoc part in a single patch with upstream ruby/ruby github. Instead the part is created from ruby/rdoc github. Add bundled provides for rubygem-json + the source into comments. Source is as described in upstream commits and in the LEGAL file upstream. Add the respective licenses for the subpackage. RDoc includes a new doc generator that is under the MIT license, update the license to reflect it. Resolves: rhbz#2425358 --- ...0-Enable-configuration-of-archlibdir.patch | 6 +- ...ed-paths-when-empty-version-string-i.patch | 12 +- ruby-2.1.0-always-use-i386.patch | 6 +- ruby-2.1.0-custom-rubygems-location.patch | 18 +- ...by_version_dir_name-support-for-RDoc.patch | 22 + ruby-2.3.0-ruby_version.patch | 54 +-- ruby-2.7.0-Initialize-ABRT-hook.patch | 30 +- ...3.0-Disable-syntax-suggest-test-case.patch | 6 +- ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch | 136 ------ ruby.spec | 389 +++++++++++------- sources | 2 +- 11 files changed, 311 insertions(+), 370 deletions(-) create mode 100644 ruby-2.3.0-ruby_version-Add-ruby_version_dir_name-support-for-RDoc.patch delete mode 100644 ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 158088d..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 -@@ -3518,6 +3518,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' 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 1dec456..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 -@@ -4365,7 +4365,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4472,7 +4472,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -25,7 +25,7 @@ index c42436c23d..d261ea57b5 100644 rubylibdir='${rubylibprefix}'${ruby_version_dir} diff --git a/loadpath.c b/loadpath.c -index 9160031..0d4d953 100644 +index b8969e6998..bbfd4daa78 100644 --- a/loadpath.c +++ b/loadpath.c @@ -65,21 +65,33 @@ const char ruby_initial_load_paths[] = @@ -63,10 +63,10 @@ index 9160031..0d4d953 100644 RUBY_LIB "\0" diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb -index 07076d4..35e6c3c 100755 +index db74115730..2b01796abf 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -116,7 +116,7 @@ +@@ -114,7 +114,7 @@ val = val.gsub(/\$(?:\$|\{?(\w+)\}?)/) {$1 ? "$(#{$1})" : $&}.dump case name when /^prefix$/ diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 624f34d..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 -@@ -4429,6 +4429,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 diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 2ff5594..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 -@@ -4401,6 +4401,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='' -@@ -4425,6 +4429,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4532,6 +4536,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -35,7 +35,7 @@ index 93af30321d..bc13397e0e 100644 AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/loadpath.c b/loadpath.c -index 623dc9d..74c5d9e 100644 +index bbfd4daa78..69677a9297 100644 --- a/loadpath.c +++ b/loadpath.c @@ -94,6 +94,10 @@ const char ruby_initial_load_paths[] = @@ -50,7 +50,7 @@ index 623dc9d..74c5d9e 100644 #ifdef RUBY_THINARCH RUBY_ARCH_LIB_FOR(RUBY_THINARCH) "\0" diff --git a/template/verconf.h.tmpl b/template/verconf.h.tmpl -index 79c003e..34f2382 100644 +index 9ba2bd6de5..4ec4ce9353 100644 --- a/template/verconf.h.tmpl +++ b/template/verconf.h.tmpl @@ -36,6 +36,9 @@ @@ -64,10 +64,10 @@ index 79c003e..34f2382 100644 % R = {} % R["ruby_version"] = '"RUBY_LIB_VERSION"' diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index e9110a17ca..76a1f0a315 100755 +index a9e6365b27..7117e65e82 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -382,6 +382,7 @@ def CONFIG.[](name, mandatory = false) +@@ -393,6 +393,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -974,7 +975,16 @@ def (bins = []).add(name) +@@ -1082,7 +1083,16 @@ def (bins = []).add(name) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] 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 8fcdea2..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. @@ -17,10 +17,10 @@ string. 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 -@@ -4315,9 +4315,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], -@@ -4340,57 +4337,63 @@ AC_ARG_WITH(ridir, +@@ -4447,57 +4444,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -122,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4407,6 +4410,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 @@ -131,7 +131,7 @@ index 80b137e380..63cd3b4f8b 100644 AC_SUBST(rubyarchdir)dnl AC_SUBST(sitedir)dnl diff --git a/template/ruby.pc.in b/template/ruby.pc.in -index 8a2c066..c81b211 100644 +index 6901ec2320..9b7b787208 100644 --- a/template/ruby.pc.in +++ b/template/ruby.pc.in @@ -2,6 +2,7 @@ MAJOR=@MAJOR@ @@ -143,35 +143,20 @@ index 8a2c066..c81b211 100644 RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ 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 = 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 -@@ -945,7 +945,7 @@ def (bins = []).add(name) +@@ -1053,7 +1053,7 @@ def (bins = []).add(name) install?(:doc, :rdoc) do if $rdocdir @@ -181,7 +166,7 @@ index d4c110e..d39c9a6 100755 install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end -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. @@ -192,7 +177,7 @@ Subject: [PATCH 3/4] Add ruby_version_dir_name support for RubyGems. 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb -index d4ff4a262c..3f9a5bf590 100644 +index 90f09fc191..f6b8a03b95 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb @@ -35,7 +35,7 @@ def self.default_spec_cache_dir @@ -224,10 +209,10 @@ index d4ff4a262c..3f9a5bf590 100644 ## 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 -@@ -1365,7 +1365,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] @@ -237,7 +222,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1441,7 +1442,7 @@ def test_self_vendor_dir +@@ -1415,7 +1416,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", @@ -247,8 +232,7 @@ index b25068405d..e9fef4a311 100644 assert_equal expected, Gem.vendor_dir end - -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 @@ -259,10 +243,10 @@ Subject: [PATCH 4/4] Let headers directories follow the configured version 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac -index a00f2b6776..999e2d6d5d 100644 +index 9d8662369c..2bc5153141 100644 --- a/configure.ac +++ b/configure.ac -@@ -143,7 +143,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) diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 65d1e65..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. @@ -16,15 +16,15 @@ To keep the things simple for now, load the ABRT hook via C. [5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ --- abrt.c | 12 ++++++++++++ - common.mk | 3 ++- + common.mk | 1 + ruby.c | 4 ++++ spec/ruby/core/kernel/require_spec.rb | 2 ++ - 4 files changed, 20 insertions(+), 1 deletion(-) + 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 @@ @@ -41,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 -@@ -110,7 +110,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ - prism/prism.$(OBJEXT) \ +@@ -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 -@@ -1744,10 +1744,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); @@ -70,14 +68,14 @@ index 60c57d6259..1eec16f2c8 100644 { Init_builtin_features(); + Init_abrt(); - rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } + void rb_call_builtin_inits(void); diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb -index 60c57d6259..1eec16f2c8 100644 +index 60d17242fe..a8f93b0db4 100644 --- a/spec/ruby/core/kernel/require_spec.rb +++ b/spec/ruby/core/kernel/require_spec.rb -@@ -25,6 +25,8 @@ +@@ -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, '.*') } diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch index 40b7662..09d11f9 100644 --- a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -1,4 +1,4 @@ -From 6365d1b79e10330fced83d00d4cb950380a3b0fe Mon Sep 17 00:00:00 2001 +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. @@ -9,10 +9,10 @@ This requires internet connection. 1 file changed, 2 deletions(-) diff --git a/common.mk b/common.mk -index d55d1788aa..73755f6ccd 100644 +index dae7d9dc00..111e859d1b 100644 --- a/common.mk +++ b/common.mk -@@ -1668,8 +1668,6 @@ no-test-bundled-gems-spec: +@@ -1619,8 +1619,6 @@ no-test-bundled-gems-spec: test-syntax-suggest: 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 deleted file mode 100644 index 26ca3ec..0000000 --- a/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch +++ /dev/null @@ -1,136 +0,0 @@ -From e0e771b76fbede656fe51c8bf18ce810f4afeee0 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -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 - diff --git a/ruby.spec b/ruby.spec index 3880a0c..fb84e78 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ -%global major_version 3 -%global minor_version 4 -%global teeny_version 8 +%global major_version 4 +%global minor_version 0 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,15 +10,22 @@ %dnl %global milestone preview2 # Keep the revision enabled for pre-releases from GIT. -%dnl %global revision 48d4efcb85 +%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}} +%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") -%define development_release ~%{ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}} +%endif + +%if 0%{?milestone:1}%{?revision:1} != 0 +%define development_release ~%{?ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}} %endif @@ -29,118 +36,115 @@ ## BUNDLED_GEMS_VERSIONS # Bundled libraries versions -%global rubygems_version 3.6.9 +%global rubygems_version 4.0.3 %global rubygems_molinillo_version 0.8.0 -%global rubygems_net_http_version 0.6.0 +%global rubygems_net_http_version 0.7.0 %global rubygems_net_protocol_version 0.2.2 -%global rubygems_optparse_version 0.6.0 -%global rubygems_resolv_version 0.6.0 +%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.3 +%global rubygems_timeout_version 0.4.4 %global rubygems_tsort_version 0.2.0 -%global rubygems_uri_version 1.0.4 +%global rubygems_uri_version 1.1.1 # Default gems. -%global bundler_version 2.6.9 -%global bundler_connection_pool_version 2.5.0 -%global bundler_fileutils_version 1.7.3 -%global bundler_net_http_persistent_version 4.0.4 +%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.3.2 +%global bundler_thor_version 1.4.0 %global bundler_tsort_version 0.2.0 -%global bundler_uri_version 1.0.4 +%global bundler_uri_version 1.1.1 -%global benchmark_version 0.4.0 -%global cgi_version 0.4.2 -%global date_version 3.4.1 -%global delegate_version 0.4.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.0 -%global english_version 0.8.0 -%global erb_version 4.0.4 -%global error_highlight_version 0.7.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.2.0 -%global fiddle_version 1.1.6 -%global fileutils_version 1.7.3 +%global fcntl_version 1.3.0 +%global fileutils_version 1.8.0 %global find_version 0.2.0 -%global forwardable_version 1.3.3 -%global io_console_version 0.8.1 +%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.3.2 -%global ipaddr_version 1.2.7 -%global irb_version 1.14.3 -%global json_version 2.9.1 -%global logger_version 1.6.4 -%global net_http_version 0.6.0 +%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 3.3.1 -%global optparse_version 0.6.0 -%global ostruct_version 0.6.1 -%global pathname_version 0.4.0 -%global pp_version 0.6.2 +%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.5.2 -%global pstore_version 0.1.4 -%global psych_version 5.2.2 -%global rdoc_version 6.14.0 -%global readline_version 0.0.4 -%global reline_version 0.6.0 -%global resolv_version 0.6.2 +%global prism_version 1.7.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 set_version 1.1.1 %global shellwords_version 0.2.2 %global singleton_version 0.3.0 -%global stringio_version 3.1.2 -%global strscan_version 3.1.2 +%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.1 -%global timeout_version 0.4.3 +%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.0.4 -%global weakref_version 0.1.3 -%global win32_registry_version 0.1.0 -%global win32ole_version 1.9.1 +%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.1 +%global zlib_version 3.2.2 # Bundled gems. %global abbrev_version 0.1.2 -%global base64_version 0.2.0 -%global bigdecimal_version 3.1.8 -%global csv_version 3.3.2 -%global debug_version 1.11.0 -%global drb_version 2.2.1 +%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 matrix_version 0.4.2 -%global minitest_version 5.25.4 +%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.8 -%global net_imap_version 0.5.8 +%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 power_assert_version 2.0.5 -%global prime_version 0.1.3 +%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.2.1 -%global rbs_version 3.8.0 -%global repl_type_completor_version 0.1.9 +%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.1 -%global syslog_version 0.2.0 -%global test_unit_version 3.6.7 -%global typeprof_version 0.30.1 +%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 @@ -178,7 +182,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 29%{?dist} +Release: 30%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -236,10 +240,6 @@ Source16: rpm_test_helper.rb Source17: test_rubygems_req.rb Source18: test_rubygems_prov.rb Source19: test_rubygems_con.rb -# This file is available in official RDoc 6.9+, while it is missing from -# default RDoc gem as shipped in Ruby tarball. This should not be needed for -# Ruby 3.5+. -Source20: https://github.com/ruby/rdoc/blob/master/lib/rubygems_plugin.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -255,18 +255,23 @@ Source20: https://github.com/ruby/rdoc/blob/master/lib/rubygems_plugin.rb # 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 +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 @@ -279,9 +284,6 @@ 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 Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -411,6 +413,7 @@ 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 @@ -475,11 +478,13 @@ Version: %{rdoc_version} # BSD-3-Clause: lib/rdoc/generator/darkfish.rb # CC-BY-2.5: lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif # OFL-1.1-RFN: lib/rdoc/generator/template/darkfish/css/fonts.css +# MIT: lib/rdoc/generator/aliki.rb +# MIT: lib/rdoc/generator/template/aliki/* # Note that RDoc now embeds Racc parser: # https://github.com/ruby/rdoc/pull/1019 # Luckily, this should have no license impact: # https://github.com/ruby/racc/blob/5eb07b28bfb3e193a1cac07798fe7be7e1e246c4/lib/racc/parser.rb#L8-L10 -License: GPL-2.0-only AND Ruby AND BSD-3-Clause AND CC-BY-2.5 AND OFL-1.1-RFN +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} @@ -536,8 +541,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} -License: Ruby OR BSD-2-Clause +# 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. @@ -600,10 +615,13 @@ many machines, systematically and repeatably. 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} @@ -611,8 +629,12 @@ 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-prime) = %{prime_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} @@ -636,16 +658,13 @@ 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. @@ -769,13 +788,17 @@ analysis result in RBS format, a standard type description format for Ruby %setup -q -n %{ruby_archive} %patch 0 -p1 + +pushd .bundle/gems/rdoc-%{rdoc_version} %patch 1 -p1 +popd + %patch 2 -p1 %patch 3 -p1 %patch 4 -p1 +%patch 5 -p1 %patch 6 -p1 %patch 9 -p1 -%patch 10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -846,8 +869,7 @@ sed -i 's/Version: \${ruby_version}/Version: %{ruby_version}/' %{buildroot}%{_li # Kill bundled certificates, as they should be part of ca-certificates. for cert in \ - rubygems.org/GlobalSignRootCA.pem \ - rubygems.org/GlobalSignRootCA_R3.pem + rubygems.org/GlobalSign.pem do rm %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert rm -d $(dirname %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/$cert) || : @@ -885,32 +907,6 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console, which is considered to be part of stdlib by other Gems -mkdir -p %{buildroot}%{gem_libdir irb} -mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_libdir irb} -mv %{buildroot}%{gem_spec -d irb} %{buildroot}%{gem_spec irb} -ln -s %{gem_libdir irb}/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_libdir irb}/'{}' %{buildroot}%{ruby_libdir}/'{}' \; -popd - -mkdir -p %{buildroot}%{gem_libdir rdoc} -mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_libdir rdoc} -mv %{buildroot}%{gem_spec -d rdoc} %{buildroot}%{gem_spec rdoc} -# Default gem is missing the RubyGems plugin, using various sorts of -# heuristics to workadound this. Restore the plugin to let the documentaion -# generator work properly. This shold not be needed for Ruby 3.5+. -# https://github.com/ruby/rdoc/pull/1171 -# https://github.com/rubygems/rubygems/pull/8340 -# Make sure to not overwrite the file, because it should not exist. -test ! -e %{buildroot}%{gem_libdir rdoc}/%{basename:%{SOURCE20}} -mv %{SOURCE20} %{buildroot}%{gem_libdir rdoc} -echo "require_relative '../gems/rdoc-%{rdoc_version}/lib/rubygems_plugin.rb'" \ - > %{buildroot}%{gem_plugin rdoc} - # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 mkdir -p %{buildroot}%{gem_libdir bundler} @@ -960,7 +956,9 @@ find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete # Move man pages into proper location mkdir -p %{buildroot}%{_mandir}/man{1,5} +mv %{buildroot}%{gem_instdir irb}/man/irb.1 %{buildroot}%{_mandir}/man1 mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rdoc}/man/ri.1 %{buildroot}%{_mandir}/man1 # 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 @@ -980,7 +978,6 @@ 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.* @@ -989,9 +986,9 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check %if 0%{?with_hardening_test} # Check Ruby hardening. -%define fortification_x86_64 fortified="12" fortify-able="29" +%define fortification_x86_64 fortified="10" fortify-able="26" %define fortification_i686 fortified="10" fortify-able="26" -%define fortification_aarch64 fortified="12" fortify-able="29" +%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" @@ -1018,6 +1015,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # 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}]; \ @@ -1045,6 +1043,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # 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}]; \ @@ -1120,6 +1119,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ 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_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \ puts %Q[Gem::Net::HTTP::Persistent::VERSION: #{Gem::Net::HTTP::Persistent::VERSION}]; \ @@ -1261,10 +1261,8 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} -%exclude %{ruby_libdir}/irb* %exclude %{ruby_libdir}/json* %exclude %{ruby_libdir}/psych* -%{ruby_libdir}/benchmark* %{ruby_libdir}/bundled_gems.rb %{ruby_libdir}/cgi* %{ruby_libdir}/coverage.rb @@ -1275,12 +1273,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{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}/ipaddr.rb -%{ruby_libdir}/logger* %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb %{ruby_libdir}/net @@ -1289,20 +1285,14 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/open3* %{ruby_libdir}/optionparser.rb %{ruby_libdir}/optparse* -%{ruby_libdir}/ostruct* %{ruby_libdir}/pathname.rb %{ruby_libdir}/pp.rb %{ruby_libdir}/prettyprint.rb -%{ruby_libdir}/pstore* %{ruby_libdir}/random -%{ruby_libdir}/readline.rb -%{ruby_libdir}/reline* %{ruby_libdir}/resolv.rb %{ruby_libdir}/ripper* -%dir %{ruby_libdir}/ruby_vm -%{ruby_libdir}/ruby_vm/rjit %{ruby_libdir}/securerandom.rb -%{ruby_libdir}/set* +%{ruby_libdir}/set/subclass_compatible.rb %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb @@ -1401,13 +1391,11 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libarchdir}/erb/escape.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so -%{ruby_libarchdir}/fiddle.so %dir %{ruby_libarchdir}/io %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so %{ruby_libarchdir}/monitor.so %{ruby_libarchdir}/objspace.so -%{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so %dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb @@ -1455,8 +1443,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_rpmconfigdir}/rubygems.con %files default-gems -%gem_spec -d benchmark -%gem_spec -d cgi %gem_spec -d date %gem_spec -d delegate %gem_spec -d did_you_mean @@ -1469,31 +1455,23 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %gem_spec -d error_highlight %gem_spec -d etc %gem_spec -d fcntl -%gem_spec -d fiddle %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 logger %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 ostruct -%gem_spec -d pathname %gem_spec -d pp %gem_spec -d prettyprint -%gem_spec -d pstore -%gem_spec -d readline -%gem_spec -d reline %gem_spec -d resolv %gem_spec -d ruby2_keywords %gem_spec -d securerandom -%gem_spec -d set %gem_spec -d shellwords %gem_spec -d singleton %gem_spec -d stringio @@ -1517,9 +1495,17 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %files -n rubygem-irb %{_bindir}/irb -%{ruby_libdir}/irb* -%{gem_instdir irb} +%dir %{gem_instdir irb} +%{gem_libdir irb} %{gem_spec irb} +%{gem_instdir irb}/exe + +%{gem_instdir irb}/Gemfile +%license %{gem_instdir irb}/LICENSE.txt +%doc %{gem_instdir irb}/doc +%doc %{gem_instdir irb}/README.md +%doc %{gem_instdir irb}/CONTRIBUTING.md +%doc %{gem_instdir irb}/EXTEND_IRB.md %{_mandir}/man1/irb.1* %files -n rubygem-rdoc @@ -1585,11 +1571,25 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # base64 %dir %{gem_instdir base64} -%license %{gem_instdir base64}/LICENSE.txt +%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 @@ -1603,6 +1603,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %dir %{gem_instdir drb} %license %{gem_instdir drb}/LICENSE.txt %{gem_libdir drb} +%{gem_instdir drb}/drb.gemspec %{gem_spec drb} # getoptlong @@ -1616,10 +1617,32 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %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}/LICENSE.txt +%license %{gem_instdir matrix}/BSDL +%license %{gem_instdir matrix}/COPYING %{gem_libdir matrix} +%{gem_instdir matrix}/matrix.gemspec %{gem_spec matrix} # mutex_m @@ -1695,6 +1718,18 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %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 @@ -1703,8 +1738,20 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{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} @@ -1724,6 +1771,23 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{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 @@ -1758,7 +1822,8 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # syslog %dir %{gem_instdir syslog} %{gem_extdir_mri syslog} -%license %{gem_instdir syslog}/LICENSE.txt +%license %{gem_instdir syslog}/BSDL +%license %{gem_instdir syslog}/COPYING %{gem_instdir syslog}/bin %{gem_libdir syslog} %exclude %{gem_cache syslog} @@ -1768,10 +1833,12 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{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 @@ -1820,16 +1887,17 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{gem_instdir rbs}/sig %{gem_instdir rbs}/src %{gem_instdir rbs}/stdlib -%{gem_instdir rbs}/templates %{gem_spec rbs} %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 @@ -1874,6 +1942,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %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} @@ -1881,6 +1950,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* 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 diff --git a/sources b/sources index dde7f58..55a3dd4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.4.8.tar.xz) = b6289654685c2d381d15123cf07a131fd088edf13a5336966af5a2e8fad9adda42d14caa7bb0998331831af71e35c546091db55c82089e89b9508603ff5f92d6 +SHA512 (ruby-4.0.0.tar.xz) = 2d5b2e566eaf70a5f3ea6ce6afc0611c0415de58a41336ef7a0b855c9a91eda9aa790a5f8b48e40a1eb9d50f8ea0f687216e617f16c8d040a08474f3116518a4 From 5d8c8b3fb5e55769f9deb61c269b22573e8c6f24 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Mon, 5 Jan 2026 15:33:05 +0100 Subject: [PATCH 10/16] Compress SourceN and PatchN numbering to be in proper sequence. Over the time, sources and patches are added and removed, some are removed sooner than the source after them. That makes it possible for us to end up in situation where the `SourceN:` or `PatchN:` are not in sequence. (where N is a number from the set of Natural numbers starting with 0) After an offline discussion, it has come to attention that the numbering was always appended and never compressed partly due to inertia, and partly to not try to differ for RHELs, make backports/diffs between Ruby versions easier and smaller. At the same time, we concurred that this new Ruby version is a good breakpoint for this type of changes. Therefore, the Source and Patch numbering was brought back into sequence on this break point. --- ruby.spec | 62 +++++++++++++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/ruby.spec b/ruby.spec index fb84e78..e6edf3c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -225,21 +225,21 @@ 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. -Source15: test_openssl_fips.rb +Source12: test_openssl_fips.rb # RPM gem Requires dependency generator tests. -Source16: rpm_test_helper.rb -Source17: test_rubygems_req.rb -Source18: test_rubygems_prov.rb -Source19: test_rubygems_con.rb +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. @@ -247,9 +247,9 @@ Source19: test_rubygems_con.rb %{load:%{SOURCE5}} %define _local_file_attrs local_generator -%define __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" -%define __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" -%define __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE11}" +%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. @@ -283,7 +283,7 @@ Patch5: ruby-2.1.0-custom-rubygems-location.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 +Patch7: ruby-3.3.0-Disable-syntax-suggest-test-case.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -798,7 +798,7 @@ popd %patch 4 -p1 %patch 5 -p1 %patch 6 -p1 -%patch 9 -p1 +%patch 7 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -887,10 +887,10 @@ sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. mkdir -p %{buildroot}%{_fileattrsdir} -install -m 644 %{SOURCE8} %{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 @@ -1181,27 +1181,27 @@ touch %{_vpath_builddir}/abrt.rb # Check if abrt hook is required (RubyGems are disabled by default when using # runruby, so re-enable them). -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" # Check if systemtap is supported. %if %{with systemtap} ln -sfr probes.d %{_vpath_builddir}/ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE14} +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 \ - %{SOURCE17} --verbose" -GENERATOR_SCRIPT="%{SOURCE10}" \ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ - %{SOURCE18} --verbose" -GENERATOR_SCRIPT="%{SOURCE11}" \ -make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ - -I%{_builddir}/%{buildsubdir}/tool/lib -I%{_sourcedir} --enable-gems \ - %{SOURCE19} --verbose" + %{SOURCE16} --verbose" DISABLE_TESTS="" @@ -1218,7 +1218,7 @@ MSPECOPTS="" # Run Ruby OpenSSL tests in OpenSSL FIPS. make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ - %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose" + %{SOURCE12} %{_builddir}/%{buildsubdir} --verbose" %{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} From 4c3cde9ed26c37a8c8006153a13826f78040d4ad Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 11 Dec 2025 15:15:23 +0100 Subject: [PATCH 11/16] Enable both zjit and yjit. Since upstream's https://github.com/ruby/ruby/commit/029a48176cf9fd367d52d8c9f87cb9f77d425a43 we can build both without the necessity of cargo or new rust dependencies if we only care about the JITs. Introduce `bcond_without rust`. Parts of Ruby are in Rust, which necessitates dependencies such as the compiler, macros and so on. Since both YJIT and ZJIT are in rust but can be built independently of each other but not independently of present Rust support in the buildroot, it is better to bring in rust bits when we build ruby `with_rust`. The %%{build_rustflags} macro lives in different packages, depending on if we are in EL or Fedora. RUSTFLAGS could affect too much at the same time and only apply to cargo. The approach merged in upstream PR https://github.com/ruby/ruby/pull/15695 is to instead have a specific flag on configure script to instrument the `rustc` compilation flags specifically when building JITs. This ensures that we are properly providing the %%{build_rustflags} macro for rustc. The downcased version in the configure script appends to upstream's defaults. This way we preserve upstream's flags and overwrite any flags that differ in Fedora from upstream, since the flag specified later on the CLI will be taken. For example if we have: ~~~ $ rustc -C opt-level=3 -C opt-level=2 foo.rs ~~~ Then the latter value is used, so the file is compiled with opt-level=2, not 3, because it was specified later. So we should always end up with Distro compliant compiler flags. Also fixup the doc referring to supported JIT architectures in the links in the comment near the JIT bconds. --- ...mizable-rustc_flags-for-rustc-builds.patch | 117 ++++++++++++++++++ ruby.spec | 30 ++++- 2 files changed, 144 insertions(+), 3 deletions(-) create mode 100644 ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch 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.spec b/ruby.spec index e6edf3c..cb447cc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -162,11 +162,19 @@ %bcond_without gmp %bcond_without hostname %bcond_without systemtap -# YJIT is supported on x86_64 and aarch64. -# https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md +%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 @@ -284,6 +292,9 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch # Disable syntax_suggest test suite, which tries to download its dependencies. # https://bugs.ruby-lang.org/issues/19297 Patch7: ruby-3.3.0-Disable-syntax-suggest-test-case.patch +# Add a way to provide %%build_rustflags to JIT's rustc. +# https://github.com/ruby/ruby/pull/15695 +Patch8: ruby-4.0.1-Support-customizable-rustc_flags-for-rustc-builds.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -304,7 +315,17 @@ BuildRequires: zlib-devel %{?with_gmp:BuildRequires: gmp-devel} %{?with_systemtap:BuildRequires: %{_bindir}/dtrace} %{?with_systemtap:BuildRequires: systemtap-sdt-devel} -%{?with_yjit:BuildRequires: %{_bindir}/rustc} +%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 @@ -799,6 +820,7 @@ popd %patch 5 -p1 %patch 6 -p1 %patch 7 -p1 +%patch 8 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -832,6 +854,8 @@ pushd %{_vpath_builddir} --with-ruby-version='' \ --enable-multiarch \ %{?with_yjit: --enable-yjit} \ + %{?with_zjit: --enable-zjit} \ + %{?with_rust: rustc_flags='%{build_rustflags}'} \ popd From bc07cae127a3d1df16c3b0720ff567f52861083c Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Mon, 5 Jan 2026 10:28:52 +0100 Subject: [PATCH 12/16] Remove obsoletes & provides from Ruby < 3.0. We have carried obsoletes and provides around merged or removed packages from Fedora versions that are EOL for quite some time. Similarly to re-numbering the SourceN: declaration to be in proper sequence, Ruby 4.0.0 is a good break point to finally remove these old obsoletes/provides. However, to be careful since RHEL 9 might be a destination for Ruby 4.0, do not remove obsoletes for Ruby >= 3.0, RHEL 9 still has Ruby 3.0 which motivates the bottom version constraint on where to end. On that distro someone might enable a ruby:4.0 module after installing system ruby and then just run dnf update to get the new contents. That is not recommended nor supported, but let's not check who uses that approach by potentially breaking it. --- ruby.spec | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/ruby.spec b/ruby.spec index cb447cc..bd11514 100644 --- a/ruby.spec +++ b/ruby.spec @@ -389,15 +389,6 @@ Provides: bundled(ccan-list) Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} -# Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe. -Obsoletes: ruby-tcltk < 2.4.0 - -# The Net::Telnet and XMLRPC were removed in Ruby 2.8, i.e. F34 timeframe. -# https://bugs.ruby-lang.org/issues/16484 -# TODO: Update the versions prior landing in Fedora. -Obsoletes: rubygem-net-telnet < 0.2.0-%{release} -Obsoletes: rubygem-xmlrpc < 0.3.0-%{release} - %description libs This package includes the libruby, necessary to run Ruby. @@ -465,8 +456,6 @@ Macros and development tools for packaging RubyGems. %package default-gems 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 # Obsoleted by Ruby 3.0 in F34 timeframe. Obsoletes: rubygem-openssl < 2.2.0-145 BuildArch: noarch @@ -482,10 +471,6 @@ Version: %{irb_version} License: Ruby OR BSD-2-Clause Provides: irb = %{version}-%{release} Provides: bundled(rubygem-irb) = %{irb_version} -# Obsoleted by Ruby 2.6 in F30 timeframe. -Provides: ruby(irb) = %{ruby_version}%{?development_release}-%{release} -Provides: ruby-irb = %{ruby_version}%{?development_release}-%{release} -Obsoletes: ruby-irb < %{ruby_version}%{?development_release}-%{release} BuildArch: noarch %description -n rubygem-irb From 916dd3e4c2154b2da85ad3710d0438fa96f5baef Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 7 Jan 2026 10:32:32 +0100 Subject: [PATCH 13/16] Fix rdoc error when installing multiple document kinds. Sourced from Fedora: https://src.fedoraproject.org/rpms/rubygem-rdoc/pull-request/3 and deleted the portion of the patch that edited the rdoc's tests, because the upstream Ruby tar does not contain tests for rdoc. Fixes case where installling multiple documents: `gem install -V hocon --document=ri,rdoc` can result in an exception: ~~~ $ gem install -V hocon --document=ri,rdoc .... .... Successfully installed hocon-1.4.0 Parsing documentation for hocon-1.4.0 Parsing sources... 100% [88/88] lib/hocon/version.rb Installing ri documentation for hocon-1.4.0 Installing aliki documentation for hocon-1.4.0 ERROR: While executing gem ... (NoMethodError) undefined method 'empty?' for an instance of RDoc::Markup::Paragraph return '' unless first_comment && !first_comment.empty? ^^^^^^^ <...snip...> ~~~ See: https://github.com/ruby/rdoc/issues/1530 --- ...1-fix-mutilple-document-installation.patch | 28 +++++++++++++++++++ ruby.spec | 4 +++ 2 files changed, 32 insertions(+) create mode 100644 rdoc-pr1531-fix-mutilple-document-installation.patch 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/ruby.spec b/ruby.spec index bd11514..578b5cc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -295,6 +295,9 @@ 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} %{?with_rubypick:Suggests: rubypick} @@ -797,6 +800,7 @@ analysis result in RBS format, a standard type description format for Ruby pushd .bundle/gems/rdoc-%{rdoc_version} %patch 1 -p1 +%patch 9 -p1 popd %patch 2 -p1 From 95c21e57751a564afe4457e7f5a5c0393ec5f8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 12 Jan 2026 17:03:00 +0100 Subject: [PATCH 14/16] Use correct `CC0-1.0` SPDX identifier `CC0` is not valid license identifier anymore: ~~~ $ license-validate -v CC0 No terminal matches 'C' in the current parser context, at line 1 col 1 CC0 ^ Expected one of: * __ANON_202 ... snip ... * __ANON_163 Not a valid license string Please check https://docs.fedoraproject.org/en-US/legal/all-allowed/ ~~~ --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 578b5cc..fb3a1dc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -223,7 +223,7 @@ Release: 30%{?dist} # 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 -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 AND zlib AND Unicode-DFS-2015 AND HPND-Markus-Kuhn AND Ruby-pty +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 From ed5fc66af766f85e876fc9e245b50375d09003ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Jan 2026 16:47:55 +0100 Subject: [PATCH 15/16] Remove unused rubygems_plugin.rb The use was dropped with introduction of Ruby 4.0 in c670682a9770b6a17c41d0126b0e97ec28f6d00a --- rubygems_plugin.rb | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 rubygems_plugin.rb diff --git a/rubygems_plugin.rb b/rubygems_plugin.rb deleted file mode 100644 index 55c75da..0000000 --- a/rubygems_plugin.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -# If this file is exist, RDoc generates and removes documents by rubygems plugins. -# -# In follwing cases, -# RubyGems directly exectute RDoc::RubygemsHook.generation_hook and RDoc::RubygemsHook#remove to generate and remove documents. -# -# - RDoc is used as a default gem. -# - RDoc is a old version that doesn't have rubygems_plugin.rb. - -require_relative 'rdoc/rubygems_hook' - -# To install dependency libraries of RDoc, you need to run bundle install. -# At that time, rdoc/markdown is not generated. -# If generate and remove are executed at that time, an error will occur. -# So, we can't register generate and remove to Gem at that time. -begin - require_relative 'rdoc/markdown' -rescue LoadError -else - Gem.done_installing(&RDoc::RubyGemsHook.method(:generate)) - Gem.pre_uninstall(&RDoc::RubyGemsHook.method(:remove)) -end From deb89378b52b8c60a1d7c241057aca17690b56e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Jan 2026 16:43:47 +0100 Subject: [PATCH 16/16] Upgrade to Ruby 4.0.1. Resolves: rhbz#2428861 --- ruby.spec | 10 +++++++--- sources | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index fb3a1dc..a364fe6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 4 %global minor_version 0 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -83,7 +83,7 @@ %global optparse_version 0.8.1 %global pp_version 0.6.3 %global prettyprint_version 0.2.0 -%global prism_version 1.7.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 @@ -190,7 +190,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 30%{?dist} +Release: 31%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1963,6 +1963,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue Jan 13 2026 Vít Ondruch - 4.0.1-31 +- Upgrade to Ruby 4.0.1. + Resolves: rhbz#2428861 + * Fri Jan 02 2026 Jarek Prokop - 4.0.0-30 - Upgrade to Ruby 4.0.0. Resolves: rhbz#2425358 diff --git a/sources b/sources index 55a3dd4..f1f97eb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-4.0.0.tar.xz) = 2d5b2e566eaf70a5f3ea6ce6afc0611c0415de58a41336ef7a0b855c9a91eda9aa790a5f8b48e40a1eb9d50f8ea0f687216e617f16c8d040a08474f3116518a4 +SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b