From 65acd291de02f8f7b455f5a93b51fa3700e9dd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 9 Feb 2023 14:22:39 +0100 Subject: [PATCH 01/83] yaml and libffi sources are not bundled anymore. https://bugs.ruby-lang.org/issues/18571 --- ruby.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index ffff54a..663fddd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -635,10 +635,6 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -# Remove bundled libraries to be sure they are not used. -rm -rf ext/psych/yaml -rm -rf ext/fiddle/libffi* - %patch0 -p1 %patch1 -p1 %patch2 -p1 From 59f62d6bc965b882a88585c3ffd956e5ff6a019b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 9 Feb 2023 17:46:14 +0100 Subject: [PATCH 02/83] Upgrade to Ruby 3.2.1. Resolves: rhbz#2168292 --- ruby-2.3.0-ruby_version.patch | 4 ++-- ...0-Revert-Fix-test-syntax-suggest-order.patch | 4 ++-- ...vert-Test-syntax_suggest-by-make-check.patch | 2 +- ruby.spec | 17 ++++++++--------- sources | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 32b3069..42f347f 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1395,7 +1395,8 @@ def test_self_use_paths +@@ -1337,7 +1337,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1471,7 +1472,7 @@ def test_self_vendor_dir +@@ -1413,7 +1414,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", diff --git a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch index 12e242d..ee3b177 100644 --- a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch +++ b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch @@ -32,7 +32,7 @@ index d0558697d7..e73841aae7 100644 RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT) -@@ -1457,7 +1456,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck +@@ -1456,7 +1455,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck no-test-syntax-suggest-precheck: yes-test-syntax-suggest-precheck: main @@ -40,7 +40,7 @@ index d0558697d7..e73841aae7 100644 no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck $(ACTIONS_GROUP) -@@ -1467,15 +1465,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1466,15 +1464,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch index 7bddc2d..3efb21f 100644 --- a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch +++ b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch @@ -23,7 +23,7 @@ index 27f6a9d89d..8021f03a58 100644 $(ECHO) check succeeded -$(Q) : : "run only on sh"; \ if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -1465,9 +1464,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1464,9 +1463,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby.spec b/ruby.spec index 663fddd..13f0b60 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 2 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,13 +27,13 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.1 +%global rubygems_version 3.4.6 %global rubygems_molinillo_version 0.8.0 %global rubygems_optparse_version 0.3.0 %global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.4.1 +%global bundler_version 2.4.6 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.7.0 %global bundler_pub_grub_version 0.5.0 @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 178%{?dist} +Release: 179%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1007,11 +1007,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" mv test/ruby/test_jit.rb{,.disable} || : %endif -# Disable `TestGCCompact#test_moving_objects_between_size_pools` due to: -# `NoMethodError: undefined method `>=' for nil:NilClass` error. -# https://bugs.ruby-lang.org/issues/19248 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestGCCompact#test_moving_objects_between_size_pools/" - # 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}"} \ @@ -1572,6 +1567,10 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/TestGCCompact#test_moving_objects_between_siz %changelog +* Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 +- Upgrade to Ruby 3.2.1. + Resolves: rhbz#2168292 + * Fri Jan 20 2023 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/sources b/sources index 6cfaf8a..431c49e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.0.tar.xz) = 733ecc6709470ee16916deeece9af1c76220ae95d17b2681116aff7f381d99bc3124b1b11b1c2336b2b29e468e91b90f158d5ae5fca810c6cf32a0b6234ae08e +SHA512 (ruby-3.2.1.tar.xz) = 69caadab9be6b56905ea4fc92fa0e36704f9fa6a0e7e7f4c6bdb79e9cbe8dc57c524f96d9c18802d61aa1ca578fed2e9758692f9d701bf0dba938f0206b721b3 From 44ceb8c838e829dba12be8ac2896a251125b6f4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 9 Feb 2023 14:22:39 +0100 Subject: [PATCH 03/83] yaml and libffi sources are not bundled anymore. https://bugs.ruby-lang.org/issues/18571 --- ruby.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index ffff54a..663fddd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -635,10 +635,6 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -# Remove bundled libraries to be sure they are not used. -rm -rf ext/psych/yaml -rm -rf ext/fiddle/libffi* - %patch0 -p1 %patch1 -p1 %patch2 -p1 From ac33846a50f480188a4041755aba3b898b09339b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 9 Feb 2023 17:46:14 +0100 Subject: [PATCH 04/83] Upgrade to Ruby 3.2.1. Resolves: rhbz#2168292 --- ruby-2.3.0-ruby_version.patch | 4 ++-- ...0-Revert-Fix-test-syntax-suggest-order.patch | 4 ++-- ...vert-Test-syntax_suggest-by-make-check.patch | 2 +- ruby.spec | 17 ++++++++--------- sources | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 32b3069..42f347f 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1395,7 +1395,8 @@ def test_self_use_paths +@@ -1337,7 +1337,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1471,7 +1472,7 @@ def test_self_vendor_dir +@@ -1413,7 +1414,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", diff --git a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch index 12e242d..ee3b177 100644 --- a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch +++ b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch @@ -32,7 +32,7 @@ index d0558697d7..e73841aae7 100644 RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT) -@@ -1457,7 +1456,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck +@@ -1456,7 +1455,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck no-test-syntax-suggest-precheck: yes-test-syntax-suggest-precheck: main @@ -40,7 +40,7 @@ index d0558697d7..e73841aae7 100644 no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck $(ACTIONS_GROUP) -@@ -1467,15 +1465,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1466,15 +1464,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch index 7bddc2d..3efb21f 100644 --- a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch +++ b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch @@ -23,7 +23,7 @@ index 27f6a9d89d..8021f03a58 100644 $(ECHO) check succeeded -$(Q) : : "run only on sh"; \ if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -1465,9 +1464,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1464,9 +1463,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby.spec b/ruby.spec index 663fddd..13f0b60 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 2 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,13 +27,13 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.1 +%global rubygems_version 3.4.6 %global rubygems_molinillo_version 0.8.0 %global rubygems_optparse_version 0.3.0 %global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.4.1 +%global bundler_version 2.4.6 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.7.0 %global bundler_pub_grub_version 0.5.0 @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 178%{?dist} +Release: 179%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1007,11 +1007,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" mv test/ruby/test_jit.rb{,.disable} || : %endif -# Disable `TestGCCompact#test_moving_objects_between_size_pools` due to: -# `NoMethodError: undefined method `>=' for nil:NilClass` error. -# https://bugs.ruby-lang.org/issues/19248 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestGCCompact#test_moving_objects_between_size_pools/" - # 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}"} \ @@ -1572,6 +1567,10 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/TestGCCompact#test_moving_objects_between_siz %changelog +* Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 +- Upgrade to Ruby 3.2.1. + Resolves: rhbz#2168292 + * Fri Jan 20 2023 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/sources b/sources index 6cfaf8a..431c49e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.0.tar.xz) = 733ecc6709470ee16916deeece9af1c76220ae95d17b2681116aff7f381d99bc3124b1b11b1c2336b2b29e468e91b90f158d5ae5fca810c6cf32a0b6234ae08e +SHA512 (ruby-3.2.1.tar.xz) = 69caadab9be6b56905ea4fc92fa0e36704f9fa6a0e7e7f4c6bdb79e9cbe8dc57c524f96d9c18802d61aa1ca578fed2e9758692f9d701bf0dba938f0206b721b3 From 8f9fe41ba62c7ceee07696c2766aec44e962df94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Mar 2023 13:09:30 +0100 Subject: [PATCH 05/83] Use `%{_rpmmacrodir}` for RPM macros. --- ruby.spec | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 13f0b60..6959f72 100644 --- a/ruby.spec +++ b/ruby.spec @@ -720,11 +720,11 @@ test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d -install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +mkdir -p %{buildroot}%{_rpmmacrodir} +install -m 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs @@ -1032,7 +1032,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %license GPL %license LEGAL -%{_rpmconfigdir}/macros.d/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -1259,7 +1259,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmmacrodir}/macros.rubygems %{_rpmconfigdir}/fileattrs/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov From 31778c5ebd1fed2468465e60c51ac75d783867b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Mar 2023 13:11:49 +0100 Subject: [PATCH 06/83] Use `%{_fileattsdir}` for RPM macro generator. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6959f72..04271e6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -727,8 +727,8 @@ install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. -mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs -install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +mkdir -p %{buildroot}%{_fileattrsdir} +install -m 644 %{SOURCE8} %{buildroot}%{_fileattrsdir} install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE11} %{buildroot}%{_rpmconfigdir} @@ -1260,7 +1260,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %files -n rubygems-devel %{_rpmmacrodir}/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_fileattrsdir}/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con From 9e39fd242a58a5ab286d5da0d54130a669c8a9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 31 Mar 2023 15:23:08 +0200 Subject: [PATCH 07/83] Upgrade to Ruby 3.2.2. Resolves: rhbz#2183284 --- ....0-Enable-configuration-of-archlibdir.patch | 2 +- ...ted-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 | 18 +++++++++++------- sources | 2 +- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 65882be..2646a80 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 -@@ -3410,6 +3410,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3411,6 +3411,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 2a6261b..6f2fbe7 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 -@@ -4195,7 +4195,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4196,7 +4196,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 05bbd3a..f94b656 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 -@@ -4259,6 +4259,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4260,6 +4260,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 e57500c..0cb2012 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 -@@ -4231,6 +4231,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4232,6 +4232,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='' -@@ -4255,6 +4259,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4256,6 +4260,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 42f347f..866fef4 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 -@@ -4145,9 +4145,6 @@ AS_CASE(["$target_os"], +@@ -4146,9 +4146,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], -@@ -4170,57 +4167,63 @@ AC_ARG_WITH(ridir, +@@ -4171,57 +4168,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) -@@ -4237,6 +4240,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4238,6 +4241,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 04271e6..54096c6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 2 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,20 +27,20 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.6 +%global rubygems_version 3.4.10 %global rubygems_molinillo_version 0.8.0 %global rubygems_optparse_version 0.3.0 %global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.4.6 +%global bundler_version 2.4.10 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.7.0 %global bundler_pub_grub_version 0.5.0 %global bundler_net_http_persistent_version 4.0.1 %global bundler_thor_version 1.2.1 %global bundler_tsort_version 0.1.1 -%global bundler_uri_version 0.12.0 +%global bundler_uri_version 0.12.1 %global bigdecimal_version 3.1.3 %global did_you_mean_version 1.6.3 @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 179%{?dist} +Release: 180%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1321,12 +1321,12 @@ mv test/ruby/test_jit.rb{,.disable} || : %{gem_dir}/specifications/default/syntax_suggest-1.0.2.gemspec %{gem_dir}/specifications/default/syslog-0.1.1.gemspec %{gem_dir}/specifications/default/tempfile-0.1.3.gemspec -%{gem_dir}/specifications/default/time-0.2.1.gemspec +%{gem_dir}/specifications/default/time-0.2.2.gemspec %{gem_dir}/specifications/default/timeout-0.3.1.gemspec %{gem_dir}/specifications/default/tmpdir-0.1.3.gemspec %{gem_dir}/specifications/default/tsort-0.1.1.gemspec %{gem_dir}/specifications/default/un-0.2.1.gemspec -%{gem_dir}/specifications/default/uri-0.12.0.gemspec +%{gem_dir}/specifications/default/uri-0.12.1.gemspec %{gem_dir}/specifications/default/weakref-0.1.2.gemspec #%%{gem_dir}/specifications/default/win32ole-1.8.9.gemspec %{gem_dir}/specifications/default/yaml-0.2.1.gemspec @@ -1567,6 +1567,10 @@ mv test/ruby/test_jit.rb{,.disable} || : %changelog +* Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 +- Upgrade to Ruby 3.2.2. + Resolves: rhbz#2183284 + * Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 - Upgrade to Ruby 3.2.1. Resolves: rhbz#2168292 diff --git a/sources b/sources index 431c49e..709311a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.1.tar.xz) = 69caadab9be6b56905ea4fc92fa0e36704f9fa6a0e7e7f4c6bdb79e9cbe8dc57c524f96d9c18802d61aa1ca578fed2e9758692f9d701bf0dba938f0206b721b3 +SHA512 (ruby-3.2.2.tar.xz) = a29f24cd80f563f6368952d06d6273f7241a409fa9ab2f60e03dde2ac58ca06bee1750715b6134caebf4c061d3503446dc37a6059e19860bb0010eef34951935 From d45285804d6a616b2b05641b19cf03405577621b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Mar 2023 13:09:30 +0100 Subject: [PATCH 08/83] Use `%{_rpmmacrodir}` for RPM macros. --- ruby.spec | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 13f0b60..6959f72 100644 --- a/ruby.spec +++ b/ruby.spec @@ -720,11 +720,11 @@ test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d -install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +mkdir -p %{buildroot}%{_rpmmacrodir} +install -m 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs @@ -1032,7 +1032,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %license GPL %license LEGAL -%{_rpmconfigdir}/macros.d/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -1259,7 +1259,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmmacrodir}/macros.rubygems %{_rpmconfigdir}/fileattrs/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov From 68d85d8035174ed730365dc03678fe2d4ecdc71b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Mar 2023 13:11:49 +0100 Subject: [PATCH 09/83] Use `%{_fileattsdir}` for RPM macro generator. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6959f72..04271e6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -727,8 +727,8 @@ install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. -mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs -install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +mkdir -p %{buildroot}%{_fileattrsdir} +install -m 644 %{SOURCE8} %{buildroot}%{_fileattrsdir} install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE11} %{buildroot}%{_rpmconfigdir} @@ -1260,7 +1260,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %files -n rubygems-devel %{_rpmmacrodir}/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_fileattrsdir}/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con From 1d539d90eabcdfbf95b4d6ecfeacaf080c131af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 31 Mar 2023 15:23:08 +0200 Subject: [PATCH 10/83] Upgrade to Ruby 3.2.2. Resolves: rhbz#2183284 --- ....0-Enable-configuration-of-archlibdir.patch | 2 +- ...ted-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 | 18 +++++++++++------- sources | 2 +- 7 files changed, 20 insertions(+), 16 deletions(-) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 65882be..2646a80 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 -@@ -3410,6 +3410,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3411,6 +3411,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 2a6261b..6f2fbe7 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 -@@ -4195,7 +4195,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4196,7 +4196,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 05bbd3a..f94b656 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 -@@ -4259,6 +4259,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4260,6 +4260,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 e57500c..0cb2012 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 -@@ -4231,6 +4231,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4232,6 +4232,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='' -@@ -4255,6 +4259,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4256,6 +4260,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 42f347f..866fef4 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 -@@ -4145,9 +4145,6 @@ AS_CASE(["$target_os"], +@@ -4146,9 +4146,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], -@@ -4170,57 +4167,63 @@ AC_ARG_WITH(ridir, +@@ -4171,57 +4168,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) -@@ -4237,6 +4240,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4238,6 +4241,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 04271e6..54096c6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 2 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,20 +27,20 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.6 +%global rubygems_version 3.4.10 %global rubygems_molinillo_version 0.8.0 %global rubygems_optparse_version 0.3.0 %global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.4.6 +%global bundler_version 2.4.10 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.7.0 %global bundler_pub_grub_version 0.5.0 %global bundler_net_http_persistent_version 4.0.1 %global bundler_thor_version 1.2.1 %global bundler_tsort_version 0.1.1 -%global bundler_uri_version 0.12.0 +%global bundler_uri_version 0.12.1 %global bigdecimal_version 3.1.3 %global did_you_mean_version 1.6.3 @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 179%{?dist} +Release: 180%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1321,12 +1321,12 @@ mv test/ruby/test_jit.rb{,.disable} || : %{gem_dir}/specifications/default/syntax_suggest-1.0.2.gemspec %{gem_dir}/specifications/default/syslog-0.1.1.gemspec %{gem_dir}/specifications/default/tempfile-0.1.3.gemspec -%{gem_dir}/specifications/default/time-0.2.1.gemspec +%{gem_dir}/specifications/default/time-0.2.2.gemspec %{gem_dir}/specifications/default/timeout-0.3.1.gemspec %{gem_dir}/specifications/default/tmpdir-0.1.3.gemspec %{gem_dir}/specifications/default/tsort-0.1.1.gemspec %{gem_dir}/specifications/default/un-0.2.1.gemspec -%{gem_dir}/specifications/default/uri-0.12.0.gemspec +%{gem_dir}/specifications/default/uri-0.12.1.gemspec %{gem_dir}/specifications/default/weakref-0.1.2.gemspec #%%{gem_dir}/specifications/default/win32ole-1.8.9.gemspec %{gem_dir}/specifications/default/yaml-0.2.1.gemspec @@ -1567,6 +1567,10 @@ mv test/ruby/test_jit.rb{,.disable} || : %changelog +* Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 +- Upgrade to Ruby 3.2.2. + Resolves: rhbz#2183284 + * Thu Feb 09 2023 Vít Ondruch - 3.2.1-179 - Upgrade to Ruby 3.2.1. Resolves: rhbz#2168292 diff --git a/sources b/sources index 431c49e..709311a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.1.tar.xz) = 69caadab9be6b56905ea4fc92fa0e36704f9fa6a0e7e7f4c6bdb79e9cbe8dc57c524f96d9c18802d61aa1ca578fed2e9758692f9d701bf0dba938f0206b721b3 +SHA512 (ruby-3.2.2.tar.xz) = a29f24cd80f563f6368952d06d6273f7241a409fa9ab2f60e03dde2ac58ca06bee1750715b6134caebf4c061d3503446dc37a6059e19860bb0010eef34951935 From da8822cd333c260e48f4cd63f0322c22fb79b704 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Wed, 3 May 2023 11:11:42 +0200 Subject: [PATCH 11/83] Use new %patch macro instead of %patchN, as advised by warning: %patchN is deprecated (11 usages found), use %patch N (or %patch -P N) --- ruby.spec | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ruby.spec b/ruby.spec index 54096c6..cbc3fb0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -635,17 +635,17 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 +%patch 0 -p1 +%patch 1 -p1 +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 +%patch 6 -p1 +%patch 7 -p1 +%patch 8 -p1 +%patch 9 -p1 +%patch 10 -p1 +%patch 11 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From 814eaf5324c0245315bfcb281a993688c4a87dea Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 12 Jul 2023 10:30:51 +0200 Subject: [PATCH 12/83] Re-enable FFI related tests. libffi since NVR libffi-3.4.4-3.fc39 builds with static trampolines enabled. This fixes the failures which were the reason for disabling the tests. Since it recently landed in Rawhide, we can re-enable the tests. --- ruby.spec | 8 -------- 1 file changed, 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index cbc3fb0..bf8230f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -992,14 +992,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/TestDir#test_home/" MSPECOPTS="$MSPECOPTS -P 'File.expand_path expands ~ENV..USER..* to.* the user.s home directory'" %endif -# Several test broken by libffi-3.4.2. There should be fix in libffi, once -# other components are fixed. -# https://bugzilla.redhat.com/show_bug.cgi?id=2040380 -mv test/fiddle/test_import.rb{,.disable} -mv test/fiddle/test_closure.rb{,.disable} -DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunc#test_qsort1/" -DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" - %ifarch i686 # The MJIT test cases are failing so often, that it is recently impossible # to get past the test cases :/ From 64dc6dd3e46e84ea84a142663753fa4b4a7dc29f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 21 Jul 2023 17:14:32 +0000 Subject: [PATCH 13/83] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index bf8230f..51ada32 100644 --- a/ruby.spec +++ b/ruby.spec @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 180%{?dist} +Release: 181%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1559,6 +1559,9 @@ mv test/ruby/test_jit.rb{,.disable} || : %changelog +* Fri Jul 21 2023 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 - Upgrade to Ruby 3.2.2. Resolves: rhbz#2183284 From 1f35109c5e7f5df5b51708cc46150b0f4949229a Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 20 Sep 2023 11:09:58 +0200 Subject: [PATCH 14/83] Fix OpenSSL.fips_mode and OpenSSL::PKey.read in OpenSSL 3 FIPS. --- ....3.0-openssl-3.2.0-fips-enable-tests.patch | 32 ++++ ....2.0-fips-fix-pkey-read-in-openssl-3.patch | 160 ++++++++++++++++++ ...-3.2.0-fix-fips-get-set-in-openssl-3.patch | 142 ++++++++++++++++ ruby.spec | 30 +++- test_openssl_fips.rb | 34 ++++ 5 files changed, 397 insertions(+), 1 deletion(-) create mode 100644 ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch create mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch create mode 100644 ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch create mode 100644 test_openssl_fips.rb diff --git a/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch b/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch new file mode 100644 index 0000000..7f66fa1 --- /dev/null +++ b/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch @@ -0,0 +1,32 @@ +From f0b254f1f6610294821bbfc06b414d2af452db5b Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Thu, 13 Apr 2023 17:28:27 +0200 +Subject: [PATCH] [ruby/openssl] Drop a common logic disabling the FIPS mode in + the tests. + +We want to run the unit tests in the FIPS mode too. + +https://github.com/ruby/openssl/commit/ab92baff34 +--- + test/openssl/utils.rb | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb +index 4ebcb9837b..8a0be0d154 100644 +--- a/test/openssl/utils.rb ++++ b/test/openssl/utils.rb +@@ -1,11 +1,6 @@ + # frozen_string_literal: true + begin + require "openssl" +- +- # Disable FIPS mode for tests for installations +- # where FIPS mode would be enabled by default. +- # Has no effect on all other installations. +- OpenSSL.fips_mode=false + rescue LoadError + end + +-- +2.41.0 + diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch new file mode 100644 index 0000000..bd37bd7 --- /dev/null +++ b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch @@ -0,0 +1,160 @@ +From 40451afa279c52ce7a508f8a9ec553cfe7a76a10 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Wed, 12 Apr 2023 17:15:21 +0200 +Subject: [PATCH] Fix OpenSSL::PKey.read in OpenSSL 3 FIPS module. + +This is a combination of the following 2 commits. Because the combined patch is +easy to merge. + +This is the 1st commit message: + +[ruby/openssl] Workaround: Fix OpenSSL::PKey.read that cannot parse PKey in the FIPS mode. + +This commit is a workaround to avoid the error below that the +`OpenSSL::PKey.read` fails with the OpenSSL 3.0 FIPS mode. + +``` +$ openssl genrsa -out key.pem 4096 + +$ ruby -e "require 'openssl'; OpenSSL::PKey.read(File.read('key.pem'))" +-e:1:in `read': Could not parse PKey (OpenSSL::PKey::PKeyError) + from -e:1:in `
' +``` + +The root cause is on the OpenSSL side. The `OSSL_DECODER_CTX_set_selection` +doesn't apply the selection value properly if there are multiple providers, and +a provider (e.g. "base" provider) handles the decoder implementation, and +another provider (e.g. "fips" provider) handles the keys. + +The workaround is to create `OSSL_DECODER_CTX` variable each time without using +the `OSSL_DECODER_CTX_set_selection`. + +https://github.com/ruby/openssl/commit/5ff4a31621 + +This is the commit message #2: + +[ruby/openssl] ossl_pkey.c: Workaround: Decode with non-zero selections. + +This is a workaround for the decoding issue in ossl_pkey_read_generic(). +The issue happens in the case that a key management provider is different from +a decoding provider. + +Try all the non-zero selections in order, instead of selection 0 for OpenSSL 3 +to avoid the issue. + +https://github.com/ruby/openssl/commit/db688fa739 +--- + ext/openssl/ossl_pkey.c | 78 ++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 73 insertions(+), 5 deletions(-) + +diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c +index 476256679b..419422958e 100644 +--- a/ext/openssl/ossl_pkey.c ++++ b/ext/openssl/ossl_pkey.c +@@ -82,18 +82,20 @@ ossl_pkey_new(EVP_PKEY *pkey) + #if OSSL_OPENSSL_PREREQ(3, 0, 0) + # include + +-EVP_PKEY * +-ossl_pkey_read_generic(BIO *bio, VALUE pass) ++static EVP_PKEY * ++ossl_pkey_read(BIO *bio, const char *input_type, int selection, VALUE pass) + { + void *ppass = (void *)pass; + OSSL_DECODER_CTX *dctx; + EVP_PKEY *pkey = NULL; + int pos = 0, pos2; + +- dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); ++ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, input_type, NULL, NULL, ++ selection, NULL, NULL); + if (!dctx) + goto out; +- if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) ++ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ++ ppass) != 1) + goto out; + + /* First check DER */ +@@ -151,11 +153,77 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) + ossl_clear_error(); + pos = pos2; + } +- + out: ++ OSSL_BIO_reset(bio); + OSSL_DECODER_CTX_free(dctx); + return pkey; + } ++ ++EVP_PKEY * ++ossl_pkey_read_generic(BIO *bio, VALUE pass) ++{ ++ EVP_PKEY *pkey = NULL; ++ /* First check DER, then check PEM. */ ++ const char *input_types[] = {"DER", "PEM"}; ++ int input_type_num = (int)(sizeof(input_types) / sizeof(char *)); ++ /* ++ * Non-zero selections to try to decode. ++ * ++ * See EVP_PKEY_fromdata(3) - Selections to see all the selections. ++ * ++ * This is a workaround for the decoder failing to decode or returning ++ * bogus keys with selection 0, if a key management provider is different ++ * from a decoder provider. The workaround is to avoid using selection 0. ++ * ++ * Affected OpenSSL versions: >= 3.1.0, <= 3.1.2, or >= 3.0.0, <= 3.0.10 ++ * Fixed OpenSSL versions: 3.2, next release of the 3.1.z and 3.0.z ++ * ++ * See https://github.com/openssl/openssl/pull/21519 for details. ++ * ++ * First check for private key formats (EVP_PKEY_KEYPAIR). This is to keep ++ * compatibility with ruby/openssl < 3.0 which decoded the following as a ++ * private key. ++ * ++ * $ openssl ecparam -name prime256v1 -genkey -outform PEM ++ * -----BEGIN EC PARAMETERS----- ++ * BggqhkjOPQMBBw== ++ * -----END EC PARAMETERS----- ++ * -----BEGIN EC PRIVATE KEY----- ++ * MHcCAQEEIAG8ugBbA5MHkqnZ9ujQF93OyUfL9tk8sxqM5Wv5tKg5oAoGCCqGSM49 ++ * AwEHoUQDQgAEVcjhJfkwqh5C7kGuhAf8XaAjVuG5ADwb5ayg/cJijCgs+GcXeedj ++ * 86avKpGH84DXUlB23C/kPt+6fXYlitUmXQ== ++ * -----END EC PRIVATE KEY----- ++ * ++ * While the first PEM block is a proper encoding of ECParameters, thus ++ * OSSL_DECODER_from_bio() would pick it up, ruby/openssl used to return ++ * the latter instead. Existing applications expect this behavior. ++ * ++ * Note that normally, the input is supposed to contain a single decodable ++ * PEM block only, so this special handling should not create a new problem. ++ * ++ * Note that we need to create the OSSL_DECODER_CTX variable each time when ++ * we use the different selection as a workaround. ++ * See https://github.com/openssl/openssl/issues/20657 for details. ++ */ ++ int selections[] = { ++ EVP_PKEY_KEYPAIR, ++ EVP_PKEY_KEY_PARAMETERS, ++ EVP_PKEY_PUBLIC_KEY ++ }; ++ int selection_num = (int)(sizeof(selections) / sizeof(int)); ++ int i, j; ++ ++ for (i = 0; i < input_type_num; i++) { ++ for (j = 0; j < selection_num; j++) { ++ pkey = ossl_pkey_read(bio, input_types[i], selections[j], pass); ++ if (pkey) { ++ goto out; ++ } ++ } ++ } ++ out: ++ return pkey; ++} + #else + EVP_PKEY * + ossl_pkey_read_generic(BIO *bio, VALUE pass) +-- +2.41.0 + diff --git a/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch new file mode 100644 index 0000000..ab6a777 --- /dev/null +++ b/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch @@ -0,0 +1,142 @@ +From 29920ec109751459a65c6478525f2e59c644891f Mon Sep 17 00:00:00 2001 +From: Jun Aruga +Date: Thu, 16 Mar 2023 21:36:43 +0100 +Subject: [PATCH] [ruby/openssl] Implement FIPS functions on OpenSSL 3. + +This commit is to implement the `OpenSSL::OPENSSL_FIPS`, `ossl_fips_mode_get` +and `ossl_fips_mode_set` to pass the test `test/openssl/test_fips.rb`. + +It seems that the `OPENSSL_FIPS` macro is not used on the FIPS mode case any +more, and some FIPS related APIs also were removed in OpenSSL 3. + +See the document +the section OPENSSL 3.0 > Main Changes from OpenSSL 1.1.1 > +Other notable deprecations and changes - Removed FIPS_mode() and FIPS_mode_set() . + +The `OpenSSL::OPENSSL_FIPS` returns always true in OpenSSL 3 because the used +functions `EVP_default_properties_enable_fips` and `EVP_default_properties_is_fips_enabled` +works with the OpenSSL installed without FIPS option. + +The `TEST_RUBY_OPENSSL_FIPS_ENABLED` is set on the FIPS mode case on the CI. +Because I want to test that the `OpenSSL.fips_mode` returns the `true` or +'false' surely in the CI. You can test the FIPS mode case by setting +`TEST_RUBY_OPENSSL_FIPS_ENABLED` on local too. Right now I don't find a better +way to get the status of the FIPS mode enabled or disabled for this purpose. I +am afraid of the possibility that the FIPS test case is unintentionally skipped. + +I also replaced the ambiguous "returns" with "should return" in the tests. + +https://github.com/ruby/openssl/commit/c5b2bc1268 +--- + ext/openssl/ossl.c | 25 +++++++++++++++++++++---- + test/openssl/test_fips.rb | 32 ++++++++++++++++++++++++++++---- + 2 files changed, 49 insertions(+), 8 deletions(-) + +diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c +index 6c532aca94..fcf3744c65 100644 +--- a/ext/openssl/ossl.c ++++ b/ext/openssl/ossl.c +@@ -418,7 +418,11 @@ static VALUE + ossl_fips_mode_get(VALUE self) + { + +-#ifdef OPENSSL_FIPS ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ VALUE enabled; ++ enabled = EVP_default_properties_is_fips_enabled(NULL) ? Qtrue : Qfalse; ++ return enabled; ++#elif OPENSSL_FIPS + VALUE enabled; + enabled = FIPS_mode() ? Qtrue : Qfalse; + return enabled; +@@ -442,8 +446,18 @@ ossl_fips_mode_get(VALUE self) + static VALUE + ossl_fips_mode_set(VALUE self, VALUE enabled) + { +- +-#ifdef OPENSSL_FIPS ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ if (RTEST(enabled)) { ++ if (!EVP_default_properties_enable_fips(NULL, 1)) { ++ ossl_raise(eOSSLError, "Turning on FIPS mode failed"); ++ } ++ } else { ++ if (!EVP_default_properties_enable_fips(NULL, 0)) { ++ ossl_raise(eOSSLError, "Turning off FIPS mode failed"); ++ } ++ } ++ return enabled; ++#elif OPENSSL_FIPS + if (RTEST(enabled)) { + int mode = FIPS_mode(); + if(!mode && !FIPS_mode_set(1)) /* turning on twice leads to an error */ +@@ -1198,7 +1212,10 @@ Init_openssl(void) + * Boolean indicating whether OpenSSL is FIPS-capable or not + */ + rb_define_const(mOSSL, "OPENSSL_FIPS", +-#ifdef OPENSSL_FIPS ++/* OpenSSL 3 is FIPS-capable even when it is installed without fips option */ ++#if OSSL_OPENSSL_PREREQ(3, 0, 0) ++ Qtrue ++#elif OPENSSL_FIPS + Qtrue + #else + Qfalse +diff --git a/test/openssl/test_fips.rb b/test/openssl/test_fips.rb +index 8cd474f9a3..56a12a94ce 100644 +--- a/test/openssl/test_fips.rb ++++ b/test/openssl/test_fips.rb +@@ -4,22 +4,46 @@ + if defined?(OpenSSL) + + class OpenSSL::TestFIPS < OpenSSL::TestCase ++ def test_fips_mode_get_is_true_on_fips_mode_enabled ++ unless ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] ++ omit "Only for FIPS mode environment" ++ end ++ ++ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") ++ assert OpenSSL.fips_mode == true, ".fips_mode should return true on FIPS mode enabled" ++ end; ++ end ++ ++ def test_fips_mode_get_is_false_on_fips_mode_disabled ++ if ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] ++ omit "Only for non-FIPS mode environment" ++ end ++ ++ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") ++ message = ".fips_mode should return false on FIPS mode disabled. " \ ++ "If you run the test on FIPS mode, please set " \ ++ "TEST_RUBY_OPENSSL_FIPS_ENABLED=true" ++ assert OpenSSL.fips_mode == false, message ++ end; ++ end ++ + def test_fips_mode_is_reentrant + OpenSSL.fips_mode = false + OpenSSL.fips_mode = false + end + +- def test_fips_mode_get +- return unless OpenSSL::OPENSSL_FIPS ++ def test_fips_mode_get_with_fips_mode_set ++ omit('OpenSSL is not FIPS-capable') unless OpenSSL::OPENSSL_FIPS ++ + assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") + require #{__FILE__.dump} + + begin + OpenSSL.fips_mode = true +- assert OpenSSL.fips_mode == true, ".fips_mode returns true when .fips_mode=true" ++ assert OpenSSL.fips_mode == true, ".fips_mode should return true when .fips_mode=true" + + OpenSSL.fips_mode = false +- assert OpenSSL.fips_mode == false, ".fips_mode returns false when .fips_mode=false" ++ assert OpenSSL.fips_mode == false, ".fips_mode should return false when .fips_mode=false" + rescue OpenSSL::OpenSSLError + pend "Could not set FIPS mode (OpenSSL::OpenSSLError: \#$!); skipping" + end +-- +2.41.0 + diff --git a/ruby.spec b/ruby.spec index 51ada32..b3678a4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 181%{?dist} +Release: 182%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -126,6 +126,8 @@ Source11: rubygems.con Source13: test_abrt.rb # SystemTap tests. Source14: test_systemtap.rb +# Ruby OpenSSL FIPS tests. +Source15: test_openssl_fips.rb # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -176,6 +178,21 @@ Patch10: ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch # https://github.com/ruby/spec/pull/990 # https://bugs.ruby-lang.org/issues/19307 Patch11: ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch +# Fix OpenSSL.fips_mode in OpenSSL 3 FIPS. +# https://github.com/ruby/openssl/pull/608 +# https://github.com/ruby/ruby/commit/678d41bc51fe31834eec0b653ba0e47de5420aa0 +Patch12: ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch +# Fix OpenSSL::PKey.read in OpenSSL 3 FIPS. +# The patch is a combination of the following 2 commits to simplify the patch. +# https://github.com/ruby/openssl/pull/615 +# https://github.com/ruby/ruby/commit/2a4834057b30a26c38ece3961b370c0b2ee59380 +# https://github.com/ruby/openssl/pull/669 +# https://github.com/ruby/ruby/commit/b0ec1db8a72c530460abd9462ac75845362886bd +Patch13: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch +# Enable tests in OpenSSL FIPS. +# https://github.com/ruby/openssl/pull/615 +# https://github.com/ruby/ruby/commit/920bc71284f417f9044b0dc1822b1d29a8fc61e5 +Patch14: ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -646,6 +663,9 @@ analysis result in RBS format, a standard type description format for Ruby %patch 9 -p1 %patch 10 -p1 %patch 11 -p1 +%patch 12 -p1 +%patch 13 -p1 +%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1004,6 +1024,11 @@ mv test/ruby/test_jit.rb{,.disable} || : %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ make -C %{_vpath_builddir} check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +# Run Ruby OpenSSL tests in OpenSSL FIPS. +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ + -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ + %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose" + %{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} %files @@ -1559,6 +1584,9 @@ mv test/ruby/test_jit.rb{,.disable} || : %changelog +* Wed Sep 20 2023 Jun Aruga - 3.2.2-182 +- Fix OpenSSL.fips_mode and OpenSSL::PKey.read in OpenSSL 3 FIPS. + * Fri Jul 21 2023 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild diff --git a/test_openssl_fips.rb b/test_openssl_fips.rb new file mode 100644 index 0000000..ffc7883 --- /dev/null +++ b/test_openssl_fips.rb @@ -0,0 +1,34 @@ +require 'openssl' + +# Run openssl tests in OpenSSL FIPS. See the link below for how to test. +# https://github.com/ruby/openssl/blob/master/.github/workflows/test.yml +# - step name: test on fips module + +# Listing the testing files by an array explicitly rather than the `Dir.glob` +# to prevent the test files from not loading unintentionally. +TEST_FILES = %w[ + test/openssl/test_fips.rb + test/openssl/test_pkey.rb +].freeze + +if ARGV.empty? + puts 'ERROR: Argument base_dir required.' + puts "Usage: #{__FILE__} base_dir [options]" + exit false +end +BASE_DIR = ARGV[0] +abs_test_files = TEST_FILES.map { |file| File.join(BASE_DIR, file) } + +# Set Fedora/RHEL downstream OpenSSL downstream environment variable to enable +# FIPS module in non-FIPS OS environment. It is available in Fedora 38 or later +# versions. +# https://src.fedoraproject.org/rpms/openssl/blob/rawhide/f/0009-Add-Kernel-FIPS-mode-flag-support.patch +ENV['OPENSSL_FORCE_FIPS_MODE'] = '1' +# A flag to tell the tests the current environment is FIPS enabled. +# https://github.com/ruby/openssl/blob/master/test/openssl/test_fips.rb +ENV['TEST_RUBY_OPENSSL_FIPS_ENABLED'] = 'true' + +abs_test_files.each do |file| + puts "INFO: Loading #{file}." + require file +end From 393e74f1e0f174a2f72c41f48276507f004caf1c Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 2 Nov 2023 16:03:39 +0100 Subject: [PATCH 15/83] Fix bundled provide net-http-persistent typo. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index b3678a4..b1afb8c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -101,7 +101,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 182%{?dist} +Release: 183%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -473,7 +473,7 @@ Provides: rubygem(bundler) = %{version}-%{release} Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} -Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -1584,6 +1584,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Thu Nov 02 2023 Jarek Prokop - 3.2.2 - 183 +- Fix typo in bundled provide of rubygem-bundler for rubygem-net-http-persistent. + * Wed Sep 20 2023 Jun Aruga - 3.2.2-182 - Fix OpenSSL.fips_mode and OpenSSL::PKey.read in OpenSSL 3 FIPS. From d432c95c155831824b1ccb1e1b8d1f22b83c8e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Nov 2023 12:24:38 +0100 Subject: [PATCH 16/83] Remove spaces from changelog NVR. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index b1afb8c..fac61e9 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1584,7 +1584,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog -* Thu Nov 02 2023 Jarek Prokop - 3.2.2 - 183 +* Thu Nov 02 2023 Jarek Prokop - 3.2.2-183 - Fix typo in bundled provide of rubygem-bundler for rubygem-net-http-persistent. * Wed Sep 20 2023 Jun Aruga - 3.2.2-182 From 5fd12c42e7911fe5a07db3f92167983bd6e78008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 3 Nov 2023 17:03:09 +0100 Subject: [PATCH 17/83] Cache `Gem.default_dir` RubyGems do internally the same \[[1]\]. This should help with: 1) Performance (not tested) 2) Running RubyGems test suite (main motivation), which actually overrides the `@default_dir` \[[2]\] to be able to place test content into dedicated directory. [1]: https://github.com/rubygems/rubygems/blob/f8e87eba76526d2609d543eb7774711d345edc61/lib/rubygems/defaults.rb#L38 [2]: https://github.com/rubygems/rubygems/blob/f8e87eba76526d2609d543eb7774711d345edc61/test/rubygems/helper.rb#L372 --- operating_system.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/operating_system.rb b/operating_system.rb index d95b303..f38aa5d 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -113,7 +113,7 @@ module Gem # RubyGems default overrides. def default_dir - Gem.default_dirs[:system][:gem_dir] + @default_dir ||= Gem.default_dirs[:system][:gem_dir] end def default_path From 8d5b538747717f36b6244bcdad38e41271fc7010 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 9 Nov 2023 12:12:24 +0100 Subject: [PATCH 18/83] ssl: use ffdhe2048 from RFC 7919 as the default DH group parameter When the dependant openssl-libs was upgraded from 1:3.1.1-4.fc40 to 1:3.1.4-1.fc40, Fedora rawhide started to fail on Koschei. This commit fixes the following failures in OpenSSL FIPS. ``` + make -C redhat-linux-build runruby 'TESTRUN_SCRIPT= -I/builddir/build/BUILD/ruby-3.2.2/tool/lib --enable-gems /builddir/build/SOURCES/test_openssl_fips.rb /builddir/build/BUILD/ruby-3.2.2 --verbose' ... 1) Failure: OpenSSL::TestFIPS#test_fips_mode_get_with_fips_mode_set [/builddir/build/BUILD/ruby-3.2.2/test/openssl/test_fips.rb:38]: assert_separately failed with error message pid 93968 exit 1 | /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `initialize': could not parse pkey (OpenSSL::PKey::DHError) | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `new' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `new' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:37:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:23:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:22:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:21:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl.rb:21:in `require_relative' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl.rb:21:in `' | >-from -:in `require' 2) Failure: OpenSSL::TestFIPS#test_fips_mode_get_is_true_on_fips_mode_enabled [/builddir/build/BUILD/ruby-3.2.2/test/openssl/test_fips.rb:12]: assert_separately failed with error message pid 93969 exit 1 | /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `initialize': could not parse pkey (OpenSSL::PKey::DHError) | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `new' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/pkey.rb:132:in `new' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:37:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:23:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:22:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl/ssl.rb:21:in `' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl.rb:21:in `require_relative' | >-from /builddir/build/BUILD/ruby-3.2.2/redhat-linux-build/.ext/common/openssl.rb:21:in `' | >-from -:in `require' Finished tests in 0.166449s, 72.0941 tests/s, 342.4468 assertions/s. 12 tests, 57 assertions, 2 failures, 0 errors, 1 skips ``` The commit was ported from CentOS Stream rpms/ruby stream-ruby-3.1-rhel-9.4.0 branch: . --- ...2.0-fips-fix-pkey-dh-require-openssl.patch | 73 +++++++++++++++++++ ruby.spec | 8 ++ 2 files changed, 81 insertions(+) create mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch new file mode 100644 index 0000000..a0951bd --- /dev/null +++ b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch @@ -0,0 +1,73 @@ +From b6d7cdc2bad0eadbca73f3486917f0ec7a475814 Mon Sep 17 00:00:00 2001 +From: Kazuki Yamaguchi +Date: Tue, 29 Aug 2023 19:46:02 +0900 +Subject: [PATCH] [ruby/openssl] ssl: use ffdhe2048 from RFC 7919 as the + default DH group parameters + +In TLS 1.2 or before, if DH group parameters for DHE are not supplied +with SSLContext#tmp_dh= or #tmp_dh_callback=, we currently use the +self-generated parameters added in commit https://github.com/ruby/openssl/commit/bb3399a61c03 ("support 2048 +bit length DH-key", 2016-01-15) as the fallback. + +While there is no known weakness in the current parameters, it would be +a good idea to switch to pre-defined, more well audited parameters. + +This also allows the fallback to work in the FIPS mode. + +The PEM encoding was derived with: + + # RFC 7919 Appendix A.1. ffdhe2048 + print OpenSSL::PKey.read(OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer((<<-END).split.join.to_i(16)), OpenSSL::ASN1::Integer(2)]).to_der).to_pem + FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 + D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 + 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 + 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 + 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 + 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB + B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 + 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 + 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 + 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA + 886B4238 61285C97 FFFFFFFF FFFFFFFF + END + +https://github.com/ruby/openssl/commit/a5527cb4f4 +--- + ext/openssl/lib/openssl/ssl.rb | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb +index ea8bb2a18e533..94be6ba80b894 100644 +--- a/ext/openssl/lib/openssl/ssl.rb ++++ b/ext/openssl/lib/openssl/ssl.rb +@@ -34,21 +34,21 @@ class SSLContext + } + + if defined?(OpenSSL::PKey::DH) +- DEFAULT_2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ ++ DH_ffdhe2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ + -----BEGIN DH PARAMETERS----- +-MIIBCAKCAQEA7E6kBrYiyvmKAMzQ7i8WvwVk9Y/+f8S7sCTN712KkK3cqd1jhJDY +-JbrYeNV3kUIKhPxWHhObHKpD1R84UpL+s2b55+iMd6GmL7OYmNIT/FccKhTcveab +-VBmZT86BZKYyf45hUF9FOuUM9xPzuK3Vd8oJQvfYMCd7LPC0taAEljQLR4Edf8E6 +-YoaOffgTf5qxiwkjnlVZQc3whgnEt9FpVMvQ9eknyeGB5KHfayAc3+hUAvI3/Cr3 +-1bNveX5wInh5GDx1FGhKBZ+s1H+aedudCm7sCgRwv8lKWYGiHzObSma8A86KG+MD +-7Lo5JquQ3DlBodj3IDyPrxIv96lvRPFtAwIBAg== ++MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz +++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a ++87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7 ++YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi ++7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD ++ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg== + -----END DH PARAMETERS----- + _end_of_pem_ +- private_constant :DEFAULT_2048 ++ private_constant :DH_ffdhe2048 + + DEFAULT_TMP_DH_CALLBACK = lambda { |ctx, is_export, keylen| # :nodoc: + warn "using default DH parameters." if $VERBOSE +- DEFAULT_2048 ++ DH_ffdhe2048 + } + end + diff --git a/ruby.spec b/ruby.spec index fac61e9..55929d0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -193,6 +193,10 @@ Patch13: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch # https://github.com/ruby/openssl/pull/615 # https://github.com/ruby/ruby/commit/920bc71284f417f9044b0dc1822b1d29a8fc61e5 Patch14: ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch +# ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters +# https://github.com/ruby/openssl/pull/674 +# https://github.com/ruby/ruby/commit/b6d7cdc2bad0eadbca73f3486917f0ec7a475814 +Patch15: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -666,6 +670,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 12 -p1 %patch 13 -p1 %patch 14 -p1 +%patch 15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1584,6 +1589,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Thu Nov 09 2023 Jun Aruga - 3.2.2-183 +- ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters + * Thu Nov 02 2023 Jarek Prokop - 3.2.2-183 - Fix typo in bundled provide of rubygem-bundler for rubygem-net-http-persistent. From ba498ce48c4ee3d99ca5737e89aebb61e7f74b36 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 29 Nov 2023 20:11:24 +0100 Subject: [PATCH 19/83] armv7hl is no longer one of arches we build on. No point in keeping dead conditional around. --- ruby.spec | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 55929d0..b799fd8 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1002,13 +1002,6 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -%ifarch armv7hl -# TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according -# to upstream, but the test is disabled just on Travis, not in test suite. -# https://bugs.ruby-lang.org/issues/18393 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestReadline#test_interrupt_in_other_thread/" -%endif - %ifarch i686 # i686 specific failures. # https://bugs.ruby-lang.org/issues/19147 From 321ed23c221076ef51cf8d3caf373749d80a0076 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 7 Dec 2023 12:01:03 +0100 Subject: [PATCH 20/83] Update ticket reference for disabled tests on x86. Tests fail with a LANG=C environment. A new investigation into the failing tests on x86 revealed exact commits which introduced the issue and the commits that fixed the situation. Fix is not yet present in Ruby 3.2, therefore the conditional disabling the tests was left in. A new re-reported ticket replaced the old one. The new upstream ticket includes better detailed description of the environment causing the issue. The tests pass in Rawhide mock (F40), as the LANG there is C.UTF-8 that does not suffer from the issue. Upstream ticket: https://bugs.ruby-lang.org/issues/20045 --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index b799fd8..1a0c846 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1004,7 +1004,7 @@ MSPECOPTS="" %ifarch i686 # i686 specific failures. -# https://bugs.ruby-lang.org/issues/19147 +# https://bugs.ruby-lang.org/issues/20045 DISABLE_TESTS="$DISABLE_TESTS -n !/TestFileExhaustive#test_expand_path_for_existent_username/" DISABLE_TESTS="$DISABLE_TESTS -n !/TestDir#test_home/" MSPECOPTS="$MSPECOPTS -P 'File.expand_path expands ~ENV..USER..* to.* the user.s home directory'" From f195b6a3c84b26774c1a253bc8d002a4cdf37c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 7 Dec 2023 13:22:00 +0100 Subject: [PATCH 21/83] Drop attempt to disable JIT test on i686 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The was renamed test_jit.rb → test_mjit.rb in Ruby 3.2: https://github.com/ruby/ruby/commit/ead96e7b44b98bef4896d836239345012821f1d2 Therefore this is alread no-op and we can just drop it. --- ruby.spec | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 1a0c846..141162a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1010,13 +1010,6 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/TestDir#test_home/" MSPECOPTS="$MSPECOPTS -P 'File.expand_path expands ~ENV..USER..* to.* the user.s home directory'" %endif -%ifarch i686 -# The MJIT test cases are failing so often, that it is recently impossible -# to get past the test cases :/ -# https://bugzilla.redhat.com/show_bug.cgi?id=2125026 -mv test/ruby/test_jit.rb{,.disable} || : -%endif - # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ From 05a6c9c8f3bbc26d12835736791431c74d07552d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 2 Jan 2024 18:52:33 +0100 Subject: [PATCH 22/83] Upgrade to Ruby 3.3.0. Resolves: rhbz#2255918 --- macros.rubygems | 31 +- operating_system.rb | 48 +- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...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 | 18 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 30 +- ..._bug_reporter_add-witout-raising-err.patch | 31 - ...ery-RubyVM-FrozenCore-for-class-path.patch | 40 - ...Revert-Fix-test-syntax-suggest-order.patch | 73 -- ...rt-Test-syntax_suggest-by-make-check.patch | 67 -- ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch | 39 - ...3.0-Disable-syntax-suggest-test-case.patch | 23 + ...ocations-in-Hash-compare_by_identity.patch | 92 ++ ....3.0-openssl-3.2.0-fips-enable-tests.patch | 32 - ...2.0-fips-fix-pkey-dh-require-openssl.patch | 73 -- ....2.0-fips-fix-pkey-read-in-openssl-3.patch | 160 --- ...-3.2.0-fix-fips-get-set-in-openssl-3.patch | 142 --- ...uby-net-http-Renew-test-certificates.patch | 256 ++++ ruby.rpmlintrc | 25 +- ruby.spec | 1046 +++++++++-------- sources | 2 +- 23 files changed, 1038 insertions(+), 1200 deletions(-) delete mode 100644 ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch delete mode 100644 ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch delete mode 100644 ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch delete mode 100644 ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch delete mode 100644 ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch create mode 100644 ruby-3.3.0-Disable-syntax-suggest-test-case.patch create mode 100644 ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch create mode 100644 ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch diff --git a/macros.rubygems b/macros.rubygems index 8c4d067..f6e830f 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,14 +2,31 @@ %gem_dir %{_datadir}/gems %gem_archdir %{_libdir}/gems +# %gem_name_version - Provides gem_name-version string. +# +# Usage: %gem_name_version [custom_gem_name] +# +# Prints gem_name-version string, by default joining %gem_name, %version and +# %prerelease macros. When [custom_gem_name] is provided, the +# custom_gem_name is joined with %custom_gem_name_version macro which needs +# to be predefined. Please note that for the version macros are the dashes +# replaced by underscores. +# +%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{?prerelease} + # Common gem locations and files. -%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease} -%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease} -%gem_libdir %{gem_instdir}/lib -%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem -%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec -%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} -%gem_plugin %{gem_dir}/plugins/%{gem_name}_plugin.rb +# +# These macros leverages %gem_name_version macro and accepts custom gem_name. +# +# -d Use default gem install location. +# +%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}} +%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}} +%gem_libdir() %{gem_instdir %{?1}}/lib +%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem +%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec +%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}} +%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb # %gem_install - Install gem into appropriate directory. diff --git a/operating_system.rb b/operating_system.rb index f38aa5d..fd56386 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,41 +87,51 @@ module Gem # Remove methods we are going to override. This avoids "method redefined;" # warnings otherwise issued by Ruby. - remove_method :operating_system_defaults if method_defined? :operating_system_defaults remove_method :default_dir if method_defined? :default_dir + remove_method :default_specifications_dir if method_defined? :default_specifications_dir remove_method :default_path if method_defined? :default_path + remove_method :default_bindir if method_defined? :default_bindir remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for - ## - # Regular user installs into user directory, root manages /usr/local. - - def operating_system_defaults - unless opt_build_root? - options = if Process.uid == 0 - "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}" - else - "--user-install --bindir #{File.join [Dir.home, 'bin']}" - end - - {"gem" => options} - else - {} - end - end - ## # RubyGems default overrides. def default_dir - @default_dir ||= Gem.default_dirs[:system][:gem_dir] + if opt_build_root? + Gem.default_dirs[:system][:gem_dir] + elsif Process.uid == 0 + Gem.default_dirs[:local][:gem_dir] + else + Gem.user_dir + end end + ## + # Path to specification files of default gems. + + def default_specifications_dir + @default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default") + end + + ## + # Default gem load path + def default_path path = default_dirs.collect {|location, paths| paths[:gem_dir]} path.unshift Gem.user_dir if File.exist? Gem.user_home path end + def default_bindir + if opt_build_root? + Gem.default_dirs[:system][:bin_dir] + elsif Process.uid == 0 + Gem.default_dirs[:local][:bin_dir] + else + File.join [Dir.home, 'bin'] + end + end + def default_ext_dir_for base_dir dir = if rpmbuild? build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 2646a80..826d5f5 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 -@@ -3411,6 +3411,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3470,6 +3470,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 6f2fbe7..fb9b618 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 -@@ -4196,7 +4196,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4309,7 +4309,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 f94b656..a64b812 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 -@@ -4260,6 +4260,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4373,6 +4373,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 0cb2012..91e53a1 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 -@@ -4232,6 +4232,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4345,6 +4345,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4256,6 +4260,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4369,6 +4373,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 866fef4..c921c36 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 -@@ -4146,9 +4146,6 @@ AS_CASE(["$target_os"], +@@ -4259,9 +4259,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], -@@ -4171,57 +4168,63 @@ AC_ARG_WITH(ridir, +@@ -4284,57 +4281,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) -@@ -4238,6 +4241,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4351,6 +4354,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -195,7 +195,7 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -34,7 +34,7 @@ def self.default_spec_cache_dir +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir # specified in the environment def self.default_dir @@ -204,7 +204,7 @@ index d4ff4a262c..3f9a5bf590 100644 end ## -@@ -103,7 +103,8 @@ def self.user_dir +@@ -104,7 +104,8 @@ def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] @@ -214,7 +214,7 @@ index d4ff4a262c..3f9a5bf590 100644 File.join parts end -@@ -248,7 +249,7 @@ def self.vendor_dir # :nodoc: +@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? "vendordir" File.join RbConfig::CONFIG["vendordir"], "gems", @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1337,7 +1337,8 @@ def test_self_use_paths +@@ -1351,7 +1351,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1413,7 +1414,7 @@ def test_self_vendor_dir +@@ -1427,7 +1428,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", @@ -262,7 +262,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -124,7 +124,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -135,7 +135,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 b0aace4..0f32243 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -15,10 +15,11 @@ To keep the things simple for now, load the ABRT hook via C. [4]: https://github.com/ruby/ruby/pull/2735 [5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ --- - abrt.c | 12 ++++++++++++ - common.mk | 3 ++- - ruby.c | 4 ++++ - 3 files changed, 18 insertions(+), 1 deletion(-) + abrt.c | 12 ++++++++++++ + common.mk | 3 ++- + ruby.c | 4 ++++ + spec/ruby/core/kernel/require_spec.rb | 2 ++ + 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 abrt.c diff --git a/abrt.c b/abrt.c @@ -43,9 +44,9 @@ diff --git a/common.mk b/common.mk index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -86,7 +86,8 @@ ENC_MK = enc.mk - MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ - RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags) +@@ -111,7 +111,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ + prism/prism.$(OBJEXT) \ + prism_init.$(OBJEXT) -COMMONOBJS = array.$(OBJEXT) \ +COMMONOBJS = abrt.$(OBJEXT) \ @@ -57,7 +58,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1572,10 +1572,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1724,10 +1724,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -72,3 +73,16 @@ index 60c57d6259..1eec16f2c8 100644 rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } +diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb +index 60c57d6259..1eec16f2c8 100644 +--- a/spec/ruby/core/kernel/require_spec.rb ++++ b/spec/ruby/core/kernel/require_spec.rb +@@ -25,6 +25,8 @@ + out = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems --disable-did-you-mean') + features = out.lines.map { |line| File.basename(line.chomp, '.*') } + ++ # Ignore ABRT ++ features -= %w[abrt] + # Ignore CRuby internals + features -= %w[encdb transdb windows_1252] + features.reject! { |feature| feature.end_with?('-fake') } diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch deleted file mode 100644 index b14971e..0000000 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 27 Jul 2020 14:56:05 +0200 -Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error. - -While timeouting the threads might be still good idea, it does not seems -the timeout impacts the TestBugReporter#test_bug_reporter_add result, -because the output of the child process has been already collected -earlier. - -It seems that when the system is under heavy load, the thread might not -be sheduled to finish its processing. Even finishing the child process -might take tens of seconds and therefore the test case finish might take -a while. ---- - test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb -index 628fcd0340..2c677cc8a7 100644 ---- a/test/-ext-/bug_reporter/test_bug_reporter.rb -+++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -28,7 +28,7 @@ def test_bug_reporter_add - "-C", tmpdir] - args.push("--yjit") if yjit_enabled? # We want the printed description to match this process's RUBY_DESCRIPTION - stdin = "#{no_core}register_sample_bug_reporter(12345); Process.kill :SEGV, $$" -- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") -+ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil) - ensure - FileUtils.rm_rf(tmpdir) if tmpdir - end diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch deleted file mode 100644 index 22b94e6..0000000 --- a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0ade5611df9f981005eed32b369d1e699e520221 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 10 Feb 2022 13:26:44 +0100 -Subject: [PATCH] Don't query `RubyVM::FrozenCore` for class path. - -The `RubyVM::FrozenCore` class path is corrupted during GC cycle and -returns random garbage, which might result in segfault. - -But since it is easy to detect the `RubyVM::FrozenCore`, just provide -the class path explicitly as a workaround. - -Other possibility would be to ignore `RubyVM::FrozenCore` simlarly as -TracePoint API does: - -https://github.com/ruby/ruby/blob/46f6575157d4c2f6bbd5693896e26a65037e5552/vm_trace.c#L411 ---- - vm.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/vm.c b/vm.c -index 8ce8b279d4..3d189fa63a 100644 ---- a/vm.c -+++ b/vm.c -@@ -547,7 +547,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, - } - type = BUILTIN_TYPE(klass); - if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { -- VALUE name = rb_class_path(klass); -+ VALUE name = Qnil; -+ /* -+ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. -+ * https://bugs.ruby-lang.org/issues/18257 -+ */ -+ if (klass == rb_mRubyVMFrozenCore) -+ name = rb_str_new_cstr("RubyVM::FrozenCore"); -+ else -+ name = rb_class_path(klass); - const char *classname, *filename; - const char *methodname = rb_id2name(id); - if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { diff --git a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch deleted file mode 100644 index ee3b177..0000000 --- a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 5e2f8761b2342ee58f9689a7d62d48ec031e59c0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 2 Jan 2023 14:30:13 +0100 -Subject: [PATCH] Revert "Fix test-syntax-suggest order" - -This reverts commit 18c1ca8f4c0748905d5cedb6c044df507ea8ad6a. ---- - common.mk | 12 ++++-------- - defs/gmake.mk | 2 +- - 2 files changed, 5 insertions(+), 9 deletions(-) - -diff --git a/common.mk b/common.mk -index d0558697d7..e73841aae7 100644 ---- a/common.mk -+++ b/common.mk -@@ -767,7 +767,8 @@ clean-spec: PHONY - -$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD) - -$(Q) $(RMALL) rubyspec_temp - --check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all -+check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \ -+ $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest - $(ECHO) check succeeded - -$(Q) : : "run only on sh"; \ - if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -903,8 +904,6 @@ yes-test-spec: test-spec-precheck - $(ACTIONS_ENDGROUP) - no-test-spec: - --check: $(DOT_WAIT) test-spec -- - RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable - runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY - $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT) -@@ -1456,7 +1455,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck - no-test-syntax-suggest-precheck: - yes-test-syntax-suggest-precheck: main - --test-syntax-suggest-prepare: $(TEST_RUNNABLE)-test-syntax-suggest-prepare - no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck - yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck - $(ACTIONS_GROUP) -@@ -1466,15 +1464,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck - - RSPECOPTS = - SYNTAX_SUGGEST_SPECS = --PREPARE_SYNTAX_SUGGEST = test-syntax-suggest-prepare -+PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare - test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest --yes-test-syntax-suggest: yes-$(PREPARE_SYNTAX_SUGGEST) -+yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) - $(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \ - --require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS) - no-test-syntax-suggest: - --check: $(DOT_WAIT) $(TEST_RUNNABLE)-$(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest -- - test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck - no-test-bundler-precheck: - yes-test-bundler-precheck: main $(arch)-fake.rb -diff --git a/defs/gmake.mk b/defs/gmake.mk -index 54fef6685f..0aa403a4eb 100644 ---- a/defs/gmake.mk -+++ b/defs/gmake.mk -@@ -84,7 +84,7 @@ endif - ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ - btest-ruby test-knownbug test-basic \ - test-testframework test-tool test-ruby test-all \ -- test-spec test-syntax-suggest-prepare test-syntax-suggest \ -+ test-spec test-syntax-suggest \ - test-bundler-prepare test-bundler test-bundler-parallel \ - test-bundled-gems-precheck test-bundled-gems-fetch \ - test-bundled-gems-prepare test-bundled-gems-run \ diff --git a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch deleted file mode 100644 index 3efb21f..0000000 --- a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch +++ /dev/null @@ -1,67 +0,0 @@ -From cf60e383a9c98da5cd75012f2aabfa4a2774aade Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 2 Jan 2023 14:16:39 +0100 -Subject: [PATCH] Revert "Test syntax_suggest by `make check`" - -This reverts commit cae53842735237ccf71a13873fd0d1ae7f165582. ---- - common.mk | 6 ++---- - defs/gmake.mk | 6 ++---- - 2 files changed, 4 insertions(+), 8 deletions(-) - -diff --git a/common.mk b/common.mk -index 27f6a9d89d..8021f03a58 100644 ---- a/common.mk -+++ b/common.mk -@@ -767,8 +767,7 @@ clean-spec: PHONY - -$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD) - -$(Q) $(RMALL) rubyspec_temp - --check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \ -- $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest -+check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all $(DOT_WAIT) test-spec - $(ECHO) check succeeded - -$(Q) : : "run only on sh"; \ - if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -1464,9 +1463,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck - - RSPECOPTS = - SYNTAX_SUGGEST_SPECS = --PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare - test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest --yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) -+yes-test-syntax-suggest: yes-test-syntax-suggest-prepare - $(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \ - --require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS) - no-test-syntax-suggest: -diff --git a/defs/gmake.mk b/defs/gmake.mk -index 0aa403a4eb..dc9d31f49e 100644 ---- a/defs/gmake.mk -+++ b/defs/gmake.mk -@@ -27,7 +27,7 @@ TEST_DEPENDS := $(filter-out commit $(TEST_TARGETS),$(MAKECMDGOALS)) - TEST_TARGETS := $(patsubst great,exam,$(TEST_TARGETS)) - TEST_DEPENDS := $(filter-out great $(TEST_TARGETS),$(TEST_DEPENDS)) - TEST_TARGETS := $(patsubst exam,check,$(TEST_TARGETS)) --TEST_TARGETS := $(patsubst check,test-syntax-suggest test-spec test-all test-tool test-short,$(TEST_TARGETS)) -+TEST_TARGETS := $(patsubst check,test-spec test-all test-tool test-short,$(TEST_TARGETS)) - TEST_TARGETS := $(patsubst test-rubyspec,test-spec,$(TEST_TARGETS)) - TEST_DEPENDS := $(filter-out exam check test-spec $(TEST_TARGETS),$(TEST_DEPENDS)) - TEST_TARGETS := $(patsubst love,check,$(TEST_TARGETS)) -@@ -40,7 +40,6 @@ TEST_TARGETS := $(patsubst test-short,btest-ruby test-knownbug test-basic,$(TEST - TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-run,$(TEST_TARGETS)) - TEST_TARGETS := $(patsubst test-bundled-gems-run,test-bundled-gems-run $(PREPARE_BUNDLED_GEMS),$(TEST_TARGETS)) - TEST_TARGETS := $(patsubst test-bundled-gems-prepare,test-bundled-gems-prepare $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch,$(TEST_TARGETS)) --TEST_TARGETS := $(patsubst test-syntax-suggest,test-syntax-suggest $(PREPARE_SYNTAX_SUGGEST),$(TEST_TARGETS)) - TEST_DEPENDS := $(filter-out test-short $(TEST_TARGETS),$(TEST_DEPENDS)) - TEST_DEPENDS += $(if $(filter great exam love check,$(MAKECMDGOALS)),all exts) - endif -@@ -84,8 +83,7 @@ endif - ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ - btest-ruby test-knownbug test-basic \ - test-testframework test-tool test-ruby test-all \ -- test-spec test-syntax-suggest \ -- test-bundler-prepare test-bundler test-bundler-parallel \ -+ test-spec test-bundler-prepare test-bundler test-bundler-parallel \ - test-bundled-gems-precheck test-bundled-gems-fetch \ - test-bundled-gems-prepare test-bundled-gems-run \ - ) diff --git a/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch b/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch deleted file mode 100644 index 1b3395b..0000000 --- a/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 9b9825d6cdda053fea49eb2f613bc62bde465e89 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 4 Jan 2023 17:23:35 +0100 -Subject: [PATCH] Use SHA256 instead of SHA1 - -Systems such as CentOS 9 / RHEL 9 are moving away from SHA1 disabling it -by default via a system-wide crypto policy. This replaces SHA1 with -SHA256 in similar way as [[1]]. - -[1]: https://github.com/ruby/openssl/pull/554 ---- - spec/ruby/library/openssl/x509/name/verify_spec.rb | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/spec/ruby/library/openssl/x509/name/verify_spec.rb b/spec/ruby/library/openssl/x509/name/verify_spec.rb -index a8bf865bd..6dcfc9946 100644 ---- a/spec/ruby/library/openssl/x509/name/verify_spec.rb -+++ b/spec/ruby/library/openssl/x509/name/verify_spec.rb -@@ -12,7 +12,7 @@ describe "OpenSSL::X509::Name.verify" do - cert.public_key = key.public_key - cert.not_before = Time.now - 10 - cert.not_after = cert.not_before + 365 * 24 * 60 * 60 -- cert.sign key, OpenSSL::Digest.new('SHA1') -+ cert.sign key, OpenSSL::Digest.new('SHA256') - store = OpenSSL::X509::Store.new - store.add_cert(cert) - [store.verify(cert), store.error, store.error_string].should == [true, 0, "ok"] -@@ -28,7 +28,7 @@ describe "OpenSSL::X509::Name.verify" do - cert.public_key = key.public_key - cert.not_before = Time.now - 10 - cert.not_after = Time.now - 5 -- cert.sign key, OpenSSL::Digest.new('SHA1') -+ cert.sign key, OpenSSL::Digest.new('SHA256') - store = OpenSSL::X509::Store.new - store.add_cert(cert) - store.verify(cert).should == false --- -2.38.1 - diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch new file mode 100644 index 0000000..1119a59 --- /dev/null +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -0,0 +1,23 @@ +From 6365d1b79e10330fced83d00d4cb950380a3b0fe Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 7 Sep 2023 13:13:02 +0200 +Subject: [PATCH] Disable syntax-suggest test case. + +This requires internet connection. +--- + common.mk | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/common.mk b/common.mk +index d55d1788aa..73755f6ccd 100644 +--- a/common.mk ++++ b/common.mk +@@ -1601,8 +1601,6 @@ yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) + $(ACTIONS_ENDGROUP) + no-test-syntax-suggest: + +-check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest +- + test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck + no-test-bundler-precheck: + yes-test-bundler-precheck: main $(arch)-fake.rb diff --git a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch new file mode 100644 index 0000000..9baaf27 --- /dev/null +++ b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch @@ -0,0 +1,92 @@ +From 8944a064d0fd7947b8c2b6c761be3e3a0c9073af Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 22 Dec 2023 14:16:48 +0100 +Subject: [PATCH 1/2] Revert "compare_by_identity: remove alloc for non-empty + Hash" + +This reverts commit 11fa76b1b521072c200c78ea023960221ff426d6. +--- + hash.c | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +diff --git a/hash.c b/hash.c +index 78e9d9a2d6..f6525ba4a5 100644 +--- a/hash.c ++++ b/hash.c +@@ -4377,16 +4377,13 @@ rb_hash_compare_by_id(VALUE hash) + if (hash_iterating_p(hash)) { + rb_raise(rb_eRuntimeError, "compare_by_identity during iteration"); + } ++ ar_force_convert_table(hash, __FILE__, __LINE__); ++ HASH_ASSERT(RHASH_ST_TABLE_P(hash)); + + if (RHASH_TABLE_EMPTY_P(hash)) { + // Fast path: There's nothing to rehash, so we don't need a `tmp` table. +- // We're most likely an AR table, so this will need an allocation. +- ar_force_convert_table(hash, __FILE__, __LINE__); +- HASH_ASSERT(RHASH_ST_TABLE_P(hash)); +- + RHASH_ST_TABLE(hash)->type = &identhash; +- } +- else { ++ } else { + // Slow path: Need to rehash the members of `self` into a new + // `tmp` table using the new `identhash` compare/hash functions. + tmp = hash_alloc(0); +@@ -4394,10 +4391,8 @@ rb_hash_compare_by_id(VALUE hash) + identtable = RHASH_ST_TABLE(tmp); + + rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); +- rb_hash_free(hash); + +- // We know for sure `identtable` is an st table, +- // so we can skip `ar_force_convert_table` here. ++ rb_hash_free(hash); + RHASH_ST_TABLE_SET(hash, identtable); + RHASH_ST_CLEAR(tmp); + } + +From f5c415300ffe63e41e46c6b88b8634a3bad0c7c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 22 Dec 2023 14:17:14 +0100 +Subject: [PATCH 2/2] Revert "compare_by_identity: remove alloc for empty Hash" + +This reverts commit b5c6c0122f5b010cb5f43e7a236c4ba2b1d56a2a. +--- + hash.c | 21 +++++++-------------- + 1 file changed, 7 insertions(+), 14 deletions(-) + +diff --git a/hash.c b/hash.c +index f6525ba4a5..cf83675c70 100644 +--- a/hash.c ++++ b/hash.c +@@ -4380,22 +4380,15 @@ rb_hash_compare_by_id(VALUE hash) + ar_force_convert_table(hash, __FILE__, __LINE__); + HASH_ASSERT(RHASH_ST_TABLE_P(hash)); + +- if (RHASH_TABLE_EMPTY_P(hash)) { +- // Fast path: There's nothing to rehash, so we don't need a `tmp` table. +- RHASH_ST_TABLE(hash)->type = &identhash; +- } else { +- // Slow path: Need to rehash the members of `self` into a new +- // `tmp` table using the new `identhash` compare/hash functions. +- tmp = hash_alloc(0); +- hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); +- identtable = RHASH_ST_TABLE(tmp); ++ tmp = hash_alloc(0); ++ hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); ++ identtable = RHASH_ST_TABLE(tmp); + +- rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); ++ rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); + +- rb_hash_free(hash); +- RHASH_ST_TABLE_SET(hash, identtable); +- RHASH_ST_CLEAR(tmp); +- } ++ rb_hash_free(hash); ++ RHASH_ST_TABLE_SET(hash, identtable); ++ RHASH_ST_CLEAR(tmp); + + return hash; + } diff --git a/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch b/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch deleted file mode 100644 index 7f66fa1..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch +++ /dev/null @@ -1,32 +0,0 @@ -From f0b254f1f6610294821bbfc06b414d2af452db5b Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Thu, 13 Apr 2023 17:28:27 +0200 -Subject: [PATCH] [ruby/openssl] Drop a common logic disabling the FIPS mode in - the tests. - -We want to run the unit tests in the FIPS mode too. - -https://github.com/ruby/openssl/commit/ab92baff34 ---- - test/openssl/utils.rb | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb -index 4ebcb9837b..8a0be0d154 100644 ---- a/test/openssl/utils.rb -+++ b/test/openssl/utils.rb -@@ -1,11 +1,6 @@ - # frozen_string_literal: true - begin - require "openssl" -- -- # Disable FIPS mode for tests for installations -- # where FIPS mode would be enabled by default. -- # Has no effect on all other installations. -- OpenSSL.fips_mode=false - rescue LoadError - end - --- -2.41.0 - diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch deleted file mode 100644 index a0951bd..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch +++ /dev/null @@ -1,73 +0,0 @@ -From b6d7cdc2bad0eadbca73f3486917f0ec7a475814 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 29 Aug 2023 19:46:02 +0900 -Subject: [PATCH] [ruby/openssl] ssl: use ffdhe2048 from RFC 7919 as the - default DH group parameters - -In TLS 1.2 or before, if DH group parameters for DHE are not supplied -with SSLContext#tmp_dh= or #tmp_dh_callback=, we currently use the -self-generated parameters added in commit https://github.com/ruby/openssl/commit/bb3399a61c03 ("support 2048 -bit length DH-key", 2016-01-15) as the fallback. - -While there is no known weakness in the current parameters, it would be -a good idea to switch to pre-defined, more well audited parameters. - -This also allows the fallback to work in the FIPS mode. - -The PEM encoding was derived with: - - # RFC 7919 Appendix A.1. ffdhe2048 - print OpenSSL::PKey.read(OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer((<<-END).split.join.to_i(16)), OpenSSL::ASN1::Integer(2)]).to_der).to_pem - FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 - D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 - 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 - 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 - 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 - 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB - B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 - 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 - 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 - 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA - 886B4238 61285C97 FFFFFFFF FFFFFFFF - END - -https://github.com/ruby/openssl/commit/a5527cb4f4 ---- - ext/openssl/lib/openssl/ssl.rb | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb -index ea8bb2a18e533..94be6ba80b894 100644 ---- a/ext/openssl/lib/openssl/ssl.rb -+++ b/ext/openssl/lib/openssl/ssl.rb -@@ -34,21 +34,21 @@ class SSLContext - } - - if defined?(OpenSSL::PKey::DH) -- DEFAULT_2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ -+ DH_ffdhe2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ - -----BEGIN DH PARAMETERS----- --MIIBCAKCAQEA7E6kBrYiyvmKAMzQ7i8WvwVk9Y/+f8S7sCTN712KkK3cqd1jhJDY --JbrYeNV3kUIKhPxWHhObHKpD1R84UpL+s2b55+iMd6GmL7OYmNIT/FccKhTcveab --VBmZT86BZKYyf45hUF9FOuUM9xPzuK3Vd8oJQvfYMCd7LPC0taAEljQLR4Edf8E6 --YoaOffgTf5qxiwkjnlVZQc3whgnEt9FpVMvQ9eknyeGB5KHfayAc3+hUAvI3/Cr3 --1bNveX5wInh5GDx1FGhKBZ+s1H+aedudCm7sCgRwv8lKWYGiHzObSma8A86KG+MD --7Lo5JquQ3DlBodj3IDyPrxIv96lvRPFtAwIBAg== -+MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz -++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a -+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7 -+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi -+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD -+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg== - -----END DH PARAMETERS----- - _end_of_pem_ -- private_constant :DEFAULT_2048 -+ private_constant :DH_ffdhe2048 - - DEFAULT_TMP_DH_CALLBACK = lambda { |ctx, is_export, keylen| # :nodoc: - warn "using default DH parameters." if $VERBOSE -- DEFAULT_2048 -+ DH_ffdhe2048 - } - end - diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch deleted file mode 100644 index bd37bd7..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 40451afa279c52ce7a508f8a9ec553cfe7a76a10 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Wed, 12 Apr 2023 17:15:21 +0200 -Subject: [PATCH] Fix OpenSSL::PKey.read in OpenSSL 3 FIPS module. - -This is a combination of the following 2 commits. Because the combined patch is -easy to merge. - -This is the 1st commit message: - -[ruby/openssl] Workaround: Fix OpenSSL::PKey.read that cannot parse PKey in the FIPS mode. - -This commit is a workaround to avoid the error below that the -`OpenSSL::PKey.read` fails with the OpenSSL 3.0 FIPS mode. - -``` -$ openssl genrsa -out key.pem 4096 - -$ ruby -e "require 'openssl'; OpenSSL::PKey.read(File.read('key.pem'))" --e:1:in `read': Could not parse PKey (OpenSSL::PKey::PKeyError) - from -e:1:in `
' -``` - -The root cause is on the OpenSSL side. The `OSSL_DECODER_CTX_set_selection` -doesn't apply the selection value properly if there are multiple providers, and -a provider (e.g. "base" provider) handles the decoder implementation, and -another provider (e.g. "fips" provider) handles the keys. - -The workaround is to create `OSSL_DECODER_CTX` variable each time without using -the `OSSL_DECODER_CTX_set_selection`. - -https://github.com/ruby/openssl/commit/5ff4a31621 - -This is the commit message #2: - -[ruby/openssl] ossl_pkey.c: Workaround: Decode with non-zero selections. - -This is a workaround for the decoding issue in ossl_pkey_read_generic(). -The issue happens in the case that a key management provider is different from -a decoding provider. - -Try all the non-zero selections in order, instead of selection 0 for OpenSSL 3 -to avoid the issue. - -https://github.com/ruby/openssl/commit/db688fa739 ---- - ext/openssl/ossl_pkey.c | 78 ++++++++++++++++++++++++++++++++++++++--- - 1 file changed, 73 insertions(+), 5 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 476256679b..419422958e 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -82,18 +82,20 @@ ossl_pkey_new(EVP_PKEY *pkey) - #if OSSL_OPENSSL_PREREQ(3, 0, 0) - # include - --EVP_PKEY * --ossl_pkey_read_generic(BIO *bio, VALUE pass) -+static EVP_PKEY * -+ossl_pkey_read(BIO *bio, const char *input_type, int selection, VALUE pass) - { - void *ppass = (void *)pass; - OSSL_DECODER_CTX *dctx; - EVP_PKEY *pkey = NULL; - int pos = 0, pos2; - -- dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); -+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, input_type, NULL, NULL, -+ selection, NULL, NULL); - if (!dctx) - goto out; -- if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) -+ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, -+ ppass) != 1) - goto out; - - /* First check DER */ -@@ -151,11 +153,77 @@ ossl_pkey_read_generic(BIO *bio, VALUE pass) - ossl_clear_error(); - pos = pos2; - } -- - out: -+ OSSL_BIO_reset(bio); - OSSL_DECODER_CTX_free(dctx); - return pkey; - } -+ -+EVP_PKEY * -+ossl_pkey_read_generic(BIO *bio, VALUE pass) -+{ -+ EVP_PKEY *pkey = NULL; -+ /* First check DER, then check PEM. */ -+ const char *input_types[] = {"DER", "PEM"}; -+ int input_type_num = (int)(sizeof(input_types) / sizeof(char *)); -+ /* -+ * Non-zero selections to try to decode. -+ * -+ * See EVP_PKEY_fromdata(3) - Selections to see all the selections. -+ * -+ * This is a workaround for the decoder failing to decode or returning -+ * bogus keys with selection 0, if a key management provider is different -+ * from a decoder provider. The workaround is to avoid using selection 0. -+ * -+ * Affected OpenSSL versions: >= 3.1.0, <= 3.1.2, or >= 3.0.0, <= 3.0.10 -+ * Fixed OpenSSL versions: 3.2, next release of the 3.1.z and 3.0.z -+ * -+ * See https://github.com/openssl/openssl/pull/21519 for details. -+ * -+ * First check for private key formats (EVP_PKEY_KEYPAIR). This is to keep -+ * compatibility with ruby/openssl < 3.0 which decoded the following as a -+ * private key. -+ * -+ * $ openssl ecparam -name prime256v1 -genkey -outform PEM -+ * -----BEGIN EC PARAMETERS----- -+ * BggqhkjOPQMBBw== -+ * -----END EC PARAMETERS----- -+ * -----BEGIN EC PRIVATE KEY----- -+ * MHcCAQEEIAG8ugBbA5MHkqnZ9ujQF93OyUfL9tk8sxqM5Wv5tKg5oAoGCCqGSM49 -+ * AwEHoUQDQgAEVcjhJfkwqh5C7kGuhAf8XaAjVuG5ADwb5ayg/cJijCgs+GcXeedj -+ * 86avKpGH84DXUlB23C/kPt+6fXYlitUmXQ== -+ * -----END EC PRIVATE KEY----- -+ * -+ * While the first PEM block is a proper encoding of ECParameters, thus -+ * OSSL_DECODER_from_bio() would pick it up, ruby/openssl used to return -+ * the latter instead. Existing applications expect this behavior. -+ * -+ * Note that normally, the input is supposed to contain a single decodable -+ * PEM block only, so this special handling should not create a new problem. -+ * -+ * Note that we need to create the OSSL_DECODER_CTX variable each time when -+ * we use the different selection as a workaround. -+ * See https://github.com/openssl/openssl/issues/20657 for details. -+ */ -+ int selections[] = { -+ EVP_PKEY_KEYPAIR, -+ EVP_PKEY_KEY_PARAMETERS, -+ EVP_PKEY_PUBLIC_KEY -+ }; -+ int selection_num = (int)(sizeof(selections) / sizeof(int)); -+ int i, j; -+ -+ for (i = 0; i < input_type_num; i++) { -+ for (j = 0; j < selection_num; j++) { -+ pkey = ossl_pkey_read(bio, input_types[i], selections[j], pass); -+ if (pkey) { -+ goto out; -+ } -+ } -+ } -+ out: -+ return pkey; -+} - #else - EVP_PKEY * - ossl_pkey_read_generic(BIO *bio, VALUE pass) --- -2.41.0 - diff --git a/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch deleted file mode 100644 index ab6a777..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 29920ec109751459a65c6478525f2e59c644891f Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Thu, 16 Mar 2023 21:36:43 +0100 -Subject: [PATCH] [ruby/openssl] Implement FIPS functions on OpenSSL 3. - -This commit is to implement the `OpenSSL::OPENSSL_FIPS`, `ossl_fips_mode_get` -and `ossl_fips_mode_set` to pass the test `test/openssl/test_fips.rb`. - -It seems that the `OPENSSL_FIPS` macro is not used on the FIPS mode case any -more, and some FIPS related APIs also were removed in OpenSSL 3. - -See the document -the section OPENSSL 3.0 > Main Changes from OpenSSL 1.1.1 > -Other notable deprecations and changes - Removed FIPS_mode() and FIPS_mode_set() . - -The `OpenSSL::OPENSSL_FIPS` returns always true in OpenSSL 3 because the used -functions `EVP_default_properties_enable_fips` and `EVP_default_properties_is_fips_enabled` -works with the OpenSSL installed without FIPS option. - -The `TEST_RUBY_OPENSSL_FIPS_ENABLED` is set on the FIPS mode case on the CI. -Because I want to test that the `OpenSSL.fips_mode` returns the `true` or -'false' surely in the CI. You can test the FIPS mode case by setting -`TEST_RUBY_OPENSSL_FIPS_ENABLED` on local too. Right now I don't find a better -way to get the status of the FIPS mode enabled or disabled for this purpose. I -am afraid of the possibility that the FIPS test case is unintentionally skipped. - -I also replaced the ambiguous "returns" with "should return" in the tests. - -https://github.com/ruby/openssl/commit/c5b2bc1268 ---- - ext/openssl/ossl.c | 25 +++++++++++++++++++++---- - test/openssl/test_fips.rb | 32 ++++++++++++++++++++++++++++---- - 2 files changed, 49 insertions(+), 8 deletions(-) - -diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c -index 6c532aca94..fcf3744c65 100644 ---- a/ext/openssl/ossl.c -+++ b/ext/openssl/ossl.c -@@ -418,7 +418,11 @@ static VALUE - ossl_fips_mode_get(VALUE self) - { - --#ifdef OPENSSL_FIPS -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ VALUE enabled; -+ enabled = EVP_default_properties_is_fips_enabled(NULL) ? Qtrue : Qfalse; -+ return enabled; -+#elif OPENSSL_FIPS - VALUE enabled; - enabled = FIPS_mode() ? Qtrue : Qfalse; - return enabled; -@@ -442,8 +446,18 @@ ossl_fips_mode_get(VALUE self) - static VALUE - ossl_fips_mode_set(VALUE self, VALUE enabled) - { -- --#ifdef OPENSSL_FIPS -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ if (RTEST(enabled)) { -+ if (!EVP_default_properties_enable_fips(NULL, 1)) { -+ ossl_raise(eOSSLError, "Turning on FIPS mode failed"); -+ } -+ } else { -+ if (!EVP_default_properties_enable_fips(NULL, 0)) { -+ ossl_raise(eOSSLError, "Turning off FIPS mode failed"); -+ } -+ } -+ return enabled; -+#elif OPENSSL_FIPS - if (RTEST(enabled)) { - int mode = FIPS_mode(); - if(!mode && !FIPS_mode_set(1)) /* turning on twice leads to an error */ -@@ -1198,7 +1212,10 @@ Init_openssl(void) - * Boolean indicating whether OpenSSL is FIPS-capable or not - */ - rb_define_const(mOSSL, "OPENSSL_FIPS", --#ifdef OPENSSL_FIPS -+/* OpenSSL 3 is FIPS-capable even when it is installed without fips option */ -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ Qtrue -+#elif OPENSSL_FIPS - Qtrue - #else - Qfalse -diff --git a/test/openssl/test_fips.rb b/test/openssl/test_fips.rb -index 8cd474f9a3..56a12a94ce 100644 ---- a/test/openssl/test_fips.rb -+++ b/test/openssl/test_fips.rb -@@ -4,22 +4,46 @@ - if defined?(OpenSSL) - - class OpenSSL::TestFIPS < OpenSSL::TestCase -+ def test_fips_mode_get_is_true_on_fips_mode_enabled -+ unless ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] -+ omit "Only for FIPS mode environment" -+ end -+ -+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") -+ assert OpenSSL.fips_mode == true, ".fips_mode should return true on FIPS mode enabled" -+ end; -+ end -+ -+ def test_fips_mode_get_is_false_on_fips_mode_disabled -+ if ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] -+ omit "Only for non-FIPS mode environment" -+ end -+ -+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") -+ message = ".fips_mode should return false on FIPS mode disabled. " \ -+ "If you run the test on FIPS mode, please set " \ -+ "TEST_RUBY_OPENSSL_FIPS_ENABLED=true" -+ assert OpenSSL.fips_mode == false, message -+ end; -+ end -+ - def test_fips_mode_is_reentrant - OpenSSL.fips_mode = false - OpenSSL.fips_mode = false - end - -- def test_fips_mode_get -- return unless OpenSSL::OPENSSL_FIPS -+ def test_fips_mode_get_with_fips_mode_set -+ omit('OpenSSL is not FIPS-capable') unless OpenSSL::OPENSSL_FIPS -+ - assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") - require #{__FILE__.dump} - - begin - OpenSSL.fips_mode = true -- assert OpenSSL.fips_mode == true, ".fips_mode returns true when .fips_mode=true" -+ assert OpenSSL.fips_mode == true, ".fips_mode should return true when .fips_mode=true" - - OpenSSL.fips_mode = false -- assert OpenSSL.fips_mode == false, ".fips_mode returns false when .fips_mode=false" -+ assert OpenSSL.fips_mode == false, ".fips_mode should return false when .fips_mode=false" - rescue OpenSSL::OpenSSLError - pend "Could not set FIPS mode (OpenSSL::OpenSSLError: \#$!); skipping" - end --- -2.41.0 - diff --git a/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch b/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch new file mode 100644 index 0000000..34a18e0 --- /dev/null +++ b/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch @@ -0,0 +1,256 @@ +From d3933fc753187a055a4904af82f5f3794c88c416 Mon Sep 17 00:00:00 2001 +From: Sorah Fukumori +Date: Mon, 1 Jan 2024 20:45:54 +0900 +Subject: [PATCH] [ruby/net-http] Renew test certificates + +The private key is replaced with a public known test key published at +[RFC 9500]. + +Also lifetime has been extended to 10 years from 4 years. + +[RFC 9500]: https://www.rfc-editor.org/rfc/rfc9500.html + +https://github.com/ruby/net-http/commit/4ab6c4a500 +--- + test/net/fixtures/Makefile | 6 +-- + test/net/fixtures/cacert.pem | 44 ++++++++-------- + test/net/fixtures/server.crt | 99 +++++++----------------------------- + test/net/fixtures/server.key | 55 ++++++++++---------- + 4 files changed, 71 insertions(+), 133 deletions(-) + +diff --git a/test/net/fixtures/Makefile b/test/net/fixtures/Makefile +index b2bc9c7368ee2..88c232e3b6c16 100644 +--- a/test/net/fixtures/Makefile ++++ b/test/net/fixtures/Makefile +@@ -5,11 +5,11 @@ regen_certs: + make server.crt + + cacert.pem: server.key +- openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" ++ openssl req -new -x509 -days 3650 -key server.key -out cacert.pem -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" + + server.csr: +- openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" ++ openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" + + server.crt: server.csr cacert.pem +- openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt ++ openssl x509 -days 3650 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -out server.crt + rm server.csr +diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem +index f623bd62ed375..24c83f1c65225 100644 +--- a/test/net/fixtures/cacert.pem ++++ b/test/net/fixtures/cacert.pem +@@ -1,24 +1,24 @@ + -----BEGIN CERTIFICATE----- +-MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD +-VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy +-MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM +-B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz +-ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +-CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV +-SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI +-3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d +-BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L +-2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R +-WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9 +-I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw +-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA +-of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q +-aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS +-2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee +-uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s +-K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+ +-mA== ++MIID+zCCAuOgAwIBAgIUGMvHl3EhtKPKcgc3NQSAYfFuC+8wDQYJKoZIhvcNAQEL ++BQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRQwEgYDVQQHDAtN ++YXR6LWUgY2l0eTEXMBUGA1UECgwOUnVieSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1 ++YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJARYWc2VjdXJpdHlAcnVieS1sYW5nLm9y ++ZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEyMjkxMTQ3MjNaMIGMMQswCQYDVQQGEwJK ++UDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkxFzAVBgNV ++BAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0ExJTAjBgkq ++hkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqGSIb3DQEB ++AQUAA4IBDwAwggEKAoIBAQCw+egZQ6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI +++1GSqyi1bFBgsRjM0THllIdMbKmJtWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0f ++qXmG8UTz0VTWdlAXXmhUs6lSADvAaIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0 ++yg+801SXzoFTTa+UGIRLE66jH51aa5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIe ++NWMF32wHqIOOPvQcWV3M5D2vxJEj702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1 ++JNPc/n3dVUm+fM6NoDXPoLP7j55G9zKyqGtGAWXAj1MTAgMBAAGjUzBRMB0GA1Ud ++DgQWBBSJGVleDvFp9cu9R+E0/OKYzGkwkTAfBgNVHSMEGDAWgBSJGVleDvFp9cu9 ++R+E0/OKYzGkwkTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBl ++8GLB8skAWlkSw/FwbUmEV3zyqu+p7PNP5YIYoZs0D74e7yVulGQ6PKMZH5hrZmHo ++orFSQU+VUUirG8nDGj7Rzce8WeWBxsaDGC8CE2dq6nC6LuUwtbdMnBrH0LRWAz48 ++jGFF3jHtVz8VsGfoZTZCjukWqNXvU6hETT9GsfU+PZqbqcTVRPH52+XgYayKdIbD ++r97RM4X3+aXBHcUW0b76eyyi65RR/Xtvn8ioZt2AdX7T2tZzJyXJN3Hupp77s6Ui ++AZR35SToHCZeTZD12YBvLBdaTPLZN7O/Q/aAO9ZiJaZ7SbFOjz813B2hxXab4Fob ++2uJX6eMWTVxYK5D4M9lm + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt +index 5ca78a6d146a0..5d2923795dabc 100644 +--- a/test/net/fixtures/server.crt ++++ b/test/net/fixtures/server.crt +@@ -1,82 +1,21 @@ +-Certificate: +- Data: +- Version: 3 (0x2) +- Serial Number: 2 (0x2) +- Signature Algorithm: sha256WithRSAEncryption +- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org +- Validity +- Not Before: Jan 2 03:27:13 2019 GMT +- Not After : Jan 1 03:27:13 2024 GMT +- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost +- Subject Public Key Info: +- Public Key Algorithm: rsaEncryption +- Public-Key: (2048 bit) +- Modulus: +- 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07: +- 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48: +- e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57: +- 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67: +- cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1: +- 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7: +- bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc: +- 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1: +- 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9: +- 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19: +- 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04: +- 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3: +- 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4: +- de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d: +- 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc: +- e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d: +- 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10: +- 4f:41 +- Exponent: 65537 (0x10001) +- X509v3 extensions: +- X509v3 Basic Constraints: +- CA:FALSE +- Netscape Comment: +- OpenSSL Generated Certificate +- X509v3 Subject Key Identifier: +- ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36 +- X509v3 Authority Key Identifier: +- keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 +- +- Signature Algorithm: sha256WithRSAEncryption +- 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c: +- ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35: +- 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51: +- fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a: +- 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a: +- 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15: +- 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64: +- 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62: +- d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab: +- 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d: +- 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2: +- 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff: +- 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf: +- da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69: +- fd:be:bd:6e + -----BEGIN CERTIFICATE----- +-MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx +-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK +-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI +-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX +-DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ +-BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +-AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ +-zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj +-VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ +-wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r +-sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d +-dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC +-AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o +-wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N +-+J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ +-y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW +-EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL +-Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1 +-oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j +-28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u ++MIIDYTCCAkkCAQAwDQYJKoZIhvcNAQELBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD ++VQQIDAdTaGltYW5lMRQwEgYDVQQHDAtNYXR6LWUgY2l0eTEXMBUGA1UECgwOUnVi ++eSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ ++ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEy ++MjkxMTQ3MjNaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRcwFQYD ++VQQKDA5SdWJ5IENvcmUgVGVhbTESMBAGA1UECwwJUnVieSBUZXN0MRIwEAYDVQQD ++DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw+egZ ++Q6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI+1GSqyi1bFBgsRjM0THllIdMbKmJ ++tWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0fqXmG8UTz0VTWdlAXXmhUs6lSADvA ++aIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0yg+801SXzoFTTa+UGIRLE66jH51a ++a5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIeNWMF32wHqIOOPvQcWV3M5D2vxJEj ++702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1JNPc/n3dVUm+fM6NoDXPoLP7j55G ++9zKyqGtGAWXAj1MTAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACtGNdj5TEtnJBYp ++M+LhBeU3oNteldfycEm993gJp6ghWZFg23oX8fVmyEeJr/3Ca9bAgDqg0t9a0npN ++oWKEY6wVKqcHgu3gSvThF5c9KhGbeDDmlTSVVNQmXWX0K2d4lS2cwZHH8mCm2mrY ++PDqlEkSc7k4qSiqigdS8i80Yk+lDXWsm8CjsiC93qaRM7DnS0WPQR0c16S95oM6G ++VklFKUSDAuFjw9aVWA/nahOucjn0w5fVW6lyIlkBslC1ChlaDgJmvhz+Ol3iMsE0 ++kAmFNu2KKPVrpMWaBID49QwQTDyhetNLaVVFM88iUdA9JDoVMEuP1mm39JqyzHTu ++uBrdP4Q= + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key +index 7f2380e71e637..6a83d5bcf4a52 100644 +--- a/test/net/fixtures/server.key ++++ b/test/net/fixtures/server.key +@@ -1,28 +1,27 @@ +------BEGIN PRIVATE KEY----- +-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN +-XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU +-Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC +-6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE +-cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ +-n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u +-/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ +-DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho +-LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX +-QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej +-hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ +-1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt +-liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd +-U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc +-pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC +-A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1 +-ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs +-oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD +-gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ +-xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn +-kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ +-uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ +-y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ +-g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8 +-wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7 +-2whRF0FEjKA8ehrNhAq+VFfFNw== +------END PRIVATE KEY----- ++-----BEGIN RSA PRIVATE KEY----- ++MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso ++tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE ++89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU ++l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s ++B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59 ++3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+ ++dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI ++FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J ++aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2 ++BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx ++IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/ ++fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u ++pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT ++Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl ++u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD ++fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X ++Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE ++k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo ++qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS ++CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ ++XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw ++AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r ++UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0 ++2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5 ++7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3 ++-----END RSA PRIVATE KEY----- diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 8a4dde6..90e14d6 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -31,18 +31,11 @@ addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64 # https://bugs.ruby-lang.org/issues/17944 addFilter(r'^ruby-libs\.\w+: W: binary-or-shlib-calls-gethostbyname /usr/lib(64)?/ruby/socket.so$') -# Nothing referred and no dependency information should be no problem. -# https://bugs.ruby-lang.org/issues/16558#note-2 -addFilter(r'^ruby-libs\.\w+: E: shared-library-without-dependency-information /usr/lib(64)?/ruby/enc/gb2312.so$') - -# These are Ruby plugins, where Ruby always load glibc prior the library. -addFilter(r'^ruby-libs\.\w+: W: library-not-linked-against-libc /usr/lib(64)?/ruby/.*.so$') - # Rake ships some examples. addFilter(r'^rubygem-rake.noarch: W: devel-file-in-non-devel-package /usr/share/gems/gems/rake-[\d\.]+/doc/example/\w+.c$') # Some executables don't have their manual pages. Is it worth of use help2man? -addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|rbs|rdbg|rdoc|ruby-mri|typeprof)$') +addFilter(r'^.+: W: no-manual-page-for-binary (bundler|gem|racc|rbs|rdbg|rdoc|ruby-mri|syntax_suggest|typeprof)$') # Default gems does not come with any documentation. addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentation$') @@ -50,3 +43,19 @@ addFilter(r'^rubygem-(bigdecimal|io-console|json|psych)\.\w+: W: no-documentatio # rubygems-devel ships only RPM macros and generators. Their placement is given # by RPM and can't be modified. addFilter(r'rubygems-devel.noarch: W: only-non-binary-in-usr-lib$') + +# Ignore some spelling false positives. +# Ignore spelling of technical terms +addFilter(r'^ruby-default-gems.noarch: E: spelling-error \(\'gemspec\'') +addFilter(r'^ruby-libs.x86_64: E: spelling-error \(\'libruby\'') +addFilter(r'^rubygem-test-unit.noarch: E: spelling-error \(\'xUnit\'') +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'libyaml\'') +addFilter(r'^rubygem-io-console.x86_64: E: spelling-error \(\'readline\'') +# `pyaml` is part of URL +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'pyyaml\'') +# `de-` is actually prefix +addFilter(r'^rubygem-psych.x86_64: E: spelling-error \(\'de\'') + +# It does not seemt to be worth of changing rubygems to archful package due to +# single directory, unless it causes some real troubles. +addFilter(r'^rubygems.noarch: E: noarch-with-lib64$') diff --git a/ruby.spec b/ruby.spec index 141162a..3307d6b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 -%global minor_version 2 -%global teeny_version 2 +%global minor_version 3 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision c5eefb7f37 +#%%global revision 5124f9ac75 %global ruby_archive %{name}-%{ruby_version} @@ -27,49 +27,115 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.10 +%global rubygems_version 3.5.3 %global rubygems_molinillo_version 0.8.0 -%global rubygems_optparse_version 0.3.0 -%global rubygems_tsort_version 0.1.0 +%global rubygems_net_http_version 0.4.0 +%global rubygems_net_protocol_version 0.2.2 +%global rubygems_optparse_version 0.4.0 +%global rubygems_resolv_version 0.3.0 +%global rubygems_timeout_version 0.4.1 +%global rubygems_tsort_version 0.2.0 # Default gems. -%global bundler_version 2.4.10 -%global bundler_connection_pool_version 2.3.0 -%global bundler_fileutils_version 1.7.0 +%global bundler_version 2.5.3 +%global bundler_connection_pool_version 2.4.1 +%global bundler_fileutils_version 1.7.2 +%global bundler_net_http_persistent_version 4.0.2 %global bundler_pub_grub_version 0.5.0 -%global bundler_net_http_persistent_version 4.0.1 -%global bundler_thor_version 1.2.1 -%global bundler_tsort_version 0.1.1 -%global bundler_uri_version 0.12.1 +%global bundler_thor_version 1.3.0 +%global bundler_tsort_version 0.2.0 +%global bundler_uri_version 0.13.0 -%global bigdecimal_version 3.1.3 +%global abbrev_version 0.1.2 +%global base64_version 0.2.0 +%global benchmark_version 0.3.0 +%global cgi_version 0.4.1 +%global csv_version 3.2.8 +%global date_version 3.3.4 +%global delegate_version 0.3.1 %global did_you_mean_version 1.6.3 -%global erb_version 4.0.2 -%global io_console_version 0.6.0 -%global irb_version 1.6.2 -%global json_version 2.6.3 -%global openssl_version 3.1.0 -%global psych_version 5.0.1 -%global racc_version 1.6.2 -%global rdoc_version 6.5.0 -%global stringio_version 3.0.4 +%global digest_version 3.1.1 +%global drb_version 2.2.0 +%global english_version 0.8.0 +%global erb_version 4.0.3 +%global error_highlight_version 0.6.0 +%global etc_version 1.4.3 +%global fcntl_version 1.1.0 +%global fiddle_version 1.1.2 +%global fileutils_version 1.7.2 +%global find_version 0.2.0 +%global forwardable_version 1.3.3 +%global getoptlong_version 0.2.1 +%global io_nonblock_version 0.3.0 +%global io_wait_version 0.3.1 +%global ipaddr_version 1.2.6 +%global logger_version 1.6.0 +%global mutex_m_version 0.2.0 +%global net_http_version 0.4.0 +%global net_protocol_version 0.2.2 +%global nkf_version 0.1.3 +%global observer_version 0.1.2 +%global open3_version 0.2.1 +%global openssl_version 3.2.0 +%global open_uri_version 0.4.1 +%global optparse_version 0.4.0 +%global ostruct_version 0.6.0 +%global pathname_version 0.3.0 +%global pp_version 0.5.0 +%global prettyprint_version 0.2.0 +%global pstore_version 0.1.3 +%global readline_version 0.0.4 +%global reline_version 0.4.1 +%global resolv_version 0.3.0 +%global resolv_replace_version 0.1.1 +%global rinda_version 0.2.0 +%global ruby2_keywords_version 0.0.5 +%global securerandom_version 0.3.1 +%global set_version 1.1.0 +%global shellwords_version 0.2.0 +%global singleton_version 0.2.0 +%global stringio_version 3.1.0 +%global strscan_version 3.0.7 +%global syntax_suggest_version 2.0.0 +%global syslog_version 0.1.2 +%global tempfile_version 0.2.1 +%global time_version 0.3.0 +%global timeout_version 0.4.1 +%global tmpdir_version 0.2.0 +%global tsort_version 0.2.0 +%global un_version 0.3.0 +%global uri_version 0.13.0 +%global weakref_version 0.1.3 +%global win32ole_version 1.8.10 +%global yaml_version 0.3.0 +%global prism_version 0.19.0 +%global zlib_version 3.1.0 + +# Gemified default gems. +%global bigdecimal_version 3.1.5 +%global io_console_version 0.7.1 +%global irb_version 1.11.0 +%global json_version 2.7.1 +%global psych_version 5.1.2 +%global rdoc_version 6.6.2 # Bundled gems. -%global minitest_version 5.16.3 -%global power_assert_version 2.0.3 -%global rake_version 13.0.6 -%global test_unit_version 3.5.7 -%global rexml_version 3.2.5 -%global rss_version 0.2.9 -%global net_ftp_version 0.2.0 -%global net_imap_version 0.3.4 +%global debug_version 1.9.1 +%global net_ftp_version 0.3.3 +%global net_imap_version 0.4.9 %global net_pop_version 0.1.2 -%global net_smtp_version 0.3.3 +%global net_smtp_version 0.4.0 %global matrix_version 0.4.2 +%global minitest_version 5.20.0 +%global power_assert_version 2.0.3 %global prime_version 0.1.2 -%global rbs_version 2.8.2 -%global typeprof_version 0.21.3 -%global debug_version 1.7.1 +%global racc_version 1.7.3 +%global rake_version 13.1.0 +%global rbs_version 3.4.0 +%global rexml_version 3.2.6 +%global rss_version 0.3.0 +%global test_unit_version 3.6.1 +%global typeprof_version 0.21.9 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -101,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 183%{?dist} +Release: 1%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -134,6 +200,11 @@ Source15: test_openssl_fips.rb %{load:%{SOURCE4}} %{load:%{SOURCE5}} +%global __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" +%global __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" +%global __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE11}" +%global __local_generator_path ^%{gem_dir}/specifications/.*\.gemspec$ + # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 Patch0: ruby-2.3.0-ruby_version.patch @@ -158,74 +229,57 @@ Patch4: ruby-2.1.0-custom-rubygems-location.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch -# Prevent segfaults running with SystemTap due to `RubyVM::FrozenCore` being -# corrupted by GC. -# https://bugzilla.redhat.com/show_bug.cgi?id=2015441 -# https://bugzilla.redhat.com/show_bug.cgi?id=1986206 -# https://bugs.ruby-lang.org/issues/18257 -Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch -# Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. -# https://bugs.ruby-lang.org/issues/16492 -Patch8: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch # Disable syntax_suggest test suite, which tries to download its dependencies. # https://bugs.ruby-lang.org/issues/19297 -Patch9: ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch -Patch10: ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch -# Fix `OpenSSL::X509::CertificateError: invalid digest` errors on ELN. This -# also might help Fedor, if/when -# https://fedoraproject.org/wiki/Changes/StrongCryptoSettings3Forewarning2 -# is accepted. -# https://github.com/ruby/spec/pull/990 -# https://bugs.ruby-lang.org/issues/19307 -Patch11: ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch -# Fix OpenSSL.fips_mode in OpenSSL 3 FIPS. -# https://github.com/ruby/openssl/pull/608 -# https://github.com/ruby/ruby/commit/678d41bc51fe31834eec0b653ba0e47de5420aa0 -Patch12: ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch -# Fix OpenSSL::PKey.read in OpenSSL 3 FIPS. -# The patch is a combination of the following 2 commits to simplify the patch. -# https://github.com/ruby/openssl/pull/615 -# https://github.com/ruby/ruby/commit/2a4834057b30a26c38ece3961b370c0b2ee59380 -# https://github.com/ruby/openssl/pull/669 -# https://github.com/ruby/ruby/commit/b0ec1db8a72c530460abd9462ac75845362886bd -Patch13: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch -# Enable tests in OpenSSL FIPS. -# https://github.com/ruby/openssl/pull/615 -# https://github.com/ruby/ruby/commit/920bc71284f417f9044b0dc1822b1d29a8fc61e5 -Patch14: ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch -# ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters -# https://github.com/ruby/openssl/pull/674 -# https://github.com/ruby/ruby/commit/b6d7cdc2bad0eadbca73f3486917f0ec7a475814 -Patch15: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch +Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch +# Revert patches causing segfaults in alexandria package. +# https://bugs.ruby-lang.org/issues/20079 +Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch +# Fix net-http test errors due to expired certificate +# https://github.com/ruby/ruby/commit/d3933fc753187a055a4904af82f5f3794c88c416 +# https://bugs.ruby-lang.org/issues/20106 +Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} +BuildRequires: rpm-local-generator-support +# Build dependencies BuildRequires: autoconf -%{?with_gmp:BuildRequires: gmp-devel} -BuildRequires: libffi-devel -BuildRequires: openssl-devel -BuildRequires: libyaml-devel -BuildRequires: readline-devel -# Needed to pass test_set_program_name(TestRubyOptions) -BuildRequires: procps -%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} -# RubyGems test suite optional dependencies. -%{?with_git:BuildRequires: git} -%{?with_cmake:BuildRequires: %{_bindir}/cmake} -# Required to test hardening. -%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} -%{?with_hostname:BuildRequires: %{_bindir}/hostname} -BuildRequires: multilib-rpm-config BuildRequires: gcc BuildRequires: make +BuildRequires: libffi-devel +BuildRequires: libyaml-devel +BuildRequires: openssl-devel BuildRequires: zlib-devel +%{?with_gmp:BuildRequires: gmp-devel} +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} %{?with_yjit:BuildRequires: %{_bindir}/rustc} + +# Install section +BuildRequires: multilib-rpm-config + +# Check dependencies + +# Required to test hardening. +%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} + +# Needed to pass test_set_program_name(TestRubyOptions) +BuildRequires: procps +# Neede by `Socket.gethostname returns the host name ERROR` +%{?with_hostname:BuildRequires: %{_bindir}/hostname} + +# RubyGems test suite optional dependencies. +%{?with_git:BuildRequires: git} +# `cmake` is required for test/rubygems/test_gem_ext_cmake_builder.rb. +%{?with_cmake:BuildRequires: %{_bindir}/cmake} + # The bundler/spec/runtime/setup_spec.rb requires the command `man`. %{?with_bundler_tests:BuildRequires: %{_bindir}/man} + # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} @@ -265,7 +319,6 @@ Provides: bundled(ccan-list) # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} -Provides: bundled(rubygem-racc) = %{racc_version} # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe. Obsoletes: ruby-tcltk < 2.4.0 @@ -285,19 +338,32 @@ This package includes the libruby, necessary to run Ruby. %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -# BSD-2-Clause: lib/rubygems/tsort/ -# BSD-2-Clause OR Ruby: lib/rubygems/optparse/ +# BSD-2-Clause OR Ruby: +# lib/rubygems/net-http/ +# lib/rubygems/net-protocol/ +# lib/rubygems/optparse/ +# lib/rubygems/resolv/ +# lib/rubygems/timeout/ +# lib/rubygems/tsort/ # MIT: lib/rubygems/resolver/molinillo License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND MIT Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} -Recommends: rubygem(io-console) >= %{io_console_version} +Recommends: rubygem(io-console) Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} +Provides: bundled(rubygems) = %{rubygems_version} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 Provides: bundled(rubygem-molinillo) = %{rubygems_molinillo_version} +Provides: bundled(rubygem-net-http) = %{rubygems_net_http_version} +Provides: bundled(rubygem-net-protocol) = %{rubygems_net_protocol_version} +Provides: bundled(rubygem-optparse) = %{rubygems_optparse_version} +Provides: bundled(rubygem-resolv) = %{rubygems_resolv_version} +Provides: bundled(rubygem-timeout) = %{rubygems_timeout_version} +Provides: bundled(rubygem-tsort) = %{rubygems_tsort_version} + BuildArch: noarch %description -n rubygems @@ -326,17 +392,11 @@ Macros and development tools for packaging RubyGems. %package default-gems Summary: Default gems which are part of Ruby StdLib -Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) -# Include the io-console dependency for reline. -Requires: rubygem(io-console) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 -Obsoletes: rubygem-racc < 1.4.16-130 # Obsoleted by Ruby 3.0 in F34 timeframe. Obsoletes: rubygem-openssl < 2.2.0-145 -Provides: rubygem(openssl) = %{openssl_version}-%{release} -Provides: rubygem(stringio) = %{stringio_version} BuildArch: noarch %description default-gems @@ -348,14 +408,8 @@ StdLib. Summary: The Interactive Ruby Version: %{irb_version} License: Ruby OR BSD-2-Clause -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -# ruby-default-gems is required to run irb. -# https://bugs.ruby-lang.org/issues/16951 -Requires: ruby-default-gems >= %{ruby_version}%{?development_release} -Recommends: rubygem(rdoc) >= %{rdoc_version} Provides: irb = %{version}-%{release} -Provides: rubygem(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} @@ -373,15 +427,16 @@ 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 +# 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 -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(io-console) >= %{io_console_version} +Requires: rubygem(io-console) Requires: rubygem(json) >= %{json_version} -Requires: rubygem(psych) >= %{psych_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} -Provides: rubygem(rdoc) = %{version}-%{release} +Provides: bundled(rubygem-rdoc) = %{rdoc_version} BuildArch: noarch %description -n rubygem-rdoc @@ -403,9 +458,7 @@ This package contains documentation for %{name}. Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} License: Ruby OR BSD-2-Clause -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(bigdecimal) = %{version}-%{release} +Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} %description -n rubygem-bigdecimal Ruby provides built-in support for arbitrary precision integer arithmetic. @@ -424,9 +477,7 @@ conversion between base 10 and base 2. Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} License: Ruby OR BSD-2-Clause -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(io-console) = %{version}-%{release} +Provides: bundled(rubygem-io-console) = %{io_console_version} %description -n rubygem-io-console IO/Console provides very simple and portable access to console. It doesn't @@ -438,9 +489,7 @@ Summary: This is a JSON implementation as a Ruby extension in C Version: %{json_version} # Unicode-DFS-2015: ext/json/ext/generator/generator.c License: (Ruby OR BSD-2-Clause) AND Unicode-DFS-2015 -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(json) = %{version}-%{release} +Provides: bundled(rubygem-json) = %{json_version} %description -n rubygem-json This is a implementation of the JSON specification according to RFC 4627. @@ -453,10 +502,7 @@ markup language. Summary: A libyaml wrapper for Ruby Version: %{psych_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(stringio) >= %{stringio_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: bundled(rubygem-psych) = %{psych_version} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -468,16 +514,24 @@ serialize and de-serialize most Ruby objects to and from the YAML format. %package -n rubygem-bundler Summary: Library and utilities to manage a Ruby application's gem dependencies Version: %{bundler_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} +# BSD-2-Clause OR Ruby: +# lib/bundler/vendor/fileutils +# lib/bundler/vendor/tsort +# lib/bundler/vendor/uri +# MIT: +# lib/bundler/vendor/connection_pool +# lib/bundler/vendor/net-http-persistent +# lib/bundler/vendor/pub_brub +# lib/bundler/vendor/thor +# lib/rubygems/resolver/molinillo +License: MIT AND (Ruby OR BSD-2-Clause) Requires: rubygem(io-console) -Provides: rubygem(bundler) = %{version}-%{release} +Provides: bundled(rubygem-bundler) = %{bundler_version} # https://github.com/bundler/bundler/issues/3647 Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} -Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -494,16 +548,13 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib -Requires: ruby(rubygems) >= %{rubygems_version} -# Runtime dependency of rubygem(debug). -Recommends: rubygem(irb) >= %{irb_version} -Provides: rubygem(net-ftp) = %{net_ftp_version} -Provides: rubygem(net-imap) = %{net_imap_version} -Provides: rubygem(net-pop) = %{net_pop_version} -Provides: rubygem(net-smtp) = %{net_smtp_version} -Provides: rubygem(matrix) = %{matrix_version} -Provides: rubygem(prime) = %{prime_version} -Provides: rubygem(debug) = %{debug_version} +Provides: bundled(rubygem-debug) = %{debug_version} +Provides: bundled(rubygem-matrix) = %{matrix_version} +Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} +Provides: bundled(rubygem-net-imap) = %{net_imap_version} +Provides: bundled(rubygem-net-pop) = %{net_pop_version} +Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} +Provides: bundled(rubygem-prime) = %{prime_version} %description bundled-gems Bundled gems which are part of Ruby StdLib. While being part of Ruby, these @@ -514,9 +565,7 @@ needs to be listed in Gemfile to be used by Bundler. Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(minitest) = %{version}-%{release} +Provides: bundled(rubygem-minitest) = %{minitest_version} BuildArch: noarch %description -n rubygem-minitest @@ -538,9 +587,7 @@ output. Summary: Power Assert for Ruby Version: %{power_assert_version} License: Ruby OR BSD-2-Clause -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(power_assert) = %{version}-%{release} +Provides: bundled(rubygem-power_assert) = %{power_assert_version} BuildArch: noarch %description -n rubygem-power_assert @@ -553,10 +600,8 @@ condition is not satisfied. Summary: Ruby based make-like utility Version: %{rake_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} -Provides: rubygem(rake) = %{version}-%{release} +Provides: bundled(rubygem-rake) = %{rake_version} BuildArch: noarch %description -n rubygem-rake @@ -568,9 +613,7 @@ specified in standard Ruby syntax. Summary: Type signature for Ruby Version: %{rbs_version} License: Ruby OR BSD-2-Clause -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rbs) = %{version}-%{release} +Provides: bundled(rubygem-rbs) = %{rbs_version} %description -n rubygem-rbs RBS is the language for type signatures for Ruby and standard library @@ -582,10 +625,7 @@ Summary: An xUnit family unit testing framework for Ruby Version: %{test_unit_version} # lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR Python-2.0.1) -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(power_assert) -Provides: rubygem(test-unit) = %{version}-%{release} +Provides: bundled(rubygem-test-unit) = %{test_unit_version} BuildArch: noarch %description -n rubygem-test-unit @@ -595,14 +635,24 @@ programming software development methodology, for Smalltalk's SUnit. It allows writing tests, checking results and automated testing in Ruby. +%package -n rubygem-racc +Version: %{racc_version} +Summary: Racc is a LALR(1) parser generator +License: Ruby OR BSD-2-Clause +URL: https://github.com/ruby/racc +Provides: bundled(rubygem-racc) = %{racc_version} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. +It is written in Ruby itself, and generates Ruby program. + + %package -n rubygem-rexml Summary: An XML toolkit for Ruby Version: %{rexml_version} License: BSD-2-Clause URL: https://github.com/ruby/rexml -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rexml) = %{version}-%{release} +Provides: bundled(rubygem-rexml) = %{rexml_version} BuildArch: noarch %description -n rubygem-rexml @@ -622,9 +672,7 @@ Summary: Family of libraries that support various formats of XML "feeds" Version: %{rss_version} License: BSD-2-Clause URL: https://github.com/ruby/rss -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rss) = %{version}-%{release} +Provides: bundled(rubygem-rss) = %{rss_version} BuildArch: noarch %description -n rubygem-rss @@ -639,10 +687,7 @@ Summary: TypeProf is a type analysis tool for Ruby code based on abstract int Version: %{typeprof_version} License: MIT URL: https://github.com/ruby/typeprof -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(rbs) >= %{rbs_version} -Provides: rubygem(typeprof) = %{version}-%{release} +Provides: bundled(rubygem-typeprof) = %{typeprof_version} BuildArch: noarch %description -n rubygem-typeprof @@ -662,15 +707,9 @@ analysis result in RBS format, a standard type description format for Ruby %patch 3 -p1 %patch 4 -p1 %patch 6 -p1 -%patch 7 -p1 -%patch 8 -p1 %patch 9 -p1 %patch 10 -p1 %patch 11 -p1 -%patch 12 -p1 -%patch 13 -p1 -%patch 14 -p1 -%patch 15 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -721,9 +760,6 @@ rm -rf %{buildroot} # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h -# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%%{ruby_version}.h -# https://bugs.ruby-lang.org/issues/15425 -%multilib_fix_c_header --file %{_includedir}/rb_mjit_min_header-%{ruby_version}.h # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -773,66 +809,66 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems -mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib -mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb.rb %{buildroot}%{ruby_libdir}/irb.rb +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_dir}/gems/irb-%{irb_version}/lib/'{}' %{buildroot}%{ruby_libdir}/'{}' \; +find irb -type f -exec ln -s %{gem_libdir irb}/'{}' %{buildroot}%{ruby_libdir}/'{}' \; popd -mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_libdir rdoc} +mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_libdir rdoc} +mv %{buildroot}%{gem_spec -d rdoc} %{buildroot}%{gem_spec rdoc} -mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal -mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -touch %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +mkdir -p %{buildroot}%{gem_libdir bigdecimal} +mkdir -p %{buildroot}%{gem_extdir_mri bigdecimal} +mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_libdir bigdecimal} +mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{gem_extdir_mri bigdecimal} +touch %{buildroot}%{gem_extdir_mri bigdecimal}/gem.build_complete +mv %{buildroot}%{gem_spec -d bigdecimal} %{buildroot}%{gem_spec bigdecimal} +ln -s %{gem_libdir bigdecimal}/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal +ln -s %{gem_extdir_mri bigdecimal}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 -mkdir -p %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{gem_spec -d bundler} %{buildroot}%{gem_spec bundler} -mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io -mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io -touch %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io -ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +mkdir -p %{buildroot}%{gem_libdir io-console} +mkdir -p %{buildroot}%{gem_extdir_mri io-console}/io +mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_libdir io-console} +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{gem_extdir_mri io-console}/io +touch %{buildroot}%{gem_extdir_mri io-console}/gem.build_complete +mv %{buildroot}%{gem_spec -d io-console} %{buildroot}%{gem_spec io-console} +ln -s %{gem_libdir io-console}/io %{buildroot}%{ruby_libdir}/io +ln -s %{gem_extdir_mri io-console}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so -mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} -mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir}/json.rb -ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json -ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json +mkdir -p %{buildroot}%{gem_libdir json} +mkdir -p %{buildroot}%{gem_extdir_mri json} +mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_libdir json} +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{gem_extdir_mri json} +touch %{buildroot}%{gem_extdir_mri json}/gem.build_complete +mv %{buildroot}%{gem_spec -d json} %{buildroot}%{gem_spec json} +ln -s %{gem_libdir json}/json.rb %{buildroot}%{ruby_libdir}/json.rb +ln -s %{gem_libdir json}/json %{buildroot}%{ruby_libdir}/json +ln -s %{gem_extdir_mri json}/json/ %{buildroot}%{ruby_libarchdir}/json -mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} -mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +mkdir -p %{buildroot}%{gem_libdir psych} +mkdir -p %{buildroot}%{gem_extdir_mri psych} +mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_libdir psych} +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{gem_extdir_mri psych} +touch %{buildroot}%{gem_extdir_mri psych}/gem.build_complete +mv %{buildroot}%{gem_spec -d psych} %{buildroot}%{gem_spec psych} +ln -s %{gem_libdir psych}/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_libdir psych}/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{gem_extdir_mri psych}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). @@ -847,10 +883,10 @@ find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete # Move man pages into proper location mkdir -p %{buildroot}%{_mandir}/man{1,5} -mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 # https://bugs.ruby-lang.org/issues/17778 -cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.1 %{buildroot}%{_mandir}/man1 -cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.5 %{buildroot}%{_mandir}/man5 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. @@ -873,10 +909,6 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja -# Remove useless .github directory from Rake. -# https://github.com/ruby/rake/pull/333 -rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github - %check %if 0%{?with_hardening_test} # Check Ruby hardening. @@ -898,6 +930,24 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Gem::Resolver::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ \"" +# Net::HTTP. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rubygems/net-http/lib/net/http'; \ + puts '%%{rubygems_net_http_version}: %{rubygems_net_http_version}'; \ + puts %Q[Gem::Net::HTTP::VERSION: #{Gem::Net::HTTP::VERSION}]; \ + exit 1 if Gem::Net::HTTP::VERSION != '%{rubygems_net_http_version}'; \ +\"" + +# Net::Protocol. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rubygems/net-protocol/lib/net/protocol'; \ + puts '%%{rubygems_net_protocol_version}: %{rubygems_net_protocol_version}'; \ + puts %Q[Gem::Net::Protocol::VERSION: #{Gem::Net::Protocol::VERSION}]; \ + exit 1 if Gem::Net::Protocol::VERSION != '%{rubygems_net_protocol_version}'; \ +\"" + # OptParse. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ @@ -907,11 +957,32 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ \"" -# tsort -# TODO: Provide some real version test if version is available. +# Resolv. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Gem; end;\ - require 'rubygems/tsort/lib/tsort'\"" + module Gem; end; \ + require 'rubygems/resolv/lib/resolv'; \ + puts '%%{rubygems_resolv_version}: %{rubygems_resolv_version}'; \ + puts %Q[Gem::Resolv::VERSION: #{Gem::Resolv::VERSION}]; \ + exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ +\"" + +# Timeout. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/timeout/lib/timeout'; \ + puts '%%{rubygems_timeout_version}: %{rubygems_timeout_version}'; \ + puts %Q[Gem::Timeout::VERSION: #{Gem::Timeout::VERSION}]; \ + exit 1 if Gem::Timeout::VERSION != '%{rubygems_timeout_version}'; \ +\"" + +# TSort +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/tsort/lib/tsort'; \ + puts '%%{rubygems_tsort_version}: %{rubygems_tsort_version}'; \ + puts %Q[Gem::TSort::VERSION: #{Gem::TSort::VERSION}]; \ + exit 1 if Gem::TSort::VERSION != '%{rubygems_tsort_version}'; \ +\"" # Check Bundler bundled dependencies versions. @@ -943,16 +1014,13 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ \"" # Net::HTTP::Persistent. -# Require `rubygems` to workaround the `': uninitialized -# constant Gem (NameError) issue. -# https://github.com/rubygems/rubygems/issues/5119 make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ - module Bundler; module Persistent; module Net; module HTTP; \ - end; end; end; end; \ + module Gem; end; \ + module Bundler; end; \ require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ puts '%%{bundler_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \ - puts %Q[Bundler::Persistent::Net::HTTP::Persistent::VERSION: #{Bundler::Persistent::Net::HTTP::Persistent::VERSION}]; \ - exit 1 if Bundler::Persistent::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ + puts %Q[Gem::Net::HTTP::Persistent::VERSION: #{Gem::Net::HTTP::Persistent::VERSION}]; \ + exit 1 if Gem::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ \"" # Thor. @@ -964,12 +1032,14 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Bundler::Thor::VERSION != '%{bundler_thor_version}'; \ \"" -# tsort -# TODO: Provide some real version test if version is available. -#%%{global bundler_tsort_version} +# TSort make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ - require 'bundler/vendor/tsort/lib/tsort' \"" + require 'bundler/vendor/tsort/lib/tsort'; \ + puts '%%{bundler_tsort_version}: %{bundler_tsort_version}'; \ + puts %Q[Bundler::TSort::VERSION: #{Bundler::TSort::VERSION}]; \ + exit 1 if Bundler::TSort::VERSION != '%{bundler_tsort_version}'; \ +\"" # URI. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ @@ -1002,18 +1072,10 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -%ifarch i686 -# i686 specific failures. -# https://bugs.ruby-lang.org/issues/20045 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestFileExhaustive#test_expand_path_for_existent_username/" -DISABLE_TESTS="$DISABLE_TESTS -n !/TestDir#test_home/" -MSPECOPTS="$MSPECOPTS -P 'File.expand_path expands ~ENV..USER..* to.* the user.s home directory'" -%endif - # Give an option to increase the timeout in tests. # https://bugs.ruby-lang.org/issues/16921 %{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ - make -C %{_vpath_builddir} check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" + make -C %{_vpath_builddir} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Run Ruby OpenSSL tests in OpenSSL FIPS. make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ @@ -1028,9 +1090,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %lang(ja) %license COPYING.ja %license GPL %license LEGAL -%{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_mandir}/man1/erb* %{_mandir}/man1/ruby* %files devel @@ -1070,6 +1130,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/abbrev.rb %{ruby_libdir}/base64.rb %{ruby_libdir}/benchmark* +%{ruby_libdir}/bundled_gems.rb %{ruby_libdir}/cgi* %{ruby_libdir}/coverage.rb %{ruby_libdir}/csv* @@ -1089,8 +1150,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/ipaddr.rb %{ruby_libdir}/kconv.rb %{ruby_libdir}/logger* -# https://bugs.ruby-lang.org/issues/19298 -%exclude %{ruby_libdir}/mjit %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb %{ruby_libdir}/mutex_m.rb @@ -1114,7 +1173,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/rinda %{ruby_libdir}/ripper* %dir %{ruby_libdir}/ruby_vm -%{ruby_libdir}/ruby_vm/mjit +%{ruby_libdir}/ruby_vm/rjit %{ruby_libdir}/securerandom.rb %{ruby_libdir}/set* %{ruby_libdir}/shellwords.rb @@ -1132,6 +1191,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/uri* %{ruby_libdir}/weakref* %{ruby_libdir}/yaml* +%{ruby_libdir}/prism* # Platform specific libraries. %{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} @@ -1226,7 +1286,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/rbconfig/sizeof.so -%{ruby_libarchdir}/readline.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so @@ -1238,9 +1297,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/did_you_mean* %{ruby_libdir}/openssl* %{ruby_libarchdir}/openssl.so -%{ruby_libdir}/racc* -%dir %{ruby_libarchdir}/racc -%{ruby_libarchdir}/racc/cparse.so %{?with_systemtap:%{_systemtap_datadir}} @@ -1274,92 +1330,88 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_rpmconfigdir}/rubygems.con %files default-gems -%{gem_dir}/specifications/default/abbrev-0.1.1.gemspec -%{gem_dir}/specifications/default/base64-0.1.1.gemspec -%{gem_dir}/specifications/default/benchmark-0.2.1.gemspec -%{gem_dir}/specifications/default/cgi-0.3.6.gemspec -%{gem_dir}/specifications/default/csv-3.2.6.gemspec -%{gem_dir}/specifications/default/date-3.3.3.gemspec -%{gem_dir}/specifications/default/delegate-0.3.0.gemspec -%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec -%{gem_dir}/specifications/default/digest-3.1.1.gemspec -%{gem_dir}/specifications/default/drb-2.1.1.gemspec -%{gem_dir}/specifications/default/english-0.7.2.gemspec -%{gem_dir}/specifications/default/erb-%{erb_version}.gemspec -%{gem_dir}/specifications/default/error_highlight-0.5.1.gemspec -%{gem_dir}/specifications/default/etc-1.4.2.gemspec -%{gem_dir}/specifications/default/fcntl-1.0.2.gemspec -%{gem_dir}/specifications/default/fiddle-1.1.1.gemspec -%{gem_dir}/specifications/default/fileutils-1.7.0.gemspec -%{gem_dir}/specifications/default/find-0.1.1.gemspec -%{gem_dir}/specifications/default/forwardable-1.3.3.gemspec -%{gem_dir}/specifications/default/getoptlong-0.2.0.gemspec -%{gem_dir}/specifications/default/io-nonblock-0.2.0.gemspec -%{gem_dir}/specifications/default/io-wait-0.3.0.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.5.gemspec -%{gem_dir}/specifications/default/logger-1.5.3.gemspec -%{gem_dir}/specifications/default/mutex_m-0.1.2.gemspec -%{gem_dir}/specifications/default/net-http-0.3.2.gemspec -%{gem_dir}/specifications/default/net-protocol-0.2.1.gemspec -%{gem_dir}/specifications/default/nkf-0.1.2.gemspec -%{gem_dir}/specifications/default/observer-0.1.1.gemspec -%{gem_dir}/specifications/default/open3-0.1.2.gemspec -%{gem_dir}/specifications/default/open-uri-0.3.0.gemspec -%{gem_dir}/specifications/default/optparse-0.3.1.gemspec -%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec -%{gem_dir}/specifications/default/ostruct-0.5.5.gemspec -%{gem_dir}/specifications/default/pathname-0.2.1.gemspec -%{gem_dir}/specifications/default/pp-0.4.0.gemspec -%{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec -%{gem_dir}/specifications/default/pstore-0.1.2.gemspec -%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec -%{gem_dir}/specifications/default/readline-0.0.3.gemspec -%{gem_dir}/specifications/default/readline-ext-0.1.5.gemspec -%{gem_dir}/specifications/default/reline-0.3.2.gemspec -%{gem_dir}/specifications/default/resolv-0.2.2.gemspec -%{gem_dir}/specifications/default/resolv-replace-0.1.1.gemspec -%{gem_dir}/specifications/default/rinda-0.1.1.gemspec -%{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec -%{gem_dir}/specifications/default/securerandom-0.2.2.gemspec -%{gem_dir}/specifications/default/set-1.0.3.gemspec -%{gem_dir}/specifications/default/shellwords-0.1.0.gemspec -%{gem_dir}/specifications/default/singleton-0.1.1.gemspec -%{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec -%{gem_dir}/specifications/default/strscan-3.0.5.gemspec -%{gem_dir}/specifications/default/syntax_suggest-1.0.2.gemspec -%{gem_dir}/specifications/default/syslog-0.1.1.gemspec -%{gem_dir}/specifications/default/tempfile-0.1.3.gemspec -%{gem_dir}/specifications/default/time-0.2.2.gemspec -%{gem_dir}/specifications/default/timeout-0.3.1.gemspec -%{gem_dir}/specifications/default/tmpdir-0.1.3.gemspec -%{gem_dir}/specifications/default/tsort-0.1.1.gemspec -%{gem_dir}/specifications/default/un-0.2.1.gemspec -%{gem_dir}/specifications/default/uri-0.12.1.gemspec -%{gem_dir}/specifications/default/weakref-0.1.2.gemspec -#%%{gem_dir}/specifications/default/win32ole-1.8.9.gemspec -%{gem_dir}/specifications/default/yaml-0.2.1.gemspec -%{gem_dir}/specifications/default/zlib-3.0.0.gemspec - -%{gem_dir}/gems/erb-%{erb_version} -# Use standalone rubygem-racc if Racc binary is required. Shipping this -# executable in both packages might possibly cause conflicts. The situation -# could be better if Ruby generated these files: -# https://github.com/ruby/ruby/pull/2545 -%exclude %{_bindir}/racc -%exclude %{gem_dir}/gems/racc-%{racc_version}/bin +%gem_spec -d abbrev +%gem_spec -d base64 +%gem_spec -d benchmark +%gem_spec -d cgi +%gem_spec -d csv +%gem_spec -d date +%gem_spec -d delegate +%gem_spec -d did_you_mean +%gem_spec -d digest +%gem_spec -d drb +%gem_spec -d english +%gem_spec -d erb +%gem_instdir erb +%{_bindir}/erb +%{_mandir}/man1/erb* +%gem_spec -d error_highlight +%gem_spec -d etc +%gem_spec -d fcntl +%gem_spec -d fiddle +%gem_spec -d fileutils +%gem_spec -d find +%gem_spec -d forwardable +%gem_spec -d getoptlong +%gem_spec -d io-nonblock +%gem_spec -d io-wait +%gem_spec -d ipaddr +%gem_spec -d logger +%gem_spec -d mutex_m +%gem_spec -d net-http +%gem_spec -d net-protocol +%gem_spec -d nkf +%gem_spec -d observer +%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 resolv-replace +%gem_spec -d rinda +%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 +%gem_spec -d strscan +%gem_spec -d syntax_suggest +%{_bindir}/syntax_suggest +%gem_instdir syntax_suggest +%gem_spec -d syslog +%gem_spec -d tempfile +%gem_spec -d time +%gem_spec -d timeout +%gem_spec -d tmpdir +%gem_spec -d tsort +%gem_spec -d un +%gem_spec -d uri +%gem_spec -d weakref +#%%gem_spec -d win32ole +%gem_spec -d yaml +%gem_spec -d prism +%gem_spec -d zlib %files -n rubygem-irb %{_bindir}/irb %{ruby_libdir}/irb* -%{gem_dir}/gems/irb-%{irb_version} -%{gem_dir}/specifications/irb-%{irb_version}.gemspec +%{gem_instdir irb} +%{gem_spec irb} %{_mandir}/man1/irb.1* %files -n rubygem-rdoc %{_bindir}/rdoc %{_bindir}/ri -%{gem_dir}/gems/rdoc-%{rdoc_version} -%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +%{gem_instdir rdoc} +%{gem_spec rdoc} %{_mandir}/man1/ri* %files doc -f .ruby-doc.en -f .ruby-doc.ja @@ -1371,134 +1423,142 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %files -n rubygem-bigdecimal %{ruby_libdir}/bigdecimal* %{ruby_libarchdir}/bigdecimal* -%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -%{gem_dir}/gems/bigdecimal-%{bigdecimal_version} -%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec +%{gem_extdir_mri bigdecimal} +%{gem_instdir bigdecimal} +%{gem_spec bigdecimal} %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{_libdir}/gems/%{name}/io-console-%{io_console_version} -%{gem_dir}/gems/io-console-%{io_console_version} -%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec +%{gem_extdir_mri io-console} +%{gem_instdir io-console} +%{gem_spec io-console} %files -n rubygem-json %{ruby_libdir}/json* %{ruby_libarchdir}/json* -%{_libdir}/gems/%{name}/json-%{json_version} -%{gem_dir}/gems/json-%{json_version} -%{gem_dir}/specifications/json-%{json_version}.gemspec +%{gem_extdir_mri json} +%{gem_instdir json} +%{gem_spec json} %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so -%{_libdir}/gems/%{name}/psych-%{psych_version} -%dir %{gem_dir}/gems/psych-%{psych_version} -%{gem_dir}/gems/psych-%{psych_version}/lib -%{gem_dir}/specifications/psych-%{psych_version}.gemspec +%{gem_extdir_mri psych} +%dir %{gem_instdir psych} +%{gem_libdir psych} +%{gem_spec psych} %files -n rubygem-bundler %{_bindir}/bundle %{_bindir}/bundler -%{gem_dir}/gems/bundler-%{bundler_version} -%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{gem_instdir bundler} +%{gem_spec bundler} %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* %files bundled-gems +# rdbg %{_bindir}/rdbg -%dir %{_libdir}/gems/%{name}/debug-%{debug_version} -%{_libdir}/gems/%{name}/debug-%{debug_version}/gem.build_complete -%dir %{_libdir}/gems/%{name}/debug-%{debug_version}/debug -%{_libdir}/gems/%{name}/debug-%{debug_version}/debug/debug.so -%dir %{gem_dir}/gems/debug-%{debug_version} -%exclude %{gem_dir}/gems/debug-%{debug_version}/.* -%doc %{gem_dir}/gems/debug-%{debug_version}/CONTRIBUTING.md -%{gem_dir}/gems/debug-%{debug_version}/Gemfile -%license %{gem_dir}/gems/debug-%{debug_version}/LICENSE.txt -%doc %{gem_dir}/gems/debug-%{debug_version}/README.md -%{gem_dir}/gems/debug-%{debug_version}/Rakefile -%doc %{gem_dir}/gems/debug-%{debug_version}/TODO.md -%{gem_dir}/gems/debug-%{debug_version}/exe -%{gem_dir}/gems/debug-%{debug_version}/lib -%{gem_dir}/gems/debug-%{debug_version}/misc -%{gem_dir}/specifications/debug-%{debug_version}.gemspec +%dir %{gem_extdir_mri debug} +%{gem_extdir_mri debug}/gem.build_complete +%dir %{gem_extdir_mri debug}/debug +%{gem_extdir_mri debug}/debug/debug.so +%dir %{gem_instdir debug} +%exclude %{gem_instdir debug}/.* +%doc %{gem_instdir debug}/CONTRIBUTING.md +%{gem_instdir debug}/Gemfile +%license %{gem_instdir debug}/LICENSE.txt +%doc %{gem_instdir debug}/README.md +%{gem_instdir debug}/Rakefile +%doc %{gem_instdir debug}/TODO.md +%{gem_instdir debug}/exe +%{gem_libdir debug} +%{gem_instdir debug}/misc +%{gem_spec debug} -%dir %{gem_dir}/gems/net-ftp-%{net_ftp_version} -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Gemfile -%license %{gem_dir}/gems/net-ftp-%{net_ftp_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-ftp-%{net_ftp_version}/README.md -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Rakefile -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/lib -%{gem_dir}/specifications/net-ftp-%{net_ftp_version}.gemspec +# net-ftp +%dir %{gem_instdir net-ftp} +%{gem_instdir net-ftp}/Gemfile +%license %{gem_instdir net-ftp}/LICENSE.txt +%doc %{gem_instdir net-ftp}/README.md +%{gem_instdir net-ftp}/Rakefile +%{gem_libdir net-ftp} +%{gem_spec net-ftp} -%dir %{gem_dir}/gems/net-imap-%{net_imap_version} -%{gem_dir}/gems/net-imap-%{net_imap_version}/Gemfile -%license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md -%{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile -%{gem_dir}/gems/net-imap-%{net_imap_version}/benchmarks -%{gem_dir}/gems/net-imap-%{net_imap_version}/docs -%{gem_dir}/gems/net-imap-%{net_imap_version}/lib -%{gem_dir}/gems/net-imap-%{net_imap_version}/rakelib -%{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec +# net-imap +%dir %{gem_instdir net-imap} +%{gem_instdir net-imap}/Gemfile +%license %{gem_instdir net-imap}/LICENSE.txt +%doc %{gem_instdir net-imap}/README.md +%{gem_instdir net-imap}/Rakefile +%{gem_instdir net-imap}/docs +%{gem_libdir net-imap} +%{gem_instdir net-imap}/rakelib +%{gem_spec net-imap} -%dir %{gem_dir}/gems/net-pop-%{net_pop_version} -%{gem_dir}/gems/net-pop-%{net_pop_version}/Gemfile -%license %{gem_dir}/gems/net-pop-%{net_pop_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-pop-%{net_pop_version}/README.md -%{gem_dir}/gems/net-pop-%{net_pop_version}/Rakefile -%{gem_dir}/gems/net-pop-%{net_pop_version}/lib -%{gem_dir}/specifications/net-pop-%{net_pop_version}.gemspec +# net-pop +%dir %{gem_instdir net-pop} +%{gem_instdir net-pop}/Gemfile +%license %{gem_instdir net-pop}/LICENSE.txt +%doc %{gem_instdir net-pop}/README.md +%{gem_instdir net-pop}/Rakefile +%{gem_libdir net-pop} +%{gem_spec net-pop} -%dir %{gem_dir}/gems/net-smtp-%{net_smtp_version} -%license %{gem_dir}/gems/net-smtp-%{net_smtp_version}/LICENSE.txt -%{gem_dir}/gems/net-smtp-%{net_smtp_version}/lib -%{gem_dir}/specifications/net-smtp-%{net_smtp_version}.gemspec +# net-smtp +%dir %{gem_instdir net-smtp} +%doc %{gem_instdir net-smtp}/NEWS.md +%doc %{gem_instdir net-smtp}/README.md +%license %{gem_instdir net-smtp}/LICENSE.txt +%{gem_libdir net-smtp} +%{gem_spec net-smtp} -%dir %{gem_dir}/gems/matrix-%{matrix_version} -%license %{gem_dir}/gems/matrix-%{matrix_version}/LICENSE.txt -%{gem_dir}/gems/matrix-%{matrix_version}/lib -%{gem_dir}/specifications/matrix-%{matrix_version}.gemspec +# matrix +%dir %{gem_instdir matrix} +%license %{gem_instdir matrix}/LICENSE.txt +%{gem_libdir matrix} +%{gem_spec matrix} -%dir %{gem_dir}/gems/prime-%{prime_version} -%{gem_dir}/gems/prime-%{prime_version}/Gemfile -%license %{gem_dir}/gems/prime-%{prime_version}/LICENSE.txt -%doc %{gem_dir}/gems/prime-%{prime_version}/README.md -%{gem_dir}/gems/prime-%{prime_version}/Rakefile -%{gem_dir}/gems/prime-%{prime_version}/bin -%{gem_dir}/gems/prime-%{prime_version}/lib -%{gem_dir}/specifications/prime-%{prime_version}.gemspec +# prime +%dir %{gem_instdir prime} +%{gem_instdir prime}/Gemfile +%license %{gem_instdir prime}/LICENSE.txt +%doc %{gem_instdir prime}/README.md +%{gem_instdir prime}/Rakefile +%{gem_instdir prime}/bin +%{gem_libdir prime} +%{gem_spec prime} %files -n rubygem-minitest -%dir %{gem_dir}/gems/minitest-%{minitest_version} -%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* -%{gem_dir}/gems/minitest-%{minitest_version}/Manifest.txt -%{gem_dir}/gems/minitest-%{minitest_version}/design_rationale.rb -%{gem_dir}/gems/minitest-%{minitest_version}/lib -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec -%doc %{gem_dir}/gems/minitest-%{minitest_version}/History.rdoc -%doc %{gem_dir}/gems/minitest-%{minitest_version}/README.rdoc -%{gem_dir}/gems/minitest-%{minitest_version}/Rakefile -%{gem_dir}/gems/minitest-%{minitest_version}/test +%dir %{gem_instdir minitest} +%exclude %{gem_instdir minitest}/.* +%{gem_instdir minitest}/Manifest.txt +%{gem_instdir minitest}/design_rationale.rb +%{gem_libdir minitest} +%{gem_spec minitest} +%doc %{gem_instdir minitest}/History.rdoc +%doc %{gem_instdir minitest}/README.rdoc +%{gem_instdir minitest}/Rakefile +%{gem_instdir minitest}/test %files -n rubygem-power_assert -%dir %{gem_dir}/gems/power_assert-%{power_assert_version} -%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/BSDL -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/COPYING -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/LEGAL -%{gem_dir}/gems/power_assert-%{power_assert_version}/lib -%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec -%{gem_dir}/gems/power_assert-%{power_assert_version}/Gemfile -%doc %{gem_dir}/gems/power_assert-%{power_assert_version}/README.md -%{gem_dir}/gems/power_assert-%{power_assert_version}/Rakefile +%dir %{gem_instdir power_assert} +%exclude %{gem_instdir power_assert}/.* +%license %{gem_instdir power_assert}/BSDL +%license %{gem_instdir power_assert}/COPYING +%license %{gem_instdir power_assert}/LEGAL +%{gem_libdir power_assert} +%{gem_spec power_assert} +%{gem_instdir power_assert}/Gemfile +%doc %{gem_instdir power_assert}/README.md +%{gem_instdir power_assert}/Rakefile %files -n rubygem-rake %{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec +%{gem_instdir rake} +%{gem_spec rake} %{_mandir}/man1/rake.1* %files -n rubygem-rbs @@ -1506,75 +1566,89 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %dir %{_libdir}/gems/%{name}/rbs-%{rbs_version} %{_libdir}/gems/%{name}/rbs-%{rbs_version}/gem.build_complete %{_libdir}/gems/%{name}/rbs-%{rbs_version}/rbs_extension.so -%dir %{gem_dir}/gems/rbs-%{rbs_version} -%exclude %{gem_dir}/gems/rbs-%{rbs_version}/.* -%license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL -%doc %{gem_dir}/gems/rbs-%{rbs_version}/CHANGELOG.md -%license %{gem_dir}/gems/rbs-%{rbs_version}/COPYING -%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile* -%doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md -%{gem_dir}/gems/rbs-%{rbs_version}/Rakefile -%{gem_dir}/gems/rbs-%{rbs_version}/Steepfile -%{gem_dir}/gems/rbs-%{rbs_version}/core -%doc %{gem_dir}/gems/rbs-%{rbs_version}/docs -%{gem_dir}/gems/rbs-%{rbs_version}/exe -%{gem_dir}/gems/rbs-%{rbs_version}/goodcheck.yml -%{gem_dir}/gems/rbs-%{rbs_version}/lib -%{gem_dir}/gems/rbs-%{rbs_version}/schema -%{gem_dir}/gems/rbs-%{rbs_version}/sig -%{gem_dir}/gems/rbs-%{rbs_version}/stdlib -%{gem_dir}/gems/rbs-%{rbs_version}/steep -%{gem_dir}/specifications/rbs-%{rbs_version}.gemspec +%dir %{gem_instdir rbs} +%exclude %{gem_instdir rbs}/.* +%license %{gem_instdir rbs}/BSDL +%doc %{gem_instdir rbs}/CHANGELOG.md +%license %{gem_instdir rbs}/COPYING +%{gem_instdir rbs}/Gemfile* +%doc %{gem_instdir rbs}/README.md +%{gem_instdir rbs}/Rakefile +%{gem_instdir rbs}/Steepfile +%{gem_instdir rbs}/core +%doc %{gem_instdir rbs}/docs +%{gem_instdir rbs}/exe +%{gem_instdir rbs}/goodcheck.yml +%{gem_libdir rbs} +%{gem_instdir rbs}/schema +%{gem_instdir rbs}/sig +%{gem_instdir rbs}/stdlib +%{gem_spec rbs} %files -n rubygem-test-unit -%dir %{gem_dir}/gems/test-unit-%{test_unit_version} -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/BSDL -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/COPYING -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/PSFL -%{gem_dir}/gems/test-unit-%{test_unit_version}/lib -%{gem_dir}/gems/test-unit-%{test_unit_version}/sample -%{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec -%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/README.md -%{gem_dir}/gems/test-unit-%{test_unit_version}/Rakefile -%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/doc +%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_spec test-unit} +%doc %{gem_instdir test-unit}/README.md +%{gem_instdir test-unit}/Rakefile +%doc %{gem_instdir test-unit}/doc + +%files -n rubygem-racc +%dir %{gem_instdir racc} +%{_bindir}/racc +%{gem_extdir_mri racc} +%license %{gem_instdir racc}/COPYING +%doc %{gem_instdir racc}/ChangeLog +%lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc +%doc %{gem_instdir racc}/README.rdoc +%doc %{gem_instdir racc}/TODO +%{gem_instdir racc}/bin +%doc %{gem_instdir racc}/doc +%{gem_libdir racc} +%{gem_spec racc} %files -n rubygem-rexml -%dir %{gem_dir}/gems/rexml-%{rexml_version} -%license %{gem_dir}/gems/rexml-%{rexml_version}/LICENSE.txt -%doc %{gem_dir}/gems/rexml-%{rexml_version}/NEWS.md -%doc %{gem_dir}/gems/rexml-%{rexml_version}/doc -%{gem_dir}/gems/rexml-%{rexml_version}/lib -%{gem_dir}/specifications/rexml-%{rexml_version}.gemspec -%doc %{gem_dir}/gems/rexml-%{rexml_version}/README.md +%dir %{gem_instdir rexml} +%license %{gem_instdir rexml}/LICENSE.txt +%doc %{gem_instdir rexml}/NEWS.md +%doc %{gem_instdir rexml}/doc +%{gem_libdir rexml} +%{gem_spec rexml} +%doc %{gem_instdir rexml}/README.md %files -n rubygem-rss -%dir %{gem_dir}/gems/rss-%{rss_version} -%exclude %{gem_dir}/gems/rss-%{rss_version}/.* -%license %{gem_dir}/gems/rss-%{rss_version}/LICENSE.txt -%doc %{gem_dir}/gems/rss-%{rss_version}/NEWS.md -%{gem_dir}/gems/rss-%{rss_version}/lib -%{gem_dir}/specifications/rss-%{rss_version}.gemspec -%doc %{gem_dir}/gems/rss-%{rss_version}/Gemfile -%doc %{gem_dir}/gems/rss-%{rss_version}/README.md -%doc %{gem_dir}/gems/rss-%{rss_version}/Rakefile -%doc %{gem_dir}/gems/rss-%{rss_version}/test +%dir %{gem_instdir rss} +%exclude %{gem_instdir rss}/.* +%license %{gem_instdir rss}/LICENSE.txt +%doc %{gem_instdir rss}/NEWS.md +%{gem_libdir rss} +%{gem_spec rss} +%doc %{gem_instdir rss}/README.md %files -n rubygem-typeprof -%dir %{gem_dir}/gems/typeprof-%{typeprof_version} +%dir %{gem_instdir typeprof} %{_bindir}/typeprof -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/.* -%license %{gem_dir}/gems/typeprof-%{typeprof_version}/LICENSE -%{gem_dir}/gems/typeprof-%{typeprof_version}/exe -%{gem_dir}/gems/typeprof-%{typeprof_version}/lib -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/typeprof-lsp -%{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Rakefile +%exclude %{gem_instdir typeprof}/.* +%license %{gem_instdir typeprof}/LICENSE +%{gem_instdir typeprof}/exe +%{gem_libdir typeprof} +%doc %{gem_instdir typeprof}/tools +%exclude %{gem_instdir typeprof}/typeprof-lsp +%{gem_spec typeprof} +%doc %{gem_instdir typeprof}/Gemfile* +%doc %{gem_instdir typeprof}/README.md +%doc %{gem_instdir typeprof}/Rakefile %changelog +* Tue Jan 02 2024 Vít Ondruch - 3.3.0-1 +- Upgrade to Ruby 3.3.0. + Resolves: rhbz#2255918 + * Thu Nov 09 2023 Jun Aruga - 3.2.2-183 - ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters diff --git a/sources b/sources index 709311a..10a3d0b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.2.tar.xz) = a29f24cd80f563f6368952d06d6273f7241a409fa9ab2f60e03dde2ac58ca06bee1750715b6134caebf4c061d3503446dc37a6059e19860bb0010eef34951935 +SHA512 (ruby-3.3.0.tar.xz) = 7959c5753bfa0bfc4d6d74060869aabbe9815c1c97930659da11b917ee0803ddbbd80e869e00c48b8694b4ba48709c3b6493fd045568e36e902616c35ababf01 From 308b2c0ab2c6268847ed3bf2008e74bce334e810 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 5 Jan 2024 12:40:15 +0100 Subject: [PATCH 23/83] Fix compiling coroutines with aarch64's branch protection. Armv8.3+ capable CPUs might segfault with incorrect compilation options. See related upstream report: https://bugs.ruby-lang.org/issues/20085 We have hit this on COPR which uses [0] c7g.xlarge AWS flavor for aarch64 architecture builds. This machine flavor seems to fall into the ARMv8.3+ range. Fedora CFLAGS come with `-mbranch-protection=standard` which means that both BTI and the PAC protections are used. The option is equivalent to `-mbranch-protection=pac-ret+bti`. However, since the upstream configure.ac automatically appends `-mbranch-protection=pac-ret`, the BTI protection is not used as the last used option seems to overwrite [1] the Fedora default for this. To resolve both of these issues, of BTI being skipped and the potential segfaults a patch is applied. To fix segfaults an upstream patch was applied [2]. To fix the issue of overridden option I have patched the configure.ac file to check for the `=standard` first when searching for a usable `-mbranch-protection` option. The overriding of our options was reported upstream: In the same issue I provided the extension of compilation option as an attachment, to showcase a workaround that fixes the situation in Fedora. [0] [1] [2] --- ...ranch-protection-compilation-for-arm.patch | 59 +++++++++++++++++++ ruby.spec | 10 +++- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch new file mode 100644 index 0000000..9ab7078 --- /dev/null +++ b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch @@ -0,0 +1,59 @@ +From 8af8f327457738620d2c85bd65db8cc5594585db Mon Sep 17 00:00:00 2001 +From: Yuta Saito +Date: Wed, 27 Dec 2023 06:22:45 +0000 +Subject: [PATCH 1/2] [Bug #20085] Use consistent default options for + `-mbranch-protection` + +We need to use the same options for both C compiler and assembler +when `-mbranch-protection` is guessed by configure. Otherwise, +`coroutine/arm64/Context.{h,S}` will use incompatible PAC strategies. +--- + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 9286946fc1..18b4247991 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -830,7 +830,10 @@ AS_IF([test "$GCC" = yes], [ + AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ ++ # C compiler and assembler must be consistent for -mbranch-protection ++ # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. + RUBY_APPEND_OPTION(XCFLAGS, option) ++ RUBY_APPEND_OPTION(ASFLAGS, option) + break + ]) + ]) +-- +2.43.0 + + +From 80281e14e411e8e5fe4955effbb2c650a2f52667 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 12 Jan 2024 18:33:34 +0100 +Subject: [PATCH 2/2] aarch64: Prepend -mbranch-protection=standard option when + checking branch protection. + +Related Upstream issue: https://bugs.ruby-lang.org/issues/20154 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 18b4247991..5ea8ada8f7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -827,7 +827,7 @@ AS_IF([test "$GCC" = yes], [ + + # aarch64 branch protection + AS_CASE(["$target_cpu"], [aarch64], [ +- AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ ++ AS_FOR(option, opt, [-mbranch-protection=standard -mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ + # C compiler and assembler must be consistent for -mbranch-protection +-- +2.43.0 + diff --git a/ruby.spec b/ruby.spec index 3307d6b..f75caf5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 1%{?dist} +Release: 2%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -239,6 +239,10 @@ Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patc # https://github.com/ruby/ruby/commit/d3933fc753187a055a4904af82f5f3794c88c416 # https://bugs.ruby-lang.org/issues/20106 Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch +# Armv8.3+ capable CPUs might segfault with incorrect compilation options. +# See related upstream report: https://bugs.ruby-lang.org/issues/20085 +# https://bugs.ruby-lang.org/issues/20154 +Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -710,6 +714,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 9 -p1 %patch 10 -p1 %patch 11 -p1 +%patch 12 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1645,6 +1650,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Jan 15 2024 Jarek Prokop - 3.3.0-2 +- Fix compiling coroutines with aarch64's branch protection. + * Tue Jan 02 2024 Vít Ondruch - 3.3.0-1 - Upgrade to Ruby 3.3.0. Resolves: rhbz#2255918 From 066e0a3d6dd33dd3511054aaaa408603dcafa3c3 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 22 Jan 2024 12:17:40 +0000 Subject: [PATCH 24/83] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f75caf5..66325be 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 2%{?dist} +Release: 3%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -1650,6 +1650,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Jan 22 2024 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Mon Jan 15 2024 Jarek Prokop - 3.3.0-2 - Fix compiling coroutines with aarch64's branch protection. From aa7e8debeec10ce7b66bca859828a3adbce95afd Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 26 Jan 2024 12:04:48 +0100 Subject: [PATCH 25/83] Revert adding AI_ADDRCONFIG flag to getaddrinfo(3) calls. It is causing problems when network is in certain, valid, configuration. The point of it is to workaround a glibc bug that is not present for us. https://bugs.ruby-lang.org/issues/20208 To reproduce, have IPv6 enabled localhost but only IPv4 interfaces (such as eth0, name and count of them may vary based on system) to disable public interfaces via sysctl: `$ sysctl "net.ipv6.conf..disable_ipv6=1"` Where is NOT lo but can be eth0 or other. Confirm with command `$ ip addr` command that only `lo` interface has IPv6 address. and run the following with Ruby 3.3: ~~~ $ ruby -rnet/http -e 'http = Net::HTTP.new("localhost", 8080); http.local_host = Addrinfo.tcp("localhost", 8080).ip_address; p http.get("/")' ~~~ The error is then related to EAFNOSUPPORT: ``` Errno::EAFNOSUPPORT: Failed to open TCP connection to localhost:37337 (Address family not supported by protocol - bind(2) for "::1" port 45395) ``` running above Ruby command with `strace` suggest that there is an attempt to bind with AF_INET6 using an AF_INET socket, however, only if the reproducer above attempts to set the `http.local_host` with Addrinfo. From upstream issue #20208: "This is calling getaddrinfo to resolve "localhost" for us to use it as the local side of the connection. Because Ruby does not know what you intend to do with this IP address, it does not make the request with AI_ADDRCONFIG. Thus, you get an IPv6 result returned, since there is an IPv6 addres for localhost!" --- ...I_ADDRCONFIG-when-making-getaddrinfo.patch | 241 ++++++++++++++++++ ruby.spec | 18 +- 2 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch diff --git a/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch b/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch new file mode 100644 index 0000000..b509cb4 --- /dev/null +++ b/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch @@ -0,0 +1,241 @@ +From c3655b89e7c06555a2e0bf13affb8a63a49f4296 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 26 Jan 2024 11:19:48 +0100 +Subject: [PATCH] Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls + for outgoing conns (#7295)" + +This reverts commit d2ba8ea54a4089959afdeecdd963e3c4ff391748. + +The purpose of the commit is to workaround a GLIBC bug [0] still present +in older Ubuntu [1]. C8S/RHEL 8 has the fix for some time [2] and the +Ruby workaround is causing problems for us [3]. Therefore we can +revert it for EL8, EL9, and Fedora distros. + +[0] https://sourceware.org/bugzilla/show_bug.cgi?id=26600 +[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1961697 +[2] https://bugzilla.redhat.com/show_bug.cgi?id=1868106 +[3] https://bugs.ruby-lang.org/issues/20208 +--- + ext/socket/extconf.rb | 2 - + ext/socket/ipsocket.c | 11 +-- + test/socket/test_tcp.rb | 164 ---------------------------------------- + 3 files changed, 2 insertions(+), 175 deletions(-) + +diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb +index 544bed5298..1ca52da366 100644 +--- a/ext/socket/extconf.rb ++++ b/ext/socket/extconf.rb +@@ -607,8 +607,6 @@ def %(s) s || self end + EOS + end + +- have_const('AI_ADDRCONFIG', headers) +- + case with_config("lookup-order-hack", "UNSPEC") + when "INET" + $defs << "-DLOOKUP_ORDER_HACK_INET" +diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c +index 0a693655b4..0c13620258 100644 +--- a/ext/socket/ipsocket.c ++++ b/ext/socket/ipsocket.c +@@ -54,22 +54,15 @@ init_inetsock_internal(VALUE v) + VALUE connect_timeout = arg->connect_timeout; + struct timeval tv_storage; + struct timeval *tv = NULL; +- int remote_addrinfo_hints = 0; + + if (!NIL_P(connect_timeout)) { + tv_storage = rb_time_interval(connect_timeout); + tv = &tv_storage; + } + +- if (type == INET_SERVER) { +- remote_addrinfo_hints |= AI_PASSIVE; +- } +-#ifdef HAVE_CONST_AI_ADDRCONFIG +- remote_addrinfo_hints |= AI_ADDRCONFIG; +-#endif +- + arg->remote.res = rsock_addrinfo(arg->remote.host, arg->remote.serv, +- family, SOCK_STREAM, remote_addrinfo_hints); ++ family, SOCK_STREAM, ++ (type == INET_SERVER) ? AI_PASSIVE : 0); + + + /* +diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb +index 35d361f060..7f9dc53cae 100644 +--- a/test/socket/test_tcp.rb ++++ b/test/socket/test_tcp.rb +@@ -140,168 +140,4 @@ def test_accept_multithread + server_threads.each(&:join) + end + end +- +- def test_ai_addrconfig +- # This test verifies that we pass AI_ADDRCONFIG to the DNS resolver when making +- # an outgoing connection. +- # The verification of this is unfortunately incredibly convoluted. We perform the +- # test by setting up a fake DNS server to receive queries. Then, we construct +- # an environment which has only IPv4 addresses and uses that fake DNS server. We +- # then attempt to make an outgoing TCP connection. Finally, we verify that we +- # only received A and not AAAA queries on our fake resolver. +- # This test can only possibly work on Linux, and only when run as root. If either +- # of these conditions aren't met, the test will be skipped. +- +- # The construction of our IPv6-free environment must happen in a child process, +- # which we can put in its own network & mount namespaces. +- +- omit "This test is disabled. It is retained to show the original intent of [ruby-core:110870]" +- +- IO.popen("-") do |test_io| +- if test_io.nil? +- begin +- # Child program +- require 'fiddle' +- require 'resolv' +- require 'open3' +- +- libc = Fiddle.dlopen(nil) +- begin +- unshare = Fiddle::Function.new(libc['unshare'], [Fiddle::TYPE_INT], Fiddle::TYPE_INT) +- rescue Fiddle::DLError +- # Test can't run because we don't have unshare(2) in libc +- # This will be the case on not-linux, and also on very old glibc versions (or +- # possibly other libc's that don't expose this syscall wrapper) +- $stdout.write(Marshal.dump({result: :skip, reason: "unshare(2) or mount(2) not in libc"})) +- exit +- end +- +- # Move our test process into a new network & mount namespace. +- # This environment will be configured to be IPv6 free and point DNS resolution +- # at a fake DNS server. +- # (n.b. these flags are CLONE_NEWNS | CLONE_NEWNET) +- ret = unshare.call(0x00020000 | 0x40000000) +- errno = Fiddle.last_error +- if ret == -1 && errno == Errno::EPERM::Errno +- # Test can't run because we're not root. +- $stdout.write(Marshal.dump({result: :skip, reason: "insufficient permissions to unshare namespaces"})) +- exit +- elsif ret == -1 && (errno == Errno::ENOSYS::Errno || errno == Errno::EINVAL::Errno) +- # No unshare(2) in the kernel (or kernel too old to know about this namespace type) +- $stdout.write(Marshal.dump({result: :skip, reason: "errno #{errno} calling unshare(2)"})) +- exit +- elsif ret == -1 +- # Unexpected failure +- raise "errno #{errno} calling unshare(2)" +- end +- +- # Set up our fake DNS environment. Clean out /etc/hosts... +- fake_hosts_file = Tempfile.new('ruby_test_hosts') +- fake_hosts_file.write <<~HOSTS +- 127.0.0.1 localhost +- ::1 localhost +- HOSTS +- fake_hosts_file.flush +- +- # Have /etc/resolv.conf point to 127.0.0.1... +- fake_resolv_conf = Tempfile.new('ruby_test_resolv') +- fake_resolv_conf.write <<~RESOLV +- nameserver 127.0.0.1 +- RESOLV +- fake_resolv_conf.flush +- +- # Also stub out /etc/nsswitch.conf; glibc can have other resolver modules +- # (like systemd-resolved) configured in there other than just using dns, +- # so rewrite it to remove any `hosts:` lines and add one which just uses +- # dns. +- real_nsswitch_conf = File.read('/etc/nsswitch.conf') rescue "" +- fake_nsswitch_conf = Tempfile.new('ruby_test_nsswitch') +- real_nsswitch_conf.lines.reject { _1 =~ /^\s*hosts:/ }.each do |ln| +- fake_nsswitch_conf.puts ln +- end +- fake_nsswitch_conf.puts "hosts: files myhostname dns" +- fake_nsswitch_conf.flush +- +- # This is needed to make sure our bind-mounds aren't visible outside this process. +- system 'mount', '--make-rprivate', '/', exception: true +- # Bind-mount the fake files over the top of the real files. +- system 'mount', '--bind', '--make-private', fake_hosts_file.path, '/etc/hosts', exception: true +- system 'mount', '--bind', '--make-private', fake_resolv_conf.path, '/etc/resolv.conf', exception: true +- system 'mount', '--bind', '--make-private', fake_nsswitch_conf.path, '/etc/nsswitch.conf', exception: true +- +- # Create a dummy interface with only an IPv4 address +- system 'ip', 'link', 'add', 'dummy0', 'type', 'dummy', exception: true +- system 'ip', 'addr', 'add', '192.168.1.2/24', 'dev', 'dummy0', exception: true +- system 'ip', 'link', 'set', 'dummy0', 'up', exception: true +- system 'ip', 'link', 'set', 'lo', 'up', exception: true +- +- # Disable IPv6 on this interface (this is needed to disable the link-local +- # IPv6 address) +- File.open('/proc/sys/net/ipv6/conf/dummy0/disable_ipv6', 'w') do |f| +- f.puts "1" +- end +- +- # Create a fake DNS server which will receive the DNS queries triggered by TCPSocket.new +- fake_dns_server_socket = UDPSocket.new +- fake_dns_server_socket.bind('127.0.0.1', 53) +- received_dns_queries = [] +- fake_dns_server_thread = Thread.new do +- Socket.udp_server_loop_on([fake_dns_server_socket]) do |msg, msg_src| +- request = Resolv::DNS::Message.decode(msg) +- received_dns_queries << request +- response = request.dup.tap do |r| +- r.qr = 0 +- r.rcode = 3 # NXDOMAIN +- end +- msg_src.reply response.encode +- end +- end +- +- # Make a request which will hit our fake DNS swerver - this needs to be in _another_ +- # process because glibc will cache resolver info across the fork otherwise. +- load_path_args = $LOAD_PATH.flat_map { ['-I', _1] } +- Open3.capture3('/proc/self/exe', *load_path_args, '-rsocket', '-e', <<~RUBY) +- TCPSocket.open('www.example.com', 4444) +- RUBY +- +- fake_dns_server_thread.kill +- fake_dns_server_thread.join +- +- have_aaaa_qs = received_dns_queries.any? do |query| +- query.question.any? do |question| +- question[1] == Resolv::DNS::Resource::IN::AAAA +- end +- end +- +- have_a_q = received_dns_queries.any? do |query| +- query.question.any? do |question| +- question[0].to_s == "www.example.com" +- end +- end +- +- if have_aaaa_qs +- $stdout.write(Marshal.dump({result: :fail, reason: "got AAAA queries, expected none"})) +- elsif !have_a_q +- $stdout.write(Marshal.dump({result: :fail, reason: "got no A query for example.com"})) +- else +- $stdout.write(Marshal.dump({result: :success})) +- end +- rescue => ex +- $stdout.write(Marshal.dump({result: :fail, reason: ex.full_message})) +- ensure +- # Make sure the child process does not transfer control back into the test runner. +- exit! +- end +- else +- test_result = Marshal.load(test_io.read) +- +- case test_result[:result] +- when :skip +- omit test_result[:reason] +- when :fail +- fail test_result[:reason] +- end +- end +- end +- end + end if defined?(TCPSocket) +-- +2.43.0 + diff --git a/ruby.spec b/ruby.spec index 66325be..a7fce40 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 3%{?dist} +Release: 4%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -243,6 +243,18 @@ Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch # See related upstream report: https://bugs.ruby-lang.org/issues/20085 # https://bugs.ruby-lang.org/issues/20154 Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +# Revert adding AI_ADDRCONFIG flag to getaddrinfo(3) calls. +# It is causing problems when network is in certain, valid, configuration. +# When loopback interface is IPv6 capable, but no regular network interface +# is IPv6 capable, in some situations (such as in TestNetHTTPLocalBind) +# this might result in creating IPv4 socket and then binding it +# to IPv6 family connection. +# That is incorrect behavior and such operation will result in +# Errno::EAFNOSUPPORT exception. +# The point of the upstream change is to workaround a glibc bug +# that is not present for us. Therefore we can safely revert the change. +# https://bugs.ruby-lang.org/issues/20208 +Patch13: ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -715,6 +727,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 10 -p1 %patch 11 -p1 %patch 12 -p1 +%patch 13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1650,6 +1663,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Jan 26 2024 Jarek Prokop - 3.3.0-4 +- Do not set AI_ADDRCONFIG by default when calling getaddrinfo(3). + * Mon Jan 22 2024 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From ac77c2a354635d52372361dea4510b9cb9bd749b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 26 Jan 2024 14:16:50 +0100 Subject: [PATCH 26/83] Use gem macros for rubygem-rbs subpackage. This were apparenlyt overlooked previously. --- ruby.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index 66325be..6321891 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1568,9 +1568,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %files -n rubygem-rbs %{_bindir}/rbs -%dir %{_libdir}/gems/%{name}/rbs-%{rbs_version} -%{_libdir}/gems/%{name}/rbs-%{rbs_version}/gem.build_complete -%{_libdir}/gems/%{name}/rbs-%{rbs_version}/rbs_extension.so +%dir %{gem_extdir_mri rbs} +%{gem_extdir_mri rbs}/gem.build_complete +%{gem_extdir_mri rbs}/rbs_extension.so %dir %{gem_instdir rbs} %exclude %{gem_instdir rbs}/.* %license %{gem_instdir rbs}/BSDL From a34f33bc5028eb2c29fa2bb724cf6d1c22ef0376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 6 Mar 2024 15:13:47 +0100 Subject: [PATCH 27/83] Fix FTBFS caused by OpenSSL 3.2.1 update. --- ....1-Fix-test-session-reuse-but-expire.patch | 45 +++++++++++++++++++ ruby.spec | 10 ++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 ruby-3.3.1-Fix-test-session-reuse-but-expire.patch diff --git a/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch b/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch new file mode 100644 index 0000000..47e0440 --- /dev/null +++ b/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch @@ -0,0 +1,45 @@ +From 047857d9cb44a0703b5582d502e45d585b9dfced Mon Sep 17 00:00:00 2001 +From: "NARUSE, Yui" +Date: Sat, 3 Feb 2024 19:39:17 +0900 +Subject: [PATCH 1/2] Show OpenSSL version in the error message of assert_equal + +--- + test/net/http/test_https.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb +index 89d500118db24b..ccfa48b2a44ea8 100644 +--- a/test/net/http/test_https.rb ++++ b/test/net/http/test_https.rb +@@ -182,7 +182,7 @@ def test_session_reuse_but_expire + http.get("/") + + socket = http.instance_variable_get(:@socket).io +- assert_equal false, socket.session_reused? ++ assert_equal false, socket.session_reused?, "NOTE: OpenSSL library version is #{OpenSSL::OPENSSL_LIBRARY_VERSION}" + + http.finish + end + +From 53b874d17b68d3f8566846a6df37fd6951a1873c Mon Sep 17 00:00:00 2001 +From: "NARUSE, Yui" +Date: Sat, 3 Feb 2024 20:22:59 +0900 +Subject: [PATCH 2/2] OpenSSL 3.2.1 30 Jan 2024 is also broken + +--- + test/net/http/test_https.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb +index ccfa48b2a44ea8..6b3171d265997e 100644 +--- a/test/net/http/test_https.rb ++++ b/test/net/http/test_https.rb +@@ -167,7 +167,7 @@ def test_session_reuse + def test_session_reuse_but_expire + # FIXME: The new_session_cb is known broken for clients in OpenSSL 1.1.0h. + omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 1.1.0h') +- omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 3.2.0') ++ omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 3.2.') + + http = Net::HTTP.new(HOST, config("port")) + http.use_ssl = true diff --git a/ruby.spec b/ruby.spec index 403b325..5c8fd23 100644 --- a/ruby.spec +++ b/ruby.spec @@ -167,7 +167,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 4%{?dist} +Release: 5%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -255,6 +255,10 @@ Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch # that is not present for us. Therefore we can safely revert the change. # https://bugs.ruby-lang.org/issues/20208 Patch13: ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch +# Fix `TestNetHTTPS#test_session_reuse_but_expire` test failure cause by +# to OpenSSL 3.2 +# https://github.com/ruby/ruby/pull/9824 +Patch14: ruby-3.3.1-Fix-test-session-reuse-but-expire.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -728,6 +732,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 11 -p1 %patch 12 -p1 %patch 13 -p1 +%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1663,6 +1668,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Wed Mar 06 2024 Vít Ondruch - 3.3.0-5 +- Fix FTBFS caused by OpenSSL 3.2.1 update. + * Fri Jan 26 2024 Jarek Prokop - 3.3.0-4 - Do not set AI_ADDRCONFIG by default when calling getaddrinfo(3). From 5da6a15c57362268ce203151c7b589ac89046441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 12 Apr 2024 17:18:48 +0200 Subject: [PATCH 28/83] Ruby bundled NKF, add appropriate `bundled` provide and test --- ruby.spec | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 5c8fd23..12e1908 100644 --- a/ruby.spec +++ b/ruby.spec @@ -137,6 +137,9 @@ %global test_unit_version 3.6.1 %global typeprof_version 0.21.9 +# Bundled nkf version +%global bundled_nkf_version 2.1.5 + %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* %if 0%{?fedora} >= 19 @@ -167,7 +170,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 5%{?dist} +Release: 6%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -336,6 +339,11 @@ Provides: bundled(ccan-check_type) Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) +# https://github.com/nurse/nkf +# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: +# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d +Provides: bundled(nkf) = %{bundled_nkf_version} + # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} @@ -1073,6 +1081,16 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \ \"" +# Check bundled libraries versions. + +# Nkf. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + require 'nkf'; \ + puts '%%{bundled_nkf_version}: %{bundled_nkf_version}'; \ + puts %Q[NKF::NKF_VERSION: #{NKF::NKF_VERSION}]; \ + exit 1 if NKF::NKF_VERSION != '%{bundled_nkf_version}'; \ +\"" + # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing @@ -1668,6 +1686,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Apr 12 2024 Vít Ondruch - 3.3.0-6 +- Add `bundled` provide for NKF. + * Wed Mar 06 2024 Vít Ondruch - 3.3.0-5 - Fix FTBFS caused by OpenSSL 3.2.1 update. From 4ff7de700754076b9e90f7656c409df12c16cc49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 12 Apr 2024 17:19:37 +0200 Subject: [PATCH 29/83] License review and clarification --- ruby.spec | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/ruby.spec b/ruby.spec index 12e1908..8e58d25 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,13 +171,48 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} Release: 6%{?dist} -# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c +# Licenses, which are likely not included in binary RPMs: +# Apache-2.0: +# benchmark/gc/redblack.rb +# But this file might be BSD-2-Clause licensed after all: +# https://bugs.ruby-lang.org/issues/20420 +# GPL-1.0-or-later: ext/win32/lib/win32/sspi.rb +# GPL-1.0-or-later OR Artistic-1.0-Perl: win32/win32.c, include/ruby/win32.h, +# ext/win32ole/win32ole.c +# +# !!! Problematic licenses: +# LicenseRef-scancode-unicode-mappings: ext/json/generator/generator.c +# https://bugs.ruby-lang.org/issues/11844#note-19 +# https://github.com/flori/json/issues/277 +# https://github.com/flori/json/pull/567 +# +# Licenses under review: +# .bundle/gems/net-imap-0.4.9/LICENSE.txt +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 +# +# Approved license without SPDX identifier: +# ext/pty/pty.c +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/503 +# +# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c, addr2line.c:2652 +# CC0: ccan/{build_assert/build_assert.h,check_type/check_type.h, +# container_of/container_of.h,str/str.h} +# Allowed based on 'grandfather clause': +# https://gitlab.com/fedora/legal/fedora-license-data/-/blob/7d9720b2cfd8ccb98d1975312942d99588a0da7c/data/CC0-1.0.toml#L11-14 +# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/499 +# dtoa: missing/dtoa.c +# GPL-3.0-or-later WITH Bison-exception-2.2: parse.{c,h}, ext/ripper/ripper.c +# HPND-Markus-Kuhn: missing/langinfo.c # ISC: missing/strl{cat,cpy}.c -# Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... -# MIT and CCO: ccan/* -# zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c +# LicenseRef-Fedora-Public-Domain: include/ruby/st.h, strftime.c, missing/*, ... +# https://gitlab.com/fedora/legal/fedora-license-data/-/merge_requests/145 +# MIT: ccan/list/list.h +# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb # Unicode-DFS-2015: some of enc/trans/**/*.src -License: (Ruby OR BSD-2-Clause) AND BSD-3-Clause AND ISC AND Public Domain AND MIT and CC0 AND zlib AND Unicode-DFS-2015 +# 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 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 @@ -374,7 +409,8 @@ Version: %{rubygems_version} # lib/rubygems/timeout/ # lib/rubygems/tsort/ # MIT: lib/rubygems/resolver/molinillo -License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND MIT +# Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb +License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND (Ruby OR BSD-2-Clause OR GPL-1.0-or-later) AND MIT Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} @@ -485,7 +521,8 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -License: Ruby OR BSD-2-Clause +# dtoa: missing/dtoa.c +License: (Ruby OR BSD-2-Clause) AND dtoa Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} %description -n rubygem-bigdecimal @@ -1688,6 +1725,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog * Fri Apr 12 2024 Vít Ondruch - 3.3.0-6 - Add `bundled` provide for NKF. +- License review and fixes of SPDX syntax. * Wed Mar 06 2024 Vít Ondruch - 3.3.0-5 - Fix FTBFS caused by OpenSSL 3.2.1 update. From c649282efb97f8b44879fb505809343d1d67ff80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 23 Apr 2024 17:48:45 +0200 Subject: [PATCH 30/83] Upgrade to Ruby 3.3.1. --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...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 +- ...ocations-in-Hash-compare_by_identity.patch | 6 +- ....1-Fix-test-session-reuse-but-expire.patch | 45 --- ruby-3.4.0-Fix-pointer-incompatiblity.patch | 24 ++ ...I_ADDRCONFIG-when-making-getaddrinfo.patch | 241 ----------------- ...ranch-protection-compilation-for-arm.patch | 39 +-- ...uby-net-http-Renew-test-certificates.patch | 256 ------------------ ruby.spec | 75 +++-- sources | 2 +- 13 files changed, 73 insertions(+), 631 deletions(-) delete mode 100644 ruby-3.3.1-Fix-test-session-reuse-but-expire.patch create mode 100644 ruby-3.4.0-Fix-pointer-incompatiblity.patch delete mode 100644 ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch delete mode 100644 ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 826d5f5..acd58b9 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 -@@ -3470,6 +3470,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3473,6 +3473,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 fb9b618..996486a 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 -@@ -4309,7 +4309,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4312,7 +4312,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 a64b812..38eba5e 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 -@@ -4373,6 +4373,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4376,6 +4376,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 91e53a1..98dd7ac 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 -@@ -4345,6 +4345,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4348,6 +4348,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='' -@@ -4369,6 +4373,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4372,6 +4376,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 c921c36..6ba802e 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 -@@ -4259,9 +4259,6 @@ AS_CASE(["$target_os"], +@@ -4262,9 +4262,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], -@@ -4284,57 +4281,63 @@ AC_ARG_WITH(ridir, +@@ -4287,57 +4284,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) -@@ -4351,6 +4354,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4354,6 +4357,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-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch index 9baaf27..23a6db8 100644 --- a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch +++ b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch @@ -13,7 +13,7 @@ diff --git a/hash.c b/hash.c index 78e9d9a2d6..f6525ba4a5 100644 --- a/hash.c +++ b/hash.c -@@ -4377,16 +4377,13 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4385,16 +4385,13 @@ rb_hash_compare_by_id(VALUE hash) if (hash_iterating_p(hash)) { rb_raise(rb_eRuntimeError, "compare_by_identity during iteration"); } @@ -33,7 +33,7 @@ index 78e9d9a2d6..f6525ba4a5 100644 // Slow path: Need to rehash the members of `self` into a new // `tmp` table using the new `identhash` compare/hash functions. tmp = hash_alloc(0); -@@ -4394,10 +4391,8 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4402,10 +4399,8 @@ rb_hash_compare_by_id(VALUE hash) identtable = RHASH_ST_TABLE(tmp); rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); @@ -60,7 +60,7 @@ diff --git a/hash.c b/hash.c index f6525ba4a5..cf83675c70 100644 --- a/hash.c +++ b/hash.c -@@ -4380,22 +4380,15 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4388,22 +4388,15 @@ rb_hash_compare_by_id(VALUE hash) ar_force_convert_table(hash, __FILE__, __LINE__); HASH_ASSERT(RHASH_ST_TABLE_P(hash)); diff --git a/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch b/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch deleted file mode 100644 index 47e0440..0000000 --- a/ruby-3.3.1-Fix-test-session-reuse-but-expire.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 047857d9cb44a0703b5582d502e45d585b9dfced Mon Sep 17 00:00:00 2001 -From: "NARUSE, Yui" -Date: Sat, 3 Feb 2024 19:39:17 +0900 -Subject: [PATCH 1/2] Show OpenSSL version in the error message of assert_equal - ---- - test/net/http/test_https.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb -index 89d500118db24b..ccfa48b2a44ea8 100644 ---- a/test/net/http/test_https.rb -+++ b/test/net/http/test_https.rb -@@ -182,7 +182,7 @@ def test_session_reuse_but_expire - http.get("/") - - socket = http.instance_variable_get(:@socket).io -- assert_equal false, socket.session_reused? -+ assert_equal false, socket.session_reused?, "NOTE: OpenSSL library version is #{OpenSSL::OPENSSL_LIBRARY_VERSION}" - - http.finish - end - -From 53b874d17b68d3f8566846a6df37fd6951a1873c Mon Sep 17 00:00:00 2001 -From: "NARUSE, Yui" -Date: Sat, 3 Feb 2024 20:22:59 +0900 -Subject: [PATCH 2/2] OpenSSL 3.2.1 30 Jan 2024 is also broken - ---- - test/net/http/test_https.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/net/http/test_https.rb b/test/net/http/test_https.rb -index ccfa48b2a44ea8..6b3171d265997e 100644 ---- a/test/net/http/test_https.rb -+++ b/test/net/http/test_https.rb -@@ -167,7 +167,7 @@ def test_session_reuse - def test_session_reuse_but_expire - # FIXME: The new_session_cb is known broken for clients in OpenSSL 1.1.0h. - omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 1.1.0h') -- omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 3.2.0') -+ omit if OpenSSL::OPENSSL_LIBRARY_VERSION.include?('OpenSSL 3.2.') - - http = Net::HTTP.new(HOST, config("port")) - http.use_ssl = true diff --git a/ruby-3.4.0-Fix-pointer-incompatiblity.patch b/ruby-3.4.0-Fix-pointer-incompatiblity.patch new file mode 100644 index 0000000..b2ad843 --- /dev/null +++ b/ruby-3.4.0-Fix-pointer-incompatiblity.patch @@ -0,0 +1,24 @@ +From 055613fd868a8c94e43893f8c58a00cdd2a81f6d Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Fri, 22 Mar 2024 18:18:35 +0900 +Subject: [PATCH] Fix pointer incompatiblity + +Since the subsecond part is discarded, WIDEVAL to VALUE conversion is +needed. +--- + time.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/time.c b/time.c +index 6179b081c02fc9..3304b2f4f4856a 100644 +--- a/time.c ++++ b/time.c +@@ -2346,7 +2346,7 @@ zone_timelocal(VALUE zone, VALUE time) + struct time_object *tobj = RTYPEDDATA_GET_DATA(time); + wideval_t t, s; + +- split_second(tobj->timew, &t, &s); ++ wdivmod(tobj->timew, WINT2FIXWV(TIME_SCALE), &t, &s); + tm = tm_from_time(rb_cTimeTM, time); + utc = rb_check_funcall(zone, id_local_to_utc, 1, &tm); + if (UNDEF_P(utc)) return 0; diff --git a/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch b/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch deleted file mode 100644 index b509cb4..0000000 --- a/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch +++ /dev/null @@ -1,241 +0,0 @@ -From c3655b89e7c06555a2e0bf13affb8a63a49f4296 Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Fri, 26 Jan 2024 11:19:48 +0100 -Subject: [PATCH] Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls - for outgoing conns (#7295)" - -This reverts commit d2ba8ea54a4089959afdeecdd963e3c4ff391748. - -The purpose of the commit is to workaround a GLIBC bug [0] still present -in older Ubuntu [1]. C8S/RHEL 8 has the fix for some time [2] and the -Ruby workaround is causing problems for us [3]. Therefore we can -revert it for EL8, EL9, and Fedora distros. - -[0] https://sourceware.org/bugzilla/show_bug.cgi?id=26600 -[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1961697 -[2] https://bugzilla.redhat.com/show_bug.cgi?id=1868106 -[3] https://bugs.ruby-lang.org/issues/20208 ---- - ext/socket/extconf.rb | 2 - - ext/socket/ipsocket.c | 11 +-- - test/socket/test_tcp.rb | 164 ---------------------------------------- - 3 files changed, 2 insertions(+), 175 deletions(-) - -diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb -index 544bed5298..1ca52da366 100644 ---- a/ext/socket/extconf.rb -+++ b/ext/socket/extconf.rb -@@ -607,8 +607,6 @@ def %(s) s || self end - EOS - end - -- have_const('AI_ADDRCONFIG', headers) -- - case with_config("lookup-order-hack", "UNSPEC") - when "INET" - $defs << "-DLOOKUP_ORDER_HACK_INET" -diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c -index 0a693655b4..0c13620258 100644 ---- a/ext/socket/ipsocket.c -+++ b/ext/socket/ipsocket.c -@@ -54,22 +54,15 @@ init_inetsock_internal(VALUE v) - VALUE connect_timeout = arg->connect_timeout; - struct timeval tv_storage; - struct timeval *tv = NULL; -- int remote_addrinfo_hints = 0; - - if (!NIL_P(connect_timeout)) { - tv_storage = rb_time_interval(connect_timeout); - tv = &tv_storage; - } - -- if (type == INET_SERVER) { -- remote_addrinfo_hints |= AI_PASSIVE; -- } --#ifdef HAVE_CONST_AI_ADDRCONFIG -- remote_addrinfo_hints |= AI_ADDRCONFIG; --#endif -- - arg->remote.res = rsock_addrinfo(arg->remote.host, arg->remote.serv, -- family, SOCK_STREAM, remote_addrinfo_hints); -+ family, SOCK_STREAM, -+ (type == INET_SERVER) ? AI_PASSIVE : 0); - - - /* -diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb -index 35d361f060..7f9dc53cae 100644 ---- a/test/socket/test_tcp.rb -+++ b/test/socket/test_tcp.rb -@@ -140,168 +140,4 @@ def test_accept_multithread - server_threads.each(&:join) - end - end -- -- def test_ai_addrconfig -- # This test verifies that we pass AI_ADDRCONFIG to the DNS resolver when making -- # an outgoing connection. -- # The verification of this is unfortunately incredibly convoluted. We perform the -- # test by setting up a fake DNS server to receive queries. Then, we construct -- # an environment which has only IPv4 addresses and uses that fake DNS server. We -- # then attempt to make an outgoing TCP connection. Finally, we verify that we -- # only received A and not AAAA queries on our fake resolver. -- # This test can only possibly work on Linux, and only when run as root. If either -- # of these conditions aren't met, the test will be skipped. -- -- # The construction of our IPv6-free environment must happen in a child process, -- # which we can put in its own network & mount namespaces. -- -- omit "This test is disabled. It is retained to show the original intent of [ruby-core:110870]" -- -- IO.popen("-") do |test_io| -- if test_io.nil? -- begin -- # Child program -- require 'fiddle' -- require 'resolv' -- require 'open3' -- -- libc = Fiddle.dlopen(nil) -- begin -- unshare = Fiddle::Function.new(libc['unshare'], [Fiddle::TYPE_INT], Fiddle::TYPE_INT) -- rescue Fiddle::DLError -- # Test can't run because we don't have unshare(2) in libc -- # This will be the case on not-linux, and also on very old glibc versions (or -- # possibly other libc's that don't expose this syscall wrapper) -- $stdout.write(Marshal.dump({result: :skip, reason: "unshare(2) or mount(2) not in libc"})) -- exit -- end -- -- # Move our test process into a new network & mount namespace. -- # This environment will be configured to be IPv6 free and point DNS resolution -- # at a fake DNS server. -- # (n.b. these flags are CLONE_NEWNS | CLONE_NEWNET) -- ret = unshare.call(0x00020000 | 0x40000000) -- errno = Fiddle.last_error -- if ret == -1 && errno == Errno::EPERM::Errno -- # Test can't run because we're not root. -- $stdout.write(Marshal.dump({result: :skip, reason: "insufficient permissions to unshare namespaces"})) -- exit -- elsif ret == -1 && (errno == Errno::ENOSYS::Errno || errno == Errno::EINVAL::Errno) -- # No unshare(2) in the kernel (or kernel too old to know about this namespace type) -- $stdout.write(Marshal.dump({result: :skip, reason: "errno #{errno} calling unshare(2)"})) -- exit -- elsif ret == -1 -- # Unexpected failure -- raise "errno #{errno} calling unshare(2)" -- end -- -- # Set up our fake DNS environment. Clean out /etc/hosts... -- fake_hosts_file = Tempfile.new('ruby_test_hosts') -- fake_hosts_file.write <<~HOSTS -- 127.0.0.1 localhost -- ::1 localhost -- HOSTS -- fake_hosts_file.flush -- -- # Have /etc/resolv.conf point to 127.0.0.1... -- fake_resolv_conf = Tempfile.new('ruby_test_resolv') -- fake_resolv_conf.write <<~RESOLV -- nameserver 127.0.0.1 -- RESOLV -- fake_resolv_conf.flush -- -- # Also stub out /etc/nsswitch.conf; glibc can have other resolver modules -- # (like systemd-resolved) configured in there other than just using dns, -- # so rewrite it to remove any `hosts:` lines and add one which just uses -- # dns. -- real_nsswitch_conf = File.read('/etc/nsswitch.conf') rescue "" -- fake_nsswitch_conf = Tempfile.new('ruby_test_nsswitch') -- real_nsswitch_conf.lines.reject { _1 =~ /^\s*hosts:/ }.each do |ln| -- fake_nsswitch_conf.puts ln -- end -- fake_nsswitch_conf.puts "hosts: files myhostname dns" -- fake_nsswitch_conf.flush -- -- # This is needed to make sure our bind-mounds aren't visible outside this process. -- system 'mount', '--make-rprivate', '/', exception: true -- # Bind-mount the fake files over the top of the real files. -- system 'mount', '--bind', '--make-private', fake_hosts_file.path, '/etc/hosts', exception: true -- system 'mount', '--bind', '--make-private', fake_resolv_conf.path, '/etc/resolv.conf', exception: true -- system 'mount', '--bind', '--make-private', fake_nsswitch_conf.path, '/etc/nsswitch.conf', exception: true -- -- # Create a dummy interface with only an IPv4 address -- system 'ip', 'link', 'add', 'dummy0', 'type', 'dummy', exception: true -- system 'ip', 'addr', 'add', '192.168.1.2/24', 'dev', 'dummy0', exception: true -- system 'ip', 'link', 'set', 'dummy0', 'up', exception: true -- system 'ip', 'link', 'set', 'lo', 'up', exception: true -- -- # Disable IPv6 on this interface (this is needed to disable the link-local -- # IPv6 address) -- File.open('/proc/sys/net/ipv6/conf/dummy0/disable_ipv6', 'w') do |f| -- f.puts "1" -- end -- -- # Create a fake DNS server which will receive the DNS queries triggered by TCPSocket.new -- fake_dns_server_socket = UDPSocket.new -- fake_dns_server_socket.bind('127.0.0.1', 53) -- received_dns_queries = [] -- fake_dns_server_thread = Thread.new do -- Socket.udp_server_loop_on([fake_dns_server_socket]) do |msg, msg_src| -- request = Resolv::DNS::Message.decode(msg) -- received_dns_queries << request -- response = request.dup.tap do |r| -- r.qr = 0 -- r.rcode = 3 # NXDOMAIN -- end -- msg_src.reply response.encode -- end -- end -- -- # Make a request which will hit our fake DNS swerver - this needs to be in _another_ -- # process because glibc will cache resolver info across the fork otherwise. -- load_path_args = $LOAD_PATH.flat_map { ['-I', _1] } -- Open3.capture3('/proc/self/exe', *load_path_args, '-rsocket', '-e', <<~RUBY) -- TCPSocket.open('www.example.com', 4444) -- RUBY -- -- fake_dns_server_thread.kill -- fake_dns_server_thread.join -- -- have_aaaa_qs = received_dns_queries.any? do |query| -- query.question.any? do |question| -- question[1] == Resolv::DNS::Resource::IN::AAAA -- end -- end -- -- have_a_q = received_dns_queries.any? do |query| -- query.question.any? do |question| -- question[0].to_s == "www.example.com" -- end -- end -- -- if have_aaaa_qs -- $stdout.write(Marshal.dump({result: :fail, reason: "got AAAA queries, expected none"})) -- elsif !have_a_q -- $stdout.write(Marshal.dump({result: :fail, reason: "got no A query for example.com"})) -- else -- $stdout.write(Marshal.dump({result: :success})) -- end -- rescue => ex -- $stdout.write(Marshal.dump({result: :fail, reason: ex.full_message})) -- ensure -- # Make sure the child process does not transfer control back into the test runner. -- exit! -- end -- else -- test_result = Marshal.load(test_io.read) -- -- case test_result[:result] -- when :skip -- omit test_result[:reason] -- when :fail -- fail test_result[:reason] -- end -- end -- end -- end - end if defined?(TCPSocket) --- -2.43.0 - diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch index 9ab7078..de93143 100644 --- a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +++ b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch @@ -1,39 +1,7 @@ -From 8af8f327457738620d2c85bd65db8cc5594585db Mon Sep 17 00:00:00 2001 -From: Yuta Saito -Date: Wed, 27 Dec 2023 06:22:45 +0000 -Subject: [PATCH 1/2] [Bug #20085] Use consistent default options for - `-mbranch-protection` - -We need to use the same options for both C compiler and assembler -when `-mbranch-protection` is guessed by configure. Otherwise, -`coroutine/arm64/Context.{h,S}` will use incompatible PAC strategies. ---- - configure.ac | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/configure.ac b/configure.ac -index 9286946fc1..18b4247991 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -830,7 +830,10 @@ AS_IF([test "$GCC" = yes], [ - AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ - RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) - AS_IF([test "x$branch_protection" = xyes], [ -+ # C compiler and assembler must be consistent for -mbranch-protection -+ # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. - RUBY_APPEND_OPTION(XCFLAGS, option) -+ RUBY_APPEND_OPTION(ASFLAGS, option) - break - ]) - ]) --- -2.43.0 - - -From 80281e14e411e8e5fe4955effbb2c650a2f52667 Mon Sep 17 00:00:00 2001 +From db4ba95bf12f9303e38a9a78979cd363cb9a19fb Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 12 Jan 2024 18:33:34 +0100 -Subject: [PATCH 2/2] aarch64: Prepend -mbranch-protection=standard option when +Subject: [PATCH] aarch64: Prepend -mbranch-protection=standard option when checking branch protection. Related Upstream issue: https://bugs.ruby-lang.org/issues/20154 @@ -54,6 +22,3 @@ index 18b4247991..5ea8ada8f7 100644 RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) AS_IF([test "x$branch_protection" = xyes], [ # C compiler and assembler must be consistent for -mbranch-protection --- -2.43.0 - diff --git a/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch b/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch deleted file mode 100644 index 34a18e0..0000000 --- a/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch +++ /dev/null @@ -1,256 +0,0 @@ -From d3933fc753187a055a4904af82f5f3794c88c416 Mon Sep 17 00:00:00 2001 -From: Sorah Fukumori -Date: Mon, 1 Jan 2024 20:45:54 +0900 -Subject: [PATCH] [ruby/net-http] Renew test certificates - -The private key is replaced with a public known test key published at -[RFC 9500]. - -Also lifetime has been extended to 10 years from 4 years. - -[RFC 9500]: https://www.rfc-editor.org/rfc/rfc9500.html - -https://github.com/ruby/net-http/commit/4ab6c4a500 ---- - test/net/fixtures/Makefile | 6 +-- - test/net/fixtures/cacert.pem | 44 ++++++++-------- - test/net/fixtures/server.crt | 99 +++++++----------------------------- - test/net/fixtures/server.key | 55 ++++++++++---------- - 4 files changed, 71 insertions(+), 133 deletions(-) - -diff --git a/test/net/fixtures/Makefile b/test/net/fixtures/Makefile -index b2bc9c7368ee2..88c232e3b6c16 100644 ---- a/test/net/fixtures/Makefile -+++ b/test/net/fixtures/Makefile -@@ -5,11 +5,11 @@ regen_certs: - make server.crt - - cacert.pem: server.key -- openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" -+ openssl req -new -x509 -days 3650 -key server.key -out cacert.pem -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" - - server.csr: -- openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" -+ openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" - - server.crt: server.csr cacert.pem -- openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt -+ openssl x509 -days 3650 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -out server.crt - rm server.csr -diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem -index f623bd62ed375..24c83f1c65225 100644 ---- a/test/net/fixtures/cacert.pem -+++ b/test/net/fixtures/cacert.pem -@@ -1,24 +1,24 @@ - -----BEGIN CERTIFICATE----- --MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD --VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex --JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy --MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM --B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv --cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz --ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB --CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV --SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI --3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d --BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L --2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R --WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9 --I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw --DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA --of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q --aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS --2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee --uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s --K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+ --mA== -+MIID+zCCAuOgAwIBAgIUGMvHl3EhtKPKcgc3NQSAYfFuC+8wDQYJKoZIhvcNAQEL -+BQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRQwEgYDVQQHDAtN -+YXR6LWUgY2l0eTEXMBUGA1UECgwOUnVieSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1 -+YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJARYWc2VjdXJpdHlAcnVieS1sYW5nLm9y -+ZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEyMjkxMTQ3MjNaMIGMMQswCQYDVQQGEwJK -+UDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkxFzAVBgNV -+BAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0ExJTAjBgkq -+hkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqGSIb3DQEB -+AQUAA4IBDwAwggEKAoIBAQCw+egZQ6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI -++1GSqyi1bFBgsRjM0THllIdMbKmJtWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0f -+qXmG8UTz0VTWdlAXXmhUs6lSADvAaIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0 -+yg+801SXzoFTTa+UGIRLE66jH51aa5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIe -+NWMF32wHqIOOPvQcWV3M5D2vxJEj702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1 -+JNPc/n3dVUm+fM6NoDXPoLP7j55G9zKyqGtGAWXAj1MTAgMBAAGjUzBRMB0GA1Ud -+DgQWBBSJGVleDvFp9cu9R+E0/OKYzGkwkTAfBgNVHSMEGDAWgBSJGVleDvFp9cu9 -+R+E0/OKYzGkwkTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBl -+8GLB8skAWlkSw/FwbUmEV3zyqu+p7PNP5YIYoZs0D74e7yVulGQ6PKMZH5hrZmHo -+orFSQU+VUUirG8nDGj7Rzce8WeWBxsaDGC8CE2dq6nC6LuUwtbdMnBrH0LRWAz48 -+jGFF3jHtVz8VsGfoZTZCjukWqNXvU6hETT9GsfU+PZqbqcTVRPH52+XgYayKdIbD -+r97RM4X3+aXBHcUW0b76eyyi65RR/Xtvn8ioZt2AdX7T2tZzJyXJN3Hupp77s6Ui -+AZR35SToHCZeTZD12YBvLBdaTPLZN7O/Q/aAO9ZiJaZ7SbFOjz813B2hxXab4Fob -+2uJX6eMWTVxYK5D4M9lm - -----END CERTIFICATE----- -diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt -index 5ca78a6d146a0..5d2923795dabc 100644 ---- a/test/net/fixtures/server.crt -+++ b/test/net/fixtures/server.crt -@@ -1,82 +1,21 @@ --Certificate: -- Data: -- Version: 3 (0x2) -- Serial Number: 2 (0x2) -- Signature Algorithm: sha256WithRSAEncryption -- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org -- Validity -- Not Before: Jan 2 03:27:13 2019 GMT -- Not After : Jan 1 03:27:13 2024 GMT -- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost -- Subject Public Key Info: -- Public Key Algorithm: rsaEncryption -- Public-Key: (2048 bit) -- Modulus: -- 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07: -- 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48: -- e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57: -- 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67: -- cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1: -- 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7: -- bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc: -- 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1: -- 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9: -- 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19: -- 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04: -- 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3: -- 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4: -- de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d: -- 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc: -- e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d: -- 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10: -- 4f:41 -- Exponent: 65537 (0x10001) -- X509v3 extensions: -- X509v3 Basic Constraints: -- CA:FALSE -- Netscape Comment: -- OpenSSL Generated Certificate -- X509v3 Subject Key Identifier: -- ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36 -- X509v3 Authority Key Identifier: -- keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 -- -- Signature Algorithm: sha256WithRSAEncryption -- 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c: -- ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35: -- 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51: -- fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a: -- 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a: -- 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15: -- 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64: -- 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62: -- d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab: -- 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d: -- 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2: -- 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff: -- 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf: -- da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69: -- fd:be:bd:6e - -----BEGIN CERTIFICATE----- --MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx --EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK --DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI --hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX --DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx --FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ --BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB --AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ --zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj --VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ --wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r --sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d --dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC --AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o --wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N --+J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ --y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW --EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL --Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1 --oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j --28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u -+MIIDYTCCAkkCAQAwDQYJKoZIhvcNAQELBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD -+VQQIDAdTaGltYW5lMRQwEgYDVQQHDAtNYXR6LWUgY2l0eTEXMBUGA1UECgwOUnVi -+eSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ -+ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEy -+MjkxMTQ3MjNaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRcwFQYD -+VQQKDA5SdWJ5IENvcmUgVGVhbTESMBAGA1UECwwJUnVieSBUZXN0MRIwEAYDVQQD -+DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw+egZ -+Q6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI+1GSqyi1bFBgsRjM0THllIdMbKmJ -+tWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0fqXmG8UTz0VTWdlAXXmhUs6lSADvA -+aIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0yg+801SXzoFTTa+UGIRLE66jH51a -+a5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIeNWMF32wHqIOOPvQcWV3M5D2vxJEj -+702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1JNPc/n3dVUm+fM6NoDXPoLP7j55G -+9zKyqGtGAWXAj1MTAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACtGNdj5TEtnJBYp -+M+LhBeU3oNteldfycEm993gJp6ghWZFg23oX8fVmyEeJr/3Ca9bAgDqg0t9a0npN -+oWKEY6wVKqcHgu3gSvThF5c9KhGbeDDmlTSVVNQmXWX0K2d4lS2cwZHH8mCm2mrY -+PDqlEkSc7k4qSiqigdS8i80Yk+lDXWsm8CjsiC93qaRM7DnS0WPQR0c16S95oM6G -+VklFKUSDAuFjw9aVWA/nahOucjn0w5fVW6lyIlkBslC1ChlaDgJmvhz+Ol3iMsE0 -+kAmFNu2KKPVrpMWaBID49QwQTDyhetNLaVVFM88iUdA9JDoVMEuP1mm39JqyzHTu -+uBrdP4Q= - -----END CERTIFICATE----- -diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key -index 7f2380e71e637..6a83d5bcf4a52 100644 ---- a/test/net/fixtures/server.key -+++ b/test/net/fixtures/server.key -@@ -1,28 +1,27 @@ -------BEGIN PRIVATE KEY----- --MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN --XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU --Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC --6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE --cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ --n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u --/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ --DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho --LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX --QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej --hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ --1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt --liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd --U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc --pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC --A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1 --ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs --oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD --gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ --xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn --kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ --uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ --y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ --g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8 --wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7 --2whRF0FEjKA8ehrNhAq+VFfFNw== -------END PRIVATE KEY----- -+-----BEGIN RSA PRIVATE KEY----- -+MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso -+tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE -+89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU -+l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s -+B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59 -+3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+ -+dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI -+FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J -+aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2 -+BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx -+IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/ -+fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u -+pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT -+Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl -+u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD -+fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X -+Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE -+k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo -+qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS -+CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ -+XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw -+AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r -+UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0 -+2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5 -+7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3 -+-----END RSA PRIVATE KEY----- diff --git a/ruby.spec b/ruby.spec index 8e58d25..cab582c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 3 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,7 +27,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.5.3 +%global rubygems_version 3.5.9 %global rubygems_molinillo_version 0.8.0 %global rubygems_net_http_version 0.4.0 %global rubygems_net_protocol_version 0.2.2 @@ -35,9 +35,10 @@ %global rubygems_resolv_version 0.3.0 %global rubygems_timeout_version 0.4.1 %global rubygems_tsort_version 0.2.0 +%global rubygems_uri_version 0.13.0 # Default gems. -%global bundler_version 2.5.3 +%global bundler_version 2.5.9 %global bundler_connection_pool_version 2.4.1 %global bundler_fileutils_version 1.7.2 %global bundler_net_http_persistent_version 4.0.2 @@ -71,7 +72,7 @@ %global ipaddr_version 1.2.6 %global logger_version 1.6.0 %global mutex_m_version 0.2.0 -%global net_http_version 0.4.0 +%global net_http_version 0.4.1 %global net_protocol_version 0.2.2 %global nkf_version 0.1.3 %global observer_version 0.1.2 @@ -117,14 +118,14 @@ %global irb_version 1.11.0 %global json_version 2.7.1 %global psych_version 5.1.2 -%global rdoc_version 6.6.2 +%global rdoc_version 6.6.3.1 # Bundled gems. %global debug_version 1.9.1 -%global net_ftp_version 0.3.3 -%global net_imap_version 0.4.9 +%global net_ftp_version 0.3.4 +%global net_imap_version 0.4.9.1 %global net_pop_version 0.1.2 -%global net_smtp_version 0.4.0 +%global net_smtp_version 0.4.0.1 %global matrix_version 0.4.2 %global minitest_version 5.20.0 %global power_assert_version 2.0.3 @@ -170,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 6%{?dist} +Release: 7%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -273,30 +274,13 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Revert patches causing segfaults in alexandria package. # https://bugs.ruby-lang.org/issues/20079 Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch -# Fix net-http test errors due to expired certificate -# https://github.com/ruby/ruby/commit/d3933fc753187a055a4904af82f5f3794c88c416 -# https://bugs.ruby-lang.org/issues/20106 -Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch # Armv8.3+ capable CPUs might segfault with incorrect compilation options. # See related upstream report: https://bugs.ruby-lang.org/issues/20085 # https://bugs.ruby-lang.org/issues/20154 Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch -# Revert adding AI_ADDRCONFIG flag to getaddrinfo(3) calls. -# It is causing problems when network is in certain, valid, configuration. -# When loopback interface is IPv6 capable, but no regular network interface -# is IPv6 capable, in some situations (such as in TestNetHTTPLocalBind) -# this might result in creating IPv4 socket and then binding it -# to IPv6 family connection. -# That is incorrect behavior and such operation will result in -# Errno::EAFNOSUPPORT exception. -# The point of the upstream change is to workaround a glibc bug -# that is not present for us. Therefore we can safely revert the change. -# https://bugs.ruby-lang.org/issues/20208 -Patch13: ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch -# Fix `TestNetHTTPS#test_session_reuse_but_expire` test failure cause by -# to OpenSSL 3.2 -# https://github.com/ruby/ruby/pull/9824 -Patch14: ruby-3.3.1-Fix-test-session-reuse-but-expire.patch +# Fix build issue on i686 due to "incompatible pointer type" error. +# https://bugs.ruby-lang.org/issues/20447 +Patch13: ruby-3.4.0-Fix-pointer-incompatiblity.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -774,10 +758,8 @@ analysis result in RBS format, a standard type description format for Ruby %patch 6 -p1 %patch 9 -p1 %patch 10 -p1 -%patch 11 -p1 %patch 12 -p1 %patch 13 -p1 -%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -992,16 +974,16 @@ checksec --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ # Molinillo. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; module Resolver; end; end; \ - require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ + require 'rubygems/vendor/molinillo/lib/molinillo/gem_metadata'; \ puts '%%{rubygems_molinillo_version}: %{rubygems_molinillo_version}'; \ - puts %Q[Gem::Resolver::Molinillo::VERSION: #{Gem::Resolver::Molinillo::VERSION}]; \ - exit 1 if Gem::Resolver::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ + puts %Q[Gem::Molinillo::VERSION: #{Gem::Molinillo::VERSION}]; \ + exit 1 if Gem::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ \"" # Net::HTTP. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; module Net; end; end; \ - require 'rubygems/net-http/lib/net/http'; \ + require 'rubygems/vendor/net-http/lib/net/http'; \ puts '%%{rubygems_net_http_version}: %{rubygems_net_http_version}'; \ puts %Q[Gem::Net::HTTP::VERSION: #{Gem::Net::HTTP::VERSION}]; \ exit 1 if Gem::Net::HTTP::VERSION != '%{rubygems_net_http_version}'; \ @@ -1010,7 +992,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # Net::Protocol. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; module Net; end; end; \ - require 'rubygems/net-protocol/lib/net/protocol'; \ + require 'rubygems/vendor/net-protocol/lib/net/protocol'; \ puts '%%{rubygems_net_protocol_version}: %{rubygems_net_protocol_version}'; \ puts %Q[Gem::Net::Protocol::VERSION: #{Gem::Net::Protocol::VERSION}]; \ exit 1 if Gem::Net::Protocol::VERSION != '%{rubygems_net_protocol_version}'; \ @@ -1019,7 +1001,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # OptParse. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ - require 'rubygems/optparse/lib/optparse'; \ + require 'rubygems/vendor/optparse/lib/optparse'; \ puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \ puts %Q[Gem::OptionParser::Version: #{Gem::OptionParser::Version}]; \ exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ @@ -1028,7 +1010,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # Resolv. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ - require 'rubygems/resolv/lib/resolv'; \ + require 'rubygems/vendor/resolv/lib/resolv'; \ puts '%%{rubygems_resolv_version}: %{rubygems_resolv_version}'; \ puts %Q[Gem::Resolv::VERSION: #{Gem::Resolv::VERSION}]; \ exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ @@ -1037,7 +1019,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # Timeout. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ - require 'rubygems/timeout/lib/timeout'; \ + require 'rubygems/vendor/timeout/lib/timeout'; \ puts '%%{rubygems_timeout_version}: %{rubygems_timeout_version}'; \ puts %Q[Gem::Timeout::VERSION: #{Gem::Timeout::VERSION}]; \ exit 1 if Gem::Timeout::VERSION != '%{rubygems_timeout_version}'; \ @@ -1046,12 +1028,21 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # TSort make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ - require 'rubygems/tsort/lib/tsort'; \ + require 'rubygems/vendor/tsort/lib/tsort'; \ puts '%%{rubygems_tsort_version}: %{rubygems_tsort_version}'; \ puts %Q[Gem::TSort::VERSION: #{Gem::TSort::VERSION}]; \ exit 1 if Gem::TSort::VERSION != '%{rubygems_tsort_version}'; \ \"" +# URI. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/vendor/uri/lib/uri/version'; \ + puts '%%{rubygems_uri_version}: %{rubygems_uri_version}'; \ + puts %Q[Gem::URI::VERSION: #{Gem::URI::VERSION}]; \ + exit 1 if Gem::URI::VERSION != '%{rubygems_uri_version}'; \ +\"" + # Check Bundler bundled dependencies versions. # connection_pool. @@ -1723,6 +1714,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue Apr 23 2024 Vít Ondruch - 3.3.1-7 +- Upgrade to Ruby 3.3.1. + Resolves: rhbz#2276680 + * Fri Apr 12 2024 Vít Ondruch - 3.3.0-6 - Add `bundled` provide for NKF. - License review and fixes of SPDX syntax. diff --git a/sources b/sources index 10a3d0b..f475c60 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.0.tar.xz) = 7959c5753bfa0bfc4d6d74060869aabbe9815c1c97930659da11b917ee0803ddbbd80e869e00c48b8694b4ba48709c3b6493fd045568e36e902616c35ababf01 +SHA512 (ruby-3.3.1.tar.xz) = c58e9be9b5ab48191fbf7d67e13f0ec42ee71ed338170e0f7b246708e9cfc617ce65098f5ce7ab32d4305e785642d3e44253462104d5b9c4abcb1a4113f48347 From ff5301a5f3c29f404b5c4a88a013701c2faeea01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 24 Apr 2024 17:35:38 +0200 Subject: [PATCH 31/83] Fix patch to apply cleanly. --- ruby-3.4.0-Fix-pointer-incompatiblity.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby-3.4.0-Fix-pointer-incompatiblity.patch b/ruby-3.4.0-Fix-pointer-incompatiblity.patch index b2ad843..2bd7a53 100644 --- a/ruby-3.4.0-Fix-pointer-incompatiblity.patch +++ b/ruby-3.4.0-Fix-pointer-incompatiblity.patch @@ -13,7 +13,7 @@ diff --git a/time.c b/time.c index 6179b081c02fc9..3304b2f4f4856a 100644 --- a/time.c +++ b/time.c -@@ -2346,7 +2346,7 @@ zone_timelocal(VALUE zone, VALUE time) +@@ -2342,7 +2342,7 @@ zone_timelocal(VALUE zone, VALUE time) struct time_object *tobj = RTYPEDDATA_GET_DATA(time); wideval_t t, s; From 2400507224571a4da05175d91eb1920538dc4883 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 24 Apr 2024 16:12:11 +0200 Subject: [PATCH 32/83] Upgrade to Ruby 3.2.4. Resolves: rhbz#2270544 --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...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 | 16 ++--- ...Revert-Fix-test-syntax-suggest-order.patch | 6 +- ...rt-Test-syntax_suggest-by-make-check.patch | 2 +- ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch | 39 ------------ ruby.spec | 61 +++++++++---------- sources | 2 +- 10 files changed, 47 insertions(+), 89 deletions(-) delete mode 100644 ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 2646a80..410e50e 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 -@@ -3411,6 +3411,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3417,6 +3417,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 6f2fbe7..d378356 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 -@@ -4196,7 +4196,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4202,7 +4202,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 f94b656..f9e8cc4 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 -@@ -4260,6 +4260,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4266,6 +4266,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 0cb2012..8ed0e1b 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 -@@ -4232,6 +4232,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4238,6 +4238,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4256,6 +4260,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4262,6 +4266,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 866fef4..0efa464 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 -@@ -4146,9 +4146,6 @@ AS_CASE(["$target_os"], +@@ -4152,9 +4152,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], -@@ -4171,57 +4168,63 @@ AC_ARG_WITH(ridir, +@@ -4177,57 +4174,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) -@@ -4238,6 +4241,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4244,6 +4247,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -195,7 +195,7 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -34,7 +34,7 @@ def self.default_spec_cache_dir +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir # specified in the environment def self.default_dir @@ -204,7 +204,7 @@ index d4ff4a262c..3f9a5bf590 100644 end ## -@@ -103,7 +103,8 @@ def self.user_dir +@@ -104,7 +104,8 @@ def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] @@ -214,7 +214,7 @@ index d4ff4a262c..3f9a5bf590 100644 File.join parts end -@@ -248,7 +249,7 @@ def self.vendor_dir # :nodoc: +@@ -249,7 +250,7 @@ def self.vendor_dir # :nodoc: return nil unless RbConfig::CONFIG.key? "vendordir" File.join RbConfig::CONFIG["vendordir"], "gems", @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1337,7 +1337,8 @@ def test_self_use_paths +@@ -1338,7 +1338,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1413,7 +1414,7 @@ def test_self_vendor_dir +@@ -1414,7 +1415,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", diff --git a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch index ee3b177..ed17d16 100644 --- a/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch +++ b/ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch @@ -23,7 +23,7 @@ index d0558697d7..e73841aae7 100644 $(ECHO) check succeeded -$(Q) : : "run only on sh"; \ if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -903,8 +904,6 @@ yes-test-spec: test-spec-precheck +@@ -904,8 +905,6 @@ yes-test-spec: test-spec-precheck $(ACTIONS_ENDGROUP) no-test-spec: @@ -32,7 +32,7 @@ index d0558697d7..e73841aae7 100644 RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY $(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT) -@@ -1456,7 +1455,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck +@@ -1457,7 +1456,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck no-test-syntax-suggest-precheck: yes-test-syntax-suggest-precheck: main @@ -40,7 +40,7 @@ index d0558697d7..e73841aae7 100644 no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck $(ACTIONS_GROUP) -@@ -1466,15 +1464,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1467,15 +1465,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch index 3efb21f..7bddc2d 100644 --- a/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch +++ b/ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch @@ -23,7 +23,7 @@ index 27f6a9d89d..8021f03a58 100644 $(ECHO) check succeeded -$(Q) : : "run only on sh"; \ if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \ -@@ -1464,9 +1463,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck +@@ -1465,9 +1464,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck RSPECOPTS = SYNTAX_SUGGEST_SPECS = diff --git a/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch b/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch deleted file mode 100644 index 1b3395b..0000000 --- a/ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 9b9825d6cdda053fea49eb2f613bc62bde465e89 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Wed, 4 Jan 2023 17:23:35 +0100 -Subject: [PATCH] Use SHA256 instead of SHA1 - -Systems such as CentOS 9 / RHEL 9 are moving away from SHA1 disabling it -by default via a system-wide crypto policy. This replaces SHA1 with -SHA256 in similar way as [[1]]. - -[1]: https://github.com/ruby/openssl/pull/554 ---- - spec/ruby/library/openssl/x509/name/verify_spec.rb | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/spec/ruby/library/openssl/x509/name/verify_spec.rb b/spec/ruby/library/openssl/x509/name/verify_spec.rb -index a8bf865bd..6dcfc9946 100644 ---- a/spec/ruby/library/openssl/x509/name/verify_spec.rb -+++ b/spec/ruby/library/openssl/x509/name/verify_spec.rb -@@ -12,7 +12,7 @@ describe "OpenSSL::X509::Name.verify" do - cert.public_key = key.public_key - cert.not_before = Time.now - 10 - cert.not_after = cert.not_before + 365 * 24 * 60 * 60 -- cert.sign key, OpenSSL::Digest.new('SHA1') -+ cert.sign key, OpenSSL::Digest.new('SHA256') - store = OpenSSL::X509::Store.new - store.add_cert(cert) - [store.verify(cert), store.error, store.error_string].should == [true, 0, "ok"] -@@ -28,7 +28,7 @@ describe "OpenSSL::X509::Name.verify" do - cert.public_key = key.public_key - cert.not_before = Time.now - 10 - cert.not_after = Time.now - 5 -- cert.sign key, OpenSSL::Digest.new('SHA1') -+ cert.sign key, OpenSSL::Digest.new('SHA256') - store = OpenSSL::X509::Store.new - store.add_cert(cert) - store.verify(cert).should == false --- -2.38.1 - diff --git a/ruby.spec b/ruby.spec index 54096c6..77b9b1b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 2 -%global teeny_version 2 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,20 +27,20 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.4.10 +%global rubygems_version 3.4.19 %global rubygems_molinillo_version 0.8.0 %global rubygems_optparse_version 0.3.0 %global rubygems_tsort_version 0.1.0 # Default gems. -%global bundler_version 2.4.10 +%global bundler_version 2.4.19 %global bundler_connection_pool_version 2.3.0 %global bundler_fileutils_version 1.7.0 %global bundler_pub_grub_version 0.5.0 %global bundler_net_http_persistent_version 4.0.1 %global bundler_thor_version 1.2.1 %global bundler_tsort_version 0.1.1 -%global bundler_uri_version 0.12.1 +%global bundler_uri_version 0.12.2 %global bigdecimal_version 3.1.3 %global did_you_mean_version 1.6.3 @@ -51,8 +51,9 @@ %global openssl_version 3.1.0 %global psych_version 5.0.1 %global racc_version 1.6.2 -%global rdoc_version 6.5.0 +%global rdoc_version 6.5.1.1 %global stringio_version 3.0.4 +%global syntax_suggest_version 1.1.0 # Bundled gems. %global minitest_version 5.16.3 @@ -61,10 +62,10 @@ %global test_unit_version 3.5.7 %global rexml_version 3.2.5 %global rss_version 0.2.9 -%global net_ftp_version 0.2.0 -%global net_imap_version 0.3.4 +%global net_ftp_version 0.2.1 +%global net_imap_version 0.3.4.1 %global net_pop_version 0.1.2 -%global net_smtp_version 0.3.3 +%global net_smtp_version 0.3.4 %global matrix_version 0.4.2 %global prime_version 0.1.2 %global rbs_version 2.8.2 @@ -101,7 +102,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 180%{?dist} +Release: 182%{?dist} # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c # ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... @@ -169,13 +170,6 @@ Patch8: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch # https://bugs.ruby-lang.org/issues/19297 Patch9: ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch Patch10: ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch -# Fix `OpenSSL::X509::CertificateError: invalid digest` errors on ELN. This -# also might help Fedor, if/when -# https://fedoraproject.org/wiki/Changes/StrongCryptoSettings3Forewarning2 -# is accepted. -# https://github.com/ruby/spec/pull/990 -# https://bugs.ruby-lang.org/issues/19307 -Patch11: ruby-3.2.0-Use-SHA256-instead-of-SHA1.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -635,17 +629,16 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 +%patch 0 -p1 +%patch 1 -p1 +%patch 2 -p1 +%patch 3 -p1 +%patch 4 -p1 +%patch 6 -p1 +%patch 7 -p1 +%patch 8 -p1 +%patch 9 -p1 +%patch 10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1081,8 +1074,6 @@ mv test/ruby/test_jit.rb{,.disable} || : %{ruby_libdir}/ipaddr.rb %{ruby_libdir}/kconv.rb %{ruby_libdir}/logger* -# https://bugs.ruby-lang.org/issues/19298 -%exclude %{ruby_libdir}/mjit %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb %{ruby_libdir}/mutex_m.rb @@ -1291,7 +1282,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %{gem_dir}/specifications/default/ipaddr-1.2.5.gemspec %{gem_dir}/specifications/default/logger-1.5.3.gemspec %{gem_dir}/specifications/default/mutex_m-0.1.2.gemspec -%{gem_dir}/specifications/default/net-http-0.3.2.gemspec +%{gem_dir}/specifications/default/net-http-0.4.1.gemspec %{gem_dir}/specifications/default/net-protocol-0.2.1.gemspec %{gem_dir}/specifications/default/nkf-0.1.2.gemspec %{gem_dir}/specifications/default/observer-0.1.1.gemspec @@ -1318,7 +1309,9 @@ mv test/ruby/test_jit.rb{,.disable} || : %{gem_dir}/specifications/default/singleton-0.1.1.gemspec %{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec %{gem_dir}/specifications/default/strscan-3.0.5.gemspec -%{gem_dir}/specifications/default/syntax_suggest-1.0.2.gemspec +%{gem_dir}/specifications/default/syntax_suggest-%{syntax_suggest_version}.gemspec +%{_bindir}/syntax_suggest +%{gem_dir}/gems/syntax_suggest-%{syntax_suggest_version} %{gem_dir}/specifications/default/syslog-0.1.1.gemspec %{gem_dir}/specifications/default/tempfile-0.1.3.gemspec %{gem_dir}/specifications/default/time-0.2.2.gemspec @@ -1326,7 +1319,7 @@ mv test/ruby/test_jit.rb{,.disable} || : %{gem_dir}/specifications/default/tmpdir-0.1.3.gemspec %{gem_dir}/specifications/default/tsort-0.1.1.gemspec %{gem_dir}/specifications/default/un-0.2.1.gemspec -%{gem_dir}/specifications/default/uri-0.12.1.gemspec +%{gem_dir}/specifications/default/uri-0.12.2.gemspec %{gem_dir}/specifications/default/weakref-0.1.2.gemspec #%%{gem_dir}/specifications/default/win32ole-1.8.9.gemspec %{gem_dir}/specifications/default/yaml-0.2.1.gemspec @@ -1567,6 +1560,10 @@ mv test/ruby/test_jit.rb{,.disable} || : %changelog +* Wed Apr 24 2024 Vít Ondruch - 3.2.4-182 +- Upgrade to Ruby 3.2.4. + Resolves: rhbz#2270544 + * Fri Mar 31 2023 Vít Ondruch - 3.2.2-180 - Upgrade to Ruby 3.2.2. Resolves: rhbz#2183284 diff --git a/sources b/sources index 709311a..3277d8d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.2.2.tar.xz) = a29f24cd80f563f6368952d06d6273f7241a409fa9ab2f60e03dde2ac58ca06bee1750715b6134caebf4c061d3503446dc37a6059e19860bb0010eef34951935 +SHA512 (ruby-3.2.4.tar.xz) = fb0af37be4b6ad7b98ab9f8a508952238ee68b5828e3926331e4db52e2ebc1e6046f31114069322db0cd3bea7c9b82ace91c8564573ddcfa1f960877b237dbff From d9051618e306065e1174f45eda7ed54c56d747f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 28 May 2024 16:19:40 +0200 Subject: [PATCH 33/83] Adjust the test to updated `checksec` output. `checksec` output since v2.7.0 become more nuanced. Previously, the `FORTIFY` could become just `Yes` / `No`. Now it can have also `Partial` state, which better describe our situation. Currently if e.g. `Fortifiable=28` and `Fortified=11`, that means that the fortification is just partial and another 17 functions could be fortified. Also, check the numbers specifically, because this seems to be the interesting information. Unfortunatelly, the results differ between platforms. Last but not least, use `sed` to analyze the output, because this allows to always display the processed text. The trick comes from \[[1]\]. On top of this, use XML formatted output, which provides more context to reader. [1]: https://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches Resolves: rhbz#2282953 --- ruby.spec | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ruby.spec b/ruby.spec index cab582c..41ed693 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 7%{?dist} +Release: 8%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -962,8 +962,15 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check %if 0%{?with_hardening_test} # Check Ruby hardening. -checksec --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ - grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" +%define fortification_x86_64 fortified="11" fortify-able="28" +%define fortification_i686 fortified="10" fortify-able="26" +%define fortification_aarch64 fortified="10" fortify-able="26" +%define fortification_ppc64le fortified="7" fortify-able="24" +%define fortification_s390x fortified="10" fortify-able="24" +# https://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches +checksec --format=xml --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ + sed -r "s//\1/" | \ + sed -nr $'/relro="full" canary="yes" nx="yes" pie="dso" rpath="no" runpath="no" symbols="yes" fortify_source="partial" %{expand:%{fortification_%{_target_cpu}}} filename='\''redhat-linux-build\/libruby.so.%{ruby_version}'\''/h; ${p;x;/./Q0;Q1}' %endif # Check RubyGems version. @@ -1714,6 +1721,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue May 28 2024 Vít Ondruch - 3.3.1-8 +- Adjust the test to updated `checksec` output. + Resolves: rhbz#2282953 + * Tue Apr 23 2024 Vít Ondruch - 3.3.1-7 - Upgrade to Ruby 3.3.1. Resolves: rhbz#2276680 From 677893973e5e3cac2a1eb8a691aad6f5feccf69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 5 Jun 2024 16:11:54 +0200 Subject: [PATCH 34/83] Make sure fortification flags are applied This is example of current build options: ~~~ gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/include -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1 -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/prism -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/enc/unicode/15.0.0 -o dmyext.o -c /builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/dmyext.c ~~~ Please note that there are included Fedora options: ~~~ -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 ~~~ as well as upstream options: ~~~ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ~~~ The problem is that the configure script cannot properly detect `_FORTIFY_SOURCE=3` and instead of replacing that option, it includes new definition \[[1]\]. This happens since Fedora started to use `_FORTIFY_SOURCE=3` option. To mitigate this issue, upstream fortification was disabled (this might or might not stay disabled "forever"). These are the build options with this change applied for comparison: ~~~ gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fPIC -m64 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/x86_64-linux -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/include -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1 -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/prism -I/builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/enc/unicode/15.0.0 -o dmyext.o -c /builddir/build/BUILD/ruby-3.3.1-build/ruby-3.3.1/dmyext.c ~~~ [1]: https://bugs.ruby-lang.org/issues/20520 --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index 41ed693..a358e18 100644 --- a/ruby.spec +++ b/ruby.spec @@ -792,6 +792,7 @@ pushd %{_vpath_builddir} --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ + --disable-fortify-source `# Should not really be needed: https://bugs.ruby-lang.org/issues/20520` \ %{?with_yjit: --enable-yjit} \ popd @@ -1724,6 +1725,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ * Tue May 28 2024 Vít Ondruch - 3.3.1-8 - Adjust the test to updated `checksec` output. Resolves: rhbz#2282953 +- Make sure fortification flags are applied. * Tue Apr 23 2024 Vít Ondruch - 3.3.1-7 - Upgrade to Ruby 3.3.1. From 93638d9e58af006720fa26c548be869a31de3922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Jun 2024 16:06:24 +0200 Subject: [PATCH 35/83] Upgrade to Ruby 3.3.2. Resolves: rhbz#2284020 --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...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 | 8 +++--- ...ocations-in-Hash-compare_by_identity.patch | 6 ++--- ...ADER-didn-t-define-HAVE-header-file-.patch | 27 +++++++++++++++++++ ...ranch-protection-compilation-for-arm.patch | 2 +- ruby.spec | 20 +++++++++----- sources | 2 +- 10 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index acd58b9..692a40b 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 -@@ -3473,6 +3473,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3478,6 +3478,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 996486a..e96ce39 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 -@@ -4312,7 +4312,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4317,7 +4317,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 38eba5e..c990ede 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 -@@ -4376,6 +4376,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4381,6 +4381,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 98dd7ac..dd81419 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 -@@ -4348,6 +4348,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4353,6 +4353,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='' -@@ -4372,6 +4376,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4377,6 +4381,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 6ba802e..8e9fd2b 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 -@@ -4262,9 +4262,6 @@ AS_CASE(["$target_os"], +@@ -4267,9 +4267,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], -@@ -4287,57 +4284,63 @@ AC_ARG_WITH(ridir, +@@ -4292,57 +4289,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) -@@ -4354,6 +4357,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4359,6 +4362,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -262,7 +262,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -135,7 +135,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -136,7 +136,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-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch index 23a6db8..f84a301 100644 --- a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch +++ b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch @@ -13,7 +13,7 @@ diff --git a/hash.c b/hash.c index 78e9d9a2d6..f6525ba4a5 100644 --- a/hash.c +++ b/hash.c -@@ -4385,16 +4385,13 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4382,16 +4382,13 @@ rb_hash_compare_by_id(VALUE hash) if (hash_iterating_p(hash)) { rb_raise(rb_eRuntimeError, "compare_by_identity during iteration"); } @@ -33,7 +33,7 @@ index 78e9d9a2d6..f6525ba4a5 100644 // Slow path: Need to rehash the members of `self` into a new // `tmp` table using the new `identhash` compare/hash functions. tmp = hash_alloc(0); -@@ -4402,10 +4399,8 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4399,10 +4396,8 @@ rb_hash_compare_by_id(VALUE hash) identtable = RHASH_ST_TABLE(tmp); rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); @@ -60,7 +60,7 @@ diff --git a/hash.c b/hash.c index f6525ba4a5..cf83675c70 100644 --- a/hash.c +++ b/hash.c -@@ -4388,22 +4388,15 @@ rb_hash_compare_by_id(VALUE hash) +@@ -4385,22 +4385,15 @@ rb_hash_compare_by_id(VALUE hash) ar_force_convert_table(hash, __FILE__, __LINE__); HASH_ASSERT(RHASH_ST_TABLE_P(hash)); diff --git a/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch b/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch new file mode 100644 index 0000000..7f6a83d --- /dev/null +++ b/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch @@ -0,0 +1,27 @@ +From d6d22e457475e3d2f8e4878bb97e2780ca2f83d6 Mon Sep 17 00:00:00 2001 +From: Sorah Fukumori +Date: Fri, 31 May 2024 02:16:10 +0900 +Subject: [PATCH] RUBY_CHECK_HEADER didn't define HAVE_{header-file} + +--with-gmp is not working at all because HAVE_GMP_H +was missing since 18eaf0be90. [Bug #20515] + +bug: https://bugs.ruby-lang.org/issues/20515 +follow-up: https://bugs.ruby-lang.org/issues/20494 +follow-up: 18eaf0be905e3e251423b42d6f4e56b7cae1bc3b +--- + tool/m4/ruby_check_header.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tool/m4/ruby_check_header.m4 b/tool/m4/ruby_check_header.m4 +index 171455549e3362..6fec9d16c5bcf1 100644 +--- a/tool/m4/ruby_check_header.m4 ++++ b/tool/m4/ruby_check_header.m4 +@@ -3,6 +3,6 @@ AC_DEFUN([RUBY_CHECK_HEADER], + [# RUBY_CHECK_HEADER($@) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS m4_if([$5], [], [$INCFLAGS], [$5])" +- AC_CHECK_HEADER([$1], [$2], [$3], [$4]) ++ AC_CHECK_HEADERS([$1], [$2], [$3], [$4]) + CPPFLAGS="$save_CPPFLAGS" + unset save_CPPFLAGS]) diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch index de93143..45ed5a9 100644 --- a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +++ b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch @@ -13,7 +13,7 @@ diff --git a/configure.ac b/configure.ac index 18b4247991..5ea8ada8f7 100644 --- a/configure.ac +++ b/configure.ac -@@ -827,7 +827,7 @@ AS_IF([test "$GCC" = yes], [ +@@ -828,7 +828,7 @@ AS_IF([test "$GCC" = yes], [ # aarch64 branch protection AS_CASE(["$target_cpu"], [aarch64], [ diff --git a/ruby.spec b/ruby.spec index a358e18..ccf70ad 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 3 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision 5124f9ac75 +#%%global revision e5a195edf6 %global ruby_archive %{name}-%{ruby_version} @@ -86,7 +86,7 @@ %global prettyprint_version 0.2.0 %global pstore_version 0.1.3 %global readline_version 0.0.4 -%global reline_version 0.4.1 +%global reline_version 0.5.7 %global resolv_version 0.3.0 %global resolv_replace_version 0.1.1 %global rinda_version 0.2.0 @@ -110,12 +110,12 @@ %global win32ole_version 1.8.10 %global yaml_version 0.3.0 %global prism_version 0.19.0 -%global zlib_version 3.1.0 +%global zlib_version 3.1.1 # Gemified default gems. %global bigdecimal_version 3.1.5 %global io_console_version 0.7.1 -%global irb_version 1.11.0 +%global irb_version 1.13.1 %global json_version 2.7.1 %global psych_version 5.1.2 %global rdoc_version 6.6.3.1 @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 8%{?dist} +Release: 9%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -281,6 +281,9 @@ Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch # Fix build issue on i686 due to "incompatible pointer type" error. # https://bugs.ruby-lang.org/issues/20447 Patch13: ruby-3.4.0-Fix-pointer-incompatiblity.patch +# Fix GMP support +# https://bugs.ruby-lang.org/issues/20515 +Patch14: ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -760,6 +763,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 10 -p1 %patch 12 -p1 %patch 13 -p1 +%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1722,6 +1726,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Thu Jun 06 2024 Vít Ondruch - 3.3.2-9 +- Upgrade to Ruby 3.3.2. + Resolves: rhbz#2284020 + * Tue May 28 2024 Vít Ondruch - 3.3.1-8 - Adjust the test to updated `checksec` output. Resolves: rhbz#2282953 diff --git a/sources b/sources index f475c60..b8e4495 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.1.tar.xz) = c58e9be9b5ab48191fbf7d67e13f0ec42ee71ed338170e0f7b246708e9cfc617ce65098f5ce7ab32d4305e785642d3e44253462104d5b9c4abcb1a4113f48347 +SHA512 (ruby-3.3.2.tar.xz) = f2c4fb0d7c80aa46cdd80ad54ffee614e95d2fbad0554b6ce81f42fa5b891aaea63ddfd5b962e28508a4c835f9abf091a05a2e1234ef08c3e71af522a029c4e1 From c913e4326c06511948b17d207554c54ef1e7520c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 6 Jun 2024 19:08:22 +0200 Subject: [PATCH 36/83] Drop patch which was needed for alexandria It seems it build just fine now. --- ...ocations-in-Hash-compare_by_identity.patch | 92 ------------------- ruby.spec | 4 - 2 files changed, 96 deletions(-) delete mode 100644 ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch diff --git a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch deleted file mode 100644 index f84a301..0000000 --- a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch +++ /dev/null @@ -1,92 +0,0 @@ -From 8944a064d0fd7947b8c2b6c761be3e3a0c9073af Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 22 Dec 2023 14:16:48 +0100 -Subject: [PATCH 1/2] Revert "compare_by_identity: remove alloc for non-empty - Hash" - -This reverts commit 11fa76b1b521072c200c78ea023960221ff426d6. ---- - hash.c | 13 ++++--------- - 1 file changed, 4 insertions(+), 9 deletions(-) - -diff --git a/hash.c b/hash.c -index 78e9d9a2d6..f6525ba4a5 100644 ---- a/hash.c -+++ b/hash.c -@@ -4382,16 +4382,13 @@ rb_hash_compare_by_id(VALUE hash) - if (hash_iterating_p(hash)) { - rb_raise(rb_eRuntimeError, "compare_by_identity during iteration"); - } -+ ar_force_convert_table(hash, __FILE__, __LINE__); -+ HASH_ASSERT(RHASH_ST_TABLE_P(hash)); - - if (RHASH_TABLE_EMPTY_P(hash)) { - // Fast path: There's nothing to rehash, so we don't need a `tmp` table. -- // We're most likely an AR table, so this will need an allocation. -- ar_force_convert_table(hash, __FILE__, __LINE__); -- HASH_ASSERT(RHASH_ST_TABLE_P(hash)); -- - RHASH_ST_TABLE(hash)->type = &identhash; -- } -- else { -+ } else { - // Slow path: Need to rehash the members of `self` into a new - // `tmp` table using the new `identhash` compare/hash functions. - tmp = hash_alloc(0); -@@ -4399,10 +4396,8 @@ rb_hash_compare_by_id(VALUE hash) - identtable = RHASH_ST_TABLE(tmp); - - rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); -- rb_hash_free(hash); - -- // We know for sure `identtable` is an st table, -- // so we can skip `ar_force_convert_table` here. -+ rb_hash_free(hash); - RHASH_ST_TABLE_SET(hash, identtable); - RHASH_ST_CLEAR(tmp); - } - -From f5c415300ffe63e41e46c6b88b8634a3bad0c7c2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Fri, 22 Dec 2023 14:17:14 +0100 -Subject: [PATCH 2/2] Revert "compare_by_identity: remove alloc for empty Hash" - -This reverts commit b5c6c0122f5b010cb5f43e7a236c4ba2b1d56a2a. ---- - hash.c | 21 +++++++-------------- - 1 file changed, 7 insertions(+), 14 deletions(-) - -diff --git a/hash.c b/hash.c -index f6525ba4a5..cf83675c70 100644 ---- a/hash.c -+++ b/hash.c -@@ -4385,22 +4385,15 @@ rb_hash_compare_by_id(VALUE hash) - ar_force_convert_table(hash, __FILE__, __LINE__); - HASH_ASSERT(RHASH_ST_TABLE_P(hash)); - -- if (RHASH_TABLE_EMPTY_P(hash)) { -- // Fast path: There's nothing to rehash, so we don't need a `tmp` table. -- RHASH_ST_TABLE(hash)->type = &identhash; -- } else { -- // Slow path: Need to rehash the members of `self` into a new -- // `tmp` table using the new `identhash` compare/hash functions. -- tmp = hash_alloc(0); -- hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); -- identtable = RHASH_ST_TABLE(tmp); -+ tmp = hash_alloc(0); -+ hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); -+ identtable = RHASH_ST_TABLE(tmp); - -- rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); -+ rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); - -- rb_hash_free(hash); -- RHASH_ST_TABLE_SET(hash, identtable); -- RHASH_ST_CLEAR(tmp); -- } -+ rb_hash_free(hash); -+ RHASH_ST_TABLE_SET(hash, identtable); -+ RHASH_ST_CLEAR(tmp); - - return hash; - } diff --git a/ruby.spec b/ruby.spec index ccf70ad..896d4ae 100644 --- a/ruby.spec +++ b/ruby.spec @@ -271,9 +271,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 -# Revert patches causing segfaults in alexandria package. -# https://bugs.ruby-lang.org/issues/20079 -Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch # Armv8.3+ capable CPUs might segfault with incorrect compilation options. # See related upstream report: https://bugs.ruby-lang.org/issues/20085 # https://bugs.ruby-lang.org/issues/20154 @@ -760,7 +757,6 @@ analysis result in RBS format, a standard type description format for Ruby %patch 4 -p1 %patch 6 -p1 %patch 9 -p1 -%patch 10 -p1 %patch 12 -p1 %patch 13 -p1 %patch 14 -p1 From 42b0e43e5a8ef84cfc2a7dcc09b0b39ad924f378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 7 Jun 2024 12:25:48 +0200 Subject: [PATCH 37/83] Fix generators for RPM 4.20 compatibility RPM 4.20 introduce per-build directory. However, this also brings some issues where `%{_builddir}` might have different value in different context, leading to issues such as: ~~~ Processing files: ruby-default-gems-3.3.1-8.fc41.noarch make: *** /builddir/build/BUILD/ruby-3.3.1/redhat-linux-build: No such file or directory. Stop. ~~~ Therefore the generators are not executed properly. Use `%define` instead of `%global`, because those are laze evaluated and actually suggested by RPM upstream: https://github.com/rpm-software-management/rpm/issues/3151 --- ruby.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index 896d4ae..a34a5cd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -239,10 +239,10 @@ Source15: test_openssl_fips.rb %{load:%{SOURCE4}} %{load:%{SOURCE5}} -%global __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" -%global __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" -%global __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE11}" -%global __local_generator_path ^%{gem_dir}/specifications/.*\.gemspec$ +%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_path ^%{gem_dir}/specifications/.*\.gemspec$ # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 From 7724c2d703c1d1dce91762d00489bd26a3785b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 18 Jun 2024 12:28:13 +0200 Subject: [PATCH 38/83] Make sure hardening configuration flags are correctly applied. Previously, upstream flags were overriding our configuration flags, therefore we had two workarounds in place. This commit replaces these workarounds by upstream solution. While it should not result in any functional changes, it is be better to have this patch in place to make easier to spot when it is not needed anymore. --- ...GS-to-a-special-hardenflags-variable.patch | 302 ++++++++++++++++++ ...ranch-protection-compilation-for-arm.patch | 24 -- ruby.spec | 10 +- 3 files changed, 309 insertions(+), 27 deletions(-) create mode 100644 ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch delete mode 100644 ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch diff --git a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch new file mode 100644 index 0000000..b03b618 --- /dev/null +++ b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch @@ -0,0 +1,302 @@ +From 3d405634f43d39079ee93cdc59ed7fc0a5e8917a Mon Sep 17 00:00:00 2001 +From: KJ Tsanaktsidis +Date: Sun, 9 Jun 2024 21:15:39 +1000 +Subject: [PATCH] Extract hardening CFLAGS to a special $hardenflags variable + +This changes the automatic detection of -fstack-protector, +-D_FORTIFY_SOURCE, and -mbranch-protection to write to $hardenflags +instead of $XCFLAGS. The definition of $cflags is changed to +"$hardenflags $orig_cflags $optflags $debugflags $warnflags" to match. + +Furthermore, these flags are _prepended_ to $hardenflags, rather than +appended. + +The implications of doing this are as follows: + +* If a CRuby builder specifies cflags="-mbranch-protection=foobar" at + the ./configure script, and the configure script detects that + -mbranch-protection=pac-ret is accepted, then GCC will be invoked as + "gcc -mbranch-protection=pac-ret -mbranch-protection=foobar". Since + the last flags take precedence, that means that user-supplied values + of these flags in $cflags will take priority. +* Likewise, if a CRuby builder explicitly specifies + "hardenflags=-mbranch-protection=foobar", because we _prepend_ to + $hardenflags in our autoconf script, we will still invoke GCC as + "gcc -mbranch-protection=pac-ret -mbranch-protection=foobar". +* If a CRuby builder specifies CFLAGS="..." at the configure line, + automatic detection of hardening flags is ignored as before. +* C extensions will _also_ be built with hardening flags now as well + (this was not the case by default before because the detected flags + went into $XCFLAGS). + +Additionally, as part of this work, I changed how the detection of +PAC/BTI in Context.S works. Rather than appending the autodetected +option to ASFLAGS, we simply compile a set of test programs with the +actual CFLAGS in use to determine what PAC/BTI settings were actually +chosen by the builder. Context.S is made aware of these choices through +some custom macros. + +The result of this work is that: + +* Ruby will continue to choose some sensible defaults for hardening + options for the C compiler +* Distributors are able to specify CFLAGS that are consistent with their + distribution and override these defaults +* Context.S will react to whatever -mbranch-protection is actually in + use, not what was autodetected +* Extensions get built with hardening flags too. + +[Bug #20154] +[Bug #20520] +--- + configure.ac | 81 ++++++++++++++++++++++++++++++----- + coroutine/arm64/Context.S | 14 +++--- + template/Makefile.in | 1 + + tool/m4/ruby_append_option.m4 | 4 ++ + tool/m4/ruby_try_cflags.m4 | 17 ++++++++ + 5 files changed, 100 insertions(+), 17 deletions(-) + +diff --git a/configure.ac b/configure.ac +index f35fad6a362611..0da15772d36671 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -352,7 +352,7 @@ test -z "$warnflags" || + AS_IF([test -z "${CFLAGS+set}"], [ + cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"` + orig_cflags="$cflags" +- cflags="$cflags "'${optflags} ${debugflags} ${warnflags}' ++ cflags='${hardenflags} '"$cflags "'${optflags} ${debugflags} ${warnflags}' + ]) + dnl AS_IF([test -z "${CXXFLAGS+set}"], [ + dnl cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"` +@@ -800,7 +800,7 @@ AS_IF([test "$GCC" = yes], [ + [fortify_source=$enableval]) + AS_IF([test "x$fortify_source" != xno], [ + RUBY_TRY_CFLAGS([$optflags -D_FORTIFY_SOURCE=2], +- [RUBY_APPEND_OPTION(XCFLAGS, -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)], [], ++ [RUBY_PREPEND_OPTION(hardenflags, -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)], [], + [@%:@include ]) + ]) + +@@ -821,20 +821,24 @@ AS_IF([test "$GCC" = yes], [ + AC_MSG_CHECKING([for -fstack-protector]) + AC_MSG_RESULT(["$stack_protector"]) + AS_CASE(["$stack_protector"], [-*], [ +- RUBY_APPEND_OPTION(XCFLAGS, $stack_protector) +- RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) +- RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) ++ RUBY_PREPEND_OPTION(hardenflags, $stack_protector) ++ RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) ++ RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) + ]) + + # aarch64 branch protection + AS_CASE(["$target_cpu"], [aarch64], [ + AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ +- RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) ++ # Try these flags in the _prepended_ position - i.e. we want to try building a program ++ # with CFLAGS="-mbranch-protection=pac-ret $CFLAGS". If the builder has provided different ++ # branch protection flags in CFLAGS, we don't want to overwrite those. We just want to ++ # find some branch protection flags which work if none were provided. ++ RUBY_TRY_CFLAGS_PREPEND(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ +- # C compiler and assembler must be consistent for -mbranch-protection +- # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. +- RUBY_APPEND_OPTION(XCFLAGS, option) +- RUBY_APPEND_OPTION(ASFLAGS, option) ++ # _prepend_ the options to CFLAGS, so that user-provided flags will overwrite them. ++ # These CFLAGS are used during the configure script to compile further test programs; ++ # however, $harden_flags is prepended separately to CFLAGS at the end of the script. ++ RUBY_PREPEND_OPTION(hardenflags, $opt) + break + ]) + ]) +@@ -983,6 +987,59 @@ AC_SUBST(incflags, "$INCFLAGS") + test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\"" + } + ++# The lines above expand out the $cflags/$optflags/$debugflags/$hardenflags variables into the ++# CFLAGS variable. So, at this point, we have a $CFLAGS var with the actual compiler flags we're ++# going to use. ++# That means this is the right time to check what branch protection flags are going to be in use ++# and define appropriate macros for use in Context.S based on this ++AS_CASE(["$target_cpu"], [aarch64], [ ++ AC_CACHE_CHECK([whether __ARM_FEATURE_BTI_DEFAULT is defined], ++ rb_cv_aarch64_bti_enabled, ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([[ ++ @%:@ifndef __ARM_FEATURE_BTI_DEFAULT ++ @%:@error "__ARM_FEATURE_BTI_DEFAULT not defined" ++ @%:@endif ++ ]])], ++ [rb_cv_aarch64_bti_enabled=yes], ++ [rb_cv_aarch64_bti_enabled=no]) ++ ) ++ AS_IF([test "$rb_cv_aarch64_bti_enabled" = yes], ++ AC_DEFINE(RUBY_AARCH64_BTI_ENABLED, 1)) ++ AC_CACHE_CHECK([whether __ARM_FEATURE_PAC_DEFAULT is defined], ++ rb_cv_aarch64_pac_enabled, ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([[ ++ @%:@ifndef __ARM_FEATURE_PAC_DEFAULT ++ @%:@error "__ARM_FEATURE_PAC_DEFAULT not defined" ++ @%:@endif ++ ]])], ++ [rb_cv_aarch64_pac_enabled=yes], ++ [rb_cv_aarch64_pac_enabled=no]) ++ ) ++ AS_IF([test "$rb_cv_aarch64_pac_enabled" = yes], ++ AC_DEFINE(RUBY_AARCH64_PAC_ENABLED, 1)) ++ # Context.S will only ever sign its return address with the A-key; it doesn't support ++ # the B-key at the moment. ++ AS_IF([test "$rb_cv_aarch64_pac_enabled" = yes], [ ++ AC_CACHE_CHECK([whether __ARM_FEATURE_PAC_DEFAULT specifies the b-key bit 0x02], ++ rb_cv_aarch64_pac_b_key, ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([[ ++ @%:@ifdef __ARM_FEATURE_PAC_DEFAULT ++ @%:@if __ARM_FEATURE_PAC_DEFAULT & 0x02 ++ @%:@error "__ARM_FEATURE_PAC_DEFAULT specifies B key" ++ @%:@endif ++ @%:@endif ++ ]])], ++ [rb_cv_aarch64_pac_b_key=no], ++ [rb_cv_aarch64_pac_b_key=yes]) ++ ) ++ AS_IF([test "$rb_cv_aarch64_pac_b_key" = yes], ++ AC_MSG_ERROR(-mbranch-protection flag specified b-key but Ruby's Context.S does not support this yet.)) ++ ]) ++]) ++ + AC_CACHE_CHECK([whether compiler has statement and declarations in expressions], + rb_cv_have_stmt_and_decl_in_expr, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ __extension__ ({ int a = 0; a; }); ]])], +@@ -4211,12 +4268,13 @@ AS_IF([test "${ARCH_FLAG}"], [ + rb_cv_warnflags=`echo "$rb_cv_warnflags" | sed 's/^ *//;s/ *$//'` + warnflags="$rb_cv_warnflags" + AC_SUBST(cppflags)dnl +-AC_SUBST(cflags, ["${orig_cflags:+$orig_cflags }"'${optflags} ${debugflags} ${warnflags}'])dnl ++AC_SUBST(cflags, ['${hardenflags} '"${orig_cflags:+$orig_cflags }"' ${optflags} ${debugflags} ${warnflags}'])dnl + AC_SUBST(cxxflags)dnl + AC_SUBST(optflags)dnl + AC_SUBST(debugflags)dnl + AC_SUBST(warnflags)dnl + AC_SUBST(strict_warnflags)dnl ++AC_SUBST(hardenflags)dnl + AC_SUBST(XCFLAGS)dnl + AC_SUBST(XLDFLAGS)dnl + AC_SUBST(EXTLDFLAGS)dnl +@@ -4684,6 +4742,7 @@ config_summary "DLDFLAGS" "$DLDFLAGS" + config_summary "optflags" "$optflags" + config_summary "debugflags" "$debugflags" + config_summary "warnflags" "$warnflags" ++config_summary "hardenflags" "$hardenflags" + config_summary "strip command" "$STRIP" + config_summary "install doc" "$DOCTARGETS" + config_summary "YJIT support" "$YJIT_SUPPORT" +diff --git a/coroutine/arm64/Context.S b/coroutine/arm64/Context.S +index 5251ab214df1f0..54611a247e2f66 100644 +--- a/coroutine/arm64/Context.S ++++ b/coroutine/arm64/Context.S +@@ -5,6 +5,8 @@ + ## Copyright, 2018, by Samuel Williams. + ## + ++#include "ruby/config.h" ++ + #define TOKEN_PASTE(x,y) x##y + #define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) + +@@ -27,10 +29,10 @@ + .global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) + PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): + +-#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0) ++#if defined(RUBY_AARCH64_PAC_ENABLED) + # paciasp (it also acts as BTI landing pad, so no need to insert BTI also) + hint #25 +-#elif defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT != 0) ++#elif defined(RUBY_AARCH64_BTI_ENABLED) + # For the the case PAC is not enabled but BTI is. + # bti c + hint #34 +@@ -73,7 +75,7 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): + # Pop stack frame + add sp, sp, 0xa0 + +-#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0) ++#if defined(RUBY_AARCH64_PAC_ENABLED) + # autiasp: Authenticate x30 (LR) with SP and key A + hint #29 + #endif +@@ -85,18 +87,18 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): + .section .note.GNU-stack,"",%progbits + #endif + +-#if __ARM_FEATURE_BTI_DEFAULT != 0 || __ARM_FEATURE_PAC_DEFAULT != 0 ++#if defined(RUBY_AARCH64_BTI_ENABLED) || defined(RUBY_AARCH64_PAC_ENABLED) + /* See "ELF for the Arm 64-bit Architecture (AArch64)" + https://github.com/ARM-software/abi-aa/blob/2023Q3/aaelf64/aaelf64.rst#program-property */ + # define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1<<0) + # define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1<<1) + +-# if __ARM_FEATURE_BTI_DEFAULT != 0 ++# if defined(RUBY_AARCH64_BTI_ENABLED) + # define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI + # else + # define BTI_FLAG 0 + # endif +-# if __ARM_FEATURE_PAC_DEFAULT != 0 ++# if defined(RUBY_AARCH64_PAC_ENABLED) + # define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC + # else + # define PAC_FLAG 0 +diff --git a/template/Makefile.in b/template/Makefile.in +index 033ac56cb38886..abb4469777ce8a 100644 +--- a/template/Makefile.in ++++ b/template/Makefile.in +@@ -89,6 +89,7 @@ cflags = @cflags@ + optflags = @optflags@ + debugflags = @debugflags@ + warnflags = @warnflags@ @strict_warnflags@ ++hardenflags = @hardenflags@ + cppflags = @cppflags@ + incflags = @incflags@ + RUBY_DEVEL = @RUBY_DEVEL@ # "yes" or empty +diff --git a/tool/m4/ruby_append_option.m4 b/tool/m4/ruby_append_option.m4 +index ff828d2162c22f..98359fa1f95f52 100644 +--- a/tool/m4/ruby_append_option.m4 ++++ b/tool/m4/ruby_append_option.m4 +@@ -3,3 +3,7 @@ AC_DEFUN([RUBY_APPEND_OPTION], + [# RUBY_APPEND_OPTION($1) + AS_CASE([" [$]{$1-} "], + [*" $2 "*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])])dnl ++AC_DEFUN([RUBY_PREPEND_OPTION], ++ [# RUBY_APPEND_OPTION($1) ++ AS_CASE([" [$]{$1-} "], ++ [*" $2 "*], [], [' '], [ $1="$2"], [ $1="$2 [$]$1"])])dnl +diff --git a/tool/m4/ruby_try_cflags.m4 b/tool/m4/ruby_try_cflags.m4 +index b74718fe5e1cef..b397642aad9ca2 100644 +--- a/tool/m4/ruby_try_cflags.m4 ++++ b/tool/m4/ruby_try_cflags.m4 +@@ -17,3 +17,20 @@ AC_DEFUN([RUBY_TRY_CFLAGS], [ + AC_MSG_RESULT(no)]) + ]) + ])dnl ++ ++AC_DEFUN([_RUBY_TRY_CFLAGS_PREPEND], [ ++ RUBY_WERROR_FLAG([ ++ CFLAGS="$1 [$]CFLAGS" ++ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$4]], [[$5]])], ++ [$2], [$3]) ++ ])dnl ++])dnl ++AC_DEFUN([RUBY_TRY_CFLAGS_PREPEND], [ ++ AC_MSG_CHECKING([whether ]$1[ is accepted as CFLAGS])dnl ++ _RUBY_TRY_CFLAGS_PREPEND([$1], ++ [$2 ++ AC_MSG_RESULT(yes)], ++ [$3 ++ AC_MSG_RESULT(no)], ++ [$4], [$5]) ++])dnl diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch deleted file mode 100644 index 45ed5a9..0000000 --- a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +++ /dev/null @@ -1,24 +0,0 @@ -From db4ba95bf12f9303e38a9a78979cd363cb9a19fb Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Fri, 12 Jan 2024 18:33:34 +0100 -Subject: [PATCH] aarch64: Prepend -mbranch-protection=standard option when - checking branch protection. - -Related Upstream issue: https://bugs.ruby-lang.org/issues/20154 ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 18b4247991..5ea8ada8f7 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -828,7 +828,7 @@ AS_IF([test "$GCC" = yes], [ - - # aarch64 branch protection - AS_CASE(["$target_cpu"], [aarch64], [ -- AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ -+ AS_FOR(option, opt, [-mbranch-protection=standard -mbranch-protection=pac-ret -msign-return-address=all], [ - RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) - AS_IF([test "x$branch_protection" = xyes], [ - # C compiler and assembler must be consistent for -mbranch-protection diff --git a/ruby.spec b/ruby.spec index a34a5cd..b6f6900 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 9%{?dist} +Release: 10%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -274,7 +274,9 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Armv8.3+ capable CPUs might segfault with incorrect compilation options. # See related upstream report: https://bugs.ruby-lang.org/issues/20085 # https://bugs.ruby-lang.org/issues/20154 -Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +# Make sure hardeding flags are correctly applied. +# https://bugs.ruby-lang.org/issues/20520 +Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch # Fix build issue on i686 due to "incompatible pointer type" error. # https://bugs.ruby-lang.org/issues/20447 Patch13: ruby-3.4.0-Fix-pointer-incompatiblity.patch @@ -792,7 +794,6 @@ pushd %{_vpath_builddir} --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ - --disable-fortify-source `# Should not really be needed: https://bugs.ruby-lang.org/issues/20520` \ %{?with_yjit: --enable-yjit} \ popd @@ -1722,6 +1723,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue Jun 18 2024 Vít Ondruch - 3.3.2-10 +- Make sure hardening configuration flags are correctly applied. + * Thu Jun 06 2024 Vít Ondruch - 3.3.2-9 - Upgrade to Ruby 3.3.2. Resolves: rhbz#2284020 From ca13a515893b6810288c9b589d6abb26438f757d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 10 Jul 2024 11:04:00 +0200 Subject: [PATCH 39/83] Upgrade to Ruby 3.3.4. Resolves: rhbz#2292052 --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...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 | 10 +++---- ruby-2.7.0-Initialize-ABRT-hook.patch | 2 +- ...ADER-didn-t-define-HAVE-header-file-.patch | 27 ------------------ ...GS-to-a-special-hardenflags-variable.patch | 12 ++++---- ruby-3.4.0-Fix-pointer-incompatiblity.patch | 24 ---------------- ruby.spec | 28 ++++++++----------- sources | 2 +- 11 files changed, 30 insertions(+), 85 deletions(-) delete mode 100644 ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch delete mode 100644 ruby-3.4.0-Fix-pointer-incompatiblity.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 692a40b..4cd8dd1 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 -@@ -3478,6 +3478,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3482,6 +3482,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 e96ce39..e6315c0 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 -@@ -4317,7 +4317,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4321,7 +4321,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 c990ede..8e1b4fe 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 -@@ -4381,6 +4381,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4385,6 +4385,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 dd81419..7dc8eca 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 -@@ -4353,6 +4353,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4357,6 +4357,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='' -@@ -4377,6 +4381,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4381,6 +4385,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 8e9fd2b..50b4466 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 -@@ -4267,9 +4267,6 @@ AS_CASE(["$target_os"], +@@ -4271,9 +4271,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], -@@ -4292,57 +4289,63 @@ AC_ARG_WITH(ridir, +@@ -4296,57 +4293,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) -@@ -4359,6 +4362,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4363,6 +4366,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1351,7 +1351,8 @@ def test_self_use_paths +@@ -1353,7 +1353,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1427,7 +1428,7 @@ def test_self_vendor_dir +@@ -1429,7 +1430,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 0f32243..309507f 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -58,7 +58,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1724,10 +1724,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1722,10 +1722,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch b/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch deleted file mode 100644 index 7f6a83d..0000000 --- a/ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch +++ /dev/null @@ -1,27 +0,0 @@ -From d6d22e457475e3d2f8e4878bb97e2780ca2f83d6 Mon Sep 17 00:00:00 2001 -From: Sorah Fukumori -Date: Fri, 31 May 2024 02:16:10 +0900 -Subject: [PATCH] RUBY_CHECK_HEADER didn't define HAVE_{header-file} - ---with-gmp is not working at all because HAVE_GMP_H -was missing since 18eaf0be90. [Bug #20515] - -bug: https://bugs.ruby-lang.org/issues/20515 -follow-up: https://bugs.ruby-lang.org/issues/20494 -follow-up: 18eaf0be905e3e251423b42d6f4e56b7cae1bc3b ---- - tool/m4/ruby_check_header.m4 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tool/m4/ruby_check_header.m4 b/tool/m4/ruby_check_header.m4 -index 171455549e3362..6fec9d16c5bcf1 100644 ---- a/tool/m4/ruby_check_header.m4 -+++ b/tool/m4/ruby_check_header.m4 -@@ -3,6 +3,6 @@ AC_DEFUN([RUBY_CHECK_HEADER], - [# RUBY_CHECK_HEADER($@) - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS m4_if([$5], [], [$INCFLAGS], [$5])" -- AC_CHECK_HEADER([$1], [$2], [$3], [$4]) -+ AC_CHECK_HEADERS([$1], [$2], [$3], [$4]) - CPPFLAGS="$save_CPPFLAGS" - unset save_CPPFLAGS]) diff --git a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch index b03b618..b811afd 100644 --- a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch +++ b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch @@ -60,7 +60,7 @@ diff --git a/configure.ac b/configure.ac index f35fad6a362611..0da15772d36671 100644 --- a/configure.ac +++ b/configure.ac -@@ -352,7 +352,7 @@ test -z "$warnflags" || +@@ -354,7 +354,7 @@ test -z "$warnflags" || AS_IF([test -z "${CFLAGS+set}"], [ cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"` orig_cflags="$cflags" @@ -69,7 +69,7 @@ index f35fad6a362611..0da15772d36671 100644 ]) dnl AS_IF([test -z "${CXXFLAGS+set}"], [ dnl cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"` -@@ -800,7 +800,7 @@ AS_IF([test "$GCC" = yes], [ +@@ -802,7 +802,7 @@ AS_IF([test "$GCC" = yes], [ [fortify_source=$enableval]) AS_IF([test "x$fortify_source" != xno], [ RUBY_TRY_CFLAGS([$optflags -D_FORTIFY_SOURCE=2], @@ -78,7 +78,7 @@ index f35fad6a362611..0da15772d36671 100644 [@%:@include ]) ]) -@@ -821,20 +821,24 @@ AS_IF([test "$GCC" = yes], [ +@@ -823,20 +823,24 @@ AS_IF([test "$GCC" = yes], [ AC_MSG_CHECKING([for -fstack-protector]) AC_MSG_RESULT(["$stack_protector"]) AS_CASE(["$stack_protector"], [-*], [ @@ -111,7 +111,7 @@ index f35fad6a362611..0da15772d36671 100644 break ]) ]) -@@ -983,6 +987,59 @@ AC_SUBST(incflags, "$INCFLAGS") +@@ -985,6 +989,59 @@ test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\"" } @@ -171,7 +171,7 @@ index f35fad6a362611..0da15772d36671 100644 AC_CACHE_CHECK([whether compiler has statement and declarations in expressions], rb_cv_have_stmt_and_decl_in_expr, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ __extension__ ({ int a = 0; a; }); ]])], -@@ -4211,12 +4268,13 @@ AS_IF([test "${ARCH_FLAG}"], [ +@@ -4215,12 +4272,13 @@ AS_IF([test "${ARCH_FLAG}"], [ rb_cv_warnflags=`echo "$rb_cv_warnflags" | sed 's/^ *//;s/ *$//'` warnflags="$rb_cv_warnflags" AC_SUBST(cppflags)dnl @@ -186,7 +186,7 @@ index f35fad6a362611..0da15772d36671 100644 AC_SUBST(XCFLAGS)dnl AC_SUBST(XLDFLAGS)dnl AC_SUBST(EXTLDFLAGS)dnl -@@ -4684,6 +4742,7 @@ config_summary "DLDFLAGS" "$DLDFLAGS" +@@ -4688,6 +4746,7 @@ config_summary "DLDFLAGS" "$DLDFLAGS" config_summary "optflags" "$optflags" config_summary "debugflags" "$debugflags" config_summary "warnflags" "$warnflags" diff --git a/ruby-3.4.0-Fix-pointer-incompatiblity.patch b/ruby-3.4.0-Fix-pointer-incompatiblity.patch deleted file mode 100644 index 2bd7a53..0000000 --- a/ruby-3.4.0-Fix-pointer-incompatiblity.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 055613fd868a8c94e43893f8c58a00cdd2a81f6d Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Fri, 22 Mar 2024 18:18:35 +0900 -Subject: [PATCH] Fix pointer incompatiblity - -Since the subsecond part is discarded, WIDEVAL to VALUE conversion is -needed. ---- - time.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/time.c b/time.c -index 6179b081c02fc9..3304b2f4f4856a 100644 ---- a/time.c -+++ b/time.c -@@ -2342,7 +2342,7 @@ zone_timelocal(VALUE zone, VALUE time) - struct time_object *tobj = RTYPEDDATA_GET_DATA(time); - wideval_t t, s; - -- split_second(tobj->timew, &t, &s); -+ wdivmod(tobj->timew, WINT2FIXWV(TIME_SCALE), &t, &s); - tm = tm_from_time(rb_cTimeTM, time); - utc = rb_check_funcall(zone, id_local_to_utc, 1, &tm); - if (UNDEF_P(utc)) return 0; diff --git a/ruby.spec b/ruby.spec index b6f6900..bb215e4 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 3 -%global teeny_version 2 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision e5a195edf6 +#%%global revision be1089c8ec %global ruby_archive %{name}-%{ruby_version} @@ -27,7 +27,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.5.9 +%global rubygems_version 3.5.11 %global rubygems_molinillo_version 0.8.0 %global rubygems_net_http_version 0.4.0 %global rubygems_net_protocol_version 0.2.2 @@ -38,7 +38,7 @@ %global rubygems_uri_version 0.13.0 # Default gems. -%global bundler_version 2.5.9 +%global bundler_version 2.5.11 %global bundler_connection_pool_version 2.4.1 %global bundler_fileutils_version 1.7.2 %global bundler_net_http_persistent_version 4.0.2 @@ -95,8 +95,8 @@ %global set_version 1.1.0 %global shellwords_version 0.2.0 %global singleton_version 0.2.0 -%global stringio_version 3.1.0 -%global strscan_version 3.0.7 +%global stringio_version 3.1.1 +%global strscan_version 3.0.9 %global syntax_suggest_version 2.0.0 %global syslog_version 0.1.2 %global tempfile_version 0.2.1 @@ -133,7 +133,7 @@ %global racc_version 1.7.3 %global rake_version 13.1.0 %global rbs_version 3.4.0 -%global rexml_version 3.2.6 +%global rexml_version 3.2.8 %global rss_version 0.3.0 %global test_unit_version 3.6.1 %global typeprof_version 0.21.9 @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 10%{?dist} +Release: 11%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -277,12 +277,6 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Make sure hardeding flags are correctly applied. # https://bugs.ruby-lang.org/issues/20520 Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch -# Fix build issue on i686 due to "incompatible pointer type" error. -# https://bugs.ruby-lang.org/issues/20447 -Patch13: ruby-3.4.0-Fix-pointer-incompatiblity.patch -# Fix GMP support -# https://bugs.ruby-lang.org/issues/20515 -Patch14: ruby-3.3.3-RUBY-CHECK-HEADER-didn-t-define-HAVE-header-file-.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -760,8 +754,6 @@ analysis result in RBS format, a standard type description format for Ruby %patch 6 -p1 %patch 9 -p1 %patch 12 -p1 -%patch 13 -p1 -%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1723,6 +1715,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Wed Jul 10 2024 Vít Ondruch - 3.3.4-11 +- Upgrade to Ruby 3.3.4. + Resolves: rhbz#2292052 + * Tue Jun 18 2024 Vít Ondruch - 3.3.2-10 - Make sure hardening configuration flags are correctly applied. diff --git a/sources b/sources index b8e4495..88156f2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.2.tar.xz) = f2c4fb0d7c80aa46cdd80ad54ffee614e95d2fbad0554b6ce81f42fa5b891aaea63ddfd5b962e28508a4c835f9abf091a05a2e1234ef08c3e71af522a029c4e1 +SHA512 (ruby-3.3.4.tar.xz) = b26461a13ff82a08a282f10108028bb2a2e4a28da6182a291062fc54089c6655d79c22cc69d59156f9b11cb10a17fe8c69d489343fbae123a45f03361b95c9eb From 55661b64e9e5f57e072f01a2e47ecc0a9d6d3c55 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jul 2024 18:58:13 +0000 Subject: [PATCH 40/83] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index bb215e4..55f2cf5 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 11%{?dist} +Release: 12%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1715,6 +1715,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Jul 19 2024 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Wed Jul 10 2024 Vít Ondruch - 3.3.4-11 - Upgrade to Ruby 3.3.4. Resolves: rhbz#2292052 From d03ac3403a673a9be541f95579f2fb55a145eaf7 Mon Sep 17 00:00:00 2001 From: Lumir Balhar Date: Tue, 23 Jul 2024 13:28:08 +0200 Subject: [PATCH 41/83] Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add systemtap-sdt-devel as BuildRequires to build Ruby with systemtap sdt header files. The commit[1] on systemtap rawhide by the change[2] on systemtap-5.2~pre17206355g1a07290a-2.fc41 or later versions caused the following error in the `test_systemtap.rb`. Because the `readelf -S "#{LIBRUBY_SO}"` in the `test_systemtap.rb` failed to find the systemtap section headers in the `libruby.so` file. We relied on the `BuildRequires: %{_bindir}/dtrace` BuildRequires to bring in all required files for systemtap support. However, after the change[1] that the systemtap package was split, now we need to require systemtap sdt header files on top of the dtrace executable to build Ruby with systemtap support to fix the error. ``` + make -C redhat-linux-build runruby TESTRUN_SCRIPT=/builddir/build/SOURCES/test_systemtap.rb make: Entering directory '/builddir/build/BUILD/ruby-3.3.4-build/ruby-3.3.4/redhat-linux-build' RUBY_ON_BUG='gdb -x /builddir/build/BUILD/ruby-3.3.4-build/ruby-3.3.4/.gdbinit -p' ./miniruby -I/builddir/build/BUILD/ruby-3.3.4-build/ruby-3.3.4/lib -I. -I.ext/common /builddir/build/BUILD/ruby-3.3.4-build/ruby-3.3.4/tool/runruby.rb --extout=.ext -- --disable-gems /builddir/build/SOURCES/test_systemtap.rb ERROR: SystemTap (DTrace) headers were not detected in resulting library. ``` Co-authored-by: Lumír Balhar [1] https://src.fedoraproject.org/rpms/systemtap/c/93948388bc54cd7a4efb1806d9787291d26b33d6?branch=rawhide [2] https://fedoraproject.org/wiki/Changes/Separate_dtrace_package --- ruby.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 55f2cf5..a59290e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 12%{?dist} +Release: 13%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -294,6 +294,7 @@ BuildRequires: openssl-devel BuildRequires: zlib-devel %{?with_gmp:BuildRequires: gmp-devel} %{?with_systemtap:BuildRequires: %{_bindir}/dtrace} +%{?with_systemtap:BuildRequires: systemtap-sdt-devel} %{?with_yjit:BuildRequires: %{_bindir}/rustc} # Install section @@ -1715,6 +1716,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Jul 29 2024 Jun Aruga - 3.3.4-13 +- Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. + Co-authored-by: Lumír Balhar + * Fri Jul 19 2024 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 0d81c8b95abcb0bbce06fb63207dec45f2b85f6f Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 1 Aug 2024 10:38:59 +0200 Subject: [PATCH 42/83] Remove systemtap-sdt-dtrace dependency including dtrace command. This commit is an improvement for the past commit . According to the following part at the commit[1] on systemtap rawhide, systemtap-sdt-devel RPM requires systemtap-sdt-dtrace RPM including the `dtrace` command. We can remove the systemtap-sdt-dtrace build dependency. ``` %package sdt-devel ... Requires: systemtap-sdt-dtrace = %{version}-%{release} ``` [1] https://src.fedoraproject.org/rpms/systemtap/c/93948388bc54cd7a4efb1806d9787291d26b33d6?branch=rawhide --- ruby.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index a59290e..0531b19 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 13%{?dist} +Release: 14%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -293,7 +293,6 @@ BuildRequires: libyaml-devel BuildRequires: openssl-devel BuildRequires: zlib-devel %{?with_gmp:BuildRequires: gmp-devel} -%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} %{?with_systemtap:BuildRequires: systemtap-sdt-devel} %{?with_yjit:BuildRequires: %{_bindir}/rustc} @@ -1716,6 +1715,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Thu Aug 01 2024 Jun Aruga - 3.3.4-14 +- Remove systemtap-sdt-dtrace dependency including dtrace command. + * Mon Jul 29 2024 Jun Aruga - 3.3.4-13 - Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. Co-authored-by: Lumír Balhar From fde0aac8f9d150ffcecd980ab38b5005cee24287 Mon Sep 17 00:00:00 2001 From: Iveta Wiedermann Date: Thu, 24 Nov 2022 11:23:10 +0100 Subject: [PATCH 43/83] Adding fmf plan --- .fmf/version | 1 + .gitignore | 2 ++ plans/all.fmf | 6 ++++++ 3 files changed, 9 insertions(+) create mode 100644 .fmf/version create mode 100644 plans/all.fmf diff --git a/.fmf/version b/.fmf/version new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/.fmf/version @@ -0,0 +1 @@ +1 diff --git a/.gitignore b/.gitignore index a59f941..4ed5a91 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /*/ /ruby-*.tar.xz /*.rpm + +!/plans/ diff --git a/plans/all.fmf b/plans/all.fmf new file mode 100644 index 0000000..7b06cfb --- /dev/null +++ b/plans/all.fmf @@ -0,0 +1,6 @@ +summary: Test plan with all Fedora tests +discover: + how: fmf + url: https://src.fedoraproject.org/tests/ruby.git +execute: + how: tmt From bd711c90364c717c60e6d55602306b86ec01475f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 8 Aug 2024 16:13:37 +0200 Subject: [PATCH 44/83] Use newly introduced `Ruby-pty` license identifier --- ruby.spec | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/ruby.spec b/ruby.spec index 0531b19..f1bc591 100644 --- a/ruby.spec +++ b/ruby.spec @@ -191,10 +191,6 @@ Release: 14%{?dist} # .bundle/gems/net-imap-0.4.9/LICENSE.txt # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 # -# Approved license without SPDX identifier: -# ext/pty/pty.c -# https://gitlab.com/fedora/legal/fedora-license-data/-/issues/503 -# # BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c, addr2line.c:2652 # CC0: ccan/{build_assert/build_assert.h,check_type/check_type.h, # container_of/container_of.h,str/str.h} @@ -209,11 +205,12 @@ Release: 14%{?dist} # https://gitlab.com/fedora/legal/fedora-license-data/-/merge_requests/145 # MIT: ccan/list/list.h # Ruby OR BSD-2-Clause OR GPL-1.0-or-later: lib/net/protocol.rb +# Ruby-pty: ext/pty/pty.c # Unicode-DFS-2015: some of enc/trans/**/*.src # There is also license review ticket here: # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/500 # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c -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 +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 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 f11fa48d8fd241263b0c4dd41ef2b43273a95bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 21 Aug 2024 09:58:49 +0200 Subject: [PATCH 45/83] Revert "Remove systemtap-sdt-dtrace dependency including dtrace command." This reverts commit 0d81c8b95abcb0bbce06fb63207dec45f2b85f6f. As it turns out, both requires are needed after \[[1]\]. [1]: https://src.fedoraproject.org/rpms/systemtap/pull-request/30 --- ruby.spec | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ruby.spec b/ruby.spec index f1bc591..022f280 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 14%{?dist} +Release: 13%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -290,6 +290,7 @@ BuildRequires: libyaml-devel BuildRequires: openssl-devel BuildRequires: zlib-devel %{?with_gmp:BuildRequires: gmp-devel} +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} %{?with_systemtap:BuildRequires: systemtap-sdt-devel} %{?with_yjit:BuildRequires: %{_bindir}/rustc} @@ -1712,9 +1713,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog -* Thu Aug 01 2024 Jun Aruga - 3.3.4-14 -- Remove systemtap-sdt-dtrace dependency including dtrace command. - * Mon Jul 29 2024 Jun Aruga - 3.3.4-13 - Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. Co-authored-by: Lumír Balhar From c4e686c7167de30f040e64c87906d1830f9e0a87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 22 Aug 2024 13:17:16 +0200 Subject: [PATCH 46/83] Fix typo Credits goes to @ekohl for noticing this: https://src.fedoraproject.org/rpms/ruby/pull-request/186#comment-214161 --- rubygems.con | 4 ++-- rubygems.req | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rubygems.con b/rubygems.con index 1a99ed0..bcdeddc 100644 --- a/rubygems.con +++ b/rubygems.con @@ -19,7 +19,7 @@ module RubyGemsReq end # Report conflicting gem dependencies including their version. - def self.gem_depenencies(specification) + def self.gem_dependencies(specification) specification.runtime_dependencies.each do |dependency| conflict_strings = Helpers::requirement_versions_to_rpm(dependency.requirement).map do |requirement| requirement_string = "rubygem(#{dependency.name}) #{requirement}" @@ -39,7 +39,7 @@ module RubyGemsReq begin specification = Gem::Specification.load filename - gem_depenencies(specification) + gem_dependencies(specification) rescue => e # Ignore all errors. end diff --git a/rubygems.req b/rubygems.req index 38e4a9c..70aebd4 100644 --- a/rubygems.req +++ b/rubygems.req @@ -58,7 +58,7 @@ module RubyGemsReq end # Report all gem dependencies including their version. - def self.gem_depenencies(specification) + def self.gem_dependencies(specification) specification.runtime_dependencies.each do |dependency| dependency_name = "rubygem(#{dependency.name})" requirements = Helpers::requirement_versions_to_rpm(dependency.requirement) @@ -75,7 +75,7 @@ module RubyGemsReq specification = Gem::Specification.load filename rubygems_dependency(specification) - gem_depenencies(specification) + gem_dependencies(specification) rescue => e # Ignore all errors. end From 2e6762df8dc81ddd5cb9a5f7ff734cf6b7459ec8 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 20 Dec 2023 10:06:40 +0100 Subject: [PATCH 47/83] Test RPM dependency generators for rubygems. Add tests for RPM dependency generators that execute during build. The tests make use of methods available in tools present in the upstream ruby tar archive to find and set up the ruby executable. This is then used to execute the dependency generator script with a given test input passed into the subprocess and collect the output given out by the generator for testing. Skip "test_generator_on_gem_with_multiple_conflict_constraints" for now. rubygems.req is currently only capable of filtering out a single conflict requirement that is specified on a given dependency. Execute it in the %check section before the long-running Ruby test suite starts. If testing the generators fails it means there is the possibility of generating bogus requires, which is a valuable information to get sooner rather than later. --- rpm_test_helper.rb | 166 ++++++++++++++++++++++++++++++++++ ruby.spec | 20 +++++ test_rubygems_con.rb | 124 +++++++++++++++++++++++++ test_rubygems_prov.rb | 52 +++++++++++ test_rubygems_req.rb | 205 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 567 insertions(+) create mode 100644 rpm_test_helper.rb create mode 100644 test_rubygems_con.rb create mode 100644 test_rubygems_prov.rb create mode 100644 test_rubygems_req.rb diff --git a/rpm_test_helper.rb b/rpm_test_helper.rb new file mode 100644 index 0000000..671ca55 --- /dev/null +++ b/rpm_test_helper.rb @@ -0,0 +1,166 @@ +require 'tmpdir' +require 'tempfile' +require 'fileutils' +# Available in Ruby upstream sources under tool/lib/envutil.rb +# Required for finding and setting up the built ruby binary. +require 'envutil' + +module RPMTestHelper + def setup + @tmpdir = Dir.mktmpdir + @tempfiles = [] + end + + def teardown + @tempfiles.each do |file| + file.close + file.unlink + end + + FileUtils.rmtree(@tmpdir) + end + + GENERATOR_SCRIPT = ENV['GENERATOR_SCRIPT'].clone.freeze + if GENERATOR_SCRIPT.nil? || GENERATOR_SCRIPT == '' + raise "GENERATOR_SCRIPT is not specified." \ + "Specify the ENV variable with absolute path to the generator." + end + + Dependency = Struct.new('Dependency', :name, :requirements) do + def to_rpm_str + "rubygem(#{self.name})" + end + end + + def make_gemspec(gem_info) + file = Tempfile.new('req_gemspec', @tmpdir) + # Fake gemspec with enough to pass most checks + # Rubygems uses to validate the format. + gemspec_contents = <<~EOF + # -*- encoding: utf-8 -*- + # stub: #{gem_info.name} #{gem_info.version} ruby lib + + Gem::Specification.new do |s| + s.name = "#{gem_info.name}".freeze + s.version = "#{gem_info.version}" + + s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= + s.require_paths = ["lib".freeze] + s.authors = ["John Doe".freeze] + s.bindir = "bin".freeze + s.date = "2023-12-15" + s.description = "Fake gemspec helper for testing Rubygem Generators".freeze + s.email = ["example@example.com".freeze] + s.files = ["LICENSE.txt".freeze, "lib/#{gem_info.name}.rb".freeze, "#{gem_info.name}.gemspec".freeze] + s.homepage = "https://pkgs.fedoraproject.org/rpms/ruby".freeze + s.licenses = ["MIT".freeze] + s.required_ruby_version = Gem::Requirement.new(">= 2.5.0".freeze) + s.rubygems_version = "3.3.5".freeze + s.summary = "Fake gemspec for testing Rubygem Generators".freeze + + if s.respond_to? :specification_version then + s.specification_version = 4 + end + + if s.respond_to? :add_runtime_dependency then + #{gem_info.gemspec_runtime_dep_str} + else + #{gem_info.gemspec_dep_str} + end + end + EOF + + file.write gemspec_contents + file.rewind + @tempfiles << file + file + end + + # Caller is expected to close subprocess stdin via #close_write + # in order to let subprocess proceed if the process is reading + # from STDIN in a loop. + def rb_subprocess(*args) + args = [GENERATOR_SCRIPT] if args.empty? + ruby = EnvUtil.rubybin + f = IO.popen([ruby] + args, 'r+') #, external_encoding: external_encoding) + yield(f) + ensure + f.close unless !f || f.closed? + end + + def run_generator_single_file(gem_info) + lines = [] + gemspec_f = make_gemspec(gem_info) + + rb_subprocess do |io| + io.write gemspec_f.path + io.close_write + lines = io.readlines + end + + lines + end + + def helper_rubygems_dependency + "ruby(rubygems)" + end + + class GemInfo + attr_accessor :name, :version, :dependencies + + def initialize(name: 'foo', version: '1.2.3', dependencies: []) + @name = name + @version = version + @dependencies = dependencies + end + + def dependencies=(other) + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Expected array of `Dependency' elements" \ + unless other.is_a?(Array) && other.all? { |elem| elem.respond_to?(:name) && elem.respond_to?(:requirements) } + + @dependencies = other + end + + def to_rpm_str + "rubygem(#{self.name})" + end + + def gemspec_dep_str + return '' if self.dependencies.nil? || self.dependencies.empty? + @dependencies.inject("") do |memo, dep| + memo += if dep.requirements && !dep.requirements.empty? + %Q|s.add_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| + else + %Q|s.add_dependency(%q<#{dep.name}>.freeze)| + end + + memo += "\n" + end + end + + def gemspec_runtime_dep_str + return '' if self.dependencies.nil? || self.dependencies.empty? + + @dependencies.inject("") do |memo, dep| + memo += if dep.requirements && !dep.requirements.empty? + %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze, #{handle_dep_requirements(dep.requirements)})| + else + %Q|s.add_runtime_dependency(%q<#{dep.name}>.freeze)| + end + + memo += "\n" + end + end + + private + + def handle_dep_requirements(reqs) + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must be an array." \ + unless reqs.is_a? Array + raise ArgumentError, "#{self.class.name}##{__method__.to_s}: Reqs must not be empty for this method." \ + if reqs.empty? + + '[ "' + reqs.join('", "') + '" ]' + end + end +end diff --git a/ruby.spec b/ruby.spec index 022f280..18f7ecc 100644 --- a/ruby.spec +++ b/ruby.spec @@ -230,6 +230,11 @@ Source13: test_abrt.rb Source14: test_systemtap.rb # Ruby OpenSSL FIPS tests. Source15: 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 # The load directive is supported since RPM 4.12, i.e. F21+. The build process # fails on older Fedoras. @@ -1134,6 +1139,21 @@ ln -sfr probes.d %{_vpath_builddir}/ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE14} %endif +# Test dependency generators for RPM +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" + + DISABLE_TESTS="" MSPECOPTS="" diff --git a/test_rubygems_con.rb b/test_rubygems_con.rb new file mode 100644 index 0000000..e124a49 --- /dev/null +++ b/test_rubygems_con.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsCon < Test::Unit::TestCase + include RPMTestHelper + + def test_filter_out_regular_requirements + gem_i = GemInfo.new + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ Dependency.new('bar') ] + gem_i.dependencies = deps + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ + Dependency.new('bar'), + Dependency.new('baq'), + Dependency.new('quz') + ] + + gem_i.dependencies = deps + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + + deps = [ + Dependency.new('bar', ['>= 4.1']), + Dependency.new('baz', ['~> 3.2']), + Dependency.new('quz', ['>= 5.6']) + ] + + gem_i.dependencies = deps + + lines = run_generator_single_file(gem_i) + + assert_equal(0, lines.size) + end + + def test_single_gem_single_version_conflict + con = Dependency.new('bar', ['!= 0.4.4']) + + gem_i = GemInfo.new(dependencies: [ con ]) + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{con.to_rpm_str} = 0.4.4\n", lines.first) + end + + def test_multiple_gems_with_single_conflict + cons = [ + Dependency.new('bar', ['!= 1.1']), + Dependency.new('baq', ['!= 1.2.2']), + Dependency.new('quz', ['!= 1.3']) + ] + + gem_i = GemInfo.new(dependencies: cons) + + lines = run_generator_single_file(gem_i) + + assert_equal(3, lines.size) + + assert_equal("#{cons[0].to_rpm_str} = 1.1\n" , lines[0]) + assert_equal("#{cons[1].to_rpm_str} = 1.2.2\n", lines[1]) + assert_equal("#{cons[2].to_rpm_str} = 1.3\n" , lines[2]) + end + + def test_multiple_conflicts_on_single_gem + con = Dependency.new('bar', ['!= 2.3', '!= 2.4']) + + gem_i = GemInfo.new(dependencies: [con]) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + rpm_name = con.to_rpm_str + left_rpm_constraint = "(#{rpm_name} = 2.3 with " + right_rpm_constraint = "#{rpm_name} = 2.4)\n" + assert_equal((left_rpm_constraint + right_rpm_constraint), lines[0]) + + con = Dependency.new('bar', ['!= 2.3', '!= 2.4', '!= 4.5']) + + gem_i = GemInfo.new(dependencies: [ con ]) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + + rpm_name = con.to_rpm_str + left_rpm_constraint = "(#{rpm_name} = 2.3 with " + middle_rpm_constraint = "#{rpm_name} = 2.4 with " + right_rpm_constraint = "#{rpm_name} = 4.5)\n" + + assert_equal((left_rpm_constraint + middle_rpm_constraint + right_rpm_constraint), lines[0]) + end + + def test_generates_conflicts_while_ignoring_regular_requirements + deps = [ + Dependency.new('bar', ['>= 2.3', '!= 2.4.2']), + Dependency.new('quz', ['~> 3.0', '!= 3.2']) + ] + + gem_i = GemInfo.new(dependencies: deps) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + + rpm_name = deps[0].to_rpm_str + rpm_constraint = "#{rpm_name} = 2.4.2\n" + assert_equal(rpm_constraint, lines[0]) + + rpm_name = deps[1].to_rpm_str + rpm_constraint = "#{rpm_name} = 3.2\n" + assert_equal(rpm_constraint, lines[1]) + end +end diff --git a/test_rubygems_prov.rb b/test_rubygems_prov.rb new file mode 100644 index 0000000..b660ff6 --- /dev/null +++ b/test_rubygems_prov.rb @@ -0,0 +1,52 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsProv < Test::Unit::TestCase + include RPMTestHelper + + def test_provides_the_gem_version + gem_i = GemInfo.new(version: '1.2') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + + gem_i = GemInfo.new(name: 'somegem_foo', version: '4.5.6') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + + deps = [ + Dependency.new('bar'), + Dependency.new('baq', [">= 1.2"]), + Dependency.new('quz', ["!= 3.2"]) + ] + gem_i = GemInfo.new(dependencies: deps) + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = #{gem_i.version}\n", lines.first) + end + + def test_translates_prelease_version_provides_from_rubygems_to_rpm + gem_i = GemInfo.new(version: '1.2.3.dev') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev\n", lines.first) + + gem_i = GemInfo.new(name: 'foo2', version: '1.2.3.dev.2') + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{gem_i.to_rpm_str} = 1.2.3~dev.2\n", lines.first) + end +end diff --git a/test_rubygems_req.rb b/test_rubygems_req.rb new file mode 100644 index 0000000..490923e --- /dev/null +++ b/test_rubygems_req.rb @@ -0,0 +1,205 @@ +# frozen_string_literal: true + +require 'test/unit' +require 'rpm_test_helper' + +class TestRubyGemsReq < Test::Unit::TestCase + include RPMTestHelper + + def test_depends_on_rubygems + gem_i = GemInfo.new + + lines = run_generator_single_file(gem_i) + + assert_equal(1, lines.size) + assert_equal("#{helper_rubygems_dependency}\n", lines.first) + end + + def test_requires_rubygems_and_dependency + dep = Dependency.new('bar') + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{helper_rubygems_dependency}\n", lines.first) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_requires_multiple_dependencies_with_constraint + constraints = [ + '>= 3.0', + '>= 3.0.0', + '>= 3', + '= 1.0.2', + '= 3.0', + '< 3.2', + '<= 3.4' + ] + + dependencies = [] + constraints.each_with_index do |constraint, idx| + dependencies << Dependency.new("bar#{idx}", [constraint]) + end + + gem_i = GemInfo.new(dependencies: dependencies) + + lines = run_generator_single_file(gem_i) + # + 1 for the rubygems dependency + assert_equal(constraints.size + 1, lines.size) + dependencies.each_with_index do |dep, idx| + rpm_dep_name = dep.to_rpm_str + # Start indexing lines at 1, to jump over rubygems dependency + assert_equal("#{rpm_dep_name} #{constraints[idx]}\n", lines[idx + 1]) + end + end + + def test_expands_pessimistic_constraint_for_rpm + dep = Dependency.new('bar', ['~> 1.2']) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + + rpm_dep_name = dep.to_rpm_str + left_constraint = "#{rpm_dep_name} >= 1.2" + right_constraint = "#{rpm_dep_name} < 2" + expected_constraint = "(#{left_constraint} with #{right_constraint})\n" + assert_equal(expected_constraint, lines[1]) + end + + def test_multiple_pessimistically_constrained_dependencies + dependencies = [] + dep_map = [ + { + constraint: '~> 1.2.3', + expanded_left: '>= 1.2.3', + expanded_rigth: '< 1.3', + gem_name: 'bar1' + }, + { + constraint: '~> 1.2', + expanded_left: '>= 1.2', + expanded_rigth: '< 2', + gem_name: 'bar2' + }, + { + constraint: '~> 3', + expanded_left: '>= 3', + expanded_rigth: '< 4', + gem_name: 'bar3' + } + ].each do |deps| + dependencies << Dependency.new(deps[:gem_name], [deps[:constraint]]) + end + + gem_i = GemInfo.new(dependencies: dependencies) + + lines = run_generator_single_file(gem_i) + + assert_equal(dep_map.size + 1, lines.size) + + dep_map.each_with_index do |hash, idx| + rpm_dep_name = dependencies[idx].to_rpm_str + left_constraint = rpm_dep_name + ' ' + hash[:expanded_left] + right_constraint = rpm_dep_name + ' ' + hash[:expanded_rigth] + expected_constraint = "(#{left_constraint} with #{right_constraint})\n" + assert_equal(expected_constraint, lines[idx + 1]) + end + end + + def test_multiple_constraints_on_one_dependency_composes_constraints_for_RPM + # The quoting here depends on how the constraint is expanded in the helpers. + # right now the form is `["#{constraint}"]`, therefore we have to not specify + # left and right quotes. + constraints = ['>= 0.2.3', '<= 0.2.5'] + dep = Dependency.new('baz', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + rpm_dep_name = dep.to_rpm_str + assert_equal("(#{rpm_dep_name} >= 0.2.3 with #{rpm_dep_name} <= 0.2.5)\n", lines[1]) + + # Not sure who would compose a dependency like this, but it's possible + # to do with the current generator + constraints = ['> 0.4.5', '< 0.6.4', '>= 2.3', '<= 2.5.3'] + dep = Dependency.new('qux', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + rpm_dep = dep.to_rpm_str + expected_str = "(#{rpm_dep} > 0.4.5 with #{rpm_dep} < 0.6.4 with " \ + "#{rpm_dep} >= 2.3 with #{rpm_dep} <= 2.5.3)\n" + + assert_equal(2, lines.size) + assert_equal(expected_str, lines[1]) + end + + # https://bugzilla.redhat.com/show_bug.cgi?id=1561487 + def test_depends_on_gem_with_version_conflict + dep = Dependency.new('baz', ['!= 0.4']) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_filters_conflict_from_regular_version_constraints + constraint = ['> 1.2.4', '!= 1.2.7'] + dep = Dependency.new('baq', constraint) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) + end + + def test_filtering_conflicts_is_not_depending_on_contraint_ordering + constraints = ['!= 1.2.7', '> 1.2.4'] + dep = Dependency.new('baq', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} > 1.2.4\n", lines[1]) + end + + def test_filters_multiple_conflicts_from_dependency + omit "Case not yet supported." + constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '!= 4.8'] + dep = Dependency.new('baf', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str}\n", lines[1]) + end + + def test_filters_multiple_conflicts_from_dependency_but_keeps_regular_constraint + constraints = ['!= 1.2.4', '!= 1.2.5', '!= 2.3', '<= 4.8'] + dep = Dependency.new('bam', constraints) + + gem_i = GemInfo.new(dependencies: [dep]) + + lines = run_generator_single_file(gem_i) + + assert_equal(2, lines.size) + assert_equal("#{dep.to_rpm_str} <= 4.8\n", lines[1]) + end +end From 6bed1e3bd563b1844762d9715285d1ed3bb4dc91 Mon Sep 17 00:00:00 2001 From: Mikolaj Izdebski Date: Tue, 20 Aug 2024 15:33:33 +0200 Subject: [PATCH 48/83] Generate RPM dependencies with RPM 4.20 API Use new RPM 4.20 API to generate RPM dependencies instead of relying on rpm-local-generator-support. See: https://rpm-software-management.github.io/rpm/manual/dependency_generators.html#using-file-attributes-in-their-own-package --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 18f7ecc..625f182 100644 --- a/ruby.spec +++ b/ruby.spec @@ -241,6 +241,7 @@ Source19: test_rubygems_con.rb %{load:%{SOURCE4}} %{load:%{SOURCE5}} +%define _local_file_attrs local_generator %define __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{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}" @@ -285,7 +286,6 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} -BuildRequires: rpm-local-generator-support # Build dependencies BuildRequires: autoconf BuildRequires: gcc From b7e197fb887200e4faaf8fae663a9df00bdc09d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 3 Sep 2024 10:57:52 +0200 Subject: [PATCH 49/83] Upgrade to Ruby 3.3.5. Resolves: rhbz#2309364 --- ...GS-to-a-special-hardenflags-variable.patch | 6 +- ruby.spec | 31 ++- ...-another-race-condition-of-open-mode.patch | 45 +++++ ...17-Remove-the-lock-file-for-binstubs.patch | 183 ++++++++++++++++++ sources | 2 +- 5 files changed, 255 insertions(+), 12 deletions(-) create mode 100644 rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch create mode 100644 rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch diff --git a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch index b811afd..d0c10a0 100644 --- a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch +++ b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch @@ -279,9 +279,9 @@ diff --git a/tool/m4/ruby_try_cflags.m4 b/tool/m4/ruby_try_cflags.m4 index b74718fe5e1cef..b397642aad9ca2 100644 --- a/tool/m4/ruby_try_cflags.m4 +++ b/tool/m4/ruby_try_cflags.m4 -@@ -17,3 +17,20 @@ AC_DEFUN([RUBY_TRY_CFLAGS], [ - AC_MSG_RESULT(no)]) - ]) +@@ -22,3 +22,20 @@ AC_DEFUN([RUBY_TRY_CFLAGS], [ + AC_MSG_RESULT(no)], + [$4], [$5]) ])dnl + +AC_DEFUN([_RUBY_TRY_CFLAGS_PREPEND], [ diff --git a/ruby.spec b/ruby.spec index 625f182..08e4cd7 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 3 -%global teeny_version 4 +%global teeny_version 5 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision be1089c8ec +#%%global revision ef084cc8f4 %global ruby_archive %{name}-%{ruby_version} @@ -27,7 +27,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.5.11 +%global rubygems_version 3.5.16 %global rubygems_molinillo_version 0.8.0 %global rubygems_net_http_version 0.4.0 %global rubygems_net_protocol_version 0.2.2 @@ -38,7 +38,7 @@ %global rubygems_uri_version 0.13.0 # Default gems. -%global bundler_version 2.5.11 +%global bundler_version 2.5.16 %global bundler_connection_pool_version 2.4.1 %global bundler_fileutils_version 1.7.2 %global bundler_net_http_persistent_version 4.0.2 @@ -105,7 +105,7 @@ %global tmpdir_version 0.2.0 %global tsort_version 0.2.0 %global un_version 0.3.0 -%global uri_version 0.13.0 +%global uri_version 0.13.1 %global weakref_version 0.1.3 %global win32ole_version 1.8.10 %global yaml_version 0.3.0 @@ -133,8 +133,8 @@ %global racc_version 1.7.3 %global rake_version 13.1.0 %global rbs_version 3.4.0 -%global rexml_version 3.2.8 -%global rss_version 0.3.0 +%global rexml_version 3.3.6 +%global rss_version 0.3.1 %global test_unit_version 3.6.1 %global typeprof_version 0.21.9 @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 13%{?dist} +Release: 14%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -280,6 +280,15 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Make sure hardeding flags are correctly applied. # https://bugs.ruby-lang.org/issues/20520 Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch +# Fix build error: +# RPM build errors: +# error: Installed (but unpackaged) file(s) found: +# /usr/bin/bundle.lock +# This would break not only Ruby itself, but allso all rubygem-packages. +# https://github.com/rubygems/rubygems/pull/7931 +Patch13: rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch +# https://github.com/rubygems/rubygems/pull/7939 +Patch14: rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -757,6 +766,8 @@ analysis result in RBS format, a standard type description format for Ruby %patch 6 -p1 %patch 9 -p1 %patch 12 -p1 +%patch 13 -p1 +%patch 14 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1733,6 +1744,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue Sep 03 2024 Vít Ondruch - 3.3.5-14 +- Upgrade to Ruby 3.3.5. + Resolves: rhbz#2309364 + * Mon Jul 29 2024 Jun Aruga - 3.3.4-13 - Add systemtap-sdt-devel to build Ruby with systemtap sdt header files. Co-authored-by: Lumír Balhar diff --git a/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch b/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch new file mode 100644 index 0000000..c700539 --- /dev/null +++ b/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch @@ -0,0 +1,45 @@ +From 2daad257bee7a500e18ebe553e79487b267fb140 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Mon, 12 Aug 2024 20:18:34 +0900 +Subject: [PATCH] Avoid another race condition of open mode + +Instead, just open in CREATE and APPEND mode. +Also, move the workaround for old Solaris as fallback to retry. +--- + lib/rubygems.rb | 14 +++++--------- + 1 file changed, 5 insertions(+), 9 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index 2b52cde0a749..c51ba69203cb 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -778,24 +778,20 @@ def self.open_file(path, flags, &block) + File.open(path, flags, &block) + end + ++ MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT # :nodoc: ++ + ## + # Open a file with given flags, and protect access with flock + + def self.open_file_with_flock(path, &block) +- flags = File.exist?(path) ? "r+" : "a+" +- +- File.open(path, flags) do |io| ++ File.open(path, MODE_TO_FLOCK) do |io| + begin + io.flock(File::LOCK_EX) + rescue Errno::ENOSYS, Errno::ENOTSUP ++ rescue Errno::ENOLCK # NFS ++ raise unless Thread.main == Thread.current + end + yield io +- rescue Errno::ENOLCK # NFS +- if Thread.main != Thread.current +- raise +- else +- open_file(path, flags, &block) +- end + end + end + diff --git a/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch b/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch new file mode 100644 index 0000000..0af11cf --- /dev/null +++ b/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch @@ -0,0 +1,183 @@ +From ace303c2d7bc0d98407e5e8b1ca77de07aa0eb75 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 13 Aug 2024 17:19:41 +0900 +Subject: [PATCH 1/3] Remove the lock file for binstubs + +https://github.com/rubygems/rubygems/pull/7806#issuecomment-2241662488 +--- + lib/rubygems.rb | 2 +- + lib/rubygems/installer.rb | 3 ++- + test/rubygems/test_gem_installer.rb | 10 ++++++++++ + 3 files changed, 13 insertions(+), 2 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index bd9f240e2091..7626ccfdf0d6 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -778,7 +778,7 @@ def self.open_file(path, flags, &block) + File.open(path, flags, &block) + end + +- MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT # :nodoc: ++ MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT | IO::SHARE_DELETE | IO::BINARY # :nodoc: + + ## + # Open a file with given flags, and protect access with flock +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index d558c0be2bfa..8f95bab733f8 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -538,7 +538,7 @@ def generate_plugins # :nodoc: + def generate_bin_script(filename, bindir) + bin_script_path = File.join bindir, formatted_program_filename(filename) + +- Gem.open_file_with_flock("#{bin_script_path}.lock") do ++ Gem.open_file_with_flock("#{bin_script_path}.lock") do |lock| + require "fileutils" + FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers + +@@ -546,6 +546,7 @@ def generate_bin_script(filename, bindir) + file.write app_script_text(filename) + file.chmod(options[:prog_mode] || 0o755) + end ++ File.unlink(lock.path) + end + + verbose bin_script_path +diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb +index a61d1b6fff28..2f4ff7349db4 100644 +--- a/test/rubygems/test_gem_installer.rb ++++ b/test/rubygems/test_gem_installer.rb +@@ -1083,6 +1083,8 @@ def test_install_creates_working_binstub + end + + assert_match(/ran executable/, e.message) ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_conflicting_binstubs +@@ -1131,6 +1133,8 @@ def test_conflicting_binstubs + # We expect the bin stub to activate the version that actually contains + # the binstub. + assert_match("I have an executable", e.message) ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_install_creates_binstub_that_understand_version +@@ -1160,6 +1164,8 @@ def test_install_creates_binstub_that_understand_version + end + + assert_includes(e.message, "can't find gem a (= 3.0)") ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_install_creates_binstub_that_prefers_user_installed_gem_to_default +@@ -1192,6 +1198,8 @@ def test_install_creates_binstub_that_prefers_user_installed_gem_to_default + end + + assert_equal(e.message, "ran executable") ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_install_creates_binstub_that_dont_trust_encoding +@@ -1222,6 +1230,8 @@ def test_install_creates_binstub_that_dont_trust_encoding + end + + assert_match(/ran executable/, e.message) ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_install_with_no_prior_files + +From fa0700e0f52827ae05da59a331a2917a12c09b8a Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Thu, 15 Aug 2024 16:20:46 +0900 +Subject: [PATCH 2/3] Workaround for TruffleRuby + +--- + lib/rubygems.rb | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index 7626ccfdf0d6..9d40fcc2f77a 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -778,7 +778,9 @@ def self.open_file(path, flags, &block) + File.open(path, flags, &block) + end + +- MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT | IO::SHARE_DELETE | IO::BINARY # :nodoc: ++ mode = IO::RDONLY | IO::APPEND | IO::CREAT | IO::BINARY ++ mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE) ++ MODE_TO_FLOCK = mode # :nodoc: + + ## + # Open a file with given flags, and protect access with flock + +From 6548e7aa17186687d0a8b99571885f148363016d Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Fri, 16 Aug 2024 20:19:22 +0900 +Subject: [PATCH 3/3] Ensure that the lock file will be removed + +--- + lib/rubygems/installer.rb | 3 ++- + test/rubygems/test_gem_installer.rb | 27 +++++++++++++++++++++++++++ + 2 files changed, 29 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb +index 8f95bab733f8..1085f73fca53 100644 +--- a/lib/rubygems/installer.rb ++++ b/lib/rubygems/installer.rb +@@ -546,7 +546,8 @@ def generate_bin_script(filename, bindir) + file.write app_script_text(filename) + file.chmod(options[:prog_mode] || 0o755) + end +- File.unlink(lock.path) ++ ensure ++ FileUtils.rm_f lock.path + end + + verbose bin_script_path +diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb +index 2f4ff7349db4..ad5b1a244e80 100644 +--- a/test/rubygems/test_gem_installer.rb ++++ b/test/rubygems/test_gem_installer.rb +@@ -1234,6 +1234,33 @@ def test_install_creates_binstub_that_dont_trust_encoding + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + ++ def test_install_does_not_leave_lockfile_for_binstub ++ installer = util_setup_installer ++ ++ installer.wrappers = true ++ ++ File.class_eval do ++ alias_method :original_chmod, :chmod ++ define_method(:chmod) do |mode| ++ original_chmod(mode) ++ raise Gem::Ext::BuildError if path.end_with?("/executable") ++ end ++ end ++ ++ assert_raise(Gem::Ext::BuildError) do ++ installer.install ++ end ++ ++ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) ++ # assert_path_not_exist(File.join(installer.bin_dir, "executable")) ++ ensure ++ File.class_eval do ++ remove_method :chmod ++ alias_method :chmod, :original_chmod ++ remove_method :original_chmod ++ end ++ end ++ + def test_install_with_no_prior_files + installer = util_setup_installer + diff --git a/sources b/sources index 88156f2..001c1d3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.4.tar.xz) = b26461a13ff82a08a282f10108028bb2a2e4a28da6182a291062fc54089c6655d79c22cc69d59156f9b11cb10a17fe8c69d489343fbae123a45f03361b95c9eb +SHA512 (ruby-3.3.5.tar.xz) = dd5c6a7f74854e143e0ca46b9d7c0d1983fc4886f5f733cd108345dbf4b21f61ad978ad6806e05a57b7af28fd9216dd38d7145808188bbb3695a7f3a4eda3883 From 8daf7ccb7251e1f3fe2981f03fff49729643e5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 13 Sep 2024 16:26:26 +0200 Subject: [PATCH 50/83] Fix Bundler `--local` option Resolves: rhbz#2311898 --- ...ng-the-network-when-default-gems-are.patch | 372 ++++++++++++++++++ ruby.spec | 11 +- 2 files changed, 382 insertions(+), 1 deletion(-) create mode 100644 bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch diff --git a/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch b/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch new file mode 100644 index 0000000..72939c0 --- /dev/null +++ b/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch @@ -0,0 +1,372 @@ +From cd2ad8c881b68b0c76da865c316c07dba28d2285 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 16:41:34 +0200 +Subject: [PATCH 1/7] Simplify handling default gem caching + +By the time `cached_gem` is called, default gem cache has already been +handled. So no need to try redownload it again, it's enough to check the +cache location directly. +--- + bundler/lib/bundler/source/rubygems.rb | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) + +diff --git a/bundler/lib/bundler/source/rubygems.rb b/bundler/lib/bundler/source/rubygems.rb +index 1085fdc2d89f..31815ea63a37 100644 +--- a/bundler/lib/bundler/source/rubygems.rb ++++ b/bundler/lib/bundler/source/rubygems.rb +@@ -223,11 +223,12 @@ def cache(spec, custom_path = nil) + end + + def cached_built_in_gem(spec) +- cached_path = cached_path(spec) ++ cached_path = cached_gem(spec) + if cached_path.nil? + remote_spec = remote_specs.search(spec).first + if remote_spec + cached_path = fetch_gem(remote_spec) ++ spec.remote = remote_spec.remote + else + Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it." + end +@@ -324,14 +325,6 @@ def remotes_for_spec(spec) + end + + def cached_gem(spec) +- if spec.default_gem? +- cached_built_in_gem(spec) +- else +- cached_path(spec) +- end +- end +- +- def cached_path(spec) + global_cache_path = download_cache_path(spec) + caches << global_cache_path if global_cache_path + + +From 67f3dbdc2b8a8d67db4e4d7ccd01e92f9f30b317 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 17:09:20 +0200 +Subject: [PATCH 2/7] Complete spec + +--- + bundler/spec/bundler/cache/gems_spec.rb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb +index 8f81d2d45e9e..1f3b22b4f823 100644 +--- a/bundler/spec/bundler/cache/gems_spec.rb ++++ b/bundler/spec/bundler/cache/gems_spec.rb +@@ -149,9 +149,10 @@ + end + + context "when a remote gem is not available for caching" do +- it "uses builtin gems when installing to system gems" do ++ it "warsn, but uses builtin gems when installing to system gems" do + bundle "config set path.system true" + install_gemfile %(source "https://gem.repo1"; gem 'json', '#{default_json_version}'), verbose: true ++ expect(err).to include("json-#{default_json_version} is built in to Ruby, and can't be cached") + expect(out).to include("Using json #{default_json_version}") + end + + +From c683f189a5de65e3aee787020e0692e7fa23e1ef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 18:50:09 +0200 +Subject: [PATCH 3/7] Consistently access install options through symbol keys + +--- + bundler/lib/bundler/installer.rb | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb +index 485782d1b410..8868fc772f22 100644 +--- a/bundler/lib/bundler/installer.rb ++++ b/bundler/lib/bundler/installer.rb +@@ -194,7 +194,7 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) + # that said, it's a rare situation (other than rake), and parallel + # installation is SO MUCH FASTER. so we let people opt in. + def install(options) +- force = options["force"] ++ force = options[:force] + jobs = installation_parallelization(options) + install_in_parallel jobs, options[:standalone], force + end +@@ -247,9 +247,9 @@ def install_in_parallel(size, standalone, force = false) + + # returns whether or not a re-resolve was needed + def resolve_if_needed(options) +- @definition.prefer_local! if options["prefer-local"] ++ @definition.prefer_local! if options[:"prefer-local"] + +- if options["local"] || (@definition.no_resolve_needed? && !@definition.missing_specs?) ++ if options[:local] || (@definition.no_resolve_needed? && !@definition.missing_specs?) + @definition.resolve_with_cache! + false + else + +From 088ea59a084e25eefdf3bc05a2fcc41593ee0271 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 18:58:01 +0200 +Subject: [PATCH 4/7] Inline a private method + +Removes an (in my opinion) excessive indirection and handles options +more consistently. +--- + bundler/lib/bundler/installer.rb | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) + +diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb +index 8868fc772f22..6c07d2328b00 100644 +--- a/bundler/lib/bundler/installer.rb ++++ b/bundler/lib/bundler/installer.rb +@@ -194,9 +194,13 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) + # that said, it's a rare situation (other than rake), and parallel + # installation is SO MUCH FASTER. so we let people opt in. + def install(options) ++ standalone = options[:standalone] + force = options[:force] + jobs = installation_parallelization(options) +- install_in_parallel jobs, options[:standalone], force ++ spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force) ++ spec_installations.each do |installation| ++ post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? ++ end + end + + def installation_parallelization(options) +@@ -238,13 +242,6 @@ def ensure_specs_are_compatible! + end + end + +- def install_in_parallel(size, standalone, force = false) +- spec_installations = ParallelInstaller.call(self, @definition.specs, size, standalone, force) +- spec_installations.each do |installation| +- post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? +- end +- end +- + # returns whether or not a re-resolve was needed + def resolve_if_needed(options) + @definition.prefer_local! if options[:"prefer-local"] + +From 0c047262cf14806016f60969796840388dd678dd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 19:07:31 +0200 +Subject: [PATCH 5/7] Fix spec to setup a default gem correctly + +Looking at the description is something that used to be done a long time +ago. +--- + bundler/spec/bundler/cache/gems_spec.rb | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb +index 1f3b22b4f823..23e4cc7083fa 100644 +--- a/bundler/spec/bundler/cache/gems_spec.rb ++++ b/bundler/spec/bundler/cache/gems_spec.rb +@@ -134,9 +134,7 @@ + end + + it "doesn't make remote request after caching the gem" do +- build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache") do |s| +- s.summary = "This builtin_gem is bundled with Ruby" +- end ++ build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache"), default: true + + install_gemfile <<-G + source "https://gem.repo2" + +From 32d46da6e77cd5f49b83ddf538bc26471c363dbe Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 19:14:15 +0200 +Subject: [PATCH 6/7] Improve spec + +The behavior it's testing is independent from the bundle path being +used. +--- + bundler/spec/bundler/cache/gems_spec.rb | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb +index 23e4cc7083fa..44de86fb66e3 100644 +--- a/bundler/spec/bundler/cache/gems_spec.rb ++++ b/bundler/spec/bundler/cache/gems_spec.rb +@@ -103,8 +103,7 @@ + end + end + +- it "uses remote gems when installing to system gems" do +- bundle "config set path.system true" ++ it "uses remote gems when installing" do + install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true + expect(out).to include("Installing json #{default_json_version}") + end + +From 4d4c49d8368997a274b8c8069ef21072792d0350 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 12 Sep 2024 19:24:46 +0200 +Subject: [PATCH 7/7] Fix `--local` hitting the network when default gems are + included + +--- + bundler/lib/bundler/installer.rb | 3 ++- + bundler/lib/bundler/installer/gem_installer.rb | 6 ++++-- + bundler/lib/bundler/installer/parallel_installer.rb | 5 +++-- + bundler/lib/bundler/source/rubygems.rb | 6 +++--- + bundler/spec/bundler/bundler/installer/gem_installer_spec.rb | 7 ++++--- + bundler/spec/bundler/cache/gems_spec.rb | 5 +++++ + 6 files changed, 21 insertions(+), 11 deletions(-) + +diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb +index 6c07d2328b00..b65546a10a91 100644 +--- a/bundler/lib/bundler/installer.rb ++++ b/bundler/lib/bundler/installer.rb +@@ -196,8 +196,9 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) + def install(options) + standalone = options[:standalone] + force = options[:force] ++ local = options[:local] + jobs = installation_parallelization(options) +- spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force) ++ spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force, local: local) + spec_installations.each do |installation| + post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? + end +diff --git a/bundler/lib/bundler/installer/gem_installer.rb b/bundler/lib/bundler/installer/gem_installer.rb +index a7770eb7e0b6..1da91857bd57 100644 +--- a/bundler/lib/bundler/installer/gem_installer.rb ++++ b/bundler/lib/bundler/installer/gem_installer.rb +@@ -2,14 +2,15 @@ + + module Bundler + class GemInstaller +- attr_reader :spec, :standalone, :worker, :force, :installer ++ attr_reader :spec, :standalone, :worker, :force, :local, :installer + +- def initialize(spec, installer, standalone = false, worker = 0, force = false) ++ def initialize(spec, installer, standalone = false, worker = 0, force = false, local = false) + @spec = spec + @installer = installer + @standalone = standalone + @worker = worker + @force = force ++ @local = local + end + + def install_from_spec +@@ -54,6 +55,7 @@ def install + spec.source.install( + spec, + force: force, ++ local: local, + build_args: Array(spec_settings), + previous_spec: previous_spec, + ) +diff --git a/bundler/lib/bundler/installer/parallel_installer.rb b/bundler/lib/bundler/installer/parallel_installer.rb +index e745088f81ad..d10e5ec92403 100644 +--- a/bundler/lib/bundler/installer/parallel_installer.rb ++++ b/bundler/lib/bundler/installer/parallel_installer.rb +@@ -68,11 +68,12 @@ def self.call(*args, **kwargs) + + attr_reader :size + +- def initialize(installer, all_specs, size, standalone, force, skip: nil) ++ def initialize(installer, all_specs, size, standalone, force, local: false, skip: nil) + @installer = installer + @size = size + @standalone = standalone + @force = force ++ @local = local + @specs = all_specs.map {|s| SpecInstallation.new(s) } + @specs.each do |spec_install| + spec_install.state = :installed if skip.include?(spec_install.name) +@@ -127,7 +128,7 @@ def worker_pool + def do_install(spec_install, worker_num) + Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL, spec_install) + gem_installer = Bundler::GemInstaller.new( +- spec_install.spec, @installer, @standalone, worker_num, @force ++ spec_install.spec, @installer, @standalone, worker_num, @force, @local + ) + success, message = gem_installer.install_from_spec + if success +diff --git a/bundler/lib/bundler/source/rubygems.rb b/bundler/lib/bundler/source/rubygems.rb +index 31815ea63a37..3b6ef8bd580d 100644 +--- a/bundler/lib/bundler/source/rubygems.rb ++++ b/bundler/lib/bundler/source/rubygems.rb +@@ -148,7 +148,7 @@ def specs + end + + def install(spec, options = {}) +- if (spec.default_gem? && !cached_built_in_gem(spec)) || (installed?(spec) && !options[:force]) ++ if (spec.default_gem? && !cached_built_in_gem(spec, local: options[:local])) || (installed?(spec) && !options[:force]) + print_using_message "Using #{version_message(spec, options[:previous_spec])}" + return nil # no post-install message + end +@@ -222,9 +222,9 @@ def cache(spec, custom_path = nil) + raise InstallError, e.message + end + +- def cached_built_in_gem(spec) ++ def cached_built_in_gem(spec, local: false) + cached_path = cached_gem(spec) +- if cached_path.nil? ++ if cached_path.nil? && !local + remote_spec = remote_specs.search(spec).first + if remote_spec + cached_path = fetch_gem(remote_spec) +diff --git a/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb b/bundler/spec/bundler/installer/gem_installer_spec.rb +index ea506c36c8bf..6583bd8181b1 100644 +--- a/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb ++++ b/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb +@@ -7,6 +7,7 @@ + let(:installer) { instance_double("Installer", definition: definition) } + let(:spec_source) { instance_double("SpecSource") } + let(:spec) { instance_double("Specification", name: "dummy", version: "0.0.1", loaded_from: "dummy", source: spec_source) } ++ let(:base_options) { { force: false, local: false, previous_spec: nil } } + + subject { described_class.new(spec, installer) } + +@@ -14,7 +15,7 @@ + it "invokes install method with empty build_args" do + allow(spec_source).to receive(:install).with( + spec, +- { force: false, build_args: [], previous_spec: nil } ++ base_options.merge(build_args: []) + ) + subject.install_from_spec + end +@@ -28,7 +29,7 @@ + allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy") + expect(spec_source).to receive(:install).with( + spec, +- { force: false, build_args: ["--with-dummy-config=dummy"], previous_spec: nil } ++ base_options.merge(build_args: ["--with-dummy-config=dummy"]) + ) + subject.install_from_spec + end +@@ -42,7 +43,7 @@ + allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy --with-another-dummy-config") + expect(spec_source).to receive(:install).with( + spec, +- { force: false, build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"], previous_spec: nil } ++ base_options.merge(build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"]) + ) + subject.install_from_spec + end +diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb +index 44de86fb66e3..0177a4ef0628 100644 +--- a/bundler/spec/bundler/cache/gems_spec.rb ++++ b/bundler/spec/bundler/cache/gems_spec.rb +@@ -108,6 +108,11 @@ + expect(out).to include("Installing json #{default_json_version}") + end + ++ it "does not use remote gems when installing with --local flag" do ++ install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true, local: true ++ expect(out).to include("Using json #{default_json_version}") ++ end ++ + it "caches remote and builtin gems" do + install_gemfile <<-G + source "https://gem.repo2" diff --git a/ruby.spec b/ruby.spec index 08e4cd7..0c5454f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -171,7 +171,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 14%{?dist} +Release: 15%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -289,6 +289,10 @@ Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.p Patch13: rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch # https://github.com/rubygems/rubygems/pull/7939 Patch14: rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch +# Fix Bundler reaching to the interned with `--local` option. +# https://github.com/rubygems/rubygems/issues/8025 +# https://github.com/rubygems/rubygems/pull/8027 +Patch15: bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -768,6 +772,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 12 -p1 %patch 13 -p1 %patch 14 -p1 +%patch 15 -p2 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1744,6 +1749,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Sep 13 2024 Vít Ondruch - 3.3.5-15 +- Fix Bundler `--local` option + Resolves: rhbz#2311898 + * Tue Sep 03 2024 Vít Ondruch - 3.3.5-14 - Upgrade to Ruby 3.3.5. Resolves: rhbz#2309364 From f241947e6c8a9e59b78aaf6e80200bf57e11b0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 11 Nov 2024 17:19:28 +0100 Subject: [PATCH 51/83] Upgrade to Ruby 3.3.6. --- ...ng-the-network-when-default-gems-are.patch | 372 ------------------ ruby-2.3.0-ruby_version.patch | 4 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 2 +- ruby.spec | 69 ++-- ...-another-race-condition-of-open-mode.patch | 45 --- ...17-Remove-the-lock-file-for-binstubs.patch | 183 --------- sources | 2 +- 7 files changed, 43 insertions(+), 634 deletions(-) delete mode 100644 bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch delete mode 100644 rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch delete mode 100644 rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch diff --git a/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch b/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch deleted file mode 100644 index 72939c0..0000000 --- a/bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch +++ /dev/null @@ -1,372 +0,0 @@ -From cd2ad8c881b68b0c76da865c316c07dba28d2285 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 16:41:34 +0200 -Subject: [PATCH 1/7] Simplify handling default gem caching - -By the time `cached_gem` is called, default gem cache has already been -handled. So no need to try redownload it again, it's enough to check the -cache location directly. ---- - bundler/lib/bundler/source/rubygems.rb | 11 ++--------- - 1 file changed, 2 insertions(+), 9 deletions(-) - -diff --git a/bundler/lib/bundler/source/rubygems.rb b/bundler/lib/bundler/source/rubygems.rb -index 1085fdc2d89f..31815ea63a37 100644 ---- a/bundler/lib/bundler/source/rubygems.rb -+++ b/bundler/lib/bundler/source/rubygems.rb -@@ -223,11 +223,12 @@ def cache(spec, custom_path = nil) - end - - def cached_built_in_gem(spec) -- cached_path = cached_path(spec) -+ cached_path = cached_gem(spec) - if cached_path.nil? - remote_spec = remote_specs.search(spec).first - if remote_spec - cached_path = fetch_gem(remote_spec) -+ spec.remote = remote_spec.remote - else - Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it." - end -@@ -324,14 +325,6 @@ def remotes_for_spec(spec) - end - - def cached_gem(spec) -- if spec.default_gem? -- cached_built_in_gem(spec) -- else -- cached_path(spec) -- end -- end -- -- def cached_path(spec) - global_cache_path = download_cache_path(spec) - caches << global_cache_path if global_cache_path - - -From 67f3dbdc2b8a8d67db4e4d7ccd01e92f9f30b317 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 17:09:20 +0200 -Subject: [PATCH 2/7] Complete spec - ---- - bundler/spec/bundler/cache/gems_spec.rb | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb -index 8f81d2d45e9e..1f3b22b4f823 100644 ---- a/bundler/spec/bundler/cache/gems_spec.rb -+++ b/bundler/spec/bundler/cache/gems_spec.rb -@@ -149,9 +149,10 @@ - end - - context "when a remote gem is not available for caching" do -- it "uses builtin gems when installing to system gems" do -+ it "warsn, but uses builtin gems when installing to system gems" do - bundle "config set path.system true" - install_gemfile %(source "https://gem.repo1"; gem 'json', '#{default_json_version}'), verbose: true -+ expect(err).to include("json-#{default_json_version} is built in to Ruby, and can't be cached") - expect(out).to include("Using json #{default_json_version}") - end - - -From c683f189a5de65e3aee787020e0692e7fa23e1ef Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 18:50:09 +0200 -Subject: [PATCH 3/7] Consistently access install options through symbol keys - ---- - bundler/lib/bundler/installer.rb | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb -index 485782d1b410..8868fc772f22 100644 ---- a/bundler/lib/bundler/installer.rb -+++ b/bundler/lib/bundler/installer.rb -@@ -194,7 +194,7 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) - # that said, it's a rare situation (other than rake), and parallel - # installation is SO MUCH FASTER. so we let people opt in. - def install(options) -- force = options["force"] -+ force = options[:force] - jobs = installation_parallelization(options) - install_in_parallel jobs, options[:standalone], force - end -@@ -247,9 +247,9 @@ def install_in_parallel(size, standalone, force = false) - - # returns whether or not a re-resolve was needed - def resolve_if_needed(options) -- @definition.prefer_local! if options["prefer-local"] -+ @definition.prefer_local! if options[:"prefer-local"] - -- if options["local"] || (@definition.no_resolve_needed? && !@definition.missing_specs?) -+ if options[:local] || (@definition.no_resolve_needed? && !@definition.missing_specs?) - @definition.resolve_with_cache! - false - else - -From 088ea59a084e25eefdf3bc05a2fcc41593ee0271 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 18:58:01 +0200 -Subject: [PATCH 4/7] Inline a private method - -Removes an (in my opinion) excessive indirection and handles options -more consistently. ---- - bundler/lib/bundler/installer.rb | 13 +++++-------- - 1 file changed, 5 insertions(+), 8 deletions(-) - -diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb -index 8868fc772f22..6c07d2328b00 100644 ---- a/bundler/lib/bundler/installer.rb -+++ b/bundler/lib/bundler/installer.rb -@@ -194,9 +194,13 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) - # that said, it's a rare situation (other than rake), and parallel - # installation is SO MUCH FASTER. so we let people opt in. - def install(options) -+ standalone = options[:standalone] - force = options[:force] - jobs = installation_parallelization(options) -- install_in_parallel jobs, options[:standalone], force -+ spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force) -+ spec_installations.each do |installation| -+ post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? -+ end - end - - def installation_parallelization(options) -@@ -238,13 +242,6 @@ def ensure_specs_are_compatible! - end - end - -- def install_in_parallel(size, standalone, force = false) -- spec_installations = ParallelInstaller.call(self, @definition.specs, size, standalone, force) -- spec_installations.each do |installation| -- post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? -- end -- end -- - # returns whether or not a re-resolve was needed - def resolve_if_needed(options) - @definition.prefer_local! if options[:"prefer-local"] - -From 0c047262cf14806016f60969796840388dd678dd Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 19:07:31 +0200 -Subject: [PATCH 5/7] Fix spec to setup a default gem correctly - -Looking at the description is something that used to be done a long time -ago. ---- - bundler/spec/bundler/cache/gems_spec.rb | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb -index 1f3b22b4f823..23e4cc7083fa 100644 ---- a/bundler/spec/bundler/cache/gems_spec.rb -+++ b/bundler/spec/bundler/cache/gems_spec.rb -@@ -134,9 +134,7 @@ - end - - it "doesn't make remote request after caching the gem" do -- build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache") do |s| -- s.summary = "This builtin_gem is bundled with Ruby" -- end -+ build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache"), default: true - - install_gemfile <<-G - source "https://gem.repo2" - -From 32d46da6e77cd5f49b83ddf538bc26471c363dbe Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 19:14:15 +0200 -Subject: [PATCH 6/7] Improve spec - -The behavior it's testing is independent from the bundle path being -used. ---- - bundler/spec/bundler/cache/gems_spec.rb | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb -index 23e4cc7083fa..44de86fb66e3 100644 ---- a/bundler/spec/bundler/cache/gems_spec.rb -+++ b/bundler/spec/bundler/cache/gems_spec.rb -@@ -103,8 +103,7 @@ - end - end - -- it "uses remote gems when installing to system gems" do -- bundle "config set path.system true" -+ it "uses remote gems when installing" do - install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true - expect(out).to include("Installing json #{default_json_version}") - end - -From 4d4c49d8368997a274b8c8069ef21072792d0350 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?David=20Rodr=C3=ADguez?= -Date: Thu, 12 Sep 2024 19:24:46 +0200 -Subject: [PATCH 7/7] Fix `--local` hitting the network when default gems are - included - ---- - bundler/lib/bundler/installer.rb | 3 ++- - bundler/lib/bundler/installer/gem_installer.rb | 6 ++++-- - bundler/lib/bundler/installer/parallel_installer.rb | 5 +++-- - bundler/lib/bundler/source/rubygems.rb | 6 +++--- - bundler/spec/bundler/bundler/installer/gem_installer_spec.rb | 7 ++++--- - bundler/spec/bundler/cache/gems_spec.rb | 5 +++++ - 6 files changed, 21 insertions(+), 11 deletions(-) - -diff --git a/bundler/lib/bundler/installer.rb b/bundler/lib/bundler/installer.rb -index 6c07d2328b00..b65546a10a91 100644 ---- a/bundler/lib/bundler/installer.rb -+++ b/bundler/lib/bundler/installer.rb -@@ -196,8 +196,9 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) - def install(options) - standalone = options[:standalone] - force = options[:force] -+ local = options[:local] - jobs = installation_parallelization(options) -- spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force) -+ spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force, local: local) - spec_installations.each do |installation| - post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? - end -diff --git a/bundler/lib/bundler/installer/gem_installer.rb b/bundler/lib/bundler/installer/gem_installer.rb -index a7770eb7e0b6..1da91857bd57 100644 ---- a/bundler/lib/bundler/installer/gem_installer.rb -+++ b/bundler/lib/bundler/installer/gem_installer.rb -@@ -2,14 +2,15 @@ - - module Bundler - class GemInstaller -- attr_reader :spec, :standalone, :worker, :force, :installer -+ attr_reader :spec, :standalone, :worker, :force, :local, :installer - -- def initialize(spec, installer, standalone = false, worker = 0, force = false) -+ def initialize(spec, installer, standalone = false, worker = 0, force = false, local = false) - @spec = spec - @installer = installer - @standalone = standalone - @worker = worker - @force = force -+ @local = local - end - - def install_from_spec -@@ -54,6 +55,7 @@ def install - spec.source.install( - spec, - force: force, -+ local: local, - build_args: Array(spec_settings), - previous_spec: previous_spec, - ) -diff --git a/bundler/lib/bundler/installer/parallel_installer.rb b/bundler/lib/bundler/installer/parallel_installer.rb -index e745088f81ad..d10e5ec92403 100644 ---- a/bundler/lib/bundler/installer/parallel_installer.rb -+++ b/bundler/lib/bundler/installer/parallel_installer.rb -@@ -68,11 +68,12 @@ def self.call(*args, **kwargs) - - attr_reader :size - -- def initialize(installer, all_specs, size, standalone, force, skip: nil) -+ def initialize(installer, all_specs, size, standalone, force, local: false, skip: nil) - @installer = installer - @size = size - @standalone = standalone - @force = force -+ @local = local - @specs = all_specs.map {|s| SpecInstallation.new(s) } - @specs.each do |spec_install| - spec_install.state = :installed if skip.include?(spec_install.name) -@@ -127,7 +128,7 @@ def worker_pool - def do_install(spec_install, worker_num) - Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL, spec_install) - gem_installer = Bundler::GemInstaller.new( -- spec_install.spec, @installer, @standalone, worker_num, @force -+ spec_install.spec, @installer, @standalone, worker_num, @force, @local - ) - success, message = gem_installer.install_from_spec - if success -diff --git a/bundler/lib/bundler/source/rubygems.rb b/bundler/lib/bundler/source/rubygems.rb -index 31815ea63a37..3b6ef8bd580d 100644 ---- a/bundler/lib/bundler/source/rubygems.rb -+++ b/bundler/lib/bundler/source/rubygems.rb -@@ -148,7 +148,7 @@ def specs - end - - def install(spec, options = {}) -- if (spec.default_gem? && !cached_built_in_gem(spec)) || (installed?(spec) && !options[:force]) -+ if (spec.default_gem? && !cached_built_in_gem(spec, local: options[:local])) || (installed?(spec) && !options[:force]) - print_using_message "Using #{version_message(spec, options[:previous_spec])}" - return nil # no post-install message - end -@@ -222,9 +222,9 @@ def cache(spec, custom_path = nil) - raise InstallError, e.message - end - -- def cached_built_in_gem(spec) -+ def cached_built_in_gem(spec, local: false) - cached_path = cached_gem(spec) -- if cached_path.nil? -+ if cached_path.nil? && !local - remote_spec = remote_specs.search(spec).first - if remote_spec - cached_path = fetch_gem(remote_spec) -diff --git a/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb b/bundler/spec/bundler/installer/gem_installer_spec.rb -index ea506c36c8bf..6583bd8181b1 100644 ---- a/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb -+++ b/bundler/spec/bundler/bundler/installer/gem_installer_spec.rb -@@ -7,6 +7,7 @@ - let(:installer) { instance_double("Installer", definition: definition) } - let(:spec_source) { instance_double("SpecSource") } - let(:spec) { instance_double("Specification", name: "dummy", version: "0.0.1", loaded_from: "dummy", source: spec_source) } -+ let(:base_options) { { force: false, local: false, previous_spec: nil } } - - subject { described_class.new(spec, installer) } - -@@ -14,7 +15,7 @@ - it "invokes install method with empty build_args" do - allow(spec_source).to receive(:install).with( - spec, -- { force: false, build_args: [], previous_spec: nil } -+ base_options.merge(build_args: []) - ) - subject.install_from_spec - end -@@ -28,7 +29,7 @@ - allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy") - expect(spec_source).to receive(:install).with( - spec, -- { force: false, build_args: ["--with-dummy-config=dummy"], previous_spec: nil } -+ base_options.merge(build_args: ["--with-dummy-config=dummy"]) - ) - subject.install_from_spec - end -@@ -42,7 +43,7 @@ - allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy --with-another-dummy-config") - expect(spec_source).to receive(:install).with( - spec, -- { force: false, build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"], previous_spec: nil } -+ base_options.merge(build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"]) - ) - subject.install_from_spec - end -diff --git a/bundler/spec/bundler/cache/gems_spec.rb b/bundler/spec/cache/gems_spec.rb -index 44de86fb66e3..0177a4ef0628 100644 ---- a/bundler/spec/bundler/cache/gems_spec.rb -+++ b/bundler/spec/bundler/cache/gems_spec.rb -@@ -108,6 +108,11 @@ - expect(out).to include("Installing json #{default_json_version}") - end - -+ it "does not use remote gems when installing with --local flag" do -+ install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true, local: true -+ expect(out).to include("Using json #{default_json_version}") -+ end -+ - it "caches remote and builtin gems" do - install_gemfile <<-G - source "https://gem.repo2" diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 50b4466..68782cd 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -227,7 +227,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1353,7 +1353,8 @@ def test_self_use_paths +@@ -1365,7 +1365,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, ".gem", Gem.ruby_engine] @@ -237,7 +237,7 @@ index b25068405d..e9fef4a311 100644 FileUtils.mkdir_p File.join(parts) -@@ -1429,7 +1430,7 @@ def test_self_vendor_dir +@@ -1441,7 +1442,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, "vendor")) do expected = File.join RbConfig::CONFIG["vendordir"], "gems", diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 309507f..0f32243 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -58,7 +58,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1722,10 +1722,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1724,10 +1724,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); diff --git a/ruby.spec b/ruby.spec index 0c5454f..1728e85 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 3 -%global teeny_version 5 +%global teeny_version 6 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,25 +27,27 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.5.16 +%global rubygems_version 3.5.22 %global rubygems_molinillo_version 0.8.0 -%global rubygems_net_http_version 0.4.0 +%global rubygems_net_http_version 0.4.1 %global rubygems_net_protocol_version 0.2.2 %global rubygems_optparse_version 0.4.0 -%global rubygems_resolv_version 0.3.0 +%global rubygems_resolv_version 0.4.0 +%global rubygems_securerandom_version 0.3.1 %global rubygems_timeout_version 0.4.1 %global rubygems_tsort_version 0.2.0 -%global rubygems_uri_version 0.13.0 +%global rubygems_uri_version 0.13.1 # Default gems. -%global bundler_version 2.5.16 +%global bundler_version 2.5.22 %global bundler_connection_pool_version 2.4.1 %global bundler_fileutils_version 1.7.2 -%global bundler_net_http_persistent_version 4.0.2 +%global bundler_net_http_persistent_version 4.0.4 %global bundler_pub_grub_version 0.5.0 +%global bundler_securerandom_version 0.3.1 %global bundler_thor_version 1.3.0 %global bundler_tsort_version 0.2.0 -%global bundler_uri_version 0.13.0 +%global bundler_uri_version 0.13.1 %global abbrev_version 0.1.2 %global base64_version 0.2.0 @@ -86,7 +88,7 @@ %global prettyprint_version 0.2.0 %global pstore_version 0.1.3 %global readline_version 0.0.4 -%global reline_version 0.5.7 +%global reline_version 0.5.10 %global resolv_version 0.3.0 %global resolv_replace_version 0.1.1 %global rinda_version 0.2.0 @@ -97,7 +99,7 @@ %global singleton_version 0.2.0 %global stringio_version 3.1.1 %global strscan_version 3.0.9 -%global syntax_suggest_version 2.0.0 +%global syntax_suggest_version 2.0.1 %global syslog_version 0.1.2 %global tempfile_version 0.2.1 %global time_version 0.3.0 @@ -116,12 +118,12 @@ %global bigdecimal_version 3.1.5 %global io_console_version 0.7.1 %global irb_version 1.13.1 -%global json_version 2.7.1 +%global json_version 2.7.2 %global psych_version 5.1.2 %global rdoc_version 6.6.3.1 # Bundled gems. -%global debug_version 1.9.1 +%global debug_version 1.9.2 %global net_ftp_version 0.3.4 %global net_imap_version 0.4.9.1 %global net_pop_version 0.1.2 @@ -133,7 +135,7 @@ %global racc_version 1.7.3 %global rake_version 13.1.0 %global rbs_version 3.4.0 -%global rexml_version 3.3.6 +%global rexml_version 3.3.9 %global rss_version 0.3.1 %global test_unit_version 3.6.1 %global typeprof_version 0.21.9 @@ -171,7 +173,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 15%{?dist} +Release: 16%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -280,19 +282,6 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Make sure hardeding flags are correctly applied. # https://bugs.ruby-lang.org/issues/20520 Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch -# Fix build error: -# RPM build errors: -# error: Installed (but unpackaged) file(s) found: -# /usr/bin/bundle.lock -# This would break not only Ruby itself, but allso all rubygem-packages. -# https://github.com/rubygems/rubygems/pull/7931 -Patch13: rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch -# https://github.com/rubygems/rubygems/pull/7939 -Patch14: rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch -# Fix Bundler reaching to the interned with `--local` option. -# https://github.com/rubygems/rubygems/issues/8025 -# https://github.com/rubygems/rubygems/pull/8027 -Patch15: bundler-2.5.19-Fix--local-hitting-the-network-when-default-gems-are.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -421,6 +410,7 @@ Provides: bundled(rubygem-net-http) = %{rubygems_net_http_version} Provides: bundled(rubygem-net-protocol) = %{rubygems_net_protocol_version} Provides: bundled(rubygem-optparse) = %{rubygems_optparse_version} Provides: bundled(rubygem-resolv) = %{rubygems_resolv_version} +Provides: bundled(rubygem-securerandom) = %{rubygems_securerandom_version} Provides: bundled(rubygem-timeout) = %{rubygems_timeout_version} Provides: bundled(rubygem-tsort) = %{rubygems_tsort_version} @@ -593,6 +583,7 @@ Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} +Provides: bundled(rubygem-securerandom) = %{bundler_securerandom_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -770,9 +761,6 @@ analysis result in RBS format, a standard type description format for Ruby %patch 6 -p1 %patch 9 -p1 %patch 12 -p1 -%patch 13 -p1 -%patch 14 -p1 -%patch 15 -p2 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1036,6 +1024,15 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ \"" +# SecureRandom. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Random; end; end; \ + require 'rubygems/vendor/securerandom/lib/securerandom'; \ + puts '%%{rubygems_securerandom_version}: %{rubygems_securerandom_version}'; \ + puts %Q[Gem::SecureRandom::VERSION: #{Gem::SecureRandom::VERSION}]; \ + exit 1 if Gem::SecureRandom::VERSION != '%{rubygems_securerandom_version}'; \ +\"" + # Timeout. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; end; \ @@ -1102,6 +1099,15 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ exit 1 if Gem::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ \"" +# SecureRandom. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; module Random; end; end; \ + require 'bundler/vendor/securerandom/lib/securerandom'; \ + puts '%%{bundler_securerandom_version}: %{bundler_securerandom_version}'; \ + puts %Q[Bundler::SecureRandom::VERSION: #{Bundler::SecureRandom::VERSION}]; \ + exit 1 if Bundler::SecureRandom::VERSION != '%{bundler_securerandom_version}'; \ +\"" + # Thor. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ @@ -1749,6 +1755,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Nov 11 2024 Vít Ondruch - 3.3.5-16 +- Upgrade to Ruby 3.3.6. + * Fri Sep 13 2024 Vít Ondruch - 3.3.5-15 - Fix Bundler `--local` option Resolves: rhbz#2311898 diff --git a/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch b/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch deleted file mode 100644 index c700539..0000000 --- a/rubygems-3.5.17-Avoid-another-race-condition-of-open-mode.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 2daad257bee7a500e18ebe553e79487b267fb140 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Mon, 12 Aug 2024 20:18:34 +0900 -Subject: [PATCH] Avoid another race condition of open mode - -Instead, just open in CREATE and APPEND mode. -Also, move the workaround for old Solaris as fallback to retry. ---- - lib/rubygems.rb | 14 +++++--------- - 1 file changed, 5 insertions(+), 9 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index 2b52cde0a749..c51ba69203cb 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -778,24 +778,20 @@ def self.open_file(path, flags, &block) - File.open(path, flags, &block) - end - -+ MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT # :nodoc: -+ - ## - # Open a file with given flags, and protect access with flock - - def self.open_file_with_flock(path, &block) -- flags = File.exist?(path) ? "r+" : "a+" -- -- File.open(path, flags) do |io| -+ File.open(path, MODE_TO_FLOCK) do |io| - begin - io.flock(File::LOCK_EX) - rescue Errno::ENOSYS, Errno::ENOTSUP -+ rescue Errno::ENOLCK # NFS -+ raise unless Thread.main == Thread.current - end - yield io -- rescue Errno::ENOLCK # NFS -- if Thread.main != Thread.current -- raise -- else -- open_file(path, flags, &block) -- end - end - end - diff --git a/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch b/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch deleted file mode 100644 index 0af11cf..0000000 --- a/rubygems-3.5.17-Remove-the-lock-file-for-binstubs.patch +++ /dev/null @@ -1,183 +0,0 @@ -From ace303c2d7bc0d98407e5e8b1ca77de07aa0eb75 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 13 Aug 2024 17:19:41 +0900 -Subject: [PATCH 1/3] Remove the lock file for binstubs - -https://github.com/rubygems/rubygems/pull/7806#issuecomment-2241662488 ---- - lib/rubygems.rb | 2 +- - lib/rubygems/installer.rb | 3 ++- - test/rubygems/test_gem_installer.rb | 10 ++++++++++ - 3 files changed, 13 insertions(+), 2 deletions(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index bd9f240e2091..7626ccfdf0d6 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -778,7 +778,7 @@ def self.open_file(path, flags, &block) - File.open(path, flags, &block) - end - -- MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT # :nodoc: -+ MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT | IO::SHARE_DELETE | IO::BINARY # :nodoc: - - ## - # Open a file with given flags, and protect access with flock -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index d558c0be2bfa..8f95bab733f8 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -538,7 +538,7 @@ def generate_plugins # :nodoc: - def generate_bin_script(filename, bindir) - bin_script_path = File.join bindir, formatted_program_filename(filename) - -- Gem.open_file_with_flock("#{bin_script_path}.lock") do -+ Gem.open_file_with_flock("#{bin_script_path}.lock") do |lock| - require "fileutils" - FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers - -@@ -546,6 +546,7 @@ def generate_bin_script(filename, bindir) - file.write app_script_text(filename) - file.chmod(options[:prog_mode] || 0o755) - end -+ File.unlink(lock.path) - end - - verbose bin_script_path -diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb -index a61d1b6fff28..2f4ff7349db4 100644 ---- a/test/rubygems/test_gem_installer.rb -+++ b/test/rubygems/test_gem_installer.rb -@@ -1083,6 +1083,8 @@ def test_install_creates_working_binstub - end - - assert_match(/ran executable/, e.message) -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - - def test_conflicting_binstubs -@@ -1131,6 +1133,8 @@ def test_conflicting_binstubs - # We expect the bin stub to activate the version that actually contains - # the binstub. - assert_match("I have an executable", e.message) -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - - def test_install_creates_binstub_that_understand_version -@@ -1160,6 +1164,8 @@ def test_install_creates_binstub_that_understand_version - end - - assert_includes(e.message, "can't find gem a (= 3.0)") -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - - def test_install_creates_binstub_that_prefers_user_installed_gem_to_default -@@ -1192,6 +1198,8 @@ def test_install_creates_binstub_that_prefers_user_installed_gem_to_default - end - - assert_equal(e.message, "ran executable") -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - - def test_install_creates_binstub_that_dont_trust_encoding -@@ -1222,6 +1230,8 @@ def test_install_creates_binstub_that_dont_trust_encoding - end - - assert_match(/ran executable/, e.message) -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - - def test_install_with_no_prior_files - -From fa0700e0f52827ae05da59a331a2917a12c09b8a Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 15 Aug 2024 16:20:46 +0900 -Subject: [PATCH 2/3] Workaround for TruffleRuby - ---- - lib/rubygems.rb | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems.rb b/lib/rubygems.rb -index 7626ccfdf0d6..9d40fcc2f77a 100644 ---- a/lib/rubygems.rb -+++ b/lib/rubygems.rb -@@ -778,7 +778,9 @@ def self.open_file(path, flags, &block) - File.open(path, flags, &block) - end - -- MODE_TO_FLOCK = IO::RDONLY | IO::APPEND | IO::CREAT | IO::SHARE_DELETE | IO::BINARY # :nodoc: -+ mode = IO::RDONLY | IO::APPEND | IO::CREAT | IO::BINARY -+ mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE) -+ MODE_TO_FLOCK = mode # :nodoc: - - ## - # Open a file with given flags, and protect access with flock - -From 6548e7aa17186687d0a8b99571885f148363016d Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Fri, 16 Aug 2024 20:19:22 +0900 -Subject: [PATCH 3/3] Ensure that the lock file will be removed - ---- - lib/rubygems/installer.rb | 3 ++- - test/rubygems/test_gem_installer.rb | 27 +++++++++++++++++++++++++++ - 2 files changed, 29 insertions(+), 1 deletion(-) - -diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb -index 8f95bab733f8..1085f73fca53 100644 ---- a/lib/rubygems/installer.rb -+++ b/lib/rubygems/installer.rb -@@ -546,7 +546,8 @@ def generate_bin_script(filename, bindir) - file.write app_script_text(filename) - file.chmod(options[:prog_mode] || 0o755) - end -- File.unlink(lock.path) -+ ensure -+ FileUtils.rm_f lock.path - end - - verbose bin_script_path -diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb -index 2f4ff7349db4..ad5b1a244e80 100644 ---- a/test/rubygems/test_gem_installer.rb -+++ b/test/rubygems/test_gem_installer.rb -@@ -1234,6 +1234,33 @@ def test_install_creates_binstub_that_dont_trust_encoding - assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) - end - -+ def test_install_does_not_leave_lockfile_for_binstub -+ installer = util_setup_installer -+ -+ installer.wrappers = true -+ -+ File.class_eval do -+ alias_method :original_chmod, :chmod -+ define_method(:chmod) do |mode| -+ original_chmod(mode) -+ raise Gem::Ext::BuildError if path.end_with?("/executable") -+ end -+ end -+ -+ assert_raise(Gem::Ext::BuildError) do -+ installer.install -+ end -+ -+ assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) -+ # assert_path_not_exist(File.join(installer.bin_dir, "executable")) -+ ensure -+ File.class_eval do -+ remove_method :chmod -+ alias_method :chmod, :original_chmod -+ remove_method :original_chmod -+ end -+ end -+ - def test_install_with_no_prior_files - installer = util_setup_installer - diff --git a/sources b/sources index 001c1d3..491b163 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.5.tar.xz) = dd5c6a7f74854e143e0ca46b9d7c0d1983fc4886f5f733cd108345dbf4b21f61ad978ad6806e05a57b7af28fd9216dd38d7145808188bbb3695a7f3a4eda3883 +SHA512 (ruby-3.3.6.tar.xz) = c4b86188bf539fa737932e1ba5b746bc295e7c43b2f8cca2668eb7c88aa7228e2ce9032bbcd244a7d558a11bc842445b5fbeac3503ca7d223b63c53e08dba4ab From 19423ee8d937f22a8c1bd59965ad61e9b2f246a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 19 Nov 2024 17:46:34 +0100 Subject: [PATCH 52/83] Fix version in changelog --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 1728e85..ac6c669 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1755,7 +1755,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog -* Mon Nov 11 2024 Vít Ondruch - 3.3.5-16 +* Mon Nov 11 2024 Vít Ondruch - 3.3.6-16 - Upgrade to Ruby 3.3.6. * Fri Sep 13 2024 Vít Ondruch - 3.3.5-15 From 186be743be6fa97b98f98edc739bbffbfe67e31d Mon Sep 17 00:00:00 2001 From: David Abdurachmanov Date: Fri, 22 Nov 2024 12:21:00 +0800 Subject: [PATCH 53/83] Add riscv64 information for checksec --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index ac6c669..88ea172 100644 --- a/ruby.spec +++ b/ruby.spec @@ -173,7 +173,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 16%{?dist} +Release: 17%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -968,6 +968,7 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja %define fortification_aarch64 fortified="10" fortify-able="26" %define fortification_ppc64le fortified="7" fortify-able="24" %define fortification_s390x fortified="10" fortify-able="24" +%define fortification_riscv64 fortified="10" fortify-able="26" # https://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches checksec --format=xml --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ sed -r "s//\1/" | \ @@ -1755,6 +1756,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Wed Nov 20 2024 David Abdurachmanov - 3.3.6-17 +- Add riscv64 information for checksec + * Mon Nov 11 2024 Vít Ondruch - 3.3.6-16 - Upgrade to Ruby 3.3.6. From da4a9f4b889f411ef65240da312906ce0b2db978 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Mon, 16 Dec 2024 17:16:12 +0100 Subject: [PATCH 54/83] Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. This issue was identified at the ticket RHEL-21019. https://issues.redhat.com/browse/RHEL-21019 --- ...nssl-respect-crypto-policies-tls-min.patch | 47 +++++++++++++++++++ ruby.spec | 10 +++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch diff --git a/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch b/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch new file mode 100644 index 0000000..6c7a4dd --- /dev/null +++ b/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch @@ -0,0 +1,47 @@ +From ae215a47ae1a6527bb7b8566e5bcc9430652462f Mon Sep 17 00:00:00 2001 +From: Ewoud Kohl van Wijngaarden +Date: Fri, 5 Jan 2024 15:58:59 +0100 +Subject: [PATCH] Only set min_version on OpenSSL < 1.1.0 + +Both Red Hat and Debian-like systems configure the minimum TLS version +to be 1.2 by default, but allow users to change this via configs. + +On Red Hat and derivatives this happens via crypto-policies[1], which in +writes settings in /etc/crypto-policies/back-ends/opensslcnf.config. +Most notably, it sets TLS.MinProtocol there. For Debian there's +MinProtocol in /etc/ssl/openssl.cnf. Both default to TLSv1.2, which is +considered a secure default. + +In constrast, the SSLContext has a hard coded OpenSSL::SSL::TLS1_VERSION +for min_version. TLS 1.0 and 1.1 are considered insecure. By always +setting this in the default parameters, the system wide default can't be +respected, even if a developer wants to. + +This takes the approach that's also done for ciphers: it's only set for +OpenSSL < 1.1.0. + +[1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening +--- + lib/openssl/ssl.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb +index e557b8b48..83ecacafb 100644 +--- a/ext/openssl/lib/openssl/ssl.rb ++++ b/ext/openssl/lib/openssl/ssl.rb +@@ -22,7 +22,6 @@ module OpenSSL + module SSL + class SSLContext + DEFAULT_PARAMS = { # :nodoc: +- :min_version => OpenSSL::SSL::TLS1_VERSION, + :verify_mode => OpenSSL::SSL::VERIFY_PEER, + :verify_hostname => true, + :options => -> { +@@ -55,6 +54,7 @@ class SSLContext + if !(OpenSSL::OPENSSL_VERSION.start_with?("OpenSSL") && + OpenSSL::OPENSSL_VERSION_NUMBER >= 0x10100000) + DEFAULT_PARAMS.merge!( ++ min_version: OpenSSL::SSL::TLS1_VERSION, + ciphers: %w{ + ECDHE-ECDSA-AES128-GCM-SHA256 + ECDHE-RSA-AES128-GCM-SHA256 diff --git a/ruby.spec b/ruby.spec index 88ea172..82b5d34 100644 --- a/ruby.spec +++ b/ruby.spec @@ -173,7 +173,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 17%{?dist} +Release: 18%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -282,6 +282,10 @@ Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch # Make sure hardeding flags are correctly applied. # https://bugs.ruby-lang.org/issues/20520 Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch +# Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. +# https://github.com/ruby/openssl/pull/710 +# https://github.com/ruby/ruby/commit/6213ab1a51387fd9cdcb5e87908722f3bbdf78cb +Patch13: ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -761,6 +765,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 6 -p1 %patch 9 -p1 %patch 12 -p1 +%patch 13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1756,6 +1761,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Mon Dec 16 2024 Jun Aruga - 3.3.6-18 +- Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. + * Wed Nov 20 2024 David Abdurachmanov - 3.3.6-17 - Add riscv64 information for checksec From 037b0a34f2aa97439327cbb75356d8526a6f6db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 30 Oct 2024 19:08:34 +0100 Subject: [PATCH 55/83] Extract `%gem_version` and `%gem_prerelease` for independent use These macros are useful independently and makes the `%gem_name_version` macro more comprehensive. --- macros.rubygems | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/macros.rubygems b/macros.rubygems index f6e830f..7146c77 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,17 +2,41 @@ %gem_dir %{_datadir}/gems %gem_archdir %{_libdir}/gems +# %gem_prerelease - Provides prerelease string if available. +# +# Usage: %gem_prerelease [custom_gem_name] +# +# If avilable, prints prerelease string, which is a %prerelease macro by +# default. When [custom_gem_name] is provided, the custom_gem_name is used to +# derive %custom_gem_name_prerelease macro, which can be predefined. +# +# Please note that for the prerelease macros are the dashes in +# [custom_gem_name] replaced by underscores. +# +%gem_prerelease() %{?1:%{expand:%%{?%{gsub %{1} - _}_prerelease}}}%{!?1:%{?prerelease}} + +# %gem_version - Provides version string (including prerelease if available). +# +# Usage: %gem_version [custom_gem_name] +# +# Prints version (including prerelease string), that is %version macro by +# default. When [custom_gem_name] is provided, the custom_gem_name is used to +# derive %custom_gem_name_version macro which needs to be predefined. +# +# Please note that for the version macros are the dashes in [custom_gem_name] +# replaced by underscores. +# +%gem_version() %{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{gem_prerelease %{?1}} + # %gem_name_version - Provides gem_name-version string. # # Usage: %gem_name_version [custom_gem_name] # # Prints gem_name-version string, by default joining %gem_name, %version and # %prerelease macros. When [custom_gem_name] is provided, the -# custom_gem_name is joined with %custom_gem_name_version macro which needs -# to be predefined. Please note that for the version macros are the dashes -# replaced by underscores. +# custom_gem_name is joined with version as provided by %gem_version macro. # -%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{?1:%{expand:%{%{gsub %{1} - _}_version}}}%{!?1:%{version}}%{?prerelease} +%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{gem_version %{?1}} # Common gem locations and files. # From 4ccd95e387746653649272cd65ba7b7b2d623b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Nov 2024 11:47:24 +0100 Subject: [PATCH 56/83] Include ruby-{default,bundled}-gems in ruby by default. When installing `ruby` package, Users are expecting to have those available, because that is what upstream does. --- ruby.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruby.spec b/ruby.spec index 82b5d34..104bc16 100644 --- a/ruby.spec +++ b/ruby.spec @@ -290,6 +290,8 @@ Patch13: ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} Recommends: ruby(rubygems) >= %{rubygems_version} +Recommends: ruby-default-gems >= %{version}-%{release} +Recommends: ruby-bundled-gems >= %{version}-%{release} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # Build dependencies From 7b420c76e8492b9b2c51cc33a976485164b1e23f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 24 Oct 2024 14:43:02 +0200 Subject: [PATCH 57/83] Upgrade to Ruby 3.4.1. Resolves: rhbz#2334047 --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 4 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 8 +- ruby-2.3.0-ruby_version.patch | 10 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 6 +- ...3.0-Disable-syntax-suggest-test-case.patch | 6 +- ...GS-to-a-special-hardenflags-variable.patch | 302 ----------- ...nssl-respect-crypto-policies-tls-min.patch | 47 -- ruby.rpmlintrc | 10 +- ruby.spec | 474 +++++++++++------- sources | 2 +- 12 files changed, 311 insertions(+), 562 deletions(-) delete mode 100644 ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch delete mode 100644 ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 4cd8dd1..e4142e9 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 -@@ -3482,6 +3482,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3520,6 +3520,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 e6315c0..7990f77 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 -@@ -4321,7 +4321,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4366,7 +4366,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -66,7 +66,7 @@ diff --git a/tool/mkconfig.rb b/tool/mkconfig.rb index 07076d4..35e6c3c 100755 --- a/tool/mkconfig.rb +++ b/tool/mkconfig.rb -@@ -115,7 +115,7 @@ +@@ -116,7 +116,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 8e1b4fe..ba78846 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 -@@ -4385,6 +4385,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4430,6 +4430,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 7dc8eca..7e199ac 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 -@@ -4357,6 +4357,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4402,6 +4402,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='' -@@ -4381,6 +4385,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4426,6 +4430,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -67,7 +67,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index e9110a17ca..76a1f0a315 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -359,6 +359,7 @@ def CONFIG.[](name, mandatory = false) +@@ -382,6 +382,7 @@ def CONFIG.[](name, mandatory = false) vendorlibdir = CONFIG["vendorlibdir"] vendorarchlibdir = CONFIG["vendorarchdir"] end @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -595,7 +596,16 @@ def stub +@@ -974,7 +975,16 @@ def (bins = []).add(name) install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 68782cd..f089a33 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 -@@ -4271,9 +4271,6 @@ AS_CASE(["$target_os"], +@@ -4316,9 +4316,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], -@@ -4296,57 +4293,63 @@ AC_ARG_WITH(ridir, +@@ -4341,57 +4338,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) -@@ -4363,6 +4366,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4408,6 +4411,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index d4c110e..d39c9a6 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false) +@@ -945,7 +945,7 @@ def (bins = []).add(name) install?(:doc, :rdoc) do if $rdocdir @@ -262,7 +262,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -136,7 +136,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -143,7 +143,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 0f32243..65d1e65 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -44,7 +44,7 @@ diff --git a/common.mk b/common.mk index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -111,7 +111,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ +@@ -110,7 +110,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ prism/prism.$(OBJEXT) \ prism_init.$(OBJEXT) @@ -58,7 +58,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1724,10 +1724,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1744,10 +1744,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -84,5 +84,5 @@ index 60c57d6259..1eec16f2c8 100644 + # Ignore ABRT + features -= %w[abrt] # Ignore CRuby internals - features -= %w[encdb transdb windows_1252] + features -= %w[encdb transdb windows_1252 windows_31j] features.reject! { |feature| feature.end_with?('-fake') } diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch index 1119a59..10679ee 100644 --- a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -12,9 +12,9 @@ diff --git a/common.mk b/common.mk index d55d1788aa..73755f6ccd 100644 --- a/common.mk +++ b/common.mk -@@ -1601,8 +1601,6 @@ yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) - $(ACTIONS_ENDGROUP) - no-test-syntax-suggest: +@@ -1662,8 +1662,6 @@ no-test-bundled-gems-spec: + + test-syntax-suggest: -check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest - diff --git a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch b/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch deleted file mode 100644 index d0c10a0..0000000 --- a/ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch +++ /dev/null @@ -1,302 +0,0 @@ -From 3d405634f43d39079ee93cdc59ed7fc0a5e8917a Mon Sep 17 00:00:00 2001 -From: KJ Tsanaktsidis -Date: Sun, 9 Jun 2024 21:15:39 +1000 -Subject: [PATCH] Extract hardening CFLAGS to a special $hardenflags variable - -This changes the automatic detection of -fstack-protector, --D_FORTIFY_SOURCE, and -mbranch-protection to write to $hardenflags -instead of $XCFLAGS. The definition of $cflags is changed to -"$hardenflags $orig_cflags $optflags $debugflags $warnflags" to match. - -Furthermore, these flags are _prepended_ to $hardenflags, rather than -appended. - -The implications of doing this are as follows: - -* If a CRuby builder specifies cflags="-mbranch-protection=foobar" at - the ./configure script, and the configure script detects that - -mbranch-protection=pac-ret is accepted, then GCC will be invoked as - "gcc -mbranch-protection=pac-ret -mbranch-protection=foobar". Since - the last flags take precedence, that means that user-supplied values - of these flags in $cflags will take priority. -* Likewise, if a CRuby builder explicitly specifies - "hardenflags=-mbranch-protection=foobar", because we _prepend_ to - $hardenflags in our autoconf script, we will still invoke GCC as - "gcc -mbranch-protection=pac-ret -mbranch-protection=foobar". -* If a CRuby builder specifies CFLAGS="..." at the configure line, - automatic detection of hardening flags is ignored as before. -* C extensions will _also_ be built with hardening flags now as well - (this was not the case by default before because the detected flags - went into $XCFLAGS). - -Additionally, as part of this work, I changed how the detection of -PAC/BTI in Context.S works. Rather than appending the autodetected -option to ASFLAGS, we simply compile a set of test programs with the -actual CFLAGS in use to determine what PAC/BTI settings were actually -chosen by the builder. Context.S is made aware of these choices through -some custom macros. - -The result of this work is that: - -* Ruby will continue to choose some sensible defaults for hardening - options for the C compiler -* Distributors are able to specify CFLAGS that are consistent with their - distribution and override these defaults -* Context.S will react to whatever -mbranch-protection is actually in - use, not what was autodetected -* Extensions get built with hardening flags too. - -[Bug #20154] -[Bug #20520] ---- - configure.ac | 81 ++++++++++++++++++++++++++++++----- - coroutine/arm64/Context.S | 14 +++--- - template/Makefile.in | 1 + - tool/m4/ruby_append_option.m4 | 4 ++ - tool/m4/ruby_try_cflags.m4 | 17 ++++++++ - 5 files changed, 100 insertions(+), 17 deletions(-) - -diff --git a/configure.ac b/configure.ac -index f35fad6a362611..0da15772d36671 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -354,7 +354,7 @@ test -z "$warnflags" || - AS_IF([test -z "${CFLAGS+set}"], [ - cflags=`echo " $cflags " | sed "$cflagspat;s/^ *//;s/ *$//"` - orig_cflags="$cflags" -- cflags="$cflags "'${optflags} ${debugflags} ${warnflags}' -+ cflags='${hardenflags} '"$cflags "'${optflags} ${debugflags} ${warnflags}' - ]) - dnl AS_IF([test -z "${CXXFLAGS+set}"], [ - dnl cxxflags=`echo " $cxxflags " | sed "$cflagspat;s/^ *//;s/ *$//"` -@@ -802,7 +802,7 @@ AS_IF([test "$GCC" = yes], [ - [fortify_source=$enableval]) - AS_IF([test "x$fortify_source" != xno], [ - RUBY_TRY_CFLAGS([$optflags -D_FORTIFY_SOURCE=2], -- [RUBY_APPEND_OPTION(XCFLAGS, -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)], [], -+ [RUBY_PREPEND_OPTION(hardenflags, -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2)], [], - [@%:@include ]) - ]) - -@@ -823,20 +823,24 @@ AS_IF([test "$GCC" = yes], [ - AC_MSG_CHECKING([for -fstack-protector]) - AC_MSG_RESULT(["$stack_protector"]) - AS_CASE(["$stack_protector"], [-*], [ -- RUBY_APPEND_OPTION(XCFLAGS, $stack_protector) -- RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) -- RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) -+ RUBY_PREPEND_OPTION(hardenflags, $stack_protector) -+ RUBY_APPEND_OPTION(XLDFLAGS, $stack_protector) -+ RUBY_APPEND_OPTION(LDFLAGS, $stack_protector) - ]) - - # aarch64 branch protection - AS_CASE(["$target_cpu"], [aarch64], [ - AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ -- RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) -+ # Try these flags in the _prepended_ position - i.e. we want to try building a program -+ # with CFLAGS="-mbranch-protection=pac-ret $CFLAGS". If the builder has provided different -+ # branch protection flags in CFLAGS, we don't want to overwrite those. We just want to -+ # find some branch protection flags which work if none were provided. -+ RUBY_TRY_CFLAGS_PREPEND(option, [branch_protection=yes], [branch_protection=no]) - AS_IF([test "x$branch_protection" = xyes], [ -- # C compiler and assembler must be consistent for -mbranch-protection -- # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. -- RUBY_APPEND_OPTION(XCFLAGS, option) -- RUBY_APPEND_OPTION(ASFLAGS, option) -+ # _prepend_ the options to CFLAGS, so that user-provided flags will overwrite them. -+ # These CFLAGS are used during the configure script to compile further test programs; -+ # however, $harden_flags is prepended separately to CFLAGS at the end of the script. -+ RUBY_PREPEND_OPTION(hardenflags, $opt) - break - ]) - ]) -@@ -985,6 +989,59 @@ test -z "${ac_env_CFLAGS_set}" -a -n "${cflags+set}" && eval CFLAGS="\"$cflags $ - test -z "${ac_env_CXXFLAGS_set}" -a -n "${cxxflags+set}" && eval CXXFLAGS="\"$cxxflags $ARCH_FLAG\"" - } - -+# The lines above expand out the $cflags/$optflags/$debugflags/$hardenflags variables into the -+# CFLAGS variable. So, at this point, we have a $CFLAGS var with the actual compiler flags we're -+# going to use. -+# That means this is the right time to check what branch protection flags are going to be in use -+# and define appropriate macros for use in Context.S based on this -+AS_CASE(["$target_cpu"], [aarch64], [ -+ AC_CACHE_CHECK([whether __ARM_FEATURE_BTI_DEFAULT is defined], -+ rb_cv_aarch64_bti_enabled, -+ AC_COMPILE_IFELSE( -+ [AC_LANG_PROGRAM([[ -+ @%:@ifndef __ARM_FEATURE_BTI_DEFAULT -+ @%:@error "__ARM_FEATURE_BTI_DEFAULT not defined" -+ @%:@endif -+ ]])], -+ [rb_cv_aarch64_bti_enabled=yes], -+ [rb_cv_aarch64_bti_enabled=no]) -+ ) -+ AS_IF([test "$rb_cv_aarch64_bti_enabled" = yes], -+ AC_DEFINE(RUBY_AARCH64_BTI_ENABLED, 1)) -+ AC_CACHE_CHECK([whether __ARM_FEATURE_PAC_DEFAULT is defined], -+ rb_cv_aarch64_pac_enabled, -+ AC_COMPILE_IFELSE( -+ [AC_LANG_PROGRAM([[ -+ @%:@ifndef __ARM_FEATURE_PAC_DEFAULT -+ @%:@error "__ARM_FEATURE_PAC_DEFAULT not defined" -+ @%:@endif -+ ]])], -+ [rb_cv_aarch64_pac_enabled=yes], -+ [rb_cv_aarch64_pac_enabled=no]) -+ ) -+ AS_IF([test "$rb_cv_aarch64_pac_enabled" = yes], -+ AC_DEFINE(RUBY_AARCH64_PAC_ENABLED, 1)) -+ # Context.S will only ever sign its return address with the A-key; it doesn't support -+ # the B-key at the moment. -+ AS_IF([test "$rb_cv_aarch64_pac_enabled" = yes], [ -+ AC_CACHE_CHECK([whether __ARM_FEATURE_PAC_DEFAULT specifies the b-key bit 0x02], -+ rb_cv_aarch64_pac_b_key, -+ AC_COMPILE_IFELSE( -+ [AC_LANG_PROGRAM([[ -+ @%:@ifdef __ARM_FEATURE_PAC_DEFAULT -+ @%:@if __ARM_FEATURE_PAC_DEFAULT & 0x02 -+ @%:@error "__ARM_FEATURE_PAC_DEFAULT specifies B key" -+ @%:@endif -+ @%:@endif -+ ]])], -+ [rb_cv_aarch64_pac_b_key=no], -+ [rb_cv_aarch64_pac_b_key=yes]) -+ ) -+ AS_IF([test "$rb_cv_aarch64_pac_b_key" = yes], -+ AC_MSG_ERROR(-mbranch-protection flag specified b-key but Ruby's Context.S does not support this yet.)) -+ ]) -+]) -+ - AC_CACHE_CHECK([whether compiler has statement and declarations in expressions], - rb_cv_have_stmt_and_decl_in_expr, - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[ __extension__ ({ int a = 0; a; }); ]])], -@@ -4215,12 +4272,13 @@ AS_IF([test "${ARCH_FLAG}"], [ - rb_cv_warnflags=`echo "$rb_cv_warnflags" | sed 's/^ *//;s/ *$//'` - warnflags="$rb_cv_warnflags" - AC_SUBST(cppflags)dnl --AC_SUBST(cflags, ["${orig_cflags:+$orig_cflags }"'${optflags} ${debugflags} ${warnflags}'])dnl -+AC_SUBST(cflags, ['${hardenflags} '"${orig_cflags:+$orig_cflags }"' ${optflags} ${debugflags} ${warnflags}'])dnl - AC_SUBST(cxxflags)dnl - AC_SUBST(optflags)dnl - AC_SUBST(debugflags)dnl - AC_SUBST(warnflags)dnl - AC_SUBST(strict_warnflags)dnl -+AC_SUBST(hardenflags)dnl - AC_SUBST(XCFLAGS)dnl - AC_SUBST(XLDFLAGS)dnl - AC_SUBST(EXTLDFLAGS)dnl -@@ -4688,6 +4746,7 @@ config_summary "DLDFLAGS" "$DLDFLAGS" - config_summary "optflags" "$optflags" - config_summary "debugflags" "$debugflags" - config_summary "warnflags" "$warnflags" -+config_summary "hardenflags" "$hardenflags" - config_summary "strip command" "$STRIP" - config_summary "install doc" "$DOCTARGETS" - config_summary "YJIT support" "$YJIT_SUPPORT" -diff --git a/coroutine/arm64/Context.S b/coroutine/arm64/Context.S -index 5251ab214df1f0..54611a247e2f66 100644 ---- a/coroutine/arm64/Context.S -+++ b/coroutine/arm64/Context.S -@@ -5,6 +5,8 @@ - ## Copyright, 2018, by Samuel Williams. - ## - -+#include "ruby/config.h" -+ - #define TOKEN_PASTE(x,y) x##y - #define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) - -@@ -27,10 +29,10 @@ - .global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) - PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): - --#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0) -+#if defined(RUBY_AARCH64_PAC_ENABLED) - # paciasp (it also acts as BTI landing pad, so no need to insert BTI also) - hint #25 --#elif defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT != 0) -+#elif defined(RUBY_AARCH64_BTI_ENABLED) - # For the the case PAC is not enabled but BTI is. - # bti c - hint #34 -@@ -73,7 +75,7 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): - # Pop stack frame - add sp, sp, 0xa0 - --#if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0) -+#if defined(RUBY_AARCH64_PAC_ENABLED) - # autiasp: Authenticate x30 (LR) with SP and key A - hint #29 - #endif -@@ -85,18 +87,18 @@ PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): - .section .note.GNU-stack,"",%progbits - #endif - --#if __ARM_FEATURE_BTI_DEFAULT != 0 || __ARM_FEATURE_PAC_DEFAULT != 0 -+#if defined(RUBY_AARCH64_BTI_ENABLED) || defined(RUBY_AARCH64_PAC_ENABLED) - /* See "ELF for the Arm 64-bit Architecture (AArch64)" - https://github.com/ARM-software/abi-aa/blob/2023Q3/aaelf64/aaelf64.rst#program-property */ - # define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1<<0) - # define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1<<1) - --# if __ARM_FEATURE_BTI_DEFAULT != 0 -+# if defined(RUBY_AARCH64_BTI_ENABLED) - # define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI - # else - # define BTI_FLAG 0 - # endif --# if __ARM_FEATURE_PAC_DEFAULT != 0 -+# if defined(RUBY_AARCH64_PAC_ENABLED) - # define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC - # else - # define PAC_FLAG 0 -diff --git a/template/Makefile.in b/template/Makefile.in -index 033ac56cb38886..abb4469777ce8a 100644 ---- a/template/Makefile.in -+++ b/template/Makefile.in -@@ -89,6 +89,7 @@ cflags = @cflags@ - optflags = @optflags@ - debugflags = @debugflags@ - warnflags = @warnflags@ @strict_warnflags@ -+hardenflags = @hardenflags@ - cppflags = @cppflags@ - incflags = @incflags@ - RUBY_DEVEL = @RUBY_DEVEL@ # "yes" or empty -diff --git a/tool/m4/ruby_append_option.m4 b/tool/m4/ruby_append_option.m4 -index ff828d2162c22f..98359fa1f95f52 100644 ---- a/tool/m4/ruby_append_option.m4 -+++ b/tool/m4/ruby_append_option.m4 -@@ -3,3 +3,7 @@ AC_DEFUN([RUBY_APPEND_OPTION], - [# RUBY_APPEND_OPTION($1) - AS_CASE([" [$]{$1-} "], - [*" $2 "*], [], [' '], [ $1="$2"], [ $1="[$]$1 $2"])])dnl -+AC_DEFUN([RUBY_PREPEND_OPTION], -+ [# RUBY_APPEND_OPTION($1) -+ AS_CASE([" [$]{$1-} "], -+ [*" $2 "*], [], [' '], [ $1="$2"], [ $1="$2 [$]$1"])])dnl -diff --git a/tool/m4/ruby_try_cflags.m4 b/tool/m4/ruby_try_cflags.m4 -index b74718fe5e1cef..b397642aad9ca2 100644 ---- a/tool/m4/ruby_try_cflags.m4 -+++ b/tool/m4/ruby_try_cflags.m4 -@@ -22,3 +22,20 @@ AC_DEFUN([RUBY_TRY_CFLAGS], [ - AC_MSG_RESULT(no)], - [$4], [$5]) - ])dnl -+ -+AC_DEFUN([_RUBY_TRY_CFLAGS_PREPEND], [ -+ RUBY_WERROR_FLAG([ -+ CFLAGS="$1 [$]CFLAGS" -+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$4]], [[$5]])], -+ [$2], [$3]) -+ ])dnl -+])dnl -+AC_DEFUN([RUBY_TRY_CFLAGS_PREPEND], [ -+ AC_MSG_CHECKING([whether ]$1[ is accepted as CFLAGS])dnl -+ _RUBY_TRY_CFLAGS_PREPEND([$1], -+ [$2 -+ AC_MSG_RESULT(yes)], -+ [$3 -+ AC_MSG_RESULT(no)], -+ [$4], [$5]) -+])dnl diff --git a/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch b/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch deleted file mode 100644 index 6c7a4dd..0000000 --- a/ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch +++ /dev/null @@ -1,47 +0,0 @@ -From ae215a47ae1a6527bb7b8566e5bcc9430652462f Mon Sep 17 00:00:00 2001 -From: Ewoud Kohl van Wijngaarden -Date: Fri, 5 Jan 2024 15:58:59 +0100 -Subject: [PATCH] Only set min_version on OpenSSL < 1.1.0 - -Both Red Hat and Debian-like systems configure the minimum TLS version -to be 1.2 by default, but allow users to change this via configs. - -On Red Hat and derivatives this happens via crypto-policies[1], which in -writes settings in /etc/crypto-policies/back-ends/opensslcnf.config. -Most notably, it sets TLS.MinProtocol there. For Debian there's -MinProtocol in /etc/ssl/openssl.cnf. Both default to TLSv1.2, which is -considered a secure default. - -In constrast, the SSLContext has a hard coded OpenSSL::SSL::TLS1_VERSION -for min_version. TLS 1.0 and 1.1 are considered insecure. By always -setting this in the default parameters, the system wide default can't be -respected, even if a developer wants to. - -This takes the approach that's also done for ciphers: it's only set for -OpenSSL < 1.1.0. - -[1]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening ---- - lib/openssl/ssl.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb -index e557b8b48..83ecacafb 100644 ---- a/ext/openssl/lib/openssl/ssl.rb -+++ b/ext/openssl/lib/openssl/ssl.rb -@@ -22,7 +22,6 @@ module OpenSSL - module SSL - class SSLContext - DEFAULT_PARAMS = { # :nodoc: -- :min_version => OpenSSL::SSL::TLS1_VERSION, - :verify_mode => OpenSSL::SSL::VERIFY_PEER, - :verify_hostname => true, - :options => -> { -@@ -55,6 +54,7 @@ class SSLContext - if !(OpenSSL::OPENSSL_VERSION.start_with?("OpenSSL") && - OpenSSL::OPENSSL_VERSION_NUMBER >= 0x10100000) - DEFAULT_PARAMS.merge!( -+ min_version: OpenSSL::SSL::TLS1_VERSION, - ciphers: %w{ - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 diff --git a/ruby.rpmlintrc b/ruby.rpmlintrc index 90e14d6..ec8ac11 100644 --- a/ruby.rpmlintrc +++ b/ruby.rpmlintrc @@ -13,15 +13,13 @@ addFilter(r'ruby\.(spec|src):\d+: W: unversioned-explicit-provides bundled\(ccan # The template files do not have to have executable bits. addFilter(r'^rubygem-bundler\.noarch: E: non-executable-script /usr/share/gems/gems/bundler-[\d\.]+/lib/bundler/templates/[\w/\.]+ 644 /usr/bin/env ') +# Samples don't really need executable bits. +addFilter(r'^rubygem-bigdecimal\.x86_64: E: non-executable-script /usr/share/gems/gems/bigdecimal-[\d\.]+/sample/\w+.rb 644 /usr/local/bin/ruby$') + # The bundled gem files permissions are overridden as 644 by `make install`. # https://bugs.ruby-lang.org/issues/17840 # https://github.com/rubygems/rubygems/issues/5255 -# https://github.com/ruby/debug/pull/481 -# https://github.com/ruby/net-ftp/pull/12 -# https://github.com/ruby/net-imap/pull/53 -# https://github.com/ruby/net-pop/pull/7 -# https://github.com/ruby/prime/pull/16 -addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(debug|net-(ftp|imap|pop)|prime)-[\d\.]+/bin/\w+ 644 ') +addFilter(r'^.*: E: non-executable-script /usr/share/gems/gems/(abbrev|getoptlong|nkf|observer|resolv|resolv-replace|rinda|syslog)-[\d\.]+/bin/\w+ 644 ') # Ruby provides API to set the cipher list. addFilter(r'^ruby-libs\.\w+: W: crypto-policy-non-compliance-openssl /usr/lib(64)?/ruby/openssl.so SSL_CTX_set_cipher_list$') diff --git a/ruby.spec b/ruby.spec index 104bc16..fc622ee 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,16 +1,16 @@ %global major_version 3 -%global minor_version 3 -%global teeny_version 6 +%global minor_version 4 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} %global ruby_release %{ruby_version} # Specify the named version. It has precedense to revision. -#%%global milestone rc1 +%dnl %global milestone preview2 # Keep the revision enabled for pre-releases from GIT. -#%%global revision ef084cc8f4 +%dnl %global revision 48d4efcb85 %global ruby_archive %{name}-%{ruby_version} @@ -27,118 +27,122 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.5.22 +%global rubygems_version 3.6.2 %global rubygems_molinillo_version 0.8.0 -%global rubygems_net_http_version 0.4.1 +%global rubygems_net_http_version 0.6.0 %global rubygems_net_protocol_version 0.2.2 -%global rubygems_optparse_version 0.4.0 -%global rubygems_resolv_version 0.4.0 -%global rubygems_securerandom_version 0.3.1 -%global rubygems_timeout_version 0.4.1 +%global rubygems_optparse_version 0.6.0 +%global rubygems_resolv_version 0.6.0 +%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 0.13.1 +%global rubygems_uri_version 1.0.2 # Default gems. -%global bundler_version 2.5.22 +%global bundler_version 2.6.2 %global bundler_connection_pool_version 2.4.1 -%global bundler_fileutils_version 1.7.2 +%global bundler_fileutils_version 1.7.3 %global bundler_net_http_persistent_version 4.0.4 %global bundler_pub_grub_version 0.5.0 -%global bundler_securerandom_version 0.3.1 -%global bundler_thor_version 1.3.0 +%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 0.13.1 +%global bundler_uri_version 1.0.2 -%global abbrev_version 0.1.2 -%global base64_version 0.2.0 -%global benchmark_version 0.3.0 +%global benchmark_version 0.4.0 %global cgi_version 0.4.1 -%global csv_version 3.2.8 -%global date_version 3.3.4 -%global delegate_version 0.3.1 -%global did_you_mean_version 1.6.3 -%global digest_version 3.1.1 -%global drb_version 2.2.0 +%global date_version 3.4.1 +%global delegate_version 0.4.0 +%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.3 -%global error_highlight_version 0.6.0 -%global etc_version 1.4.3 -%global fcntl_version 1.1.0 -%global fiddle_version 1.1.2 -%global fileutils_version 1.7.2 +%global erb_version 4.0.4 +%global error_highlight_version 0.7.0 +%global etc_version 1.4.5 +%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 getoptlong_version 0.2.1 -%global io_nonblock_version 0.3.0 +%global io_nonblock_version 0.3.1 %global io_wait_version 0.3.1 -%global ipaddr_version 1.2.6 -%global logger_version 1.6.0 -%global mutex_m_version 0.2.0 -%global net_http_version 0.4.1 +%global ipaddr_version 1.2.7 +%global logger_version 1.6.4 +%global net_http_version 0.6.0 %global net_protocol_version 0.2.2 -%global nkf_version 0.1.3 -%global observer_version 0.1.2 %global open3_version 0.2.1 -%global openssl_version 3.2.0 -%global open_uri_version 0.4.1 -%global optparse_version 0.4.0 -%global ostruct_version 0.6.0 -%global pathname_version 0.3.0 -%global pp_version 0.5.0 +%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 +%global pp_version 0.6.2 %global prettyprint_version 0.2.0 -%global pstore_version 0.1.3 +%global prism_version 1.2.0 +%global pstore_version 0.1.4 %global readline_version 0.0.4 -%global reline_version 0.5.10 -%global resolv_version 0.3.0 -%global resolv_replace_version 0.1.1 -%global rinda_version 0.2.0 +%global reline_version 0.6.0 +%global resolv_version 0.6.0 %global ruby2_keywords_version 0.0.5 -%global securerandom_version 0.3.1 -%global set_version 1.1.0 -%global shellwords_version 0.2.0 -%global singleton_version 0.2.0 -%global stringio_version 3.1.1 -%global strscan_version 3.0.9 -%global syntax_suggest_version 2.0.1 -%global syslog_version 0.1.2 -%global tempfile_version 0.2.1 -%global time_version 0.3.0 -%global timeout_version 0.4.1 -%global tmpdir_version 0.2.0 +%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 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 +%global tmpdir_version 0.3.1 %global tsort_version 0.2.0 %global un_version 0.3.0 -%global uri_version 0.13.1 +%global uri_version 1.0.2 %global weakref_version 0.1.3 -%global win32ole_version 1.8.10 -%global yaml_version 0.3.0 -%global prism_version 0.19.0 -%global zlib_version 3.1.1 +%global win32ole_version 1.9.1 +%global win32_registry_version 0.1.0 +%global yaml_version 0.4.0 +%global zlib_version 3.2.1 # Gemified default gems. -%global bigdecimal_version 3.1.5 -%global io_console_version 0.7.1 -%global irb_version 1.13.1 -%global json_version 2.7.2 -%global psych_version 5.1.2 -%global rdoc_version 6.6.3.1 +%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 debug_version 1.9.2 -%global net_ftp_version 0.3.4 -%global net_imap_version 0.4.9.1 +%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 drb_version 2.2.1 +%global getoptlong_version 0.2.1 +%global net_ftp_version 0.3.8 +%global net_imap_version 0.5.4 %global net_pop_version 0.1.2 -%global net_smtp_version 0.4.0.1 +%global net_smtp_version 0.5.0 +%global nkf_version 0.2.0 %global matrix_version 0.4.2 -%global minitest_version 5.20.0 -%global power_assert_version 2.0.3 -%global prime_version 0.1.2 -%global racc_version 1.7.3 -%global rake_version 13.1.0 -%global rbs_version 3.4.0 -%global rexml_version 3.3.9 +%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 +%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 resolv_replace_version 0.1.1 +%global rexml_version 3.4.0 +%global rinda_version 0.2.0 %global rss_version 0.3.1 -%global test_unit_version 3.6.1 -%global typeprof_version 0.21.9 +%global syslog_version 0.2.0 +%global test_unit_version 3.6.7 +%global typeprof_version 0.30.1 + # Bundled nkf version %global bundled_nkf_version 2.1.5 @@ -173,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 18%{?dist} +Release: 19%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -183,12 +187,6 @@ Release: 18%{?dist} # GPL-1.0-or-later OR Artistic-1.0-Perl: win32/win32.c, include/ruby/win32.h, # ext/win32ole/win32ole.c # -# !!! Problematic licenses: -# LicenseRef-scancode-unicode-mappings: ext/json/generator/generator.c -# https://bugs.ruby-lang.org/issues/11844#note-19 -# https://github.com/flori/json/issues/277 -# https://github.com/flori/json/pull/567 -# # Licenses under review: # .bundle/gems/net-imap-0.4.9/LICENSE.txt # https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506 @@ -276,16 +274,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 -# Armv8.3+ capable CPUs might segfault with incorrect compilation options. -# See related upstream report: https://bugs.ruby-lang.org/issues/20085 -# https://bugs.ruby-lang.org/issues/20154 -# Make sure hardeding flags are correctly applied. -# https://bugs.ruby-lang.org/issues/20520 -Patch12: ruby-3.4.0-Extract-hardening-CFLAGS-to-a-special-hardenflags-variable.patch -# Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. -# https://github.com/ruby/openssl/pull/710 -# https://github.com/ruby/ruby/commit/6213ab1a51387fd9cdcb5e87908722f3bbdf78cb -Patch13: ruby-3.4.0-openssl-respect-crypto-policies-tls-min.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -365,11 +353,6 @@ Provides: bundled(ccan-check_type) Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) -# https://github.com/nurse/nkf -# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: -# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d -Provides: bundled(nkf) = %{bundled_nkf_version} - # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} @@ -406,7 +389,7 @@ Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} Recommends: rubygem(io-console) -Requires: rubygem(psych) >= %{psych_version} +Requires: rubygem(psych) >= %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} Provides: bundled(rubygems) = %{rubygems_version} @@ -544,8 +527,7 @@ 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} -# Unicode-DFS-2015: ext/json/ext/generator/generator.c -License: (Ruby OR BSD-2-Clause) AND Unicode-DFS-2015 +License: Ruby OR BSD-2-Clause Provides: bundled(rubygem-json) = %{json_version} %description -n rubygem-json @@ -557,9 +539,9 @@ markup language. %package -n rubygem-psych Summary: A libyaml wrapper for Ruby -Version: %{psych_version} +Version: %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} License: MIT -Provides: bundled(rubygem-psych) = %{psych_version} +Provides: bundled(rubygem-psych) = %{psych_version}%{?psych_prerelease:~%{sub %{psych_prerelease} 2 -1}} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -606,13 +588,30 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib +Provides: bundled(rubygem-abbrev) = %{abbrev_version} +Provides: bundled(rubygem-base64) = %{base64_version} +Provides: bundled(rubygem-csv) = %{csv_version} Provides: bundled(rubygem-debug) = %{debug_version} +Provides: bundled(rubygem-drb) = %{drb_version} +Provides: bundled(rubygem-getoptlong) = %{getoptlong_version} Provides: bundled(rubygem-matrix) = %{matrix_version} +Provides: bundled(rubygem-mutex_m) = %{mutex_m_version} Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} Provides: bundled(rubygem-net-imap) = %{net_imap_version} Provides: bundled(rubygem-net-pop) = %{net_pop_version} Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} +Provides: bundled(rubygem-nkf) = %{nkf_version} Provides: bundled(rubygem-prime) = %{prime_version} +Provides: bundled(rubygem-observer) = %{observer_version} +Provides: bundled(rubygem-repl_type_completor) = %{repl_type_completor_version} +Provides: bundled(rubygem-resolv-replace) = %{resolv_replace_version} +Provides: bundled(rubygem-rinda) = %{rinda_version} +Provides: bundled(rubygem-syslog) = %{syslog_version} +# https://github.com/nurse/nkf +# Please note that nkf going to be promoted to bundled gem in Ruby 3.4: +# https://github.com/ruby/ruby/commit/2e3a7f70ae71650be6ea38a483f66ce17ca5eb1d +Provides: bundled(nkf) = %{bundled_nkf_version} + %description bundled-gems Bundled gems which are part of Ruby StdLib. While being part of Ruby, these @@ -766,8 +765,6 @@ analysis result in RBS format, a standard type description format for Ruby %patch 4 -p1 %patch 6 -p1 %patch 9 -p1 -%patch 12 -p1 -%patch 13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -819,6 +816,16 @@ rm -rf %{buildroot} # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h +# `ruby` executable is placed in some strange directory for some unknow +# reasons. +# https://bugs.ruby-lang.org/issues/20800 +# https://github.com/ruby/ruby/pull/12043 +CONFIG_TARGET_DIR=%{buildroot}%{_exec_prefix}/$( \ + %{_vpath_builddir}/miniruby -I%{_vpath_builddir} -rrbconfig -e 'puts RbConfig::CONFIG["config_target"]' +) +mv ${CONFIG_TARGET_DIR}/bin/ruby %{buildroot}%{_bindir} +rm -rd ${CONFIG_TARGET_DIR} + # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -866,7 +873,7 @@ mv %{buildroot}%{ruby_libdir}/gems %{buildroot}%{gem_dir} mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri -# make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems +# 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} @@ -883,15 +890,6 @@ 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} -mkdir -p %{buildroot}%{gem_libdir bigdecimal} -mkdir -p %{buildroot}%{gem_extdir_mri bigdecimal} -mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_libdir bigdecimal} -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{gem_extdir_mri bigdecimal} -touch %{buildroot}%{gem_extdir_mri bigdecimal}/gem.build_complete -mv %{buildroot}%{gem_spec -d bigdecimal} %{buildroot}%{gem_spec bigdecimal} -ln -s %{gem_libdir bigdecimal}/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{gem_extdir_mri bigdecimal}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so - # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 mkdir -p %{buildroot}%{gem_libdir bundler} @@ -970,9 +968,9 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja %check %if 0%{?with_hardening_test} # Check Ruby hardening. -%define fortification_x86_64 fortified="11" fortify-able="28" +%define fortification_x86_64 fortified="12" fortify-able="29" %define fortification_i686 fortified="10" fortify-able="26" -%define fortification_aarch64 fortified="10" fortify-able="26" +%define fortification_aarch64 fortified="12" fortify-able="29" %define fortification_ppc64le fortified="7" fortify-able="24" %define fortification_s390x fortified="10" fortify-able="24" %define fortification_riscv64 fortified="10" fortify-able="26" @@ -1147,6 +1145,7 @@ make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ # Nkf. make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + require 'rubygems'; \ require 'nkf'; \ puts '%%{bundled_nkf_version}: %{bundled_nkf_version}'; \ puts %Q[NKF::NKF_VERSION: #{NKF::NKF_VERSION}]; \ @@ -1241,21 +1240,16 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} -%exclude %{ruby_libdir}/bigdecimal* %exclude %{ruby_libdir}/irb* %exclude %{ruby_libdir}/json* %exclude %{ruby_libdir}/psych* -%{ruby_libdir}/abbrev.rb -%{ruby_libdir}/base64.rb %{ruby_libdir}/benchmark* %{ruby_libdir}/bundled_gems.rb %{ruby_libdir}/cgi* %{ruby_libdir}/coverage.rb -%{ruby_libdir}/csv* %{ruby_libdir}/date.rb %{ruby_libdir}/delegate* %{ruby_libdir}/digest* -%{ruby_libdir}/drb* %{ruby_libdir}/English.rb %{ruby_libdir}/erb* %{ruby_libdir}/error_highlight* @@ -1264,16 +1258,12 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/fileutils.rb %{ruby_libdir}/find.rb %{ruby_libdir}/forwardable* -%{ruby_libdir}/getoptlong* %{ruby_libdir}/ipaddr.rb -%{ruby_libdir}/kconv.rb %{ruby_libdir}/logger* %{ruby_libdir}/mkmf.rb %{ruby_libdir}/monitor.rb -%{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net %{ruby_libdir}/objspace* -%{ruby_libdir}/observer* %{ruby_libdir}/open-uri.rb %{ruby_libdir}/open3* %{ruby_libdir}/optionparser.rb @@ -1287,8 +1277,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/readline.rb %{ruby_libdir}/reline* %{ruby_libdir}/resolv.rb -%{ruby_libdir}/resolv-replace.rb -%{ruby_libdir}/rinda %{ruby_libdir}/ripper* %dir %{ruby_libdir}/ruby_vm %{ruby_libdir}/ruby_vm/rjit @@ -1297,8 +1285,8 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb +%{ruby_libdir}/strscan %{ruby_libdir}/syntax_suggest* -%{ruby_libdir}/syslog %{ruby_libdir}/tempfile.rb %{ruby_libdir}/timeout* %{ruby_libdir}/time.rb @@ -1397,7 +1385,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libarchdir}/io/nonblock.so %{ruby_libarchdir}/io/wait.so %{ruby_libarchdir}/monitor.so -%{ruby_libarchdir}/nkf.so %{ruby_libarchdir}/objspace.so %{ruby_libarchdir}/pathname.so %{ruby_libarchdir}/pty.so @@ -1408,7 +1395,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so %{ruby_libarchdir}/strscan.so -%{ruby_libarchdir}/syslog.so %{ruby_libarchdir}/zlib.so # Default gems @@ -1448,16 +1434,12 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_rpmconfigdir}/rubygems.con %files default-gems -%gem_spec -d abbrev -%gem_spec -d base64 %gem_spec -d benchmark %gem_spec -d cgi -%gem_spec -d csv %gem_spec -d date %gem_spec -d delegate %gem_spec -d did_you_mean %gem_spec -d digest -%gem_spec -d drb %gem_spec -d english %gem_spec -d erb %gem_instdir erb @@ -1470,16 +1452,12 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %gem_spec -d fileutils %gem_spec -d find %gem_spec -d forwardable -%gem_spec -d getoptlong %gem_spec -d io-nonblock %gem_spec -d io-wait %gem_spec -d ipaddr %gem_spec -d logger -%gem_spec -d mutex_m %gem_spec -d net-http %gem_spec -d net-protocol -%gem_spec -d nkf -%gem_spec -d observer %gem_spec -d open3 %gem_spec -d open-uri %gem_spec -d optparse @@ -1492,8 +1470,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %gem_spec -d readline %gem_spec -d reline %gem_spec -d resolv -%gem_spec -d resolv-replace -%gem_spec -d rinda %gem_spec -d ruby2_keywords %gem_spec -d securerandom %gem_spec -d set @@ -1504,7 +1480,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %gem_spec -d syntax_suggest %{_bindir}/syntax_suggest %gem_instdir syntax_suggest -%gem_spec -d syslog %gem_spec -d tempfile %gem_spec -d time %gem_spec -d timeout @@ -1514,6 +1489,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %gem_spec -d uri %gem_spec -d weakref #%%gem_spec -d win32ole +#%%gem_spec -d win32-registry %gem_spec -d yaml %gem_spec -d prism %gem_spec -d zlib @@ -1539,8 +1515,6 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_datadir}/ri %files -n rubygem-bigdecimal -%{ruby_libdir}/bigdecimal* -%{ruby_libarchdir}/bigdecimal* %{gem_extdir_mri bigdecimal} %{gem_instdir bigdecimal} %{gem_spec bigdecimal} @@ -1577,27 +1551,68 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_mandir}/man5/gemfile.5* %files bundled-gems -# rdbg -%{_bindir}/rdbg -%dir %{gem_extdir_mri debug} -%{gem_extdir_mri debug}/gem.build_complete -%dir %{gem_extdir_mri debug}/debug -%{gem_extdir_mri debug}/debug/debug.so -%dir %{gem_instdir debug} -%exclude %{gem_instdir debug}/.* -%doc %{gem_instdir debug}/CONTRIBUTING.md -%{gem_instdir debug}/Gemfile -%license %{gem_instdir debug}/LICENSE.txt -%doc %{gem_instdir debug}/README.md -%{gem_instdir debug}/Rakefile -%doc %{gem_instdir debug}/TODO.md -%{gem_instdir debug}/exe -%{gem_libdir debug} -%{gem_instdir debug}/misc -%{gem_spec debug} +# abbrev +%dir %{gem_instdir abbrev} +%license %{gem_instdir abbrev}/LICENSE.txt +%{gem_instdir abbrev}/bin +%{gem_libdir abbrev} +%{gem_spec abbrev} +%{gem_instdir abbrev}/Gemfile +%doc %{gem_instdir abbrev}/README.md +%{gem_instdir abbrev}/Rakefile + +# base64 +%dir %{gem_instdir base64} +%license %{gem_instdir base64}/LICENSE.txt +%{gem_libdir base64} +%{gem_spec base64} +%doc %{gem_instdir base64}/README.md + +# csv +%dir %{gem_instdir csv} +%license %{gem_instdir csv}/LICENSE.txt +%doc %{gem_instdir csv}/NEWS.md +%{gem_libdir csv} +%{gem_spec csv} +%doc %{gem_instdir csv}/README.md +%doc %{gem_instdir csv}/doc + +# drb +%dir %{gem_instdir drb} +%license %{gem_instdir drb}/LICENSE.txt +%{gem_libdir drb} +%{gem_spec drb} + +# getoptlong +%dir %{gem_instdir getoptlong} +%license %{gem_instdir getoptlong}/LICENSE.txt +%{gem_instdir getoptlong}/bin +%{gem_libdir getoptlong} +%{gem_instdir getoptlong}/sample +%{gem_spec getoptlong} +%{gem_instdir getoptlong}/Gemfile +%doc %{gem_instdir getoptlong}/README.md +%{gem_instdir getoptlong}/Rakefile + +# matrix +%dir %{gem_instdir matrix} +%license %{gem_instdir matrix}/LICENSE.txt +%{gem_libdir matrix} +%{gem_spec matrix} + +# mutex_m +%dir %{gem_instdir mutex_m} +%license %{gem_instdir mutex_m}/BSDL +%license %{gem_instdir mutex_m}/COPYING +%{gem_libdir mutex_m} +%{gem_instdir mutex_m}/sig +%{gem_spec mutex_m} +%doc %{gem_instdir mutex_m}/README.md # net-ftp %dir %{gem_instdir net-ftp} +%license %{gem_instdir net-ftp}/BSDL +%license %{gem_instdir net-ftp}/COPYING %{gem_instdir net-ftp}/Gemfile %license %{gem_instdir net-ftp}/LICENSE.txt %doc %{gem_instdir net-ftp}/README.md @@ -1607,6 +1622,8 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ # net-imap %dir %{gem_instdir net-imap} +%license %{gem_instdir net-imap}/BSDL +%license %{gem_instdir net-imap}/COPYING %{gem_instdir net-imap}/Gemfile %license %{gem_instdir net-imap}/LICENSE.txt %doc %{gem_instdir net-imap}/README.md @@ -1614,6 +1631,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{gem_instdir net-imap}/docs %{gem_libdir net-imap} %{gem_instdir net-imap}/rakelib +%{gem_instdir net-imap}/sample %{gem_spec net-imap} # net-pop @@ -1633,22 +1651,100 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{gem_libdir net-smtp} %{gem_spec net-smtp} -# matrix -%dir %{gem_instdir matrix} -%license %{gem_instdir matrix}/LICENSE.txt -%{gem_libdir matrix} -%{gem_spec matrix} +# nkf +%dir %{gem_instdir nkf} +%{gem_extdir_mri nkf} +%license %{gem_instdir nkf}/LICENSE.txt +%{gem_instdir nkf}/bin +%{gem_libdir nkf} +%{gem_spec nkf} +%{gem_instdir nkf}/Gemfile +%doc %{gem_instdir nkf}/README.md +%{gem_instdir nkf}/Rakefile + +# observer +%dir %{gem_instdir observer} +%license %{gem_instdir observer}/LICENSE.txt +%{gem_instdir observer}/bin +%{gem_libdir observer} +%exclude %{gem_cache observer} +%{gem_spec observer} +%{gem_instdir observer}/Gemfile +%doc %{gem_instdir observer}/README.md +%{gem_instdir observer}/Rakefile # prime %dir %{gem_instdir prime} -%{gem_instdir prime}/Gemfile -%license %{gem_instdir prime}/LICENSE.txt +%license %{gem_instdir prime}/BSDL +%license %{gem_instdir prime}/COPYING %doc %{gem_instdir prime}/README.md %{gem_instdir prime}/Rakefile -%{gem_instdir prime}/bin %{gem_libdir prime} +%{gem_instdir prime}/sig %{gem_spec prime} +# rdbg +%{_bindir}/rdbg +%dir %{gem_extdir_mri debug} +%{gem_extdir_mri debug}/gem.build_complete +%dir %{gem_extdir_mri debug}/debug +%{gem_extdir_mri debug}/debug/debug.so +%dir %{gem_instdir debug} +%exclude %{gem_instdir debug}/.* +%doc %{gem_instdir debug}/CONTRIBUTING.md +%{gem_instdir debug}/Gemfile +%license %{gem_instdir debug}/LICENSE.txt +%doc %{gem_instdir debug}/README.md +%{gem_instdir debug}/Rakefile +%doc %{gem_instdir debug}/TODO.md +%{gem_instdir debug}/exe +%{gem_libdir debug} +%{gem_instdir debug}/misc +%{gem_spec debug} + +# repl_type_completor +%dir %{gem_instdir repl_type_completor} +%license %{gem_instdir repl_type_completor}/LICENSE.txt +%{gem_libdir repl_type_completor} +%{gem_instdir repl_type_completor}/sig +%exclude %{gem_cache repl_type_completor} +%{gem_spec repl_type_completor} +%{gem_instdir repl_type_completor}/Gemfile +%doc %{gem_instdir repl_type_completor}/README.md +%{gem_instdir repl_type_completor}/Rakefile + +# rinda +%dir %{gem_instdir rinda} +%license %{gem_instdir rinda}/LICENSE.txt +%{gem_instdir rinda}/bin +%{gem_libdir rinda} +%{gem_spec rinda} +%{gem_instdir rinda}/Gemfile +%doc %{gem_instdir rinda}/README.md +%{gem_instdir rinda}/Rakefile + +# resolv-replace +%dir %{gem_instdir resolv-replace} +%license %{gem_instdir resolv-replace}/LICENSE.txt +%{gem_instdir resolv-replace}/bin +%{gem_libdir resolv-replace} +%{gem_spec resolv-replace} +%{gem_instdir resolv-replace}/Gemfile +%doc %{gem_instdir resolv-replace}/README.md +%{gem_instdir resolv-replace}/Rakefile + +# syslog +%dir %{gem_instdir syslog} +%{gem_extdir_mri syslog} +%license %{gem_instdir syslog}/LICENSE.txt +%{gem_instdir syslog}/bin +%{gem_libdir syslog} +%exclude %{gem_cache syslog} +%{gem_spec syslog} +%{gem_instdir syslog}/Gemfile +%doc %{gem_instdir syslog}/README.md +%{gem_instdir syslog}/Rakefile + %files -n rubygem-minitest %dir %{gem_instdir minitest} %exclude %{gem_instdir minitest}/.* @@ -1685,22 +1781,24 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{gem_extdir_mri rbs}/gem.build_complete %{gem_extdir_mri rbs}/rbs_extension.so %dir %{gem_instdir rbs} -%exclude %{gem_instdir rbs}/.* %license %{gem_instdir rbs}/BSDL %doc %{gem_instdir rbs}/CHANGELOG.md %license %{gem_instdir rbs}/COPYING -%{gem_instdir rbs}/Gemfile* %doc %{gem_instdir rbs}/README.md %{gem_instdir rbs}/Rakefile %{gem_instdir rbs}/Steepfile +%{gem_instdir rbs}/config.yml %{gem_instdir rbs}/core %doc %{gem_instdir rbs}/docs %{gem_instdir rbs}/exe %{gem_instdir rbs}/goodcheck.yml +%{gem_instdir rbs}/include %{gem_libdir rbs} %{gem_instdir rbs}/schema %{gem_instdir rbs}/sig +%{gem_instdir rbs}/src %{gem_instdir rbs}/stdlib +%{gem_instdir rbs}/templates %{gem_spec rbs} %files -n rubygem-test-unit @@ -1719,6 +1817,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %dir %{gem_instdir racc} %{_bindir}/racc %{gem_extdir_mri racc} +%license %{gem_instdir racc}/BSDL %license %{gem_instdir racc}/COPYING %doc %{gem_instdir racc}/ChangeLog %lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc @@ -1752,17 +1851,18 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_bindir}/typeprof %exclude %{gem_instdir typeprof}/.* %license %{gem_instdir typeprof}/LICENSE -%{gem_instdir typeprof}/exe +%{gem_instdir typeprof}/bin +%doc %{gem_instdir typeprof}/doc %{gem_libdir typeprof} -%doc %{gem_instdir typeprof}/tools -%exclude %{gem_instdir typeprof}/typeprof-lsp %{gem_spec typeprof} -%doc %{gem_instdir typeprof}/Gemfile* %doc %{gem_instdir typeprof}/README.md -%doc %{gem_instdir typeprof}/Rakefile %changelog +* Thu Jan 02 2025 Vít Ondruch - 3.4.1-19 +- Upgrade to Ruby 3.4.1. + Resolves: rhbz#2334047 + * Mon Dec 16 2024 Jun Aruga - 3.3.6-18 - Fix Ruby OpenSSL to respect crypto-policies TLS minimal version. diff --git a/sources b/sources index 491b163..504f64b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.3.6.tar.xz) = c4b86188bf539fa737932e1ba5b746bc295e7c43b2f8cca2668eb7c88aa7228e2ce9032bbcd244a7d558a11bc842445b5fbeac3503ca7d223b63c53e08dba4ab +SHA512 (ruby-3.4.1.tar.xz) = 8d2e34117696f9debf463ae1eed288fdbb5c1a12e32800e901b69218e3b7302a0066052077e2ebca851e3a635296199bd5a10437eea1d6f787f69a77bb865680 From 74a9a07c691dd161a56211930c06e168d4bf9e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 2 Jan 2025 19:54:47 +0100 Subject: [PATCH 58/83] Fix `gem install` to generate documentation --- ruby.spec | 15 +++++++++++++++ rubygems_plugin.rb | 23 +++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 rubygems_plugin.rb diff --git a/ruby.spec b/ruby.spec index fc622ee..f5c4680 100644 --- a/ruby.spec +++ b/ruby.spec @@ -235,6 +235,10 @@ 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. @@ -889,6 +893,16 @@ 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 @@ -1506,6 +1520,7 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %{_bindir}/ri %{gem_instdir rdoc} %{gem_spec rdoc} +%{gem_plugin rdoc} %{_mandir}/man1/ri* %files doc -f .ruby-doc.en -f .ruby-doc.ja diff --git a/rubygems_plugin.rb b/rubygems_plugin.rb new file mode 100644 index 0000000..55c75da --- /dev/null +++ b/rubygems_plugin.rb @@ -0,0 +1,23 @@ +# 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 5f10b7c93e59aa3bf043b521289cb1c857959b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 7 Jan 2025 12:24:25 +0100 Subject: [PATCH 59/83] Temporary disable FIPS OpenSSL test cases. These seems to be cause by OpenSSL being broken by change in debugedit: https://bugzilla.redhat.com/show_bug.cgi?id=2335414 --- ruby.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f5c4680..3beb9cd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1209,9 +1209,15 @@ MSPECOPTS="" make -C %{_vpath_builddir} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Run Ruby OpenSSL tests in OpenSSL FIPS. +# Temporary disable some test cases. OpenSSL currently looks to be broken by +# debugedit. +# https://bugzilla.redhat.com/show_bug.cgi?id=2335414 make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ - %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose" + %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose \ + -n '!/OpenSSL::TestFIPS#test_fips_mode_get_is_true_on_fips_mode_enabled/' \ + -n '!/OpenSSL::TestFIPS#test_fips_mode_is_reentrant/' \ + -n '!/OpenSSL::TestFIPS#test_fips_mode_get_with_fips_mode_set/'" %{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} From e3690ac430df05803f10132080d180e5ee43f1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Jan 2025 17:22:02 +0100 Subject: [PATCH 60/83] Revert "Temporary disable FIPS OpenSSL test cases." This reverts commit 5f10b7c93e59aa3bf043b521289cb1c857959b6a. Related: rhbz#2335414 --- ruby.spec | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index 3beb9cd..41c95ae 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 19%{?dist} +Release: 20%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1209,15 +1209,9 @@ MSPECOPTS="" make -C %{_vpath_builddir} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Run Ruby OpenSSL tests in OpenSSL FIPS. -# Temporary disable some test cases. OpenSSL currently looks to be broken by -# debugedit. -# https://bugzilla.redhat.com/show_bug.cgi?id=2335414 make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ - %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose \ - -n '!/OpenSSL::TestFIPS#test_fips_mode_get_is_true_on_fips_mode_enabled/' \ - -n '!/OpenSSL::TestFIPS#test_fips_mode_is_reentrant/' \ - -n '!/OpenSSL::TestFIPS#test_fips_mode_get_with_fips_mode_set/'" + %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose" %{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} @@ -1880,6 +1874,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Wed Jan 08 2025 Vít Ondruch - 3.4.1-20 +- Re-enable FIPS test cases. + * Thu Jan 02 2025 Vít Ondruch - 3.4.1-19 - Upgrade to Ruby 3.4.1. Resolves: rhbz#2334047 From 7262ed40664c432b6afad976e639aeb514e8ce7f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 18 Jan 2025 22:53:00 +0000 Subject: [PATCH 61/83] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 41c95ae..463089c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 20%{?dist} +Release: 21%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1874,6 +1874,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Sat Jan 18 2025 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Wed Jan 08 2025 Vít Ondruch - 3.4.1-20 - Re-enable FIPS test cases. From 3541190791075389083112e15f20863b55a01182 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Fri, 24 Jan 2025 15:33:15 +0100 Subject: [PATCH 62/83] Stop including C++ header, it is deprecated since C++17. The header is useless in C++ and it is throwing a warning when it is being included since GCC 15. libdnf5 uses -Werror which turns the warning into an error making it fail to build. Delete the include in ruby sources to allow such libraries to build again with Ruby. https://bugs.ruby-lang.org/issues/21024 https://github.com/ruby/ruby/pull/12628 Resolves: rhbz#2336567 --- ...024-cstdbool-header-has-been-useless.patch | 26 +++++++++++++++++++ ruby.spec | 13 +++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch diff --git a/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch b/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch new file mode 100644 index 0000000..49837ac --- /dev/null +++ b/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch @@ -0,0 +1,26 @@ +From 57a10fcde1e52ad2282da01c457311d6f190ccfe Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Tue, 14 Jan 2025 19:11:33 +0900 +Subject: [PATCH] [Bug #21024] header has been useless + +And finally deprecated at C++-17. +Patched by jprokop (Jarek Prokop). +--- + include/ruby/internal/stdbool.h | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/include/ruby/internal/stdbool.h b/include/ruby/internal/stdbool.h +index 1ca61136ba..7f3e6dcf97 100644 +--- a/include/ruby/internal/stdbool.h ++++ b/include/ruby/internal/stdbool.h +@@ -27,10 +27,6 @@ + + #elif defined(__cplusplus) + # /* bool is a keyword in C++. */ +-# if defined(HAVE_STDBOOL_H) && (__cplusplus >= 201103L) +-# include +-# endif +-# + # ifndef __bool_true_false_are_defined + # define __bool_true_false_are_defined + # endif diff --git a/ruby.spec b/ruby.spec index 463089c..f4e363e 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 21%{?dist} +Release: 22%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -278,6 +278,12 @@ 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 +# Don't include header in C++ environment. +# https://bugs.ruby-lang.org/issues/21024 +# https://github.com/ruby/ruby/pull/12628 +# See discussion on Ruby 3.5 PR +# https://github.com/ruby/ruby/pull/12551#discussion_r1913285350 +Patch10: ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -769,6 +775,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 4 -p1 %patch 6 -p1 %patch 9 -p1 +%patch 10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1874,6 +1881,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Jan 24 2025 Jarek Prokop - 3.4.1-22 +- Stop including C++ header, it is deprecated since C++17. + Resolves: rhbz#2336567 + * Sat Jan 18 2025 Fedora Release Engineering - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From da900b87891522c97a642c3f692a78f393ab4c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= Date: Sat, 1 Feb 2025 19:57:15 +0100 Subject: [PATCH 63/83] Add explicit BR: libxcrypt-devel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Björn Esser --- ruby.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f4e363e..4396a7f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 22%{?dist} +Release: 23%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -297,6 +297,7 @@ BuildRequires: autoconf BuildRequires: gcc BuildRequires: make BuildRequires: libffi-devel +BuildRequires: libxcrypt-devel BuildRequires: libyaml-devel BuildRequires: openssl-devel BuildRequires: zlib-devel @@ -1881,6 +1882,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Sat Feb 01 2025 Björn Esser +- Add explicit BR: libxcrypt-devel + * Fri Jan 24 2025 Jarek Prokop - 3.4.1-22 - Stop including C++ header, it is deprecated since C++17. Resolves: rhbz#2336567 From a38fdce3da5af9a638062844bee376b1c7335457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 19 Feb 2025 12:09:18 +0100 Subject: [PATCH 64/83] Upgrade to Ruby 3.4.2. Resolves: rhbz#2345875 --- ...024-cstdbool-header-has-been-useless.patch | 26 ------------------- ruby.spec | 19 ++++++-------- sources | 2 +- 3 files changed, 9 insertions(+), 38 deletions(-) delete mode 100644 ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch diff --git a/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch b/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch deleted file mode 100644 index 49837ac..0000000 --- a/ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 57a10fcde1e52ad2282da01c457311d6f190ccfe Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 14 Jan 2025 19:11:33 +0900 -Subject: [PATCH] [Bug #21024] header has been useless - -And finally deprecated at C++-17. -Patched by jprokop (Jarek Prokop). ---- - include/ruby/internal/stdbool.h | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/include/ruby/internal/stdbool.h b/include/ruby/internal/stdbool.h -index 1ca61136ba..7f3e6dcf97 100644 ---- a/include/ruby/internal/stdbool.h -+++ b/include/ruby/internal/stdbool.h -@@ -27,10 +27,6 @@ - - #elif defined(__cplusplus) - # /* bool is a keyword in C++. */ --# if defined(HAVE_STDBOOL_H) && (__cplusplus >= 201103L) --# include --# endif --# - # ifndef __bool_true_false_are_defined - # define __bool_true_false_are_defined - # endif diff --git a/ruby.spec b/ruby.spec index 4396a7f..a9d940b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 4 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -121,9 +121,9 @@ %global drb_version 2.2.1 %global getoptlong_version 0.2.1 %global net_ftp_version 0.3.8 -%global net_imap_version 0.5.4 +%global net_imap_version 0.5.6 %global net_pop_version 0.1.2 -%global net_smtp_version 0.5.0 +%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 @@ -278,12 +278,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 -# Don't include header in C++ environment. -# https://bugs.ruby-lang.org/issues/21024 -# https://github.com/ruby/ruby/pull/12628 -# See discussion on Ruby 3.5 PR -# https://github.com/ruby/ruby/pull/12551#discussion_r1913285350 -Patch10: ruby-3.4.2-Bug-21024-cstdbool-header-has-been-useless.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} %{?with_rubypick:Suggests: rubypick} @@ -776,7 +770,6 @@ analysis result in RBS format, a standard type description format for Ruby %patch 4 -p1 %patch 6 -p1 %patch 9 -p1 -%patch 10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1882,7 +1875,11 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog -* Sat Feb 01 2025 Björn Esser +* Wed Feb 19 2025 Vít Ondruch - 3.4.2-23 +- Upgrade to Ruby 3.4.2. + Resolves: rhbz#2345875 + +* Sat Feb 01 2025 Björn Esser - 3.4.1-23 - Add explicit BR: libxcrypt-devel * Fri Jan 24 2025 Jarek Prokop - 3.4.1-22 diff --git a/sources b/sources index 504f64b..0fa9f06 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.4.1.tar.xz) = 8d2e34117696f9debf463ae1eed288fdbb5c1a12e32800e901b69218e3b7302a0066052077e2ebca851e3a635296199bd5a10437eea1d6f787f69a77bb865680 +SHA512 (ruby-3.4.2.tar.xz) = cb8b5023bce316393716548c5f0a44c7d0240724ff79b995517641266af30bedc6f402c1c8fa27368ea607e2aa6d36bbb201e00c6e9dd2a80d837431d32343b5 From e7395a7d22eb55694f192403fbbfe7b7da2c177f Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Tue, 8 Apr 2025 16:55:56 +0200 Subject: [PATCH 65/83] 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. ``` 184) Error: OpenSSL::TestPKeyRSA#test_sign_verify_options: OpenSSL::PKey::PKeyError: EVP_PKEY_CTX_ctrl_str(ctx, "rsa_mgf1_md", "SHA1"): digest not allowed (digest=SHA1) /builddir/build/BUILD/ruby-3.4.2-build/ruby-3.4.2/test/openssl/test_pkey_rsa.rb:113:in 'Hash#each' /builddir/build/BUILD/ruby-3.4.2-build/ruby-3.4.2/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::PKey::PKey#sign' /builddir/build/BUILD/ruby-3.4.2-build/ruby-3.4.2/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::TestPKeyRSA#test_sign_verify_options' 185) Error: OpenSSL::TestPKeyRSA#test_sign_verify_pss: OpenSSL::PKey::RSAError: digest not allowed (digest=SHA1) /builddir/build/BUILD/ruby-3.4.2-build/ruby-3.4.2/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::PKey::RSA#sign_pss' /builddir/build/BUILD/ruby-3.4.2-build/ruby-3.4.2/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::TestPKeyRSA#test_sign_verify_pss' Finished tests in 1152.595208s, 27.9812 tests/s, 5697.0278 assertions/s. 32251 tests, 6566367 assertions, 0 failures, 2 errors, 183 skips ``` According to a maintainer of the rpms/openssl, Dmitry Belyavskiy , the following patch is disabling SHA-1 PSS parameters. https://src.fedoraproject.org/rpms/openssl/blob/5f41d6a8f54cae29768a24ad72bf9daf521ce462/f/0018-RH-Allow-disabling-of-SHA1-signatures.patch Resolves: rhbz#2358256 --- ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch | 136 +++++++++++++++++++ ruby.spec | 10 +- 2 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch diff --git a/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch b/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch new file mode 100644 index 0000000..5695824 --- /dev/null +++ b/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch @@ -0,0 +1,136 @@ +From e0e771b76fbede656fe51c8bf18ce810f4afeee0 Mon Sep 17 00:00:00 2001 +From: Jun Aruga +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 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase + 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 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase + 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 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase + # 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 a9d940b..dd338e0 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 23%{?dist} +Release: 24%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -278,6 +278,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 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} @@ -770,6 +773,7 @@ analysis result in RBS format, a standard type description format for Ruby %patch 4 -p1 %patch 6 -p1 %patch 9 -p1 +%patch 10 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1875,6 +1879,10 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Tue Apr 08 2025 Jun Aruga - 3.4.2-24 +- Fix the tests using SHA-1 Probabilistic Signature Scheme (PSS) parameters. + Resolves: rhbz#2358256 + * Wed Feb 19 2025 Vít Ondruch - 3.4.2-23 - Upgrade to Ruby 3.4.2. Resolves: rhbz#2345875 From 43d2363c1e519fe664abd00ab287f54ddf83dee0 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 11 Jun 2025 17:40:56 +0200 Subject: [PATCH 66/83] Upgrade to ruby 3.4.4. Resolves: rhbz#2359563 --- ...3.0-Disable-syntax-suggest-test-case.patch | 2 +- ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch | 6 ++--- ruby.spec | 24 +++++++++++-------- sources | 2 +- 4 files changed, 19 insertions(+), 15 deletions(-) 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 10679ee..6130a82 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 -@@ -1662,8 +1662,6 @@ no-test-bundled-gems-spec: +@@ -1665,8 +1665,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 index 5695824..26ca3ec 100644 --- a/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch +++ b/ruby-3.4.2-openssl-Fix-SHA-1-PSS-tests.patch @@ -61,7 +61,7 @@ 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 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase +@@ -108,13 +108,13 @@ def test_sign_verify_options pssopts = { "rsa_padding_mode" => "pss", "rsa_pss_saltlen" => 20, @@ -77,7 +77,7 @@ index 360309b..850c16a 100644 # Defaults to PKCS #1 v1.5 padding => verification failure assert_equal false, key.verify("SHA256", sig_pss, data) -@@ -188,22 +188,22 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase +@@ -188,22 +188,22 @@ def test_sign_verify_pss data = "Sign me!" invalid_data = "Sign me?" @@ -108,7 +108,7 @@ index 360309b..850c16a 100644 # 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 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase +@@ -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 diff --git a/ruby.spec b/ruby.spec index dd338e0..983fe66 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 %global minor_version 4 -%global teeny_version 2 +%global teeny_version 4 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -27,7 +27,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.6.2 +%global rubygems_version 3.6.7 %global rubygems_molinillo_version 0.8.0 %global rubygems_net_http_version 0.6.0 %global rubygems_net_protocol_version 0.2.2 @@ -36,21 +36,21 @@ %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.2 +%global rubygems_uri_version 1.0.3 # Default gems. -%global bundler_version 2.6.2 -%global bundler_connection_pool_version 2.4.1 +%global bundler_version 2.6.7 +%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_pub_grub_version 0.5.0 %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.2 +%global bundler_uri_version 1.0.3 %global benchmark_version 0.4.0 -%global cgi_version 0.4.1 +%global cgi_version 0.4.2 %global date_version 3.4.1 %global delegate_version 0.4.0 %global did_you_mean_version 2.0.0 @@ -98,7 +98,7 @@ %global tmpdir_version 0.3.1 %global tsort_version 0.2.0 %global un_version 0.3.0 -%global uri_version 1.0.2 +%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 @@ -121,7 +121,7 @@ %global drb_version 2.2.1 %global getoptlong_version 0.2.1 %global net_ftp_version 0.3.8 -%global net_imap_version 0.5.6 +%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 @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 24%{?dist} +Release: 25%{?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 +* Wed Jun 11 2025 Jarek Prokop - 3.4.4-25 +- Upgrade to Ruby 3.4.4. + Resolves: rhbz#2359563 + * Tue Apr 08 2025 Jun Aruga - 3.4.2-24 - Fix the tests using SHA-1 Probabilistic Signature Scheme (PSS) parameters. Resolves: rhbz#2358256 diff --git a/sources b/sources index 0fa9f06..eb999d0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.4.2.tar.xz) = cb8b5023bce316393716548c5f0a44c7d0240724ff79b995517641266af30bedc6f402c1c8fa27368ea607e2aa6d36bbb201e00c6e9dd2a80d837431d32343b5 +SHA512 (ruby-3.4.4.tar.xz) = 0d258cf790daad424c866404b5cbdc8adba0e4e13764847a89adf2335229e5184095c9f3e9594705897697e48bcc322d9a9f919b04047abb2075daca9fce8871 From 1aeb02030c18394ddeed9643d6f032afa1e85743 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 12:11:35 +0000 Subject: [PATCH 67/83] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 983fe66..c9a4b2d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -177,7 +177,7 @@ Summary: An interpreter of object-oriented scripting language Name: ruby Version: %{ruby_version}%{?development_release} -Release: 25%{?dist} +Release: 26%{?dist} # Licenses, which are likely not included in binary RPMs: # Apache-2.0: # benchmark/gc/redblack.rb @@ -1879,6 +1879,9 @@ make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ %changelog +* Fri Jul 25 2025 Fedora Release Engineering +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Wed Jun 11 2025 Jarek Prokop - 3.4.4-25 - Upgrade to Ruby 3.4.4. Resolves: rhbz#2359563 From 563fb688b3f8840b495ee06f294927330b99d06d Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Wed, 6 Aug 2025 10:41:35 +0200 Subject: [PATCH 68/83] 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 69/83] 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 70/83] 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 71/83] 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 72/83] 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 73/83] 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 74/83] 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 75/83] 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 76/83] 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 77/83] 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 78/83] 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 79/83] 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 80/83] 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 81/83] 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 82/83] 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 83/83] 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