Compare commits

...
Sign in to create a new pull request.

16 commits

Author SHA1 Message Date
Vít Ondruch
deb89378b5 Upgrade to Ruby 4.0.1.
Resolves: rhbz#2428861
2026-01-13 16:51:38 +01:00
Vít Ondruch
ed5fc66af7 Remove unused rubygems_plugin.rb
The use was dropped with introduction of Ruby 4.0 in
c670682a97
2026-01-13 16:51:31 +01:00
Vít Ondruch
95c21e5775 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/
~~~
2026-01-12 17:03:00 +01:00
Jarek Prokop
916dd3e4c2 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
2026-01-07 18:55:55 +01:00
Jarek Prokop
bc07cae127 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.
2026-01-07 18:55:55 +01:00
Jarek Prokop
4c3cde9ed2 Enable both zjit and yjit.
Since upstream's 029a48176c
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.
2026-01-07 18:55:10 +01:00
Jarek Prokop
5d8c8b3fb5 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.
2026-01-07 18:01:48 +01:00
Jarek Prokop
c670682a97 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
2026-01-07 18:01:48 +01:00
Vít Ondruch
4034e3e02c Update to Ruby 3.4.8.
Resolves: rhbz#2422963
Resolves: rhbz#2412227
2025-12-17 12:44:52 +01:00
Jun Aruga
9dc850b911 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
2025-10-23 18:24:32 +01:00
Jun Aruga
6b81f1b80f Upgrade to Ruby 3.4.7.
- Fix URI Credential Leakage Bypass previous fixes.

Resolves: rhbz#2402422
Resolves: CVE-2025-61594
2025-10-23 17:29:51 +01:00
Jarek Prokop
aa9dd7be5f 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
2025-10-15 15:38:03 +02:00
Vít Ondruch
97eeae3d75 Update IETF license information after legal review
https://gitlab.com/fedora/legal/fedora-license-data/-/issues/506
2025-10-06 09:55:45 +02:00
Vít Ondruch
f50637ef39 Add missing bundled tsort provide. 2025-10-06 09:55:45 +02:00
Jarek Prokop
84309be01e 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.
2025-08-18 17:45:03 +02:00
Jarek Prokop
563fb688b3 Upgrade to Ruby 3.4.5.
Resolves: rhbz#2380246
2025-08-18 17:23:34 +02:00
15 changed files with 555 additions and 455 deletions

1
.gitignore vendored
View file

