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 01/39] 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 02/39] 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 03/39] 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 04/39] 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 05/39] 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 06/39] 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 07/39] 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 08/39] 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 09/39] 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 10/39] 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 11/39] 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 12/39] 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 13/39] 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 14/39] 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 15/39] 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 16/39] 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 17/39] 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 18/39] 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 19/39] 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 20/39] 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 21/39] 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 22/39] 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 23/39] 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 24/39] 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 25/39] 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 26/39] 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 27/39] 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 28/39] 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 29/39] 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 30/39] 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 31/39] 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 32/39] 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 33/39] 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 34/39] 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 35/39] 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 36/39] 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 37/39] 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 38/39] 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 39/39] 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