@ -1,5 +1,6 @@
/*/
/ruby-*.tar.xz
/rexml-*.gem
/*.rpm
!/plans/

View file

@ -0,0 +1,28 @@
From 994ee4c17fb8c217ab0335df55620c6bdb5d5cbe Mon Sep 17 00:00:00 2001
From: tompng <tomoyapenguin@gmail.com>
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

View file

@ -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?= <vondruch@redhat.com>
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
@@ -3520,6 +3520,11 @@ AS_IF([test ${multiarch+set}], [
@@ -3556,6 +3556,11 @@ AS_IF([test ${multiarch+set}], [
])
archlibdir='${libdir}/${arch}'

View file

@ -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?= <vondruch@redhat.com>
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
@@ -4366,7 +4366,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$/

View file

@ -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?= <vondruch@redhat.com>
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
@@ -4430,6 +4430,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

View file

@ -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?= <vondruch@redhat.com>
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
@@ -4402,6 +4402,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=''
@@ -4426,6 +4430,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]

View file

@ -0,0 +1,22 @@
From f833e213596b0bcfad8264a555eb5093303fb5f2 Mon Sep 17 00:00:00 2001
From: Jarek Prokop <jprokop@redhat.com>
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

View file

@ -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?= <vondruch@redhat.com>
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
@@ -4316,9 +4316,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],
@@ -4341,57 +4338,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)
@@ -4408,6 +4411,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?= <vondruch@redhat.com>
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?= <vondruch@redhat.com>
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?= <vondruch@redhat.com>
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)

View file

@ -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?= <vondruch@redhat.com>
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, '.*') }

View file

@ -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?= <vondruch@redhat.com>
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
@@ -1665,8 +1665,6 @@ no-test-bundled-gems-spec:
@@ -1619,8 +1619,6 @@ no-test-bundled-gems-spec:
test-syntax-suggest:

View file

@ -1,136 +0,0 @@
From e0e771b76fbede656fe51c8bf18ce810f4afeee0 Mon Sep 17 00:00:00 2001
From: Jun Aruga <jaruga@redhat.com>
Date: Tue, 8 Apr 2025 15:03:06 +0200
Subject: [PATCH] Fix the tests using SHA-1 Probabilistic Signature Scheme
(PSS) parameters.
Fedora OpenSSL 3.5 on rawhide stopped accepting SHA-1 PSS[1] parameters.
This is different from the SHA-1 signatures which Fedora OpenSSL stopped
accepting since Fedora 41.[2]
This commit fixes the following test failures related to the SHA-1 PSS
parameters with Fedora OpenSSL 3.5.
Note these failures are the downstream Fedora OpenSSL RPM specific. The tests
pass without this commit with the upstream OpenSSL 3.5.
```
$ rpm -q openssl-libs openssl-devel
openssl-libs-3.5.0-2.fc43.x86_64
openssl-devel-3.5.0-2.fc43.x86_64
$ bundle exec rake test
...
E
===============================================================================================
Error: test_sign_verify_options(OpenSSL::TestPKeyRSA): OpenSSL::PKey::PKeyError: EVP_PKEY_CTX_ctrl_str(ctx, "rsa_mgf1_md", "SHA1"): digest not allowed (digest=SHA1)
/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'Hash#each'
/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::PKey::PKey#sign'
/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:113:in 'OpenSSL::TestPKeyRSA#test_sign_verify_options'
110: "rsa_pss_saltlen" => 20,
111: "rsa_mgf1_md" => "SHA1"
112: }
=> 113: sig_pss = key.sign("SHA256", data, pssopts)
114: assert_equal 256, sig_pss.bytesize
115: assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
116: assert_equal true, key.verify_pss("SHA256", sig_pss, data,
===============================================================================================
E
===============================================================================================
Error: test_sign_verify_pss(OpenSSL::TestPKeyRSA): OpenSSL::PKey::RSAError: digest not allowed (digest=SHA1)
/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::PKey::RSA#sign_pss'
/mnt/git/ruby/openssl/test/openssl/test_pkey_rsa.rb:191:in 'OpenSSL::TestPKeyRSA#test_sign_verify_pss'
188: data = "Sign me!"
189: invalid_data = "Sign me?"
190:
=> 191: signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1")
192: assert_equal 256, signature.bytesize
193: assert_equal true,
194: key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
===============================================================================================
...
577 tests, 4186 assertions, 0 failures, 2 errors, 0 pendings, 3 omissions, 0 notifications
```
[1] https://en.wikipedia.org/wiki/Probabilistic_signature_scheme
[2] https://fedoraproject.org/wiki/Changes/OpenSSLDistrustSHA1SigVer
---
test/openssl/test_pkey_rsa.rb | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb
index 360309b..850c16a 100644
--- a/test/openssl/test_pkey_rsa.rb
+++ b/test/openssl/test_pkey_rsa.rb
@@ -108,13 +108,13 @@ def test_sign_verify_options
pssopts = {
"rsa_padding_mode" => "pss",
"rsa_pss_saltlen" => 20,
- "rsa_mgf1_md" => "SHA1"
+ "rsa_mgf1_md" => "SHA256"
}
sig_pss = key.sign("SHA256", data, pssopts)
assert_equal 256, sig_pss.bytesize
assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
assert_equal true, key.verify_pss("SHA256", sig_pss, data,
- salt_length: 20, mgf1_hash: "SHA1")
+ salt_length: 20, mgf1_hash: "SHA256")
# Defaults to PKCS #1 v1.5 padding => verification failure
assert_equal false, key.verify("SHA256", sig_pss, data)
@@ -188,22 +188,22 @@ def test_sign_verify_pss
data = "Sign me!"
invalid_data = "Sign me?"
- signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1")
+ signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA256")
assert_equal 256, signature.bytesize
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA256")
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
assert_equal false,
- key.verify_pss("SHA256", signature, invalid_data, salt_length: 20, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, invalid_data, salt_length: 20, mgf1_hash: "SHA256")
- signature = key.sign_pss("SHA256", data, salt_length: :digest, mgf1_hash: "SHA1")
+ signature = key.sign_pss("SHA256", data, salt_length: :digest, mgf1_hash: "SHA256")
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: 32, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: 32, mgf1_hash: "SHA256")
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
assert_equal false,
- key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA256")
# The sign_pss with `salt_length: :max` raises the "invalid salt length"
# error in FIPS. We need to skip the tests in FIPS.
@@ -213,18 +213,18 @@ def test_sign_verify_pss
# FIPS 186-5 section 5.4 PKCS #1
# https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf
unless OpenSSL.fips_mode
- signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1")
+ signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA256")
# Should verify on the following salt_length (sLen).
# sLen <= emLen (octat) - 2 - hLen (octet) = 2048 / 8 - 2 - 256 / 8 = 222
# https://datatracker.ietf.org/doc/html/rfc8017#section-9.1.1
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA256")
assert_equal true,
- key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1")
+ key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA256")
end
assert_raise(OpenSSL::PKey::RSAError) {
- key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA1")
+ key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA256")
}
end
--
2.48.1

View file

@ -0,0 +1,117 @@
From 1cfb11bc8d01e4fc1ff47807721e29b250f0f19f Mon Sep 17 00:00:00 2001
From: Jarek Prokop <jprokop@redhat.com>
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 <XrXr@users.noreply.github.com>
---
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@)

549
ruby.spec

File diff suppressed because it is too large Load diff

View file

@ -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

View file

@ -1 +1 @@
SHA512 (ruby-3.4.4.tar.xz) = 0d258cf790daad424c866404b5cbdc8adba0e4e13764847a89adf2335229e5184095c9f3e9594705897697e48bcc322d9a9f919b04047abb2075daca9fce8871
SHA512 (ruby-4.0.1.tar.xz) = b67d9d1f97ba30200d103f8454e39dc2d0450819d51d91eb5451d44b0bafc56d2fa48bb1be6c5081babe5828f679984bad02b9bcee7441f6bd34c0a95b8f200b