From d97bc213ea7bfd667a91499feee291c99f1767a9 Mon Sep 17 00:00:00 2001 From: Jarek Prokop Date: Thu, 18 Jan 2024 13:37:36 +0100 Subject: [PATCH] Upgrade to Ruby 3.3.0. Imported from Fedora @ 3008410 Resolves: RHEL-17089 --- macros.rubygems | 31 +- operating_system.rb | 48 +- ruby-1.9.3-mkmf-verbose.patch | 25 - ...0-Enable-configuration-of-archlibdir.patch | 5 +- ...ed-paths-when-empty-version-string-i.patch | 5 +- ruby-2.1.0-always-use-i386.patch | 5 +- ruby-2.1.0-custom-rubygems-location.patch | 9 +- ruby-2.3.0-ruby_version.patch | 66 +- ruby-2.7.0-Initialize-ABRT-hook.patch | 33 +- ..._bug_reporter_add-witout-raising-err.patch | 34 - ...ery-RubyVM-FrozenCore-for-class-path.patch | 43 - ruby-3.1.1-ossl_ocsp-use-null.patch | 31 - ruby-3.1.2-ossl-tests-replace-sha1.patch | 609 -------- ruby-3.1.3-Fix-for-tzdata-2022g.patch | 70 - ...-extension-libraries-in-bundled-gems.patch | 338 ---- ...ct-compaction-support-during-runtime.patch | 256 ---- ...paction-methods-as-rb_f_notimplement.patch | 402 ----- ...c-compaction-methods_generated-files.patch | 502 ------ ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch | 27 - ...3.0-Disable-syntax-suggest-test-case.patch | 23 + ...ocations-in-Hash-compare_by_identity.patch | 92 ++ ....3.0-openssl-3.2.0-fips-enable-tests.patch | 32 - ...2.0-fips-fix-pkey-dh-require-openssl.patch | 73 - ....2.0-fips-fix-pkey-read-in-openssl-3.patch | 177 --- ...-3.2.0-fix-fips-get-set-in-openssl-3.patch | 142 -- ...I_ADDRCONFIG-when-making-getaddrinfo.patch | 241 +++ ...ranch-protection-compilation-for-arm.patch | 59 + ...uby-net-http-Renew-test-certificates.patch | 256 ++++ ...0-bundle-update-bundler-test-in-ruby.patch | 31 - ruby-spec-Fix-tests-on-tzdata-2022b.patch | 40 - ruby.spec | 1359 +++++++++-------- sources | 2 +- 32 files changed, 1499 insertions(+), 3567 deletions(-) delete mode 100644 ruby-1.9.3-mkmf-verbose.patch delete mode 100644 ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch delete mode 100644 ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch delete mode 100644 ruby-3.1.1-ossl_ocsp-use-null.patch delete mode 100644 ruby-3.1.2-ossl-tests-replace-sha1.patch delete mode 100644 ruby-3.1.3-Fix-for-tzdata-2022g.patch delete mode 100644 ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch delete mode 100644 ruby-3.2.0-Detect-compaction-support-during-runtime.patch delete mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch delete mode 100644 ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch delete mode 100644 ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch create mode 100644 ruby-3.3.0-Disable-syntax-suggest-test-case.patch create mode 100644 ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch delete mode 100644 ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch create mode 100644 ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch create mode 100644 ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch create mode 100644 ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch delete mode 100644 ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch delete mode 100644 ruby-spec-Fix-tests-on-tzdata-2022b.patch diff --git a/macros.rubygems b/macros.rubygems index 8c4d067..e2179bc 100644 --- a/macros.rubygems +++ b/macros.rubygems @@ -2,14 +2,31 @@ %gem_dir %{_datadir}/gems %gem_archdir %{_libdir}/gems +# %gem_name_version - Provides gem_name-version string. +# +# Usage: %gem_name_version [custom_gem_name] +# +# Prints gem_name-version string, by default joining %gem_name, %version and +# %prerelease macros. When [custom_gem_name] is provided, the +# custom_gem_name is joined with %custom_gem_name_version macro which needs +# to be predefined. Please note that for the version macros are the dashes +# replaced by underscores. +# +%gem_name_version() %{?1}%{!?1:%{gem_name}}-%{?1:%{lua: st = string.gsub(rpm.expand(\"%{1}\"), \"-\", \"_\"); print(rpm.expand('%{'..st..'_version}'))}}%{!?1:%{version}}%{?prerelease} + # Common gem locations and files. -%gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}%{?prerelease} -%gem_extdir_mri %{gem_archdir}/%{name}/%{gem_name}-%{version}%{?prerelease} -%gem_libdir %{gem_instdir}/lib -%gem_cache %{gem_dir}/cache/%{gem_name}-%{version}%{?prerelease}.gem -%gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}%{?prerelease}.gemspec -%gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}%{?prerelease} -%gem_plugin %{gem_dir}/plugins/%{gem_name}_plugin.rb +# +# These macros leverages %gem_name_version macro and accepts custom gem_name. +# +# -d Use default gem install location. +# +%gem_instdir() %{gem_dir}/gems/%{gem_name_version %{?1}} +%gem_extdir_mri() %{gem_archdir}/%{name}/%{gem_name_version %{?1}} +%gem_libdir() %{gem_instdir %{?1}}/lib +%gem_cache() %{gem_dir}/cache/%{gem_name_version %{?1}}.gem +%gem_spec(d) %{gem_dir}/specifications%{?-d:/default}/%{gem_name_version %{?1}}.gemspec +%gem_docdir() %{gem_dir}/doc/%{gem_name_version %{?1}} +%gem_plugin() %{gem_dir}/plugins/%{?1}%{!?1:%{gem_name}}_plugin.rb # %gem_install - Install gem into appropriate directory. diff --git a/operating_system.rb b/operating_system.rb index d95b303..fd56386 100644 --- a/operating_system.rb +++ b/operating_system.rb @@ -87,41 +87,51 @@ module Gem # Remove methods we are going to override. This avoids "method redefined;" # warnings otherwise issued by Ruby. - remove_method :operating_system_defaults if method_defined? :operating_system_defaults remove_method :default_dir if method_defined? :default_dir + remove_method :default_specifications_dir if method_defined? :default_specifications_dir remove_method :default_path if method_defined? :default_path + remove_method :default_bindir if method_defined? :default_bindir remove_method :default_ext_dir_for if method_defined? :default_ext_dir_for - ## - # Regular user installs into user directory, root manages /usr/local. - - def operating_system_defaults - unless opt_build_root? - options = if Process.uid == 0 - "--install-dir=#{Gem.default_dirs[:local][:gem_dir]} --bindir #{Gem.default_dirs[:local][:bin_dir]}" - else - "--user-install --bindir #{File.join [Dir.home, 'bin']}" - end - - {"gem" => options} - else - {} - end - end - ## # RubyGems default overrides. def default_dir - Gem.default_dirs[:system][:gem_dir] + if opt_build_root? + Gem.default_dirs[:system][:gem_dir] + elsif Process.uid == 0 + Gem.default_dirs[:local][:gem_dir] + else + Gem.user_dir + end end + ## + # Path to specification files of default gems. + + def default_specifications_dir + @default_specifications_dir ||= File.join(Gem.default_dirs[:system][:gem_dir], "specifications", "default") + end + + ## + # Default gem load path + def default_path path = default_dirs.collect {|location, paths| paths[:gem_dir]} path.unshift Gem.user_dir if File.exist? Gem.user_home path end + def default_bindir + if opt_build_root? + Gem.default_dirs[:system][:bin_dir] + elsif Process.uid == 0 + Gem.default_dirs[:local][:bin_dir] + else + File.join [Dir.home, 'bin'] + end + end + def default_ext_dir_for base_dir dir = if rpmbuild? build_dir = base_dir.chomp Gem.default_dirs[:system][:gem_dir] diff --git a/ruby-1.9.3-mkmf-verbose.patch b/ruby-1.9.3-mkmf-verbose.patch deleted file mode 100644 index 2113bea..0000000 --- a/ruby-1.9.3-mkmf-verbose.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 28cc0749d6729aa2444661ee7b411e183fe220b0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 19 Nov 2012 15:14:51 +0100 -Subject: [PATCH] Verbose mkmf. - ---- - lib/mkmf.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/mkmf.rb b/lib/mkmf.rb -index 682eb46..e6b1445 100644 ---- a/lib/mkmf.rb -+++ b/lib/mkmf.rb -@@ -1974,7 +1974,7 @@ def configuration(srcdir) - SHELL = /bin/sh - - # V=0 quiet, V=1 verbose. other values don't work. --V = 0 -+V = 1 - V0 = $(V:0=) - Q1 = $(V:1=) - Q = $(Q1:0=@) --- -1.8.3.1 - diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index f82660f..826d5f5 100644 --- a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch +++ b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index d261ea57b5..3c13076b82 100644 --- a/configure.ac +++ b/configure.ac -@@ -3368,6 +3368,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3470,6 +3470,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' @@ -23,6 +23,3 @@ index d261ea57b5..3c13076b82 100644 sitearchlibdir='${libdir}/${sitearch}' archincludedir='${includedir}/${arch}' sitearchincludedir='${includedir}/${sitearch}' --- -2.22.0 - 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 041f475..fb9b618 100644 --- a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch +++ b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch @@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac index c42436c23d..d261ea57b5 100644 --- a/configure.ac +++ b/configure.ac -@@ -4026,7 +4026,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -4309,7 +4309,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then @@ -75,6 +75,3 @@ index 07076d4..35e6c3c 100755 when /^ARCH_FLAG$/ val = "arch_flag || #{val}" if universal when /^UNIVERSAL_ARCHNAMES$/ --- -1.9.0 - diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index dffeb91..a64b812 100644 --- a/ruby-2.1.0-always-use-i386.patch +++ b/ruby-2.1.0-always-use-i386.patch @@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac index 3c13076b82..93af30321d 100644 --- a/configure.ac +++ b/configure.ac -@@ -4090,6 +4090,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -4373,6 +4373,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl @@ -20,6 +20,3 @@ index 3c13076b82..93af30321d 100644 AS_IF([test "${universal_binary-no}" = yes ], [ arch="universal-${target_os}" AS_IF([test "${rb_cv_architecture_available}" = yes], [ --- -1.8.3.1 - diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index fdf0dfe..91e53a1 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac index 93af30321d..bc13397e0e 100644 --- a/configure.ac +++ b/configure.ac -@@ -4062,6 +4062,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -4345,6 +4345,10 @@ AC_ARG_WITH(vendorarchdir, [vendorarchdir=$withval], [vendorarchdir=${multiarch+'${rubysitearchprefix}/vendor_ruby'${ruby_version_dir}}${multiarch-'${vendorlibdir}/${sitearch}'}]) @@ -26,7 +26,7 @@ index 93af30321d..bc13397e0e 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) RUBY_EXEC_PREFIX='' -@@ -4086,6 +4090,7 @@ AC_SUBST(sitearchdir)dnl +@@ -4369,6 +4373,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl @@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755 mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -590,7 +591,16 @@ def stub +@@ -595,7 +596,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] @@ -92,6 +92,3 @@ index e9110a17ca..76a1f0a315 100755 end install?(:local, :comm, :hdr, :'comm-hdr') do --- -1.8.3.1 - diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 1f42472..c921c36 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned directories, e.g. instead of default X.Y.Z, you can specify whatever string. --- - configure.ac | 64 ++++++++++++++++++++++++--------------------- + configure.ac | 66 ++++++++++++++++++++++++--------------------- template/ruby.pc.in | 1 + - 2 files changed, 35 insertions(+), 30 deletions(-) + 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3977,9 +3977,6 @@ AS_CASE(["$target_os"], +@@ -4259,9 +4259,6 @@ AS_CASE(["$target_os"], rubyw_install_name='$(RUBYW_INSTALL_NAME)' ]) @@ -30,7 +30,7 @@ index 80b137e380..63cd3b4f8b 100644 rubyarchprefix=${multiarch+'${archlibdir}/${RUBY_BASE_NAME}'}${multiarch-'${rubylibprefix}/${arch}'} AC_ARG_WITH(rubyarchprefix, AS_HELP_STRING([--with-rubyarchprefix=DIR], -@@ -4002,56 +3999,62 @@ AC_ARG_WITH(ridir, +@@ -4284,57 +4281,63 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -46,6 +46,7 @@ index 80b137e380..63cd3b4f8b 100644 -AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [ - { - echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" +- echo '@%:@include "confdefs.h"' - echo '#define STRINGIZE(x) x' - test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' - echo '#include "version.h"' @@ -61,6 +62,7 @@ index 80b137e380..63cd3b4f8b 100644 +RUBY_LIB_VERSION_STYLE='3 /* full */' +{ +echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE" ++echo '@%:@include "confdefs.h"' +echo '#define STRINGIZE(x) x' +test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0' +echo '#include "version.h"' @@ -120,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -4068,6 +4071,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -4351,6 +4354,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -140,8 +142,6 @@ index 8a2c066..c81b211 100644 RUBY_API_VERSION=@RUBY_API_VERSION@ RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@ arch=@arch@ --- -2.1.0 From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001 @@ -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 -@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false) +@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir @@ -180,9 +180,6 @@ index d4c110e..d39c9a6 100755 prepare "rdoc", ridatadir install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode) end --- -2.23.0 - From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= @@ -198,31 +195,31 @@ diff --git a/lib/rubygems/defaults.rb b/lib/rubygems/defaults.rb index d4ff4a262c..3f9a5bf590 100644 --- a/lib/rubygems/defaults.rb +++ b/lib/rubygems/defaults.rb -@@ -34,7 +34,7 @@ def self.default_spec_cache_dir +@@ -35,7 +35,7 @@ def self.default_spec_cache_dir # specified in the environment def self.default_dir -- @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version']) -+ @default_dir ||= File.join(RbConfig::CONFIG['rubylibprefix'], 'gems', RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version']) +- @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"]) ++ @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"]) end ## -@@ -103,7 +103,8 @@ def self.user_dir +@@ -104,7 +104,8 @@ def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? File.join parts end -@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc: - return nil unless RbConfig::CONFIG.key? 'vendordir' +@@ -265,7 +266,7 @@ def self.vendor_dir # :nodoc: + return nil unless RbConfig::CONFIG.key? "vendordir" - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] end ## @@ -230,27 +227,25 @@ 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 -@@ -1410,7 +1410,8 @@ def test_self_use_paths +@@ -1351,7 +1351,8 @@ def test_self_use_paths def test_self_user_dir - parts = [@userhome, '.gem', Gem.ruby_engine] -- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty? -+ ruby_version_dir_name = RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + parts = [@userhome, ".gem", Gem.ruby_engine] +- parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? ++ ruby_version_dir_name = RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] + parts << ruby_version_dir_name unless ruby_version_dir_name.empty? FileUtils.mkdir_p File.join(parts) -@@ -1486,7 +1487,7 @@ def test_self_vendor_dir - vendordir(File.join(@tempdir, 'vendor')) do +@@ -1427,7 +1428,7 @@ def test_self_vendor_dir + vendordir(File.join(@tempdir, "vendor")) do expected = - File.join RbConfig::CONFIG['vendordir'], 'gems', -- RbConfig::CONFIG['ruby_version'] -+ RbConfig::CONFIG['ruby_version_dir_name'] || RbConfig::CONFIG['ruby_version'] + File.join RbConfig::CONFIG["vendordir"], "gems", +- RbConfig::CONFIG["ruby_version"] ++ RbConfig::CONFIG["ruby_version_dir_name"] || RbConfig::CONFIG["ruby_version"] assert_equal expected, Gem.vendor_dir end --- -2.1.0 From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001 @@ -267,7 +262,7 @@ diff --git a/configure.ac b/configure.ac index a00f2b6776..999e2d6d5d 100644 --- a/configure.ac +++ b/configure.ac -@@ -108,7 +108,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` +@@ -135,7 +135,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"` RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"` AC_SUBST(RUBY_BASE_NAME) AC_SUBST(RUBYW_BASE_NAME) @@ -276,6 +271,3 @@ index a00f2b6776..999e2d6d5d 100644 dnl checks for alternative programs AC_CANONICAL_BUILD --- -2.1.0 - diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index fc2bd08..0f32243 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -15,10 +15,11 @@ To keep the things simple for now, load the ABRT hook via C. [4]: https://github.com/ruby/ruby/pull/2735 [5]: https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ --- - abrt.c | 12 ++++++++++++ - common.mk | 3 ++- - ruby.c | 4 ++++ - 3 files changed, 18 insertions(+), 1 deletion(-) + abrt.c | 12 ++++++++++++ + common.mk | 3 ++- + ruby.c | 4 ++++ + spec/ruby/core/kernel/require_spec.rb | 2 ++ + 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 abrt.c diff --git a/abrt.c b/abrt.c @@ -43,9 +44,9 @@ diff --git a/common.mk b/common.mk index b2e5b2b6d0..f39f81da5c 100644 --- a/common.mk +++ b/common.mk -@@ -82,7 +82,8 @@ ENC_MK = enc.mk - MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \ - RUBY="$(MINIRUBY)" MINIRUBY="$(MINIRUBY)" $(mflags) +@@ -111,7 +111,8 @@ PRISM_FILES = prism/api_node.$(OBJEXT) \ + prism/prism.$(OBJEXT) \ + prism_init.$(OBJEXT) -COMMONOBJS = array.$(OBJEXT) \ +COMMONOBJS = abrt.$(OBJEXT) \ @@ -57,7 +58,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1611,10 +1611,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1724,10 +1724,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); @@ -72,6 +73,16 @@ index 60c57d6259..1eec16f2c8 100644 rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX")); } --- -2.24.1 - +diff --git a/spec/ruby/core/kernel/require_spec.rb b/spec/ruby/core/kernel/require_spec.rb +index 60c57d6259..1eec16f2c8 100644 +--- a/spec/ruby/core/kernel/require_spec.rb ++++ b/spec/ruby/core/kernel/require_spec.rb +@@ -25,6 +25,8 @@ + out = ruby_exe("puts $LOADED_FEATURES", options: '--disable-gems --disable-did-you-mean') + features = out.lines.map { |line| File.basename(line.chomp, '.*') } + ++ # Ignore ABRT ++ features -= %w[abrt] + # Ignore CRuby internals + features -= %w[encdb transdb windows_1252] + features.reject! { |feature| feature.end_with?('-fake') } diff --git a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch deleted file mode 100644 index 5c7afe8..0000000 --- a/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 9b42fce32bff25e0569581f76f532b9d57865aef Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Mon, 27 Jul 2020 14:56:05 +0200 -Subject: [PATCH] Timeout the test_bug_reporter_add witout raising error. - -While timeouting the threads might be still good idea, it does not seems -the timeout impacts the TestBugReporter#test_bug_reporter_add result, -because the output of the child process has been already collected -earlier. - -It seems that when the system is under heavy load, the thread might not -be sheduled to finish its processing. Even finishing the child process -might take tens of seconds and therefore the test case finish might take -a while. ---- - test/-ext-/bug_reporter/test_bug_reporter.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb -index 628fcd0340..2c677cc8a7 100644 ---- a/test/-ext-/bug_reporter/test_bug_reporter.rb -+++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -22,7 +22,7 @@ def test_bug_reporter_add - args = ["--disable-gems", "-r-test-/bug_reporter", - "-C", tmpdir] - stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" -- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT") -+ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil) - ensure - FileUtils.rm_rf(tmpdir) if tmpdir - end --- -2.27.0 - diff --git a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch b/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch deleted file mode 100644 index 973fe72..0000000 --- a/ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0ade5611df9f981005eed32b369d1e699e520221 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADt=20Ondruch?= -Date: Thu, 10 Feb 2022 13:26:44 +0100 -Subject: [PATCH] Don't query `RubyVM::FrozenCore` for class path. - -The `RubyVM::FrozenCore` class path is corrupted during GC cycle and -returns random garbage, which might result in segfault. - -But since it is easy to detect the `RubyVM::FrozenCore`, just provide -the class path explicitly as a workaround. - -Other possibility would be to ignore `RubyVM::FrozenCore` simlarly as -TracePoint API does: - -https://github.com/ruby/ruby/blob/46f6575157d4c2f6bbd5693896e26a65037e5552/vm_trace.c#L411 ---- - vm.c | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/vm.c b/vm.c -index 8ce8b279d4..3d189fa63a 100644 ---- a/vm.c -+++ b/vm.c -@@ -479,7 +479,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id, - } - type = BUILTIN_TYPE(klass); - if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) { -- VALUE name = rb_class_path(klass); -+ VALUE name = Qnil; -+ /* -+ * Special treatment for rb_mRubyVMFrozenCore wchi is broken by GC. -+ * https://bugs.ruby-lang.org/issues/18257 -+ */ -+ if (klass == rb_mRubyVMFrozenCore) -+ name = rb_str_new_cstr("RubyVM::FrozenCore"); -+ else -+ name = rb_class_path(klass); - const char *classname, *filename; - const char *methodname = rb_id2name(id); - if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) { --- -2.34.1 - diff --git a/ruby-3.1.1-ossl_ocsp-use-null.patch b/ruby-3.1.1-ossl_ocsp-use-null.patch deleted file mode 100644 index d6d39ef..0000000 --- a/ruby-3.1.1-ossl_ocsp-use-null.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ext/openssl/ossl_ocsp.c.orig 2022-04-07 16:40:13.263752886 +0200 -+++ ext/openssl/ossl_ocsp.c 2022-04-07 16:45:56.818971187 +0200 -@@ -382,7 +382,7 @@ - if (!NIL_P(flags)) - flg = NUM2INT(flags); - if (NIL_P(digest)) -- md = EVP_sha1(); -+ md = NULL; - else - md = ossl_evp_get_digestbyname(digest); - if (NIL_P(certs)) -@@ -1033,7 +1033,7 @@ - if (!NIL_P(flags)) - flg = NUM2INT(flags); - if (NIL_P(digest)) -- md = EVP_sha1(); -+ md = NULL; - else - md = ossl_evp_get_digestbyname(digest); - if (NIL_P(certs)) ---- test/openssl/test_ocsp.rb.orig 2022-04-08 08:20:31.400739869 +0200 -+++ test/openssl/test_ocsp.rb 2022-04-08 08:20:37.208727488 +0200 -@@ -99,7 +99,7 @@ - request.sign(@cert, @cert_key, [@ca_cert], 0) - asn1 = OpenSSL::ASN1.decode(request.to_der) - assert_equal cid.to_der, asn1.value[0].value.find { |a| a.tag_class == :UNIVERSAL }.value[0].value[0].to_der -- assert_equal OpenSSL::ASN1.ObjectId("sha1WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der -+ assert_equal OpenSSL::ASN1.ObjectId("sha256WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der - assert_equal @cert.to_der, asn1.value[1].value[0].value[2].value[0].value[0].to_der - assert_equal @ca_cert.to_der, asn1.value[1].value[0].value[2].value[0].value[1].to_der - assert_equal asn1.to_der, OpenSSL::OCSP::Request.new(asn1.to_der).to_der diff --git a/ruby-3.1.2-ossl-tests-replace-sha1.patch b/ruby-3.1.2-ossl-tests-replace-sha1.patch deleted file mode 100644 index 8f0e2b3..0000000 --- a/ruby-3.1.2-ossl-tests-replace-sha1.patch +++ /dev/null @@ -1,609 +0,0 @@ -diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb -index fedcb93..53ad621 100644 ---- a/ext/openssl/extconf.rb -+++ b/ext/openssl/extconf.rb -@@ -169,6 +169,7 @@ have_func("SSL_CTX_set_post_handshake_auth") - - # added in 1.1.1 - have_func("EVP_PKEY_check") -+have_func("SSL_CTX_set_ciphersuites") - - # added in 3.0.0 - have_func("SSL_set0_tmp_dh_pkey") -diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h -index 4b51268..2ab8aea 100644 ---- a/ext/openssl/ossl.h -+++ b/ext/openssl/ossl.h -@@ -43,13 +43,13 @@ - #ifndef LIBRESSL_VERSION_NUMBER - # define OSSL_IS_LIBRESSL 0 - # define OSSL_OPENSSL_PREREQ(maj, min, pat) \ -- (OPENSSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) -+ (OPENSSL_VERSION_NUMBER >= ((maj << 28) | (min << 20) | (pat << 12))) - # define OSSL_LIBRESSL_PREREQ(maj, min, pat) 0 - #else - # define OSSL_IS_LIBRESSL 1 - # define OSSL_OPENSSL_PREREQ(maj, min, pat) 0 - # define OSSL_LIBRESSL_PREREQ(maj, min, pat) \ -- (LIBRESSL_VERSION_NUMBER >= (maj << 28) | (min << 20) | (pat << 12)) -+ (LIBRESSL_VERSION_NUMBER >= ((maj << 28) | (min << 20) | (pat << 12))) - #endif - - #if !defined(OPENSSL_NO_ENGINE) && !OSSL_OPENSSL_PREREQ(3, 0, 0) -diff --git a/ext/openssl/ossl_asn1.c b/ext/openssl/ossl_asn1.c -index a61d3ee..0d3fa9a 100644 ---- a/ext/openssl/ossl_asn1.c -+++ b/ext/openssl/ossl_asn1.c -@@ -1522,7 +1522,7 @@ Init_ossl_asn1(void) - * - * An Array that stores the name of a given tag number. These names are - * the same as the name of the tag constant that is additionally defined, -- * e.g. +UNIVERSAL_TAG_NAME[2] = "INTEGER"+ and +OpenSSL::ASN1::INTEGER = 2+. -+ * e.g. UNIVERSAL_TAG_NAME[2] = "INTEGER" and OpenSSL::ASN1::INTEGER = 2. - * - * == Example usage - * -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 2a4835a..24d0da4 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -670,7 +670,7 @@ ossl_pkey_export_traditional(int argc, VALUE *argv, VALUE self, int to_der) - } - } - else { --#if OPENSSL_VERSION_NUMBER >= 0x10100000 && !defined(LIBRESSL_VERSION_NUMBER) -+#if OSSL_OPENSSL_PREREQ(1, 1, 0) || OSSL_LIBRESSL_PREREQ(3, 5, 0) - if (!PEM_write_bio_PrivateKey_traditional(bio, pkey, enc, NULL, 0, - ossl_pem_passwd_cb, - (void *)pass)) { -diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c -index 9a0682a..af262d9 100644 ---- a/ext/openssl/ossl_ssl.c -+++ b/ext/openssl/ossl_ssl.c -@@ -959,27 +959,13 @@ ossl_sslctx_get_ciphers(VALUE self) - return ary; - } - --/* -- * call-seq: -- * ctx.ciphers = "cipher1:cipher2:..." -- * ctx.ciphers = [name, ...] -- * ctx.ciphers = [[name, version, bits, alg_bits], ...] -- * -- * Sets the list of available cipher suites for this context. Note in a server -- * context some ciphers require the appropriate certificates. For example, an -- * RSA cipher suite can only be chosen when an RSA certificate is available. -- */ - static VALUE --ossl_sslctx_set_ciphers(VALUE self, VALUE v) -+build_cipher_string(VALUE v) - { -- SSL_CTX *ctx; - VALUE str, elem; - int i; - -- rb_check_frozen(self); -- if (NIL_P(v)) -- return v; -- else if (RB_TYPE_P(v, T_ARRAY)) { -+ if (RB_TYPE_P(v, T_ARRAY)) { - str = rb_str_new(0, 0); - for (i = 0; i < RARRAY_LEN(v); i++) { - elem = rb_ary_entry(v, i); -@@ -993,14 +979,67 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v) - StringValue(str); - } - -+ return str; -+} -+ -+/* -+ * call-seq: -+ * ctx.ciphers = "cipher1:cipher2:..." -+ * ctx.ciphers = [name, ...] -+ * ctx.ciphers = [[name, version, bits, alg_bits], ...] -+ * -+ * Sets the list of available cipher suites for this context. Note in a server -+ * context some ciphers require the appropriate certificates. For example, an -+ * RSA cipher suite can only be chosen when an RSA certificate is available. -+ */ -+static VALUE -+ossl_sslctx_set_ciphers(VALUE self, VALUE v) -+{ -+ SSL_CTX *ctx; -+ VALUE str; -+ -+ rb_check_frozen(self); -+ if (NIL_P(v)) -+ return v; -+ -+ str = build_cipher_string(v); -+ - GetSSLCTX(self, ctx); -- if (!SSL_CTX_set_cipher_list(ctx, StringValueCStr(str))) { -+ if (!SSL_CTX_set_cipher_list(ctx, StringValueCStr(str))) - ossl_raise(eSSLError, "SSL_CTX_set_cipher_list"); -- } - - return v; - } - -+#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES -+/* -+ * call-seq: -+ * ctx.ciphersuites = "cipher1:cipher2:..." -+ * ctx.ciphersuites = [name, ...] -+ * ctx.ciphersuites = [[name, version, bits, alg_bits], ...] -+ * -+ * Sets the list of available TLSv1.3 cipher suites for this context. -+ */ -+static VALUE -+ossl_sslctx_set_ciphersuites(VALUE self, VALUE v) -+{ -+ SSL_CTX *ctx; -+ VALUE str; -+ -+ rb_check_frozen(self); -+ if (NIL_P(v)) -+ return v; -+ -+ str = build_cipher_string(v); -+ -+ GetSSLCTX(self, ctx); -+ if (!SSL_CTX_set_ciphersuites(ctx, StringValueCStr(str))) -+ ossl_raise(eSSLError, "SSL_CTX_set_ciphersuites"); -+ -+ return v; -+} -+#endif -+ - #ifndef OPENSSL_NO_DH - /* - * call-seq: -@@ -2703,6 +2742,9 @@ Init_ossl_ssl(void) - ossl_sslctx_set_minmax_proto_version, 2); - rb_define_method(cSSLContext, "ciphers", ossl_sslctx_get_ciphers, 0); - rb_define_method(cSSLContext, "ciphers=", ossl_sslctx_set_ciphers, 1); -+#ifdef HAVE_SSL_CTX_SET_CIPHERSUITES -+ rb_define_method(cSSLContext, "ciphersuites=", ossl_sslctx_set_ciphersuites, 1); -+#endif - #ifndef OPENSSL_NO_DH - rb_define_method(cSSLContext, "tmp_dh=", ossl_sslctx_set_tmp_dh, 1); - #endif -diff --git a/test/openssl/test_asn1.rb b/test/openssl/test_asn1.rb -index 0fd7971..c79bc14 100644 ---- a/test/openssl/test_asn1.rb -+++ b/test/openssl/test_asn1.rb -@@ -14,7 +14,7 @@ class OpenSSL::TestASN1 < OpenSSL::TestCase - ["keyUsage","keyCertSign, cRLSign",true], - ["subjectKeyIdentifier","hash",false], - ] -- dgst = OpenSSL::Digest.new('SHA1') -+ dgst = OpenSSL::Digest.new('SHA256') - cert = OpenSSL::TestUtils.issue_cert( - subj, key, s, exts, nil, nil, digest: dgst, not_before: now, not_after: now+3600) - -@@ -42,7 +42,7 @@ class OpenSSL::TestASN1 < OpenSSL::TestCase - assert_equal(OpenSSL::ASN1::Sequence, sig.class) - assert_equal(2, sig.value.size) - assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class) -- assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid) -+ assert_equal("1.2.840.113549.1.1.11", sig.value[0].oid) - assert_equal(OpenSSL::ASN1::Null, sig.value[1].class) - - dn = tbs_cert.value[3] # issuer -@@ -189,7 +189,7 @@ class OpenSSL::TestASN1 < OpenSSL::TestCase - assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class) - - assert_equal(OpenSSL::ASN1::BitString, sig_val.class) -- cululated_sig = key.sign(OpenSSL::Digest.new('SHA1'), tbs_cert.to_der) -+ cululated_sig = key.sign(OpenSSL::Digest.new('SHA256'), tbs_cert.to_der) - assert_equal(cululated_sig, sig_val.value) - end - -diff --git a/test/openssl/test_ns_spki.rb b/test/openssl/test_ns_spki.rb -index ed3be86..383931b 100644 ---- a/test/openssl/test_ns_spki.rb -+++ b/test/openssl/test_ns_spki.rb -@@ -22,7 +22,7 @@ class OpenSSL::TestNSSPI < OpenSSL::TestCase - spki = OpenSSL::Netscape::SPKI.new - spki.challenge = "RandomString" - spki.public_key = key1.public_key -- spki.sign(key1, OpenSSL::Digest.new('SHA1')) -+ spki.sign(key1, OpenSSL::Digest.new('SHA256')) - assert(spki.verify(spki.public_key)) - assert(spki.verify(key1.public_key)) - assert(!spki.verify(key2.public_key)) -diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb -index 726b7db..08213df 100644 ---- a/test/openssl/test_pkey_dsa.rb -+++ b/test/openssl/test_pkey_dsa.rb -@@ -36,8 +36,8 @@ class OpenSSL::TestPKeyDSA < OpenSSL::PKeyTestCase - assert_equal true, dsa512.verify(OpenSSL::Digest.new('DSS1'), signature, data) - end - -- signature = dsa512.sign("SHA1", data) -- assert_equal true, dsa512.verify("SHA1", signature, data) -+ signature = dsa512.sign("SHA256", data) -+ assert_equal true, dsa512.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - MCwCFH5h40plgU5Fh0Z4wvEEpz0eE9SnAhRPbkRB8ggsN/vsSEYMXvJwjGg/ -diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb -index ffe5a94..c06fe6f 100644 ---- a/test/openssl/test_pkey_ec.rb -+++ b/test/openssl/test_pkey_ec.rb -@@ -98,8 +98,8 @@ class OpenSSL::TestEC < OpenSSL::PKeyTestCase - def test_sign_verify - p256 = Fixtures.pkey("p256") - data = "Sign me!" -- signature = p256.sign("SHA1", data) -- assert_equal true, p256.verify("SHA1", signature, data) -+ signature = p256.sign("SHA256", data) -+ assert_equal true, p256.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - MEQCIEOTY/hD7eI8a0qlzxkIt8LLZ8uwiaSfVbjX2dPAvN11AiAQdCYx56Fq -diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb -index 4bb39ed..9e06e43 100644 ---- a/test/openssl/test_pkey_rsa.rb -+++ b/test/openssl/test_pkey_rsa.rb -@@ -80,8 +80,8 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase - def test_sign_verify - rsa1024 = Fixtures.pkey("rsa1024") - data = "Sign me!" -- signature = rsa1024.sign("SHA1", data) -- assert_equal true, rsa1024.verify("SHA1", signature, data) -+ signature = rsa1024.sign("SHA256", data) -+ assert_equal true, rsa1024.verify("SHA256", signature, data) - - signature0 = (<<~'end;').unpack("m")[0] - oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+ -@@ -113,10 +113,10 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase - def test_sign_verify_raw - key = Fixtures.pkey("rsa-1") - data = "Sign me!" -- hash = OpenSSL::Digest.digest("SHA1", data) -- signature = key.sign_raw("SHA1", hash) -- assert_equal true, key.verify_raw("SHA1", signature, hash) -- assert_equal true, key.verify("SHA1", signature, data) -+ hash = OpenSSL::Digest.digest("SHA256", data) -+ signature = key.sign_raw("SHA256", hash) -+ assert_equal true, key.verify_raw("SHA256", signature, hash) -+ assert_equal true, key.verify("SHA256", signature, data) - - # Too long data - assert_raise(OpenSSL::PKey::PKeyError) { -@@ -129,9 +129,9 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase - "rsa_pss_saltlen" => 20, - "rsa_mgf1_md" => "SHA256" - } -- sig_pss = key.sign_raw("SHA1", hash, pssopts) -- assert_equal true, key.verify("SHA1", sig_pss, data, pssopts) -- assert_equal true, key.verify_raw("SHA1", sig_pss, hash, pssopts) -+ sig_pss = key.sign_raw("SHA256", hash, pssopts) -+ assert_equal true, key.verify("SHA256", sig_pss, data, pssopts) -+ assert_equal true, key.verify_raw("SHA256", sig_pss, hash, pssopts) - end - - def test_sign_verify_raw_legacy -diff --git a/test/openssl/test_ssl.rb b/test/openssl/test_ssl.rb -index a7607da..3ba8b39 100644 ---- a/test/openssl/test_ssl.rb -+++ b/test/openssl/test_ssl.rb -@@ -676,10 +676,16 @@ class OpenSSL::TestSSL < OpenSSL::SSLTestCase - # buzz.example.net, respectively). ... - assert_equal(true, OpenSSL::SSL.verify_certificate_identity( - create_cert_with_san('DNS:baz*.example.com'), 'baz1.example.com')) -+ -+ # LibreSSL 3.5.0+ doesn't support other wildcard certificates -+ # (it isn't required to, as RFC states MAY, not MUST) -+ return if libressl?(3, 5, 0) -+ - assert_equal(true, OpenSSL::SSL.verify_certificate_identity( - create_cert_with_san('DNS:*baz.example.com'), 'foobaz.example.com')) - assert_equal(true, OpenSSL::SSL.verify_certificate_identity( - create_cert_with_san('DNS:b*z.example.com'), 'buzz.example.com')) -+ - # Section 6.4.3 of RFC6125 states that client should NOT match identifier - # where wildcard is other than left-most label. - # -@@ -1563,6 +1569,99 @@ class OpenSSL::TestSSL < OpenSSL::SSLTestCase - end - end - -+ def test_ciphersuites_method_tls_connection -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ if !tls13_supported? || !ssl_ctx.respond_to?(:ciphersuites=) -+ pend 'TLS 1.3 not supported' -+ end -+ -+ csuite = ['TLS_AES_128_GCM_SHA256', 'TLSv1.3', 128, 128] -+ inputs = [csuite[0], [csuite[0]], [csuite]] -+ -+ start_server do |port| -+ inputs.each do |input| -+ cli_ctx = OpenSSL::SSL::SSLContext.new -+ cli_ctx.min_version = cli_ctx.max_version = OpenSSL::SSL::TLS1_3_VERSION -+ cli_ctx.ciphersuites = input -+ -+ server_connect(port, cli_ctx) do |ssl| -+ assert_equal('TLSv1.3', ssl.ssl_version) -+ if libressl?(3, 4, 0) && !libressl?(3, 5, 0) -+ assert_equal("AEAD-AES128-GCM-SHA256", ssl.cipher[0]) -+ else -+ assert_equal(csuite[0], ssl.cipher[0]) -+ end -+ ssl.puts('abc'); assert_equal("abc\n", ssl.gets) -+ end -+ end -+ end -+ end -+ -+ def test_ciphersuites_method_nil_argument -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ pend 'ciphersuites= method is missing' unless ssl_ctx.respond_to?(:ciphersuites=) -+ -+ assert_nothing_raised { ssl_ctx.ciphersuites = nil } -+ end -+ -+ def test_ciphersuites_method_frozen_object -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ pend 'ciphersuites= method is missing' unless ssl_ctx.respond_to?(:ciphersuites=) -+ -+ ssl_ctx.freeze -+ assert_raise(FrozenError) { ssl_ctx.ciphersuites = 'TLS_AES_256_GCM_SHA384' } -+ end -+ -+ def test_ciphersuites_method_bogus_csuite -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ pend 'ciphersuites= method is missing' unless ssl_ctx.respond_to?(:ciphersuites=) -+ -+ assert_raise_with_message( -+ OpenSSL::SSL::SSLError, -+ /SSL_CTX_set_ciphersuites: no cipher match/i -+ ) { ssl_ctx.ciphersuites = 'BOGUS' } -+ end -+ -+ def test_ciphers_method_tls_connection -+ csuite = ['ECDHE-RSA-AES256-GCM-SHA384', 'TLSv1.2', 256, 256] -+ inputs = [csuite[0], [csuite[0]], [csuite]] -+ -+ start_server do |port| -+ inputs.each do |input| -+ cli_ctx = OpenSSL::SSL::SSLContext.new -+ cli_ctx.min_version = cli_ctx.max_version = OpenSSL::SSL::TLS1_2_VERSION -+ cli_ctx.ciphers = input -+ -+ server_connect(port, cli_ctx) do |ssl| -+ assert_equal('TLSv1.2', ssl.ssl_version) -+ assert_equal(csuite[0], ssl.cipher[0]) -+ ssl.puts('abc'); assert_equal("abc\n", ssl.gets) -+ end -+ end -+ end -+ end -+ -+ def test_ciphers_method_nil_argument -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ assert_nothing_raised { ssl_ctx.ciphers = nil } -+ end -+ -+ def test_ciphers_method_frozen_object -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ -+ ssl_ctx.freeze -+ assert_raise(FrozenError) { ssl_ctx.ciphers = 'ECDHE-RSA-AES128-SHA' } -+ end -+ -+ def test_ciphers_method_bogus_csuite -+ ssl_ctx = OpenSSL::SSL::SSLContext.new -+ -+ assert_raise_with_message( -+ OpenSSL::SSL::SSLError, -+ /SSL_CTX_set_cipher_list: no cipher match/i -+ ) { ssl_ctx.ciphers = 'BOGUS' } -+ end -+ - def test_connect_works_when_setting_dh_callback_to_nil - ctx_proc = -> ctx { - ctx.max_version = :TLS1_2 -diff --git a/test/openssl/test_x509cert.rb b/test/openssl/test_x509cert.rb -index d696b98..4e2bd0c 100644 ---- a/test/openssl/test_x509cert.rb -+++ b/test/openssl/test_x509cert.rb -@@ -180,6 +180,7 @@ class OpenSSL::TestX509Certificate < OpenSSL::TestCase - assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) }) - cert.serial = 2 - assert_equal(false, cert.verify(@rsa2048)) -+ rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1 - end - - def test_sign_and_verify_rsa_md5 -@@ -226,9 +227,8 @@ class OpenSSL::TestX509Certificate < OpenSSL::TestCase - assert_equal("dsa_with_SHA256", cert.signature_algorithm) - # TODO: need more tests for dsa + sha2 - -- # SHA1 is allowed from OpenSSL 1.0.0 (0.9.8 requires DSS1) -- cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha1") -- assert_equal("dsaWithSHA1", cert.signature_algorithm) -+ cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha512") -+ assert_equal("dsa_with_SHA512", cert.signature_algorithm) - end - - def test_check_private_key -diff --git a/test/openssl/test_x509crl.rb b/test/openssl/test_x509crl.rb -index bcdb0a6..146ee07 100644 ---- a/test/openssl/test_x509crl.rb -+++ b/test/openssl/test_x509crl.rb -@@ -20,7 +20,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, now, now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal(1, crl.version) - assert_equal(cert.issuer.to_der, crl.issuer.to_der) - assert_equal(now, crl.last_update) -@@ -57,7 +57,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - ] - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - revoked = crl.revoked - assert_equal(5, revoked.size) - assert_equal(1, revoked[0].serial) -@@ -98,7 +98,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - - revoke_info = (1..1000).collect{|i| [i, now, 0] } - crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - revoked = crl.revoked - assert_equal(1000, revoked.size) - assert_equal(1, revoked[0].serial) -@@ -124,7 +124,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - - cert = issue_cert(@ca, @rsa2048, 1, cert_exts, nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, crl_exts, -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - exts = crl.extensions - assert_equal(3, exts.size) - assert_equal("1", exts[0].value) -@@ -160,24 +160,24 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - assert_equal(false, exts[2].critical?) - - no_ext_crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal nil, no_ext_crl.authority_key_identifier - end - - def test_crlnumber - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match(1.to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{1}/m, crl.to_text) - - crl = issue_crl([], 2**32, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match((2**32).to_s, crl.extensions[0].value) - assert_match(/X509v3 CRL Number:\s+#{2**32}/m, crl.to_text) - - crl = issue_crl([], 2**100, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_match(/X509v3 CRL Number:\s+#{2**100}/m, crl.to_text) - assert_match((2**100).to_s, crl.extensions[0].value) - end -@@ -185,7 +185,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - def test_sign_and_verify - cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @rsa2048, OpenSSL::Digest.new('SHA1')) -+ cert, @rsa2048, OpenSSL::Digest.new('SHA256')) - assert_equal(false, crl.verify(@rsa1024)) - assert_equal(true, crl.verify(@rsa2048)) - assert_equal(false, crl_error_returns_false { crl.verify(@dsa256) }) -@@ -195,7 +195,7 @@ class OpenSSL::TestX509CRL < OpenSSL::TestCase - - cert = issue_cert(@ca, @dsa512, 1, [], nil, nil) - crl = issue_crl([], 1, Time.now, Time.now+1600, [], -- cert, @dsa512, OpenSSL::Digest.new('SHA1')) -+ cert, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(false, crl_error_returns_false { crl.verify(@rsa1024) }) - assert_equal(false, crl_error_returns_false { crl.verify(@rsa2048) }) - assert_equal(false, crl.verify(@dsa256)) -diff --git a/test/openssl/test_x509req.rb b/test/openssl/test_x509req.rb -index ee9c678..a84b162 100644 ---- a/test/openssl/test_x509req.rb -+++ b/test/openssl/test_x509req.rb -@@ -23,31 +23,31 @@ class OpenSSL::TestX509Request < OpenSSL::TestCase - end - - def test_public_key -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der) - -- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dsa512.public_key.to_der, req.public_key.to_der) - end - - def test_version -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(0, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(0, req.version) - -- req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(1, req.version) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(1, req.version) - end - - def test_subject -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(@dn.to_der, req.subject.to_der) - req = OpenSSL::X509::Request.new(req.to_der) - assert_equal(@dn.to_der, req.subject.to_der) -@@ -78,9 +78,9 @@ class OpenSSL::TestX509Request < OpenSSL::TestCase - OpenSSL::X509::Attribute.new("msExtReq", attrval), - ] - -- req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - attrs.each{|attr| req0.add_attribute(attr) } -- req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - req1.attributes = attrs - assert_equal(req0.to_der, req1.to_der) - -@@ -101,7 +101,7 @@ class OpenSSL::TestX509Request < OpenSSL::TestCase - end - - def test_sign_and_verify_rsa_sha1 -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(true, req.verify(@rsa1024)) - assert_equal(false, req.verify(@rsa2048)) - assert_equal(false, request_error_returns_false { req.verify(@dsa256) }) -@@ -122,7 +122,7 @@ class OpenSSL::TestX509Request < OpenSSL::TestCase - end - - def test_sign_and_verify_dsa -- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256')) - assert_equal(false, request_error_returns_false { req.verify(@rsa1024) }) - assert_equal(false, request_error_returns_false { req.verify(@rsa2048) }) - assert_equal(false, req.verify(@dsa256)) -@@ -137,13 +137,13 @@ class OpenSSL::TestX509Request < OpenSSL::TestCase - end - - def test_dup -- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1')) -+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256')) - assert_equal(req.to_der, req.dup.to_der) - end - - def test_eq -- req1 = issue_csr(0, @dn, @rsa1024, "sha1") -- req2 = issue_csr(0, @dn, @rsa1024, "sha1") -+ req1 = issue_csr(0, @dn, @rsa1024, "sha512") -+ req2 = issue_csr(0, @dn, @rsa1024, "sha512") - req3 = issue_csr(0, @dn, @rsa1024, "sha256") - - assert_equal false, req1 == 12345 diff --git a/ruby-3.1.3-Fix-for-tzdata-2022g.patch b/ruby-3.1.3-Fix-for-tzdata-2022g.patch deleted file mode 100644 index a8a1605..0000000 --- a/ruby-3.1.3-Fix-for-tzdata-2022g.patch +++ /dev/null @@ -1,70 +0,0 @@ -From a1124dc162810f86cb0bff58cde24064cfc561bc Mon Sep 17 00:00:00 2001 -From: nagachika -Date: Fri, 9 Dec 2022 21:11:47 +0900 -Subject: [PATCH] merge revision(s) 58cc3c9f387dcf8f820b43e043b540fa06248da3: - [Backport #19187] - - [Bug #19187] Fix for tzdata-2022g - - --- - test/ruby/test_time_tz.rb | 21 +++++++++++++++------ - 1 file changed, 15 insertions(+), 6 deletions(-) ---- - test/ruby/test_time_tz.rb | 21 +++++++++++++++------ - 1 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb -index b6785f336028d..939f218ed4d10 100644 ---- a/test/ruby/test_time_tz.rb -+++ b/test/ruby/test_time_tz.rb -@@ -7,9 +7,9 @@ class TestTimeTZ < Test::Unit::TestCase - has_lisbon_tz = true - force_tz_test = ENV["RUBY_FORCE_TIME_TZ_TEST"] == "yes" - case RUBY_PLATFORM -- when /linux/ -+ when /darwin|linux/ - force_tz_test = true -- when /darwin|freebsd|openbsd/ -+ when /freebsd|openbsd/ - has_lisbon_tz = false - force_tz_test = true - end -@@ -95,6 +95,9 @@ def group_by(e, &block) - CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") { - Time.local(1994, 12, 31, 0, 0, 0).year == 1995 - } -+ CORRECT_SINGAPORE_1982 = with_tz("Asia/Singapore") { -+ "2022g" if Time.local(1981, 12, 31, 23, 59, 59).utc_offset == 8*3600 -+ } - - def time_to_s(t) - t.to_s -@@ -140,9 +143,12 @@ def test_america_managua - - def test_asia_singapore - with_tz(tz="Asia/Singapore") { -- assert_time_constructor(tz, "1981-12-31 23:59:59 +0730", :local, [1981,12,31,23,59,59]) -- assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,0,0]) -- assert_time_constructor(tz, "1982-01-01 00:59:59 +0800", :local, [1982,1,1,0,29,59]) -+ assert_time_constructor(tz, "1981-12-31 23:29:59 +0730", :local, [1981,12,31,23,29,59]) -+ if CORRECT_SINGAPORE_1982 -+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1981,12,31,23,30,00]) -+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1982,1,1,0,0,0]) -+ assert_time_constructor(tz, "1982-01-01 00:29:59 +0800", :local, [1982,1,1,0,29,59]) -+ end - assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,30,0]) - } - end -@@ -450,8 +456,11 @@ def self.gen_zdump_test(data) - America/Managua Wed Jan 1 04:59:59 1997 UTC = Tue Dec 31 23:59:59 1996 EST isdst=0 gmtoff=-18000 - America/Managua Wed Jan 1 05:00:00 1997 UTC = Tue Dec 31 23:00:00 1996 CST isdst=0 gmtoff=-21600 - Asia/Singapore Sun Aug 8 16:30:00 1965 UTC = Mon Aug 9 00:00:00 1965 SGT isdst=0 gmtoff=27000 --Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000 -+Asia/Singapore Thu Dec 31 15:59:59 1981 UTC = Thu Dec 31 23:29:59 1981 SGT isdst=0 gmtoff=27000 - Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800 -+End -+ gen_zdump_test <<'End' if CORRECT_SINGAPORE_1982 -+Asia/Singapore Thu Dec 31 16:00:00 1981 UTC = Fri Jan 1 00:00:00 1982 SGT isdst=0 gmtoff=28800 - End - gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' + (CORRECT_TOKYO_DST_1951 < "2018f" ? <<'2018e' : <<'2018f') : <<'End' - Asia/Tokyo Sat May 5 14:59:59 1951 UTC = Sat May 5 23:59:59 1951 JST isdst=0 gmtoff=32400 diff --git a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch b/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch deleted file mode 100644 index de8d4d3..0000000 --- a/ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch +++ /dev/null @@ -1,338 +0,0 @@ -From 111f8422427d78becc9183ae149b2105a16bf327 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Tue, 5 Apr 2022 23:24:00 +0900 -Subject: [PATCH 1/5] Bundled gems are expanded under `.bundle/gems` now - ---- - ext/extmk.rb | 13 +++++++------ - template/exts.mk.tmpl | 2 +- - 2 files changed, 8 insertions(+), 7 deletions(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 4a087f294ac9..1da9e2704521 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -146,7 +146,7 @@ def extmake(target, basedir = 'ext', maybestatic = true) - top_srcdir = $top_srcdir - topdir = $topdir - hdrdir = $hdrdir -- prefix = "../" * (target.count("/")+1) -+ prefix = "../" * (basedir.count("/")+target.count("/")+1) - $top_srcdir = relative_from(top_srcdir, prefix) - $hdrdir = relative_from(hdrdir, prefix) - $topdir = prefix + $topdir -@@ -460,10 +460,11 @@ def $mflags.defined?(var) - end unless $extstatic - - @gemname = nil --if ARGV[0] -- ext_prefix, exts = ARGV.shift.split('/', 2) -+if exts = ARGV.shift -+ ext_prefix = exts[%r[\A(?>\.bundle/)?[^/]+(?:/(?=(.+)?)|\z)]] -+ exts = $1 - $extension = [exts] if exts -- if ext_prefix == 'gems' -+ if ext_prefix.start_with?('.') - @gemname = exts - elsif exts - $static_ext.delete_if {|t, *| !File.fnmatch(t, exts)} -@@ -515,7 +516,7 @@ def $mflags.defined?(var) - exts.delete_if {|d| File.fnmatch?("-*", d)} - end - end --ext_prefix = File.basename(ext_prefix) -+ext_prefix = ext_prefix[$top_srcdir.size+1..-2] - - extend Module.new { - def timestamp_file(name, target_prefix = nil) -@@ -634,7 +635,7 @@ def initialize(src) - end - } - --Dir.chdir ".." -+Dir.chdir dir - unless $destdir.to_s.empty? - $mflags.defined?("DESTDIR") or $mflags << "DESTDIR=#{$destdir}" - end -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 2f37f4480ac5..964939e365a1 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -25,7 +25,7 @@ macros["old_extensions"] = [] - - contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ - Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| -- gem = /\Agems(?=\/)/ =~ e -+ gem = e.start_with?(".bundle/gems/") - s = File.read(e) - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - -From 6ea34cac22131d28a9cc50e7875e854aed9bdb88 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:25:53 +0900 -Subject: [PATCH 2/5] Retrieve configured gems info - ---- - template/configure-ext.mk.tmpl | 2 +- - template/exts.mk.tmpl | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/template/configure-ext.mk.tmpl b/template/configure-ext.mk.tmpl -index 6636a7759c54..8ba6b963e3ec 100644 ---- a/template/configure-ext.mk.tmpl -+++ b/template/configure-ext.mk.tmpl -@@ -27,7 +27,7 @@ SCRIPT_ARGS = <%=script_args.gsub("#", "\\#")%> - EXTMK_ARGS = $(SCRIPT_ARGS) --gnumake=$(gnumake) --extflags="$(EXTLDFLAGS)" \ - --make-flags="MINIRUBY='$(MINIRUBY)'" - --all: exts # gems -+all: exts gems - exts: - gems: - -diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl -index 964939e365a1..e544c4c88bd7 100644 ---- a/template/exts.mk.tmpl -+++ b/template/exts.mk.tmpl -@@ -19,7 +19,7 @@ opt = OptionParser.new do |o| - o.on('--configure-exts=FILE') {|v| confexts = v} - o.order!(ARGV) - end --confexts &&= File.read(confexts).scan(/^exts: (.*\.mk)/).flatten rescue nil -+confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil - confexts ||= [] - macros["old_extensions"] = [] - -@@ -30,7 +30,7 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| - s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| - v.gsub!(/\\\n[ \t]*/, ' ') - next if v.empty? -- next if gem and n != "extensions" -+ next if n != "extensions" - n = "old_extensions" if n == "extensions" and !confexts.include?(e) - v = v.split - m = macros[n] ||= [] - -From be9d00ee7c72766551ba8c3530f1538034498a6a Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 20:28:00 +0900 -Subject: [PATCH 3/5] Move the target directory of bundled gems like as - rubygems - ---- - ext/extmk.rb | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/ext/extmk.rb b/ext/extmk.rb -index 1da9e2704521..a440af27fc5d 100755 ---- a/ext/extmk.rb -+++ b/ext/extmk.rb -@@ -2,6 +2,9 @@ - # -*- mode: ruby; coding: us-ascii -*- - # frozen_string_literal: false - -+module Gem; end # only needs Gem::Platform -+require 'rubygems/platform' -+ - # :stopdoc: - $extension = nil - $extstatic = nil -@@ -535,11 +538,12 @@ def create_makefile(*args, &block) - super(*args) do |conf| - conf.find do |s| - s.sub!(/^(TARGET_SO_DIR *= *)\$\(RUBYARCHDIR\)/) { -- "TARGET_GEM_DIR = $(extout)/gems/$(arch)/#{@gemname}\n"\ -+ "TARGET_GEM_DIR = $(topdir)/.bundle/extensions/$(gem_platform)/$(ruby_version)/#{@gemname}\n"\ - "#{$1}$(TARGET_GEM_DIR)$(target_prefix)" - } - end - conf.any? {|s| /^TARGET *= *\S/ =~ s} and conf << %{ -+gem_platform = #{Gem::Platform.local} - - # default target - all: - -From c4daf8e445925695c34bab8bf5135dcd1e8575a3 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Wed, 6 Apr 2022 22:57:01 +0900 -Subject: [PATCH 4/5] Obey spec file locations to rubygems - ---- - common.mk | 3 ++- - defs/gmake.mk | 2 +- - tool/gem-unpack.rb | 5 +++-- - 3 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/common.mk b/common.mk -index 7c552cba1e04..b4adb2729c0e 100644 ---- a/common.mk -+++ b/common.mk -@@ -1359,10 +1359,11 @@ extract-gems$(gnumake:yes=-nongnumake): PHONY - $(Q) $(RUNRUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack -answ \ - -e 'BEGIN {FileUtils.mkdir_p(d = ".bundle/gems")}' \ -+ -e 'BEGIN {FileUtils.mkdir_p(s = ".bundle/specifications")}' \ - -e 'gem, ver = *$$F' \ - -e 'next if !ver or /^#/=~gem' \ - -e 'g = "#{gem}-#{ver}"' \ -- -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d)' \ -+ -e 'File.directory?("#{d}/#{g}") or Gem.unpack("gems/#{g}.gem", d, s)' \ - gems/bundled_gems - - update-bundled_gems: PHONY -diff --git a/defs/gmake.mk b/defs/gmake.mk -index a625379a6804..27e3e21cc4d6 100644 ---- a/defs/gmake.mk -+++ b/defs/gmake.mk -@@ -290,7 +290,7 @@ extract-gems: | $(patsubst %,.bundle/gems/%,$(bundled-gems)) - $(ECHO) Extracting bundle gem $*... - $(Q) $(BASERUBY) -C "$(srcdir)" \ - -Itool -rgem-unpack \ -- -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems")' -+ -e 'Gem.unpack("gems/$(@F).gem", ".bundle/gems", ".bundle/specifications")' - - $(srcdir)/.bundle/gems: - $(MAKEDIRS) $@ -diff --git a/tool/gem-unpack.rb b/tool/gem-unpack.rb -index cb05719463f2..fe10b0e420fa 100644 ---- a/tool/gem-unpack.rb -+++ b/tool/gem-unpack.rb -@@ -5,13 +5,14 @@ - # This library is used by "make extract-gems" to - # unpack bundled gem files. - --def Gem.unpack(file, dir = nil) -+def Gem.unpack(file, dir = nil, spec_dir = nil) - pkg = Gem::Package.new(file) - spec = pkg.spec - target = spec.full_name - target = File.join(dir, target) if dir - pkg.extract_files target -- spec_file = File.join(target, "#{spec.name}-#{spec.version}.gemspec") -+ FileUtils.mkdir_p(spec_dir ||= target) -+ spec_file = File.join(spec_dir, "#{spec.name}-#{spec.version}.gemspec") - open(spec_file, 'wb') do |f| - f.print spec.to_ruby - end - -From 3de652d8198be9cd2998c095903889a80e738275 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Thu, 7 Apr 2022 01:44:43 +0900 -Subject: [PATCH 5/5] Install built gem extension binaries - ---- - tool/rbinstall.rb | 56 ++++++++++++++--------------------------------- - 1 file changed, 16 insertions(+), 40 deletions(-) - -diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb -index 9d9b672be472..624961b4eee6 100755 ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -858,6 +858,9 @@ class UnpackedInstaller < GemInstaller - def write_cache_file - end - -+ def build_extensions -+ end -+ - def shebang(bin_file_name) - path = File.join(gem_dir, spec.bindir, bin_file_name) - first_line = File.open(path, "rb") {|file| file.gets} -@@ -940,13 +943,12 @@ def ensure_writable_dir(dir) - install_default_gem('ext', srcdir, bindir) - end - --def load_gemspec(file, expanded = false) -+def load_gemspec(file, base = nil) - file = File.realpath(file) - code = File.read(file, encoding: "utf-8:-") - code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do - files = [] -- if expanded -- base = File.dirname(file) -+ if base - Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| - case File.basename(n); when ".", ".."; next; end - next if File.directory?(File.join(base, n)) -@@ -959,7 +961,7 @@ def load_gemspec(file, expanded = false) - unless Gem::Specification === spec - raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." - end -- spec.loaded_from = file -+ spec.loaded_from = base ? File.join(base, File.basename(file)) : file - spec.files.reject! {|n| n.end_with?(".gemspec") or n.start_with?(".git")} - - spec -@@ -1014,20 +1016,6 @@ def install_default_gem(dir, srcdir, bindir) - end - - install?(:ext, :comm, :gem, :'bundled-gems') do -- if CONFIG['CROSS_COMPILING'] == 'yes' -- # The following hacky steps set "$ruby = BASERUBY" in tool/fake.rb -- $hdrdir = '' -- $extmk = nil -- $ruby = nil # ... -- ruby_path = $ruby + " -I#{Dir.pwd}" # $baseruby + " -I#{Dir.pwd}" -- else -- # ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) -- ENV['RUBYLIB'] = nil -- ENV['RUBYOPT'] = nil -- ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) + " --disable=gems -I#{with_destdir(archlibdir)}" -- end -- Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path -- - gem_dir = Gem.default_dir - install_dir = with_destdir(gem_dir) - prepare "bundled gems", gem_dir -@@ -1047,40 +1035,28 @@ def install_default_gem(dir, srcdir, bindir) - :wrappers => true, - :format_executable => true, - } -- gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}" -- extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir) -+ -+ extensions_dir = Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir -+ specifications_dir = File.join(gem_dir, "specifications") -+ build_dir = Gem::StubSpecification.gemspec_stub("", ".bundle", ".bundle").extensions_dir - - File.foreach("#{srcdir}/gems/bundled_gems") do |name| - next if /^\s*(?:#|$)/ =~ name - next unless /^(\S+)\s+(\S+).*/ =~ name - gem_name = "#$1-#$2" -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec" -- if File.exist?(path) -- spec = load_gemspec(path) -- else -- path = "#{srcdir}/.bundle/gems/#{gem_name}/#$1.gemspec" -- next unless File.exist?(path) -- spec = load_gemspec(path, true) -- end -+ path = "#{srcdir}/.bundle/specifications/#{gem_name}.gemspec" -+ next unless File.exist?(path) -+ spec = load_gemspec(path, "#{srcdir}/.bundle/gems/#{gem_name}") - next unless spec.platform == Gem::Platform::RUBY - next unless spec.full_name == gem_name -- if !spec.extensions.empty? && CONFIG["EXTSTATIC"] == "static" -- puts "skip installation of #{spec.name} #{spec.version}; bundled gem with an extension library is not supported on --with-static-linked-ext" -- next -- end - spec.extension_dir = "#{extensions_dir}/#{spec.full_name}" -- if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}") -- spec.extensions[0] ||= "-" -- end - package = RbInstall::DirPackage.new spec - ins = RbInstall::UnpackedInstaller.new(package, options) - puts "#{INDENT}#{spec.name} #{spec.version}" - ins.install -- unless $dryrun -- File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec")) -- end -- unless spec.extensions.empty? -- install_recursive(ext, spec.extension_dir) -+ install_recursive("#{build_dir}/#{gem_name}", "#{extensions_dir}/#{gem_name}") do |src, dest| -+ # puts "#{INDENT} #{dest[extensions_dir.size+gem_name.size+2..-1]}" -+ install src, dest, :mode => (File.executable?(src) ? $prog_mode : $data_mode) - end - installed_gems[spec.full_name] = true - end diff --git a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch b/ruby-3.2.0-Detect-compaction-support-during-runtime.patch deleted file mode 100644 index 589c3e5..0000000 --- a/ruby-3.2.0-Detect-compaction-support-during-runtime.patch +++ /dev/null @@ -1,256 +0,0 @@ -From 4d9cc9afa47981520d991d19fd78b322f1ba9f2a Mon Sep 17 00:00:00 2001 -From: Jarek Prokop -Date: Wed, 22 Jun 2022 01:03:49 +0200 -Subject: [PATCH] Detect compaction support during runtime. - -The patch is created by backporting 3 commits from -the upstream Ruby master branch in the chronological order below. - -https://github.com/ruby/ruby/commit/52d42e702375446746164a0251e1a10bce813b78 -https://github.com/ruby/ruby/commit/79eaaf2d0b641710613f16525e4b4c439dfe854e -https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 - -== How to create this patch == - -Download Ruby source code. -``` -$ git clone https://github.com/ruby/ruby.git -$ cd ruby -``` - -First create a commit squashed from the 3 commits above. -Checkout the second commmit above, and create a temporary branch. -``` -$ git checkout 79eaaf2d0b641710613f16525e4b4c439dfe854e -$ git checkout -b wip/detect-compaction-runtime-tmp -``` - -Cherry pick the third commit on the second commit. -``` -$ git cherry-pick 2c190863239bee3f54cfb74b16bb6ea4cae6ed20 -``` - -Squash the last 3 commits on the branch. -``` -$ git rebase -i 2223eb082afa6d05321b69df783d4133b9aacba6 -``` - -Then checkout Ruby 3.1.2 branch. -Create a new branch. -Merge the Fedora Ruby's -ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch. -``` -$ git checkout v3_1_2 -$ git checkout -b wip/detect-compaction-runtime -$ patch -p1 < -~/fed/ruby/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch -$ git add gc.c gc.rb test/ruby/test_gc_compact.rb -$ git commit -``` - -Merge the squashed one commit on the -`wip/detect-compaction-runtime-tmp` branch -into the `wip/detect-compaction-runtime` branch. -``` -$ git cherry-pick -``` - -Fix conflicts seeing the difference by `git show ` -on another terminal. -``` -$ vi gc.c -$ git add gc.c -$ git commit -``` - -== Original commit messages == - -This is a combination of 3 commits. -This is the 1st commit message: -~~~ -Rename GC_COMPACTION_SUPPORTED - -Naming this macro GC_COMPACTION_SUPPORTED is misleading because it -only checks whether compaction is supported at compile time. - -[Bug #18829] -~~~ - -This is the commit message #2: -~~~ -Include runtime checks for compaction support - -Commit 0c36ba53192c5a0d245c9b626e4346a32d7d144e changed GC compaction -methods to not be implemented when not supported. However, that commit -only does compile time checks (which currently only checks for WASM), -but there are additional compaction support checks during run time. - -This commit changes it so that GC compaction methods aren't defined -during run time if the platform does not support GC compaction. - -[Bug #18829] -~~~ - -This is the commit message #3: -~~~ -Suppress code unused unless GC_CAN_COMPILE_COMPACTION -~~~ ---- - gc.c | 63 +++++++++++++++++++++++++++++++++++++++++------------------- - 1 file changed, 43 insertions(+), 20 deletions(-) - -diff --git a/gc.c b/gc.c -index 1c35856c44..bff0666a17 100644 ---- a/gc.c -+++ b/gc.c -@@ -4980,6 +4980,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) - static void gc_update_references(rb_objspace_t * objspace); - static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page); - -+#ifndef GC_CAN_COMPILE_COMPACTION -+#if defined(__wasi__) /* WebAssembly doesn't support signals */ -+# define GC_CAN_COMPILE_COMPACTION 0 -+#else -+# define GC_CAN_COMPILE_COMPACTION 1 -+#endif -+#endif -+ -+#if defined(__MINGW32__) || defined(_WIN32) -+# define GC_COMPACTION_SUPPORTED 1 -+#else -+/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -+ * the read barrier, so we must disable compaction. */ -+# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC) -+#endif -+ -+#if GC_CAN_COMPILE_COMPACTION - static void - read_barrier_handler(uintptr_t address) - { -@@ -5000,6 +5017,7 @@ read_barrier_handler(uintptr_t address) - } - RB_VM_LOCK_LEAVE(); - } -+#endif - - #if defined(_WIN32) - static LPTOP_LEVEL_EXCEPTION_FILTER old_handler; -@@ -9250,13 +9268,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE - - /* For now, compact implies full mark / sweep, so ignore other flags */ - if (RTEST(compact)) { -- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -- * the read barrier, so we must disable compaction. */ --#if !defined(__MINGW32__) && !defined(_WIN32) -- if (!USE_MMAP_ALIGNED_ALLOC) { -- rb_raise(rb_eNotImpError, "Compaction isn't available on this platform"); -- } --#endif -+ GC_ASSERT(GC_COMPACTION_SUPPORTED); - - reason |= GPR_FLAG_COMPACT; - } -@@ -9421,7 +9433,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) - return (VALUE)src; - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - static int - compare_free_slots(const void *left, const void *right, void *dummy) - { -@@ -10149,7 +10161,7 @@ gc_update_references(rb_objspace_t *objspace) - gc_update_table_refs(objspace, finalizer_table); - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -@@ -10190,7 +10202,7 @@ gc_compact_stats(VALUE self) - # define gc_compact_stats rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - static void - root_obj_check_moved_i(const char *category, VALUE obj, void *data) - { -@@ -10269,7 +10281,7 @@ gc_compact(VALUE self) - # define gc_compact rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -@@ -10800,7 +10812,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - return rb_gc_disable(); - } - --#if GC_COMPACTION_SUPPORTED -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.auto_compact = flag -@@ -10814,8 +10826,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - static VALUE - gc_set_auto_compact(VALUE _, VALUE v) - { -- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for -- * the read barrier, so we must disable automatic compaction. */ -+ GC_ASSERT(GC_COMPACTION_SUPPORTED); - - ruby_enable_autocompact = RTEST(v); - return v; -@@ -10824,7 +10835,8 @@ gc_set_auto_compact(VALUE _, VALUE v) - # define gc_set_auto_compact rb_f_notimplement - #endif - --#if GC_COMPACTION_SUPPORTED -+ -+#if GC_CAN_COMPILE_COMPACTION - /* - * call-seq: - * GC.auto_compact -> true or false -@@ -13696,11 +13708,21 @@ Init_GC(void) - rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); - rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); - #endif -- rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -- rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -- rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -- rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -- rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); -+ if (GC_COMPACTION_SUPPORTED) { -+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); -+ } -+ else { -+ rb_define_singleton_method(rb_mGC, "compact", rb_f_notimplement, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", rb_f_notimplement, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", rb_f_notimplement, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", rb_f_notimplement, 0); -+ /* When !GC_COMPACTION_SUPPORTED, this method is not defined in gc.rb */ -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1); -+ } - - #if GC_DEBUG_STRESS_TO_CLASS - rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); -@@ -13724,6 +13746,7 @@ Init_GC(void) - OPT(MALLOC_ALLOCATED_SIZE); - OPT(MALLOC_ALLOCATED_SIZE_CHECK); - OPT(GC_PROFILE_DETAIL_MEMORY); -+ OPT(GC_COMPACTION_SUPPORTED); - #undef OPT - OBJ_FREEZE(opts); - } --- -2.36.1 - diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch deleted file mode 100644 index 1e34def..0000000 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch +++ /dev/null @@ -1,402 +0,0 @@ -commit 6d1ca6737f31b2e24664a093f1827dd74a121a9f -Author: Jarek Prokop -Date: Thu May 26 11:28:13 2022 +0200 - - Gc ppc64le fix - -diff --git a/gc.c b/gc.c -index ef9327df1f..1c35856c44 100644 ---- a/gc.c -+++ b/gc.c -@@ -9421,6 +9421,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size) - return (VALUE)src; - } - -+#if GC_COMPACTION_SUPPORTED - static int - compare_free_slots(const void *left, const void *right, void *dummy) - { -@@ -9468,6 +9469,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) - free(page_list); - } - } -+#endif - - static void - gc_ref_update_array(rb_objspace_t * objspace, VALUE v) -@@ -10147,8 +10149,21 @@ gc_update_references(rb_objspace_t *objspace) - gc_update_table_refs(objspace, finalizer_table); - } - -+#if GC_COMPACTION_SUPPORTED -+/* -+ * call-seq: -+ * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -+ * -+ * Returns information about object moved in the most recent GC compaction. -+ * -+ * The returned hash has two keys :considered and :moved. The hash for -+ * :considered lists the number of objects that were considered for movement -+ * by the compactor, and the :moved hash lists the number of objects that -+ * were actually moved. Some objects can't be moved (maybe they were pinned) -+ * so these numbers can be used to calculate compaction efficiency. -+ */ - static VALUE --gc_compact_stats(rb_execution_context_t *ec, VALUE self) -+gc_compact_stats(VALUE self) - { - size_t i; - rb_objspace_t *objspace = &rb_objspace; -@@ -10171,7 +10186,11 @@ gc_compact_stats(rb_execution_context_t *ec, VALUE self) - - return h; - } -+#else -+# define gc_compact_stats rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED - static void - root_obj_check_moved_i(const char *category, VALUE obj, void *data) - { -@@ -10221,22 +10240,78 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) - return 0; - } - -+/* -+ * call-seq: -+ * GC.compact -+ * -+ * This function compacts objects together in Ruby's heap. It eliminates -+ * unused space (or fragmentation) in the heap by moving objects in to that -+ * unused space. This function returns a hash which contains statistics about -+ * which objects were moved. See `GC.latest_gc_info` for details about -+ * compaction statistics. -+ * -+ * This method is implementation specific and not expected to be implemented -+ * in any implementation besides MRI. -+ * -+ * To test whether GC compaction is supported, use the idiom: -+ * -+ * GC.respond_to?(:compact) -+ */ - static VALUE --gc_compact(rb_execution_context_t *ec, VALUE self) -+gc_compact(VALUE self) - { - /* Run GC with compaction enabled */ -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); - -- return gc_compact_stats(ec, self); -+ return gc_compact_stats(self); - } -+#else -+# define gc_compact rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED -+/* -+ * call-seq: -+ * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -+ * -+ * Verify compaction reference consistency. -+ * -+ * This method is implementation specific. During compaction, objects that -+ * were moved are replaced with T_MOVED objects. No object should have a -+ * reference to a T_MOVED object after compaction. -+ * -+ * This function doubles the heap to ensure room to move all objects, -+ * compacts the heap to make sure everything moves, updates all references, -+ * then performs a full GC. If any object contains a reference to a T_MOVED -+ * object, that object should be pushed on the mark stack, and will -+ * make a SEGV. -+ */ - static VALUE --gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty) -+gc_verify_compaction_references(int argc, VALUE *argv, VALUE self) - { - rb_objspace_t *objspace = &rb_objspace; -+ VALUE kwargs, double_heap = Qfalse, toward_empty = Qfalse; -+ static ID id_toward, id_double_heap, id_empty; -+ -+ if (!id_toward) { -+ id_toward = rb_intern("toward"); -+ id_double_heap = rb_intern("double_heap"); -+ id_empty = rb_intern("empty"); -+ } -+ -+ rb_scan_args(argc, argv, ":", &kwargs); -+ if (!NIL_P(kwargs)) { -+ if (rb_hash_has_key(kwargs, ID2SYM(id_toward))) { -+ VALUE toward = rb_hash_aref(kwargs, ID2SYM(id_toward)); -+ toward_empty = (toward == ID2SYM(id_empty)) ? Qtrue : Qfalse; -+ } -+ if (rb_hash_has_key(kwargs, ID2SYM(id_double_heap))) { -+ double_heap = rb_hash_aref(kwargs, ID2SYM(id_double_heap)); -+ } -+ } - - /* Clear the heap. */ -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qfalse); - - RB_VM_LOCK_ENTER(); - { -@@ -10256,13 +10331,16 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do - } - RB_VM_LOCK_LEAVE(); - -- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue); -+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue); - - objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL); - objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE); - -- return gc_compact_stats(ec, self); -+ return gc_compact_stats(self); - } -+#else -+# define gc_verify_compaction_references rb_f_notimplement -+#endif - - VALUE - rb_gc_start(void) -@@ -10722,26 +10800,45 @@ gc_disable(rb_execution_context_t *ec, VALUE _) - return rb_gc_disable(); - } - -+#if GC_COMPACTION_SUPPORTED -+/* -+ * call-seq: -+ * GC.auto_compact = flag -+ * -+ * Updates automatic compaction mode. -+ * -+ * When enabled, the compactor will execute on every major collection. -+ * -+ * Enabling compaction will degrade performance on major collections. -+ */ - static VALUE --gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v) -+gc_set_auto_compact(VALUE _, VALUE v) - { - /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for - * the read barrier, so we must disable automatic compaction. */ --#if !defined(__MINGW32__) && !defined(_WIN32) -- if (!USE_MMAP_ALIGNED_ALLOC) { -- rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform"); -- } --#endif - - ruby_enable_autocompact = RTEST(v); - return v; - } -+#else -+# define gc_set_auto_compact rb_f_notimplement -+#endif - -+#if GC_COMPACTION_SUPPORTED -+/* -+ * call-seq: -+ * GC.auto_compact -> true or false -+ * -+ * Returns whether or not automatic compaction has been enabled. -+ */ - static VALUE --gc_get_auto_compact(rb_execution_context_t *ec, VALUE _) -+gc_get_auto_compact(VALUE _) - { - return RBOOL(ruby_enable_autocompact); - } -+#else -+# define gc_get_auto_compact rb_f_notimplement -+#endif - - static int - get_envparam_size(const char *name, size_t *default_value, size_t lower_bound) -@@ -13599,6 +13696,11 @@ Init_GC(void) - rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0); - rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0); - #endif -+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0); -+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1); -+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0); -+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1); - - #if GC_DEBUG_STRESS_TO_CLASS - rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); -diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb -index 42ad028530..411d5eab69 100644 ---- a/test/ruby/test_gc_compact.rb -+++ b/test/ruby/test_gc_compact.rb -@@ -9,14 +9,7 @@ - end - - class TestGCCompact < Test::Unit::TestCase -- module SupportsCompact -- def setup -- skip "autocompact not supported on this platform" unless supports_auto_compact? -- super -- end -- -- private -- -+ module CompactionSupportInspector - def supports_auto_compact? - return true unless defined?(Etc::SC_PAGE_SIZE) - -@@ -30,10 +23,19 @@ def supports_auto_compact? - end - end - -- include SupportsCompact -+ module OmitUnlessCompactSupported -+ include CompactionSupportInspector -+ -+ def setup -+ omit "autocompact not supported on this platform" unless supports_auto_compact? -+ super -+ end -+ end -+ -+ include OmitUnlessCompactSupported - - class AutoCompact < Test::Unit::TestCase -- include SupportsCompact -+ include OmitUnlessCompactSupported - - def test_enable_autocompact - before = GC.auto_compact -@@ -87,13 +89,39 @@ def test_implicit_compaction_does_something - end - end - -- def os_page_size -- return true unless defined?(Etc::SC_PAGE_SIZE) -+ class CompactMethodsNotImplemented < Test::Unit::TestCase -+ include CompactionSupportInspector -+ -+ def assert_not_implemented(method, *args) -+ omit "autocompact is supported on this platform" if supports_auto_compact? -+ -+ assert_raise(NotImplementedError) { GC.send(method, *args) } -+ refute(GC.respond_to?(method), "GC.#{method} should be defined as rb_f_notimplement") -+ end -+ -+ def test_gc_compact_not_implemented -+ assert_not_implemented(:compact) -+ end -+ -+ def test_gc_auto_compact_get_not_implemented -+ assert_not_implemented(:auto_compact) -+ end -+ -+ def test_gc_auto_compact_set_not_implemented -+ assert_not_implemented(:auto_compact=, true) -+ end -+ -+ def test_gc_latest_compact_info_not_implemented -+ assert_not_implemented(:latest_compact_info) -+ end -+ -+ def test_gc_verify_compaction_references_not_implemented -+ assert_not_implemented(:verify_compaction_references) -+ end - end - -- def setup -- skip "autocompact not supported on this platform" unless supports_auto_compact? -- super -+ def os_page_size -+ return true unless defined?(Etc::SC_PAGE_SIZE) - end - - def test_gc_compact_stats -diff --git a/gc.rb b/gc.rb -index 72637f3796..9265dd7b57 100644 ---- a/gc.rb -+++ b/gc.rb -@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true - Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false - end - -- # call-seq: -- # GC.auto_compact -> true or false -- # -- # Returns whether or not automatic compaction has been enabled. -- # -- def self.auto_compact -- Primitive.gc_get_auto_compact -- end -- -- # call-seq: -- # GC.auto_compact = flag -- # -- # Updates automatic compaction mode. -- # -- # When enabled, the compactor will execute on every major collection. -- # -- # Enabling compaction will degrade performance on major collections. -- def self.auto_compact=(flag) -- Primitive.gc_set_auto_compact(flag) -- end -- - # call-seq: - # GC.enable -> true or false - # -@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil - Primitive.gc_latest_gc_info hash_or_key - end - -- # call-seq: -- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} -- # -- # Returns information about object moved in the most recent GC compaction. -- # -- # The returned hash has two keys :considered and :moved. The hash for -- # :considered lists the number of objects that were considered for movement -- # by the compactor, and the :moved hash lists the number of objects that -- # were actually moved. Some objects can't be moved (maybe they were pinned) -- # so these numbers can be used to calculate compaction efficiency. -- def self.latest_compact_info -- Primitive.gc_compact_stats -- end -- -- # call-seq: -- # GC.compact -- # -- # This function compacts objects together in Ruby's heap. It eliminates -- # unused space (or fragmentation) in the heap by moving objects in to that -- # unused space. This function returns a hash which contains statistics about -- # which objects were moved. See `GC.latest_gc_info` for details about -- # compaction statistics. -- # -- # This method is implementation specific and not expected to be implemented -- # in any implementation besides MRI. -- def self.compact -- Primitive.gc_compact -- end -- -- # call-seq: -- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash -- # -- # Verify compaction reference consistency. -- # -- # This method is implementation specific. During compaction, objects that -- # were moved are replaced with T_MOVED objects. No object should have a -- # reference to a T_MOVED object after compaction. -- # -- # This function doubles the heap to ensure room to move all objects, -- # compacts the heap to make sure everything moves, updates all references, -- # then performs a full GC. If any object contains a reference to a T_MOVED -- # object, that object should be pushed on the mark stack, and will -- # make a SEGV. -- def self.verify_compaction_references(toward: nil, double_heap: false) -- Primitive.gc_verify_compaction_references(double_heap, toward == :empty) -- end -- - # call-seq: - # GC.using_rvargc? -> true or false - # diff --git a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch b/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch deleted file mode 100644 index 240cc9c..0000000 --- a/ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch +++ /dev/null @@ -1,502 +0,0 @@ ---- ruby-3.1.2/gc.rbinc 2022-04-12 13:11:17.000000000 +0200 -+++ ruby/gc.rbinc 2022-06-08 12:49:16.288024971 +0200 -@@ -9,27 +9,27 @@ - #include "builtin.h" /* for RB_BUILTIN_FUNCTION */ - struct rb_execution_context_struct; /* in vm_core.h */ - --static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self) - { - MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3); --#line 277 "gc.rb" -+#line 209 "gc.rb" - - rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE; - return flag; - #line 20 "gc.rbinc" - } - --static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self) - { --#line 289 "gc.rb" -+#line 221 "gc.rb" - return - RBOOL(rb_objspace.flags.measure_gc); - #line 28 "gc.rbinc" - } - --static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self) -+static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self) - { --#line 299 "gc.rb" -+#line 231 "gc.rb" - return - ULL2NUM(rb_objspace.profile.total_time_ns); - #line 36 "gc.rbinc" -@@ -52,31 +52,6 @@ - } - - static void --mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n"); -- if (index == -1) { -- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1); -- } -- else { -- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); -- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); -- } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact); -- fprintf(f, " val = f(ec, self, argv[0]);\n"); --} -- --static void - mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p) - { - fprintf(f, " VALUE self = GET_SELF();\n"); -@@ -161,40 +136,6 @@ - } - - static void --mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact); -- fprintf(f, " val = f(ec, self);\n"); --} -- --static void --mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p) --{ -- fprintf(f, " VALUE self = GET_SELF();\n"); -- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n"); -- if (index == -1) { -- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2); -- } -- else { -- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n"); -- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index); -- } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references); -- fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n"); --} -- --static void - mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p) - { - fprintf(f, " VALUE self = GET_SELF();\n"); -@@ -202,7 +143,7 @@ - if (inlinable_p) { - fprintf(f, "%s", " {\n"); - fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n"); -- fprintf(f, "%s", "#line 277 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 209 \"gc.rb\"\n"); - fprintf(f, "%s", " \n"); - fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"); - fprintf(f, "%s", " return flag;\n"); -@@ -211,7 +152,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -222,7 +163,7 @@ - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - if (inlinable_p) { - fprintf(f, "%s", " {\n"); -- fprintf(f, "%s", "#line 289 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 221 \"gc.rb\"\n"); - fprintf(f, "%s", " return \n"); - fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n"); - fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n"); -@@ -230,7 +171,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -241,7 +182,7 @@ - fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n"); - if (inlinable_p) { - fprintf(f, "%s", " {\n"); -- fprintf(f, "%s", "#line 299 \"gc.rb\"\n"); -+ fprintf(f, "%s", "#line 231 \"gc.rb\"\n"); - fprintf(f, "%s", " return \n"); - fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n"); - fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n"); -@@ -249,7 +190,7 @@ - fprintf(f, "%s", " \n"); - return; - } -- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299); -+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231); - fprintf(f, " val = f(ec, self);\n"); - } - -@@ -258,21 +199,16 @@ - // table definition - static const struct rb_builtin_function gc_table[] = { - RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal), -- RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact), -- RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact), -- RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), -- RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), -- RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), -- RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), -- RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), -- RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), -- RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), -- RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats), -- RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact), -- RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references), -- RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0), -- RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1), -- RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2), -+ RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable), -+ RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable), -+ RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get), -+ RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m), -+ RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count), -+ RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat), -+ RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info), -+ RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0), -+ RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1), -+ RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2), - RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0), - }; - -@@ -282,8 +218,6 @@ - COMPILER_WARNING_ERROR(-Wincompatible-pointer-types) - #endif - if (0) rb_builtin_function_check_arity4(gc_start_internal); -- if (0) rb_builtin_function_check_arity0(gc_get_auto_compact); -- if (0) rb_builtin_function_check_arity1(gc_set_auto_compact); - if (0) rb_builtin_function_check_arity0(gc_enable); - if (0) rb_builtin_function_check_arity0(gc_disable); - if (0) rb_builtin_function_check_arity0(gc_stress_get); -@@ -291,12 +225,9 @@ - if (0) rb_builtin_function_check_arity0(gc_count); - if (0) rb_builtin_function_check_arity1(gc_stat); - if (0) rb_builtin_function_check_arity1(gc_latest_gc_info); -- if (0) rb_builtin_function_check_arity0(gc_compact_stats); -- if (0) rb_builtin_function_check_arity0(gc_compact); -- if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_277); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_289); -- if (0) rb_builtin_function_check_arity0(builtin_inline_class_299); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_209); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_221); -+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_231); - COMPILER_WARNING_POP - - // load ---- ruby-3.1.2/miniprelude.c 2022-04-12 13:11:17.000000000 +0200 -+++ ruby/miniprelude.c 2022-06-08 12:49:16.377024871 +0200 -@@ -545,11 +545,10 @@ - - static const char prelude_name2[] = ""; - static const struct { -- char L0[479]; /* 1..58 */ -- char L58[508]; /* 59..204 */ -- char L204[504]; /* 205..275 */ -- char L275[490]; /* 276..306 */ -- char L306[128]; /* 307..312 */ -+ char L0[492]; /* 1..70 */ -+ char L70[468]; /* 71..197 */ -+ char L197[470]; /* 198..237 */ -+ char L237[211]; /* 238..244 */ - } prelude_code2 = { - #line 1 "gc.rb" - ""/* for gc.c */ -@@ -593,29 +592,6 @@ - " end\n" - "\n" - "\n"/* call-seq: */ --"\n"/* GC.auto_compact -> true or false */ --"\n"/* */ --"\n"/* Returns whether or not automatic compaction has been enabled. */ --"\n"/* */ --" def self.auto_compact\n" --" Primitive.gc_get_auto_compact\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.auto_compact = flag */ --"\n"/* */ --"\n"/* Updates automatic compaction mode. */ --"\n"/* */ --"\n"/* When enabled, the compactor will execute on every major collection. */ --"\n"/* */ --"\n"/* Enabling compaction will degrade performance on major collections. */ --" def self.auto_compact=(flag)\n" --, --#line 59 "gc.rb" --" Primitive.gc_set_auto_compact(flag)\n" --" end\n" --"\n" --"\n"/* call-seq: */ - "\n"/* GC.enable -> true or false */ - "\n"/* */ - "\n"/* Enables garbage collection, returning +true+ if garbage */ -@@ -645,6 +621,8 @@ - "\n"/* GC.stress -> integer, true or false */ - "\n"/* */ - "\n"/* Returns current status of GC stress mode. */ -+, -+#line 71 "gc.rb" - " def self.stress\n" - " Primitive.gc_stress_get\n" - " end\n" -@@ -758,8 +736,6 @@ - "\n"/* GC.latest_gc_info(:major_by) -> :malloc */ - "\n"/* */ - "\n"/* Returns information about the most recent garbage collection. */ --, --#line 205 "gc.rb" - "\n"/* */ - "\n"/* If the optional argument, hash, is given, */ - "\n"/* it is overwritten and returned. */ -@@ -768,59 +744,14 @@ - " Primitive.gc_latest_gc_info hash_or_key\n" - " end\n" - "\n" --"\n"/* call-seq: */ --"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */ --"\n"/* */ --"\n"/* Returns information about object moved in the most recent GC compaction. */ --"\n"/* */ --"\n"/* The returned hash has two keys :considered and :moved. The hash for */ --"\n"/* :considered lists the number of objects that were considered for movement */ --"\n"/* by the compactor, and the :moved hash lists the number of objects that */ --"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */ --"\n"/* so these numbers can be used to calculate compaction efficiency. */ --" def self.latest_compact_info\n" --" Primitive.gc_compact_stats\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.compact */ --"\n"/* */ --"\n"/* This function compacts objects together in Ruby's heap. It eliminates */ --"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */ --"\n"/* unused space. This function returns a hash which contains statistics about */ --"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */ --"\n"/* compaction statistics. */ --"\n"/* */ --"\n"/* This method is implementation specific and not expected to be implemented */ --"\n"/* in any implementation besides MRI. */ --" def self.compact\n" --" Primitive.gc_compact\n" --" end\n" --"\n" --"\n"/* call-seq: */ --"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */ --"\n"/* */ --"\n"/* Verify compaction reference consistency. */ --"\n"/* */ --"\n"/* This method is implementation specific. During compaction, objects that */ --"\n"/* were moved are replaced with T_MOVED objects. No object should have a */ --"\n"/* reference to a T_MOVED object after compaction. */ --"\n"/* */ --"\n"/* This function doubles the heap to ensure room to move all objects, */ --"\n"/* compacts the heap to make sure everything moves, updates all references, */ --"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */ --"\n"/* object, that object should be pushed on the mark stack, and will */ --"\n"/* make a SEGV. */ --" def self.verify_compaction_references(toward: nil, double_heap: false)\n" --" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n" --" end\n" --"\n" - "\n"/* call-seq: */ - "\n"/* GC.using_rvargc? -> true or false */ - "\n"/* */ - "\n"/* Returns true if using experimental feature Variable Width Allocation, false */ - "\n"/* otherwise. */ - " def self.using_rvargc?\n"/* :nodoc: */ -+, -+#line 198 "gc.rb" - " GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n" - " end\n" - "\n" -@@ -831,8 +762,6 @@ - "\n"/* Enable to measure GC time. */ - "\n"/* You can get the result with GC.stat(:time). */ - "\n"/* Note that GC time measurement can cause some performance overhead. */ --, --#line 276 "gc.rb" - " def self.measure_total_time=(flag)\n" - " Primitive.cstmt! %{\n" - " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n" -@@ -863,15 +792,15 @@ - "end\n" - "\n" - "module ObjectSpace\n" --" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" - , --#line 307 "gc.rb" -+#line 238 "gc.rb" -+" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n" - " Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n" - " end\n" - "\n" - " module_function :garbage_collect\n" - "end\n" --#line 875 "miniprelude.c" -+#line 804 "miniprelude.c" - }; - - static const char prelude_name3[] = ""; -@@ -1223,7 +1152,7 @@ - " end\n" - "\n" - "end\n" --#line 1227 "miniprelude.c" -+#line 1156 "miniprelude.c" - }; - - static const char prelude_name4[] = ""; -@@ -1354,7 +1283,7 @@ - " Primitive.io_write_nonblock(buf, exception)\n" - " end\n" - "end\n" --#line 1358 "miniprelude.c" -+#line 1287 "miniprelude.c" - }; - - static const char prelude_name5[] = ""; -@@ -1402,7 +1331,7 @@ - " alias restore load\n" - " end\n" - "end\n" --#line 1406 "miniprelude.c" -+#line 1335 "miniprelude.c" - }; - - static const char prelude_name6[] = ""; -@@ -1724,7 +1653,7 @@ - " Primitive.pack_unpack1(fmt, offset)\n" - " end\n" - "end\n" --#line 1728 "miniprelude.c" -+#line 1657 "miniprelude.c" - }; - - static const char prelude_name7[] = ""; -@@ -2111,7 +2040,7 @@ - " Primitive.tracepoint_attr_instruction_sequence\n" - " end\n" - "end\n" --#line 2115 "miniprelude.c" -+#line 2044 "miniprelude.c" - }; - - static const char prelude_name8[] = ""; -@@ -2172,7 +2101,7 @@ - " Primitive.rb_warn_m(msgs, uplevel, category)\n" - " end\n" - "end\n" --#line 2176 "miniprelude.c" -+#line 2105 "miniprelude.c" - }; - - static const char prelude_name9[] = ""; -@@ -2249,7 +2178,7 @@ - " end\n" - " end\n" - "end\n" --#line 2253 "miniprelude.c" -+#line 2182 "miniprelude.c" - }; - - static const char prelude_name10[] = ""; -@@ -2438,7 +2367,7 @@ - " end\n" - " end\n" - "end\n" --#line 2442 "miniprelude.c" -+#line 2371 "miniprelude.c" - }; - - static const char prelude_name11[] = ""; -@@ -3305,7 +3234,7 @@ - " }\n" - " end\n" - "end\n" --#line 3309 "miniprelude.c" -+#line 3238 "miniprelude.c" - }; - - static const char prelude_name12[] = ""; -@@ -3628,7 +3557,7 @@ - " Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n" - " end\n" - "end\n" --#line 3632 "miniprelude.c" -+#line 3561 "miniprelude.c" - }; - - static const char prelude_name13[] = ""; -@@ -3661,7 +3590,7 @@ - " return 0.0\n" - " end\n" - "end\n" --#line 3665 "miniprelude.c" -+#line 3594 "miniprelude.c" - }; - - static const char prelude_name14[] = ""; -@@ -3691,7 +3620,7 @@ - "\n" - " private :pp\n" - "end\n" --#line 3695 "miniprelude.c" -+#line 3624 "miniprelude.c" - }; - - static const char prelude_name15[] = ""; -@@ -3718,7 +3647,7 @@ - "rescue LoadError\n" - " warn \"`did_you_mean' was not loaded.\"\n" - "end if defined?(DidYouMean)\n" --#line 3722 "miniprelude.c" -+#line 3651 "miniprelude.c" - }; - - static const char prelude_name16[] = ""; -@@ -4059,7 +3988,7 @@ - " end\n" - " end\n" - "end\n" --#line 4063 "miniprelude.c" -+#line 3992 "miniprelude.c" - }; - - COMPILER_WARNING_POP diff --git a/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch b/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch deleted file mode 100644 index 73f9a02..0000000 --- a/ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch +++ /dev/null @@ -1,27 +0,0 @@ -From dae843f6b7502f921a7e66f39e3714a39d860181 Mon Sep 17 00:00:00 2001 -From: Hiroshi SHIBATA -Date: Wed, 19 Oct 2022 19:40:00 +0900 -Subject: [PATCH] Bypass git submodule add/update with git config - protocol.file.allow=always option. - -Co-authored-by: Nobuyoshi Nakada ---- - test/rubygems/test_gem_source_git.rb | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb -index 5702da05974b6..c3b324771fa4d 100644 ---- a/test/rubygems/test_gem_source_git.rb -+++ b/test/rubygems/test_gem_source_git.rb -@@ -63,6 +63,11 @@ def test_checkout_local_cached - end - - def test_checkout_submodules -+ # We need to allow to checkout submodules with file:// protocol -+ # CVE-2022-39253 -+ # https://lore.kernel.org/lkml/xmqq4jw1uku5.fsf@gitster.g/ -+ system(@git, *%W"config --global protocol.file.allow always") -+ - source = Gem::Source::Git.new @name, @repository, 'master', true - - git_gem 'b' diff --git a/ruby-3.3.0-Disable-syntax-suggest-test-case.patch b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch new file mode 100644 index 0000000..1119a59 --- /dev/null +++ b/ruby-3.3.0-Disable-syntax-suggest-test-case.patch @@ -0,0 +1,23 @@ +From 6365d1b79e10330fced83d00d4cb950380a3b0fe Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Thu, 7 Sep 2023 13:13:02 +0200 +Subject: [PATCH] Disable syntax-suggest test case. + +This requires internet connection. +--- + common.mk | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/common.mk b/common.mk +index d55d1788aa..73755f6ccd 100644 +--- a/common.mk ++++ b/common.mk +@@ -1601,8 +1601,6 @@ yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST) + $(ACTIONS_ENDGROUP) + no-test-syntax-suggest: + +-check: $(DOT_WAIT) $(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest +- + test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck + no-test-bundler-precheck: + yes-test-bundler-precheck: main $(arch)-fake.rb diff --git a/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch new file mode 100644 index 0000000..9baaf27 --- /dev/null +++ b/ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch @@ -0,0 +1,92 @@ +From 8944a064d0fd7947b8c2b6c761be3e3a0c9073af Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 22 Dec 2023 14:16:48 +0100 +Subject: [PATCH 1/2] Revert "compare_by_identity: remove alloc for non-empty + Hash" + +This reverts commit 11fa76b1b521072c200c78ea023960221ff426d6. +--- + hash.c | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +diff --git a/hash.c b/hash.c +index 78e9d9a2d6..f6525ba4a5 100644 +--- a/hash.c ++++ b/hash.c +@@ -4377,16 +4377,13 @@ rb_hash_compare_by_id(VALUE hash) + if (hash_iterating_p(hash)) { + rb_raise(rb_eRuntimeError, "compare_by_identity during iteration"); + } ++ ar_force_convert_table(hash, __FILE__, __LINE__); ++ HASH_ASSERT(RHASH_ST_TABLE_P(hash)); + + if (RHASH_TABLE_EMPTY_P(hash)) { + // Fast path: There's nothing to rehash, so we don't need a `tmp` table. +- // We're most likely an AR table, so this will need an allocation. +- ar_force_convert_table(hash, __FILE__, __LINE__); +- HASH_ASSERT(RHASH_ST_TABLE_P(hash)); +- + RHASH_ST_TABLE(hash)->type = &identhash; +- } +- else { ++ } else { + // Slow path: Need to rehash the members of `self` into a new + // `tmp` table using the new `identhash` compare/hash functions. + tmp = hash_alloc(0); +@@ -4394,10 +4391,8 @@ rb_hash_compare_by_id(VALUE hash) + identtable = RHASH_ST_TABLE(tmp); + + rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); +- rb_hash_free(hash); + +- // We know for sure `identtable` is an st table, +- // so we can skip `ar_force_convert_table` here. ++ rb_hash_free(hash); + RHASH_ST_TABLE_SET(hash, identtable); + RHASH_ST_CLEAR(tmp); + } + +From f5c415300ffe63e41e46c6b88b8634a3bad0c7c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?V=C3=ADt=20Ondruch?= +Date: Fri, 22 Dec 2023 14:17:14 +0100 +Subject: [PATCH 2/2] Revert "compare_by_identity: remove alloc for empty Hash" + +This reverts commit b5c6c0122f5b010cb5f43e7a236c4ba2b1d56a2a. +--- + hash.c | 21 +++++++-------------- + 1 file changed, 7 insertions(+), 14 deletions(-) + +diff --git a/hash.c b/hash.c +index f6525ba4a5..cf83675c70 100644 +--- a/hash.c ++++ b/hash.c +@@ -4380,22 +4380,15 @@ rb_hash_compare_by_id(VALUE hash) + ar_force_convert_table(hash, __FILE__, __LINE__); + HASH_ASSERT(RHASH_ST_TABLE_P(hash)); + +- if (RHASH_TABLE_EMPTY_P(hash)) { +- // Fast path: There's nothing to rehash, so we don't need a `tmp` table. +- RHASH_ST_TABLE(hash)->type = &identhash; +- } else { +- // Slow path: Need to rehash the members of `self` into a new +- // `tmp` table using the new `identhash` compare/hash functions. +- tmp = hash_alloc(0); +- hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); +- identtable = RHASH_ST_TABLE(tmp); ++ tmp = hash_alloc(0); ++ hash_st_table_init(tmp, &identhash, RHASH_SIZE(hash)); ++ identtable = RHASH_ST_TABLE(tmp); + +- rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); ++ rb_hash_foreach(hash, rb_hash_rehash_i, (VALUE)tmp); + +- rb_hash_free(hash); +- RHASH_ST_TABLE_SET(hash, identtable); +- RHASH_ST_CLEAR(tmp); +- } ++ rb_hash_free(hash); ++ RHASH_ST_TABLE_SET(hash, identtable); ++ RHASH_ST_CLEAR(tmp); + + return hash; + } diff --git a/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch b/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch deleted file mode 100644 index 7f66fa1..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch +++ /dev/null @@ -1,32 +0,0 @@ -From f0b254f1f6610294821bbfc06b414d2af452db5b Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Thu, 13 Apr 2023 17:28:27 +0200 -Subject: [PATCH] [ruby/openssl] Drop a common logic disabling the FIPS mode in - the tests. - -We want to run the unit tests in the FIPS mode too. - -https://github.com/ruby/openssl/commit/ab92baff34 ---- - test/openssl/utils.rb | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb -index 4ebcb9837b..8a0be0d154 100644 ---- a/test/openssl/utils.rb -+++ b/test/openssl/utils.rb -@@ -1,11 +1,6 @@ - # frozen_string_literal: true - begin - require "openssl" -- -- # Disable FIPS mode for tests for installations -- # where FIPS mode would be enabled by default. -- # Has no effect on all other installations. -- OpenSSL.fips_mode=false - rescue LoadError - end - --- -2.41.0 - diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch deleted file mode 100644 index 156cf88..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch +++ /dev/null @@ -1,73 +0,0 @@ -From b6d7cdc2bad0eadbca73f3486917f0ec7a475814 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Tue, 29 Aug 2023 19:46:02 +0900 -Subject: [PATCH] [ruby/openssl] ssl: use ffdhe2048 from RFC 7919 as the - default DH group parameters - -In TLS 1.2 or before, if DH group parameters for DHE are not supplied -with SSLContext#tmp_dh= or #tmp_dh_callback=, we currently use the -self-generated parameters added in commit https://github.com/ruby/openssl/commit/bb3399a61c03 ("support 2048 -bit length DH-key", 2016-01-15) as the fallback. - -While there is no known weakness in the current parameters, it would be -a good idea to switch to pre-defined, more well audited parameters. - -This also allows the fallback to work in the FIPS mode. - -The PEM encoding was derived with: - - # RFC 7919 Appendix A.1. ffdhe2048 - print OpenSSL::PKey.read(OpenSSL::ASN1::Sequence([OpenSSL::ASN1::Integer((<<-END).split.join.to_i(16)), OpenSSL::ASN1::Integer(2)]).to_der).to_pem - FFFFFFFF FFFFFFFF ADF85458 A2BB4A9A AFDC5620 273D3CF1 - D8B9C583 CE2D3695 A9E13641 146433FB CC939DCE 249B3EF9 - 7D2FE363 630C75D8 F681B202 AEC4617A D3DF1ED5 D5FD6561 - 2433F51F 5F066ED0 85636555 3DED1AF3 B557135E 7F57C935 - 984F0C70 E0E68B77 E2A689DA F3EFE872 1DF158A1 36ADE735 - 30ACCA4F 483A797A BC0AB182 B324FB61 D108A94B B2C8E3FB - B96ADAB7 60D7F468 1D4F42A3 DE394DF4 AE56EDE7 6372BB19 - 0B07A7C8 EE0A6D70 9E02FCE1 CDF7E2EC C03404CD 28342F61 - 9172FE9C E98583FF 8E4F1232 EEF28183 C3FE3B1B 4C6FAD73 - 3BB5FCBC 2EC22005 C58EF183 7D1683B2 C6F34A26 C1B2EFFA - 886B4238 61285C97 FFFFFFFF FFFFFFFF - END - -https://github.com/ruby/openssl/commit/a5527cb4f4 ---- - ext/openssl/lib/openssl/ssl.rb | 18 +++++++++--------- - 1 file changed, 9 insertions(+), 9 deletions(-) - -diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb -index ea8bb2a18e533..94be6ba80b894 100644 ---- a/ext/openssl/lib/openssl/ssl.rb -+++ b/ext/openssl/lib/openssl/ssl.rb -@@ -31,21 +31,21 @@ class SSLContext - } - - if defined?(OpenSSL::PKey::DH) -- DEFAULT_2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ -+ DH_ffdhe2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_ - -----BEGIN DH PARAMETERS----- --MIIBCAKCAQEA7E6kBrYiyvmKAMzQ7i8WvwVk9Y/+f8S7sCTN712KkK3cqd1jhJDY --JbrYeNV3kUIKhPxWHhObHKpD1R84UpL+s2b55+iMd6GmL7OYmNIT/FccKhTcveab --VBmZT86BZKYyf45hUF9FOuUM9xPzuK3Vd8oJQvfYMCd7LPC0taAEljQLR4Edf8E6 --YoaOffgTf5qxiwkjnlVZQc3whgnEt9FpVMvQ9eknyeGB5KHfayAc3+hUAvI3/Cr3 --1bNveX5wInh5GDx1FGhKBZ+s1H+aedudCm7sCgRwv8lKWYGiHzObSma8A86KG+MD --7Lo5JquQ3DlBodj3IDyPrxIv96lvRPFtAwIBAg== -+MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz -++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a -+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7 -+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi -+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD -+ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg== - -----END DH PARAMETERS----- - _end_of_pem_ -- private_constant :DEFAULT_2048 -+ private_constant :DH_ffdhe2048 - - DEFAULT_TMP_DH_CALLBACK = lambda { |ctx, is_export, keylen| # :nodoc: - warn "using default DH parameters." if $VERBOSE -- DEFAULT_2048 -+ DH_ffdhe2048 - } - end - diff --git a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch deleted file mode 100644 index cac2418..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch +++ /dev/null @@ -1,177 +0,0 @@ -From 40451afa279c52ce7a508f8a9ec553cfe7a76a10 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Wed, 12 Apr 2023 17:15:21 +0200 -Subject: [PATCH] Fix OpenSSL::PKey.read in OpenSSL 3 FIPS module. - -This is a combination of the following 2 commits. Because the combined patch is -easy to merge. - -This is the 1st commit message: - -[ruby/openssl] Workaround: Fix OpenSSL::PKey.read that cannot parse PKey in the FIPS mode. - -This commit is a workaround to avoid the error below that the -`OpenSSL::PKey.read` fails with the OpenSSL 3.0 FIPS mode. - -``` -$ openssl genrsa -out key.pem 4096 - -$ ruby -e "require 'openssl'; OpenSSL::PKey.read(File.read('key.pem'))" --e:1:in `read': Could not parse PKey (OpenSSL::PKey::PKeyError) - from -e:1:in `
' -``` - -The root cause is on the OpenSSL side. The `OSSL_DECODER_CTX_set_selection` -doesn't apply the selection value properly if there are multiple providers, and -a provider (e.g. "base" provider) handles the decoder implementation, and -another provider (e.g. "fips" provider) handles the keys. - -The workaround is to create `OSSL_DECODER_CTX` variable each time without using -the `OSSL_DECODER_CTX_set_selection`. - -https://github.com/ruby/openssl/commit/5ff4a31621 - -This is the commit message #2: - -[ruby/openssl] ossl_pkey.c: Workaround: Decode with non-zero selections. - -This is a workaround for the decoding issue in ossl_pkey_read_generic(). -The issue happens in the case that a key management provider is different from -a decoding provider. - -Try all the non-zero selections in order, instead of selection 0 for OpenSSL 3 -to avoid the issue. - -https://github.com/ruby/openssl/commit/db688fa739 ---- - ext/openssl/ossl_pkey.c | 96 +++++++++++++++++++++++++++++++++-------- - 1 file changed, 79 insertions(+), 17 deletions(-) - -diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c -index 24d0da4683..15854aeca1 100644 ---- a/ext/openssl/ossl_pkey.c -+++ b/ext/openssl/ossl_pkey.c -@@ -82,41 +82,103 @@ ossl_pkey_new(EVP_PKEY *pkey) - #if OSSL_OPENSSL_PREREQ(3, 0, 0) - # include - --EVP_PKEY * --ossl_pkey_read_generic(BIO *bio, VALUE pass) -+static EVP_PKEY * -+ossl_pkey_read(BIO *bio, const char *input_type, int selection, VALUE pass) - { - void *ppass = (void *)pass; - OSSL_DECODER_CTX *dctx; - EVP_PKEY *pkey = NULL; - int pos = 0, pos2; - -- dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, "DER", NULL, NULL, 0, NULL, NULL); -+ dctx = OSSL_DECODER_CTX_new_for_pkey(&pkey, input_type, NULL, NULL, -+ selection, NULL, NULL); - if (!dctx) - goto out; -- if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, ppass) != 1) -+ if (OSSL_DECODER_CTX_set_pem_password_cb(dctx, ossl_pem_passwd_cb, -+ ppass) != 1) - goto out; -- -- /* First check DER */ -- if (OSSL_DECODER_from_bio(dctx, bio) == 1) -- goto out; -- -- /* Then check PEM; multiple OSSL_DECODER_from_bio() calls may be needed */ -- OSSL_BIO_reset(bio); -- if (OSSL_DECODER_CTX_set_input_type(dctx, "PEM") != 1) -- goto out; -- while (OSSL_DECODER_from_bio(dctx, bio) != 1) { -- if (BIO_eof(bio)) -+ while (1) { -+ if (OSSL_DECODER_from_bio(dctx, bio) == 1) - goto out; -+ if (BIO_eof(bio)) -+ break; - pos2 = BIO_tell(bio); - if (pos2 < 0 || pos2 <= pos) -- goto out; -+ break; -+ ossl_clear_error(); - pos = pos2; - } -- - out: -+ OSSL_BIO_reset(bio); - OSSL_DECODER_CTX_free(dctx); - return pkey; - } -+ -+EVP_PKEY * -+ossl_pkey_read_generic(BIO *bio, VALUE pass) -+{ -+ EVP_PKEY *pkey = NULL; -+ /* First check DER, then check PEM. */ -+ const char *input_types[] = {"DER", "PEM"}; -+ int input_type_num = (int)(sizeof(input_types) / sizeof(char *)); -+ /* -+ * Non-zero selections to try to decode. -+ * -+ * See EVP_PKEY_fromdata(3) - Selections to see all the selections. -+ * -+ * This is a workaround for the decoder failing to decode or returning -+ * bogus keys with selection 0, if a key management provider is different -+ * from a decoder provider. The workaround is to avoid using selection 0. -+ * -+ * Affected OpenSSL versions: >= 3.1.0, <= 3.1.2, or >= 3.0.0, <= 3.0.10 -+ * Fixed OpenSSL versions: 3.2, next release of the 3.1.z and 3.0.z -+ * -+ * See https://github.com/openssl/openssl/pull/21519 for details. -+ * -+ * First check for private key formats (EVP_PKEY_KEYPAIR). This is to keep -+ * compatibility with ruby/openssl < 3.0 which decoded the following as a -+ * private key. -+ * -+ * $ openssl ecparam -name prime256v1 -genkey -outform PEM -+ * -----BEGIN EC PARAMETERS----- -+ * BggqhkjOPQMBBw== -+ * -----END EC PARAMETERS----- -+ * -----BEGIN EC PRIVATE KEY----- -+ * MHcCAQEEIAG8ugBbA5MHkqnZ9ujQF93OyUfL9tk8sxqM5Wv5tKg5oAoGCCqGSM49 -+ * AwEHoUQDQgAEVcjhJfkwqh5C7kGuhAf8XaAjVuG5ADwb5ayg/cJijCgs+GcXeedj -+ * 86avKpGH84DXUlB23C/kPt+6fXYlitUmXQ== -+ * -----END EC PRIVATE KEY----- -+ * -+ * While the first PEM block is a proper encoding of ECParameters, thus -+ * OSSL_DECODER_from_bio() would pick it up, ruby/openssl used to return -+ * the latter instead. Existing applications expect this behavior. -+ * -+ * Note that normally, the input is supposed to contain a single decodable -+ * PEM block only, so this special handling should not create a new problem. -+ * -+ * Note that we need to create the OSSL_DECODER_CTX variable each time when -+ * we use the different selection as a workaround. -+ * See https://github.com/openssl/openssl/issues/20657 for details. -+ */ -+ int selections[] = { -+ EVP_PKEY_KEYPAIR, -+ EVP_PKEY_KEY_PARAMETERS, -+ EVP_PKEY_PUBLIC_KEY -+ }; -+ int selection_num = (int)(sizeof(selections) / sizeof(int)); -+ int i, j; -+ -+ for (i = 0; i < input_type_num; i++) { -+ for (j = 0; j < selection_num; j++) { -+ pkey = ossl_pkey_read(bio, input_types[i], selections[j], pass); -+ if (pkey) { -+ goto out; -+ } -+ } -+ } -+ out: -+ return pkey; -+} - #else - EVP_PKEY * - ossl_pkey_read_generic(BIO *bio, VALUE pass) --- -2.41.0 - diff --git a/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch b/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch deleted file mode 100644 index ab6a777..0000000 --- a/ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 29920ec109751459a65c6478525f2e59c644891f Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Thu, 16 Mar 2023 21:36:43 +0100 -Subject: [PATCH] [ruby/openssl] Implement FIPS functions on OpenSSL 3. - -This commit is to implement the `OpenSSL::OPENSSL_FIPS`, `ossl_fips_mode_get` -and `ossl_fips_mode_set` to pass the test `test/openssl/test_fips.rb`. - -It seems that the `OPENSSL_FIPS` macro is not used on the FIPS mode case any -more, and some FIPS related APIs also were removed in OpenSSL 3. - -See the document -the section OPENSSL 3.0 > Main Changes from OpenSSL 1.1.1 > -Other notable deprecations and changes - Removed FIPS_mode() and FIPS_mode_set() . - -The `OpenSSL::OPENSSL_FIPS` returns always true in OpenSSL 3 because the used -functions `EVP_default_properties_enable_fips` and `EVP_default_properties_is_fips_enabled` -works with the OpenSSL installed without FIPS option. - -The `TEST_RUBY_OPENSSL_FIPS_ENABLED` is set on the FIPS mode case on the CI. -Because I want to test that the `OpenSSL.fips_mode` returns the `true` or -'false' surely in the CI. You can test the FIPS mode case by setting -`TEST_RUBY_OPENSSL_FIPS_ENABLED` on local too. Right now I don't find a better -way to get the status of the FIPS mode enabled or disabled for this purpose. I -am afraid of the possibility that the FIPS test case is unintentionally skipped. - -I also replaced the ambiguous "returns" with "should return" in the tests. - -https://github.com/ruby/openssl/commit/c5b2bc1268 ---- - ext/openssl/ossl.c | 25 +++++++++++++++++++++---- - test/openssl/test_fips.rb | 32 ++++++++++++++++++++++++++++---- - 2 files changed, 49 insertions(+), 8 deletions(-) - -diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c -index 6c532aca94..fcf3744c65 100644 ---- a/ext/openssl/ossl.c -+++ b/ext/openssl/ossl.c -@@ -418,7 +418,11 @@ static VALUE - ossl_fips_mode_get(VALUE self) - { - --#ifdef OPENSSL_FIPS -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ VALUE enabled; -+ enabled = EVP_default_properties_is_fips_enabled(NULL) ? Qtrue : Qfalse; -+ return enabled; -+#elif OPENSSL_FIPS - VALUE enabled; - enabled = FIPS_mode() ? Qtrue : Qfalse; - return enabled; -@@ -442,8 +446,18 @@ ossl_fips_mode_get(VALUE self) - static VALUE - ossl_fips_mode_set(VALUE self, VALUE enabled) - { -- --#ifdef OPENSSL_FIPS -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ if (RTEST(enabled)) { -+ if (!EVP_default_properties_enable_fips(NULL, 1)) { -+ ossl_raise(eOSSLError, "Turning on FIPS mode failed"); -+ } -+ } else { -+ if (!EVP_default_properties_enable_fips(NULL, 0)) { -+ ossl_raise(eOSSLError, "Turning off FIPS mode failed"); -+ } -+ } -+ return enabled; -+#elif OPENSSL_FIPS - if (RTEST(enabled)) { - int mode = FIPS_mode(); - if(!mode && !FIPS_mode_set(1)) /* turning on twice leads to an error */ -@@ -1198,7 +1212,10 @@ Init_openssl(void) - * Boolean indicating whether OpenSSL is FIPS-capable or not - */ - rb_define_const(mOSSL, "OPENSSL_FIPS", --#ifdef OPENSSL_FIPS -+/* OpenSSL 3 is FIPS-capable even when it is installed without fips option */ -+#if OSSL_OPENSSL_PREREQ(3, 0, 0) -+ Qtrue -+#elif OPENSSL_FIPS - Qtrue - #else - Qfalse -diff --git a/test/openssl/test_fips.rb b/test/openssl/test_fips.rb -index 8cd474f9a3..56a12a94ce 100644 ---- a/test/openssl/test_fips.rb -+++ b/test/openssl/test_fips.rb -@@ -4,22 +4,46 @@ - if defined?(OpenSSL) - - class OpenSSL::TestFIPS < OpenSSL::TestCase -+ def test_fips_mode_get_is_true_on_fips_mode_enabled -+ unless ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] -+ omit "Only for FIPS mode environment" -+ end -+ -+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") -+ assert OpenSSL.fips_mode == true, ".fips_mode should return true on FIPS mode enabled" -+ end; -+ end -+ -+ def test_fips_mode_get_is_false_on_fips_mode_disabled -+ if ENV["TEST_RUBY_OPENSSL_FIPS_ENABLED"] -+ omit "Only for non-FIPS mode environment" -+ end -+ -+ assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") -+ message = ".fips_mode should return false on FIPS mode disabled. " \ -+ "If you run the test on FIPS mode, please set " \ -+ "TEST_RUBY_OPENSSL_FIPS_ENABLED=true" -+ assert OpenSSL.fips_mode == false, message -+ end; -+ end -+ - def test_fips_mode_is_reentrant - OpenSSL.fips_mode = false - OpenSSL.fips_mode = false - end - -- def test_fips_mode_get -- return unless OpenSSL::OPENSSL_FIPS -+ def test_fips_mode_get_with_fips_mode_set -+ omit('OpenSSL is not FIPS-capable') unless OpenSSL::OPENSSL_FIPS -+ - assert_separately([{ "OSSL_MDEBUG" => nil }, "-ropenssl"], <<~"end;") - require #{__FILE__.dump} - - begin - OpenSSL.fips_mode = true -- assert OpenSSL.fips_mode == true, ".fips_mode returns true when .fips_mode=true" -+ assert OpenSSL.fips_mode == true, ".fips_mode should return true when .fips_mode=true" - - OpenSSL.fips_mode = false -- assert OpenSSL.fips_mode == false, ".fips_mode returns false when .fips_mode=false" -+ assert OpenSSL.fips_mode == false, ".fips_mode should return false when .fips_mode=false" - rescue OpenSSL::OpenSSLError - pend "Could not set FIPS mode (OpenSSL::OpenSSLError: \#$!); skipping" - end --- -2.41.0 - diff --git a/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch b/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch new file mode 100644 index 0000000..b509cb4 --- /dev/null +++ b/ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch @@ -0,0 +1,241 @@ +From c3655b89e7c06555a2e0bf13affb8a63a49f4296 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 26 Jan 2024 11:19:48 +0100 +Subject: [PATCH] Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls + for outgoing conns (#7295)" + +This reverts commit d2ba8ea54a4089959afdeecdd963e3c4ff391748. + +The purpose of the commit is to workaround a GLIBC bug [0] still present +in older Ubuntu [1]. C8S/RHEL 8 has the fix for some time [2] and the +Ruby workaround is causing problems for us [3]. Therefore we can +revert it for EL8, EL9, and Fedora distros. + +[0] https://sourceware.org/bugzilla/show_bug.cgi?id=26600 +[1] https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1961697 +[2] https://bugzilla.redhat.com/show_bug.cgi?id=1868106 +[3] https://bugs.ruby-lang.org/issues/20208 +--- + ext/socket/extconf.rb | 2 - + ext/socket/ipsocket.c | 11 +-- + test/socket/test_tcp.rb | 164 ---------------------------------------- + 3 files changed, 2 insertions(+), 175 deletions(-) + +diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb +index 544bed5298..1ca52da366 100644 +--- a/ext/socket/extconf.rb ++++ b/ext/socket/extconf.rb +@@ -607,8 +607,6 @@ def %(s) s || self end + EOS + end + +- have_const('AI_ADDRCONFIG', headers) +- + case with_config("lookup-order-hack", "UNSPEC") + when "INET" + $defs << "-DLOOKUP_ORDER_HACK_INET" +diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c +index 0a693655b4..0c13620258 100644 +--- a/ext/socket/ipsocket.c ++++ b/ext/socket/ipsocket.c +@@ -54,22 +54,15 @@ init_inetsock_internal(VALUE v) + VALUE connect_timeout = arg->connect_timeout; + struct timeval tv_storage; + struct timeval *tv = NULL; +- int remote_addrinfo_hints = 0; + + if (!NIL_P(connect_timeout)) { + tv_storage = rb_time_interval(connect_timeout); + tv = &tv_storage; + } + +- if (type == INET_SERVER) { +- remote_addrinfo_hints |= AI_PASSIVE; +- } +-#ifdef HAVE_CONST_AI_ADDRCONFIG +- remote_addrinfo_hints |= AI_ADDRCONFIG; +-#endif +- + arg->remote.res = rsock_addrinfo(arg->remote.host, arg->remote.serv, +- family, SOCK_STREAM, remote_addrinfo_hints); ++ family, SOCK_STREAM, ++ (type == INET_SERVER) ? AI_PASSIVE : 0); + + + /* +diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb +index 35d361f060..7f9dc53cae 100644 +--- a/test/socket/test_tcp.rb ++++ b/test/socket/test_tcp.rb +@@ -140,168 +140,4 @@ def test_accept_multithread + server_threads.each(&:join) + end + end +- +- def test_ai_addrconfig +- # This test verifies that we pass AI_ADDRCONFIG to the DNS resolver when making +- # an outgoing connection. +- # The verification of this is unfortunately incredibly convoluted. We perform the +- # test by setting up a fake DNS server to receive queries. Then, we construct +- # an environment which has only IPv4 addresses and uses that fake DNS server. We +- # then attempt to make an outgoing TCP connection. Finally, we verify that we +- # only received A and not AAAA queries on our fake resolver. +- # This test can only possibly work on Linux, and only when run as root. If either +- # of these conditions aren't met, the test will be skipped. +- +- # The construction of our IPv6-free environment must happen in a child process, +- # which we can put in its own network & mount namespaces. +- +- omit "This test is disabled. It is retained to show the original intent of [ruby-core:110870]" +- +- IO.popen("-") do |test_io| +- if test_io.nil? +- begin +- # Child program +- require 'fiddle' +- require 'resolv' +- require 'open3' +- +- libc = Fiddle.dlopen(nil) +- begin +- unshare = Fiddle::Function.new(libc['unshare'], [Fiddle::TYPE_INT], Fiddle::TYPE_INT) +- rescue Fiddle::DLError +- # Test can't run because we don't have unshare(2) in libc +- # This will be the case on not-linux, and also on very old glibc versions (or +- # possibly other libc's that don't expose this syscall wrapper) +- $stdout.write(Marshal.dump({result: :skip, reason: "unshare(2) or mount(2) not in libc"})) +- exit +- end +- +- # Move our test process into a new network & mount namespace. +- # This environment will be configured to be IPv6 free and point DNS resolution +- # at a fake DNS server. +- # (n.b. these flags are CLONE_NEWNS | CLONE_NEWNET) +- ret = unshare.call(0x00020000 | 0x40000000) +- errno = Fiddle.last_error +- if ret == -1 && errno == Errno::EPERM::Errno +- # Test can't run because we're not root. +- $stdout.write(Marshal.dump({result: :skip, reason: "insufficient permissions to unshare namespaces"})) +- exit +- elsif ret == -1 && (errno == Errno::ENOSYS::Errno || errno == Errno::EINVAL::Errno) +- # No unshare(2) in the kernel (or kernel too old to know about this namespace type) +- $stdout.write(Marshal.dump({result: :skip, reason: "errno #{errno} calling unshare(2)"})) +- exit +- elsif ret == -1 +- # Unexpected failure +- raise "errno #{errno} calling unshare(2)" +- end +- +- # Set up our fake DNS environment. Clean out /etc/hosts... +- fake_hosts_file = Tempfile.new('ruby_test_hosts') +- fake_hosts_file.write <<~HOSTS +- 127.0.0.1 localhost +- ::1 localhost +- HOSTS +- fake_hosts_file.flush +- +- # Have /etc/resolv.conf point to 127.0.0.1... +- fake_resolv_conf = Tempfile.new('ruby_test_resolv') +- fake_resolv_conf.write <<~RESOLV +- nameserver 127.0.0.1 +- RESOLV +- fake_resolv_conf.flush +- +- # Also stub out /etc/nsswitch.conf; glibc can have other resolver modules +- # (like systemd-resolved) configured in there other than just using dns, +- # so rewrite it to remove any `hosts:` lines and add one which just uses +- # dns. +- real_nsswitch_conf = File.read('/etc/nsswitch.conf') rescue "" +- fake_nsswitch_conf = Tempfile.new('ruby_test_nsswitch') +- real_nsswitch_conf.lines.reject { _1 =~ /^\s*hosts:/ }.each do |ln| +- fake_nsswitch_conf.puts ln +- end +- fake_nsswitch_conf.puts "hosts: files myhostname dns" +- fake_nsswitch_conf.flush +- +- # This is needed to make sure our bind-mounds aren't visible outside this process. +- system 'mount', '--make-rprivate', '/', exception: true +- # Bind-mount the fake files over the top of the real files. +- system 'mount', '--bind', '--make-private', fake_hosts_file.path, '/etc/hosts', exception: true +- system 'mount', '--bind', '--make-private', fake_resolv_conf.path, '/etc/resolv.conf', exception: true +- system 'mount', '--bind', '--make-private', fake_nsswitch_conf.path, '/etc/nsswitch.conf', exception: true +- +- # Create a dummy interface with only an IPv4 address +- system 'ip', 'link', 'add', 'dummy0', 'type', 'dummy', exception: true +- system 'ip', 'addr', 'add', '192.168.1.2/24', 'dev', 'dummy0', exception: true +- system 'ip', 'link', 'set', 'dummy0', 'up', exception: true +- system 'ip', 'link', 'set', 'lo', 'up', exception: true +- +- # Disable IPv6 on this interface (this is needed to disable the link-local +- # IPv6 address) +- File.open('/proc/sys/net/ipv6/conf/dummy0/disable_ipv6', 'w') do |f| +- f.puts "1" +- end +- +- # Create a fake DNS server which will receive the DNS queries triggered by TCPSocket.new +- fake_dns_server_socket = UDPSocket.new +- fake_dns_server_socket.bind('127.0.0.1', 53) +- received_dns_queries = [] +- fake_dns_server_thread = Thread.new do +- Socket.udp_server_loop_on([fake_dns_server_socket]) do |msg, msg_src| +- request = Resolv::DNS::Message.decode(msg) +- received_dns_queries << request +- response = request.dup.tap do |r| +- r.qr = 0 +- r.rcode = 3 # NXDOMAIN +- end +- msg_src.reply response.encode +- end +- end +- +- # Make a request which will hit our fake DNS swerver - this needs to be in _another_ +- # process because glibc will cache resolver info across the fork otherwise. +- load_path_args = $LOAD_PATH.flat_map { ['-I', _1] } +- Open3.capture3('/proc/self/exe', *load_path_args, '-rsocket', '-e', <<~RUBY) +- TCPSocket.open('www.example.com', 4444) +- RUBY +- +- fake_dns_server_thread.kill +- fake_dns_server_thread.join +- +- have_aaaa_qs = received_dns_queries.any? do |query| +- query.question.any? do |question| +- question[1] == Resolv::DNS::Resource::IN::AAAA +- end +- end +- +- have_a_q = received_dns_queries.any? do |query| +- query.question.any? do |question| +- question[0].to_s == "www.example.com" +- end +- end +- +- if have_aaaa_qs +- $stdout.write(Marshal.dump({result: :fail, reason: "got AAAA queries, expected none"})) +- elsif !have_a_q +- $stdout.write(Marshal.dump({result: :fail, reason: "got no A query for example.com"})) +- else +- $stdout.write(Marshal.dump({result: :success})) +- end +- rescue => ex +- $stdout.write(Marshal.dump({result: :fail, reason: ex.full_message})) +- ensure +- # Make sure the child process does not transfer control back into the test runner. +- exit! +- end +- else +- test_result = Marshal.load(test_io.read) +- +- case test_result[:result] +- when :skip +- omit test_result[:reason] +- when :fail +- fail test_result[:reason] +- end +- end +- end +- end + end if defined?(TCPSocket) +-- +2.43.0 + diff --git a/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch new file mode 100644 index 0000000..9ab7078 --- /dev/null +++ b/ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch @@ -0,0 +1,59 @@ +From 8af8f327457738620d2c85bd65db8cc5594585db Mon Sep 17 00:00:00 2001 +From: Yuta Saito +Date: Wed, 27 Dec 2023 06:22:45 +0000 +Subject: [PATCH 1/2] [Bug #20085] Use consistent default options for + `-mbranch-protection` + +We need to use the same options for both C compiler and assembler +when `-mbranch-protection` is guessed by configure. Otherwise, +`coroutine/arm64/Context.{h,S}` will use incompatible PAC strategies. +--- + configure.ac | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 9286946fc1..18b4247991 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -830,7 +830,10 @@ AS_IF([test "$GCC" = yes], [ + AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ ++ # C compiler and assembler must be consistent for -mbranch-protection ++ # since they both check `__ARM_FEATURE_PAC_DEFAULT` definition. + RUBY_APPEND_OPTION(XCFLAGS, option) ++ RUBY_APPEND_OPTION(ASFLAGS, option) + break + ]) + ]) +-- +2.43.0 + + +From 80281e14e411e8e5fe4955effbb2c650a2f52667 Mon Sep 17 00:00:00 2001 +From: Jarek Prokop +Date: Fri, 12 Jan 2024 18:33:34 +0100 +Subject: [PATCH 2/2] aarch64: Prepend -mbranch-protection=standard option when + checking branch protection. + +Related Upstream issue: https://bugs.ruby-lang.org/issues/20154 +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 18b4247991..5ea8ada8f7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -827,7 +827,7 @@ AS_IF([test "$GCC" = yes], [ + + # aarch64 branch protection + AS_CASE(["$target_cpu"], [aarch64], [ +- AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ ++ AS_FOR(option, opt, [-mbranch-protection=standard -mbranch-protection=pac-ret -msign-return-address=all], [ + RUBY_TRY_CFLAGS(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ + # C compiler and assembler must be consistent for -mbranch-protection +-- +2.43.0 + diff --git a/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch b/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch new file mode 100644 index 0000000..34a18e0 --- /dev/null +++ b/ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch @@ -0,0 +1,256 @@ +From d3933fc753187a055a4904af82f5f3794c88c416 Mon Sep 17 00:00:00 2001 +From: Sorah Fukumori +Date: Mon, 1 Jan 2024 20:45:54 +0900 +Subject: [PATCH] [ruby/net-http] Renew test certificates + +The private key is replaced with a public known test key published at +[RFC 9500]. + +Also lifetime has been extended to 10 years from 4 years. + +[RFC 9500]: https://www.rfc-editor.org/rfc/rfc9500.html + +https://github.com/ruby/net-http/commit/4ab6c4a500 +--- + test/net/fixtures/Makefile | 6 +-- + test/net/fixtures/cacert.pem | 44 ++++++++-------- + test/net/fixtures/server.crt | 99 +++++++----------------------------- + test/net/fixtures/server.key | 55 ++++++++++---------- + 4 files changed, 71 insertions(+), 133 deletions(-) + +diff --git a/test/net/fixtures/Makefile b/test/net/fixtures/Makefile +index b2bc9c7368ee2..88c232e3b6c16 100644 +--- a/test/net/fixtures/Makefile ++++ b/test/net/fixtures/Makefile +@@ -5,11 +5,11 @@ regen_certs: + make server.crt + + cacert.pem: server.key +- openssl req -new -x509 -days 1825 -key server.key -out cacert.pem -text -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" ++ openssl req -new -x509 -days 3650 -key server.key -out cacert.pem -subj "/C=JP/ST=Shimane/L=Matz-e city/O=Ruby Core Team/CN=Ruby Test CA/emailAddress=security@ruby-lang.org" + + server.csr: +- openssl req -new -key server.key -out server.csr -text -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" ++ openssl req -new -key server.key -out server.csr -subj "/C=JP/ST=Shimane/O=Ruby Core Team/OU=Ruby Test/CN=localhost" + + server.crt: server.csr cacert.pem +- openssl x509 -days 1825 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -text -out server.crt ++ openssl x509 -days 3650 -CA cacert.pem -CAkey server.key -set_serial 00 -in server.csr -req -out server.crt + rm server.csr +diff --git a/test/net/fixtures/cacert.pem b/test/net/fixtures/cacert.pem +index f623bd62ed375..24c83f1c65225 100644 +--- a/test/net/fixtures/cacert.pem ++++ b/test/net/fixtures/cacert.pem +@@ -1,24 +1,24 @@ + -----BEGIN CERTIFICATE----- +-MIID7TCCAtWgAwIBAgIJAIltvxrFAuSnMA0GCSqGSIb3DQEBCwUAMIGMMQswCQYD +-VQQGEwJKUDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0Ex +-JTAjBgkqhkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwHhcNMTkwMTAy +-MDI1ODI4WhcNMjQwMTAxMDI1ODI4WjCBjDELMAkGA1UEBhMCSlAxEDAOBgNVBAgM +-B1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQKDA5SdWJ5IENv +-cmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZIhvcNAQkBFhZz +-ZWN1cml0eUBydWJ5LWxhbmcub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +-CgKCAQEAznlbjRVhz1NlutHVrhcGnK8W0qug2ujKXv1njSC4U6nJF6py7I9EeehV +-SaKePyv+I9z3K1LnfUHOtUbdwdKC77yN66A6q2aqzu5q09/NSykcZGOIF0GuItYI +-3nvW3IqBddff2ffsyR+9pBjfb5AIPP08WowF9q4s1eGULwZc4w2B8PFhtxYANd7d +-BvGLXFlcufv9tDtzyRi4t7eqxCRJkZQIZNZ6DHHIJrNxejOILfHLarI12yk8VK6L +-2LG4WgGqyeePiRyd1o1MbuiAFYqAwpXNUbRKg5NaZGwBHZk8UZ+uFKt1QMBURO5R +-WFy1c349jbWszTqFyL4Lnbg9HhAowQIDAQABo1AwTjAdBgNVHQ4EFgQU9tEiKdU9 +-I9derQyc5nWPnc34nVMwHwYDVR0jBBgwFoAU9tEiKdU9I9derQyc5nWPnc34nVMw +-DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAxj7F/u3C3fgq24N7hGRA +-of7ClFQxGmo/IGT0AISzW3HiVYiFaikKhbO1NwD9aBpD8Zwe62sCqMh8jGV/b0+q +-aOORnWYNy2R6r9FkASAglmdF6xn3bhgGD5ls4pCvcG9FynGnGc24g6MrjFNrBYUS +-2iIZsg36i0IJswo/Dy6HLphCms2BMCD3DeWtfjePUiTmQHJo6HsQIKP/u4N4Fvee +-uMBInei2M4VU74fLXbmKl1F9AEX7JDP3BKSZG19Ch5pnUo4uXM1uNTGsi07P4Y0s +-K44+SKBC0bYEFbDK0eQWMrX3kIhkPxyIWhxdq9/NqPYjShuSEAhA6CSpmRg0pqc+ +-mA== ++MIID+zCCAuOgAwIBAgIUGMvHl3EhtKPKcgc3NQSAYfFuC+8wDQYJKoZIhvcNAQEL ++BQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRQwEgYDVQQHDAtN ++YXR6LWUgY2l0eTEXMBUGA1UECgwOUnVieSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1 ++YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJARYWc2VjdXJpdHlAcnVieS1sYW5nLm9y ++ZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEyMjkxMTQ3MjNaMIGMMQswCQYDVQQGEwJK ++UDEQMA4GA1UECAwHU2hpbWFuZTEUMBIGA1UEBwwLTWF0ei1lIGNpdHkxFzAVBgNV ++BAoMDlJ1YnkgQ29yZSBUZWFtMRUwEwYDVQQDDAxSdWJ5IFRlc3QgQ0ExJTAjBgkq ++hkiG9w0BCQEWFnNlY3VyaXR5QHJ1YnktbGFuZy5vcmcwggEiMA0GCSqGSIb3DQEB ++AQUAA4IBDwAwggEKAoIBAQCw+egZQ6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI +++1GSqyi1bFBgsRjM0THllIdMbKmJtWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0f ++qXmG8UTz0VTWdlAXXmhUs6lSADvAaIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0 ++yg+801SXzoFTTa+UGIRLE66jH51aa5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIe ++NWMF32wHqIOOPvQcWV3M5D2vxJEj702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1 ++JNPc/n3dVUm+fM6NoDXPoLP7j55G9zKyqGtGAWXAj1MTAgMBAAGjUzBRMB0GA1Ud ++DgQWBBSJGVleDvFp9cu9R+E0/OKYzGkwkTAfBgNVHSMEGDAWgBSJGVleDvFp9cu9 ++R+E0/OKYzGkwkTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBl ++8GLB8skAWlkSw/FwbUmEV3zyqu+p7PNP5YIYoZs0D74e7yVulGQ6PKMZH5hrZmHo ++orFSQU+VUUirG8nDGj7Rzce8WeWBxsaDGC8CE2dq6nC6LuUwtbdMnBrH0LRWAz48 ++jGFF3jHtVz8VsGfoZTZCjukWqNXvU6hETT9GsfU+PZqbqcTVRPH52+XgYayKdIbD ++r97RM4X3+aXBHcUW0b76eyyi65RR/Xtvn8ioZt2AdX7T2tZzJyXJN3Hupp77s6Ui ++AZR35SToHCZeTZD12YBvLBdaTPLZN7O/Q/aAO9ZiJaZ7SbFOjz813B2hxXab4Fob ++2uJX6eMWTVxYK5D4M9lm + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.crt b/test/net/fixtures/server.crt +index 5ca78a6d146a0..5d2923795dabc 100644 +--- a/test/net/fixtures/server.crt ++++ b/test/net/fixtures/server.crt +@@ -1,82 +1,21 @@ +-Certificate: +- Data: +- Version: 3 (0x2) +- Serial Number: 2 (0x2) +- Signature Algorithm: sha256WithRSAEncryption +- Issuer: C=JP, ST=Shimane, L=Matz-e city, O=Ruby Core Team, CN=Ruby Test CA/emailAddress=security@ruby-lang.org +- Validity +- Not Before: Jan 2 03:27:13 2019 GMT +- Not After : Jan 1 03:27:13 2024 GMT +- Subject: C=JP, ST=Shimane, O=Ruby Core Team, OU=Ruby Test, CN=localhost +- Subject Public Key Info: +- Public Key Algorithm: rsaEncryption +- Public-Key: (2048 bit) +- Modulus: +- 00:e8:da:9c:01:2e:2b:10:ec:49:cd:5e:07:13:07: +- 9c:70:9e:c6:74:bc:13:c2:e1:6f:c6:82:fd:e3:48: +- e0:2c:a5:68:c7:9e:42:de:60:54:65:e6:6a:14:57: +- 7a:30:d0:cc:b5:b6:d9:c3:d2:df:c9:25:97:54:67: +- cf:f6:be:5e:cb:8b:ee:03:c5:e1:e2:f9:e7:f7:d1: +- 0c:47:f0:b8:da:33:5a:ad:41:ad:e7:b5:a2:7b:b7: +- bf:30:da:60:f8:e3:54:a2:bc:3a:fd:1b:74:d9:dc: +- 74:42:e9:29:be:df:ac:b4:4f:eb:32:f4:06:f1:e1: +- 8c:4b:a8:8b:fb:29:e7:b1:bf:1d:01:ee:73:0f:f9: +- 40:dc:d5:15:79:d9:c6:73:d0:c0:dd:cb:e4:da:19: +- 47:80:c6:14:04:72:fd:9a:7c:8f:11:82:76:49:04: +- 79:cc:f2:5c:31:22:95:13:3e:5d:40:a6:4d:e0:a3: +- 02:26:7d:52:3b:bb:ed:65:a1:0f:ed:6b:b0:3c:d4: +- de:61:15:5e:d3:dd:68:09:9f:4a:57:a5:c2:a9:6d: +- 86:92:c5:f4:a4:d4:b7:13:3b:52:63:24:05:e2:cc: +- e3:8a:3c:d4:35:34:2b:10:bb:58:72:e7:e1:8d:1d: +- 74:8c:61:16:20:3d:d0:1c:4e:8f:6e:fd:fe:64:10: +- 4f:41 +- Exponent: 65537 (0x10001) +- X509v3 extensions: +- X509v3 Basic Constraints: +- CA:FALSE +- Netscape Comment: +- OpenSSL Generated Certificate +- X509v3 Subject Key Identifier: +- ED:28:C2:7E:AB:4B:C8:E8:FE:55:6D:66:95:31:1C:2D:60:F9:02:36 +- X509v3 Authority Key Identifier: +- keyid:F6:D1:22:29:D5:3D:23:D7:5E:AD:0C:9C:E6:75:8F:9D:CD:F8:9D:53 +- +- Signature Algorithm: sha256WithRSAEncryption +- 1d:b8:c5:8b:72:41:20:65:ad:27:6f:15:63:06:26:12:8d:9c: +- ad:ca:f4:db:97:b4:90:cb:ff:35:94:bb:2a:a7:a1:ab:1e:35: +- 2d:a5:3f:c9:24:b0:1a:58:89:75:3e:81:0a:2c:4f:98:f9:51: +- fb:c0:a3:09:d0:0a:9b:e7:a2:b7:c3:60:40:c8:f4:6d:b2:6a: +- 56:12:17:4c:00:24:31:df:9c:60:ae:b1:68:54:a9:e6:b5:4a: +- 04:e6:92:05:86:d9:5a:dc:96:30:a5:58:de:14:99:0f:e5:15: +- 89:3e:9b:eb:80:e3:bd:83:c3:ea:33:35:4b:3e:2f:d3:0d:64: +- 93:67:7f:8d:f5:3f:0c:27:bc:37:5a:cc:d6:47:16:af:5a:62: +- d2:da:51:f8:74:06:6b:24:ad:28:68:08:98:37:7d:ed:0e:ab: +- 1e:82:61:05:d0:ba:75:a0:ab:21:b0:9a:fd:2b:54:86:1d:0d: +- 1f:c2:d4:77:1f:72:26:5e:ad:8a:9f:09:36:6d:44:be:74:c2: +- 5a:3e:ff:5c:9d:75:d6:38:7b:c5:39:f9:44:6e:a1:d1:8e:ff: +- 63:db:c4:bb:c6:91:92:ca:5c:60:9b:1d:eb:0a:de:08:ee:bf: +- da:76:03:65:62:29:8b:f8:7f:c7:86:73:1e:f6:1f:2d:89:69: +- fd:be:bd:6e + -----BEGIN CERTIFICATE----- +-MIID4zCCAsugAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBjDELMAkGA1UEBhMCSlAx +-EDAOBgNVBAgMB1NoaW1hbmUxFDASBgNVBAcMC01hdHotZSBjaXR5MRcwFQYDVQQK +-DA5SdWJ5IENvcmUgVGVhbTEVMBMGA1UEAwwMUnVieSBUZXN0IENBMSUwIwYJKoZI +-hvcNAQkBFhZzZWN1cml0eUBydWJ5LWxhbmcub3JnMB4XDTE5MDEwMjAzMjcxM1oX +-DTI0MDEwMTAzMjcxM1owYDELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1NoaW1hbmUx +-FzAVBgNVBAoMDlJ1YnkgQ29yZSBUZWFtMRIwEAYDVQQLDAlSdWJ5IFRlc3QxEjAQ +-BgNVBAMMCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +-AOjanAEuKxDsSc1eBxMHnHCexnS8E8Lhb8aC/eNI4CylaMeeQt5gVGXmahRXejDQ +-zLW22cPS38kll1Rnz/a+XsuL7gPF4eL55/fRDEfwuNozWq1Bree1onu3vzDaYPjj +-VKK8Ov0bdNncdELpKb7frLRP6zL0BvHhjEuoi/sp57G/HQHucw/5QNzVFXnZxnPQ +-wN3L5NoZR4DGFARy/Zp8jxGCdkkEeczyXDEilRM+XUCmTeCjAiZ9Uju77WWhD+1r +-sDzU3mEVXtPdaAmfSlelwqlthpLF9KTUtxM7UmMkBeLM44o81DU0KxC7WHLn4Y0d +-dIxhFiA90BxOj279/mQQT0ECAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhC +-AQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFO0o +-wn6rS8jo/lVtZpUxHC1g+QI2MB8GA1UdIwQYMBaAFPbRIinVPSPXXq0MnOZ1j53N +-+J1TMA0GCSqGSIb3DQEBCwUAA4IBAQAduMWLckEgZa0nbxVjBiYSjZytyvTbl7SQ +-y/81lLsqp6GrHjUtpT/JJLAaWIl1PoEKLE+Y+VH7wKMJ0Aqb56K3w2BAyPRtsmpW +-EhdMACQx35xgrrFoVKnmtUoE5pIFhtla3JYwpVjeFJkP5RWJPpvrgOO9g8PqMzVL +-Pi/TDWSTZ3+N9T8MJ7w3WszWRxavWmLS2lH4dAZrJK0oaAiYN33tDqsegmEF0Lp1 +-oKshsJr9K1SGHQ0fwtR3H3ImXq2Knwk2bUS+dMJaPv9cnXXWOHvFOflEbqHRjv9j +-28S7xpGSylxgmx3rCt4I7r/adgNlYimL+H/HhnMe9h8tiWn9vr1u ++MIIDYTCCAkkCAQAwDQYJKoZIhvcNAQELBQAwgYwxCzAJBgNVBAYTAkpQMRAwDgYD ++VQQIDAdTaGltYW5lMRQwEgYDVQQHDAtNYXR6LWUgY2l0eTEXMBUGA1UECgwOUnVi ++eSBDb3JlIFRlYW0xFTATBgNVBAMMDFJ1YnkgVGVzdCBDQTElMCMGCSqGSIb3DQEJ ++ARYWc2VjdXJpdHlAcnVieS1sYW5nLm9yZzAeFw0yNDAxMDExMTQ3MjNaFw0zMzEy ++MjkxMTQ3MjNaMGAxCzAJBgNVBAYTAkpQMRAwDgYDVQQIDAdTaGltYW5lMRcwFQYD ++VQQKDA5SdWJ5IENvcmUgVGVhbTESMBAGA1UECwwJUnVieSBUZXN0MRIwEAYDVQQD ++DAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCw+egZ ++Q6eumJKq3hfKfED4dE/tL4FI5sjqont9ABVI+1GSqyi1bFBgsRjM0THllIdMbKmJ ++tWwnKW8J+5OgNN8y6Xxv8JmM/Y5vQt2lis0fqXmG8UTz0VTWdlAXXmhUs6lSADvA ++aIe4RVrCsZ97L3ZQTryY7JRVcbB4khUN3Gp0yg+801SXzoFTTa+UGIRLE66jH51a ++a5VXu99hnv1OiH8tQrjdi8mH6uG/icq4XuIeNWMF32wHqIOOPvQcWV3M5D2vxJEj ++702Ku6k9OQXkAo17qRSEonWW4HtLbtmS8He1JNPc/n3dVUm+fM6NoDXPoLP7j55G ++9zKyqGtGAWXAj1MTAgMBAAEwDQYJKoZIhvcNAQELBQADggEBACtGNdj5TEtnJBYp ++M+LhBeU3oNteldfycEm993gJp6ghWZFg23oX8fVmyEeJr/3Ca9bAgDqg0t9a0npN ++oWKEY6wVKqcHgu3gSvThF5c9KhGbeDDmlTSVVNQmXWX0K2d4lS2cwZHH8mCm2mrY ++PDqlEkSc7k4qSiqigdS8i80Yk+lDXWsm8CjsiC93qaRM7DnS0WPQR0c16S95oM6G ++VklFKUSDAuFjw9aVWA/nahOucjn0w5fVW6lyIlkBslC1ChlaDgJmvhz+Ol3iMsE0 ++kAmFNu2KKPVrpMWaBID49QwQTDyhetNLaVVFM88iUdA9JDoVMEuP1mm39JqyzHTu ++uBrdP4Q= + -----END CERTIFICATE----- +diff --git a/test/net/fixtures/server.key b/test/net/fixtures/server.key +index 7f2380e71e637..6a83d5bcf4a52 100644 +--- a/test/net/fixtures/server.key ++++ b/test/net/fixtures/server.key +@@ -1,28 +1,27 @@ +------BEGIN PRIVATE KEY----- +-MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDo2pwBLisQ7EnN +-XgcTB5xwnsZ0vBPC4W/Ggv3jSOAspWjHnkLeYFRl5moUV3ow0My1ttnD0t/JJZdU +-Z8/2vl7Li+4DxeHi+ef30QxH8LjaM1qtQa3ntaJ7t78w2mD441SivDr9G3TZ3HRC +-6Sm+36y0T+sy9Abx4YxLqIv7Keexvx0B7nMP+UDc1RV52cZz0MDdy+TaGUeAxhQE +-cv2afI8RgnZJBHnM8lwxIpUTPl1Apk3gowImfVI7u+1loQ/ta7A81N5hFV7T3WgJ +-n0pXpcKpbYaSxfSk1LcTO1JjJAXizOOKPNQ1NCsQu1hy5+GNHXSMYRYgPdAcTo9u +-/f5kEE9BAgMBAAECggEBAOHkwhc7DLh8IhTDNSW26oMu5OP2WU1jmiYAigDmf+OQ +-DBgrZj+JQBci8qINQxL8XLukSZn5hvQCLc7Kbyu1/wyEEUFDxSGGwwzclodr9kho +-LX2LDASPZrOSzD2+fPi2wTKmXKuS6Uc44OjQfZkYMNkz9r4Vkm8xGgOD3VipjIYX +-QXlhhdqkXZcNABsihCV52GKkDFSVm8jv95YJc5xhoYCy/3a4/qPdF0aT2R7oYUej +-hKrxVDskyooe8Zg/JTydZNV5GQEDmW01/K3r6XGT26oPi1AqMU1gtv/jkW56CRQQ +-1got8smnqM+AV7Slf9R6DauIPdQJ2S8wsr/o8ISBsOECgYEA9YrqEP2gAYSGFXRt +-liw0WI2Ant8BqXS6yvq1jLo/qWhLw/ph4Di73OQ2mpycVTpgfGr2wFPQR1XJ+0Fd +-U+Ir/C3Q7FK4VIGHK7B0zNvZr5tEjlFfeRezo2JMVw5YWeSagIFcSwK+KqCTH9qc +-pw/Eb8nB/4XNcpTZu7Fg0Wc+ooUCgYEA8sVaicn1Wxkpb45a4qfrA6wOr5xdJ4cC +-A5qs7vjX2OdPIQOmoQhdI7bCWFXZzF33wA4YCws6j5wRaySLIJqdms8Gl9QnODy1 +-ZlA5gwKToBC/jqPmWAXSKb8EH7cHilaxU9OKnQ7CfwlGLHqjMtjrhR7KHlt3CVRs +-oRmvsjZVXI0CgYAmPedslAO6mMhFSSfULrhMXmV82OCqYrrA6EEkVNGbcdnzAOkD +-gfKIWabDd8bFY10po4Mguy0CHzNhBXIioWQWV5BlbhC1YKMLw+S9DzSdLAKGY9gJ +-xQ4+UQ3wtRQ/k+IYR413RUsW2oFvgZ3KSyNeAb9MK6uuv84VdG/OzVSs/QKBgQDn +-kap//l2EbObiWyaERunckdVcW0lcN+KK75J/TGwPoOwQsLvTpPe65kxRGGrtDsEQ +-uCDk/+v3KkZPLgdrrTAih9FhJ+PVN8tMcb+6IM4SA4fFFr/UPJEwct0LJ3oQ0grJ +-y+HPWFHb/Uurh7t99/4H98uR02sjQh1wOeEmm78mzQKBgQDm+LzGH0se6CXQ6cdZ +-g1JRZeXkDEsrW3hfAsW62xJQmXcWxBoblP9OamMY+A06rM5og3JbDk5Zm6JsOaA8 +-wS2gw4ilp46jors4eQey8ux7kB9LzdBoDBBElnsbjLO8oBNZlVcYXg+6BOl/CUi7 +-2whRF0FEjKA8ehrNhAq+VFfFNw== +------END PRIVATE KEY----- ++-----BEGIN RSA PRIVATE KEY----- ++MIIEowIBAAKCAQEAsPnoGUOnrpiSqt4XynxA+HRP7S+BSObI6qJ7fQAVSPtRkqso ++tWxQYLEYzNEx5ZSHTGypibVsJylvCfuToDTfMul8b/CZjP2Ob0LdpYrNH6l5hvFE ++89FU1nZQF15oVLOpUgA7wGiHuEVawrGfey92UE68mOyUVXGweJIVDdxqdMoPvNNU ++l86BU02vlBiESxOuox+dWmuVV7vfYZ79Toh/LUK43YvJh+rhv4nKuF7iHjVjBd9s ++B6iDjj70HFldzOQ9r8SRI+9NirupPTkF5AKNe6kUhKJ1luB7S27ZkvB3tSTT3P59 ++3VVJvnzOjaA1z6Cz+4+eRvcysqhrRgFlwI9TEwIDAQABAoIBAEEYiyDP29vCzx/+ ++dS3LqnI5BjUuJhXUnc6AWX/PCgVAO+8A+gZRgvct7PtZb0sM6P9ZcLrweomlGezI ++FrL0/6xQaa8bBr/ve/a8155OgcjFo6fZEw3Dz7ra5fbSiPmu4/b/kvrg+Br1l77J ++aun6uUAs1f5B9wW+vbR7tzbT/mxaUeDiBzKpe15GwcvbJtdIVMa2YErtRjc1/5B2 ++BGVXyvlJv0SIlcIEMsHgnAFOp1ZgQ08aDzvilLq8XVMOahAhP1O2A3X8hKdXPyrx ++IVWE9bS9ptTo+eF6eNl+d7htpKGEZHUxinoQpWEBTv+iOoHsVunkEJ3vjLP3lyI/ ++fY0NQ1ECgYEA3RBXAjgvIys2gfU3keImF8e/TprLge1I2vbWmV2j6rZCg5r/AS0u ++pii5CvJ5/T5vfJPNgPBy8B/yRDs+6PJO1GmnlhOkG9JAIPkv0RBZvR0PMBtbp6nT ++Y3yo1lwamBVBfY6rc0sLTzosZh2aGoLzrHNMQFMGaauORzBFpY5lU50CgYEAzPHl ++u5DI6Xgep1vr8QvCUuEesCOgJg8Yh1UqVoY/SmQh6MYAv1I9bLGwrb3WW/7kqIoD ++fj0aQV5buVZI2loMomtU9KY5SFIsPV+JuUpy7/+VE01ZQM5FdY8wiYCQiVZYju9X ++Wz5LxMNoz+gT7pwlLCsC4N+R8aoBk404aF1gum8CgYAJ7VTq7Zj4TFV7Soa/T1eE ++k9y8a+kdoYk3BASpCHJ29M5R2KEA7YV9wrBklHTz8VzSTFTbKHEQ5W5csAhoL5Fo ++qoHzFFi3Qx7MHESQb9qHyolHEMNx6QdsHUn7rlEnaTTyrXh3ifQtD6C0yTmFXUIS ++CW9wKApOrnyKJ9nI0HcuZQKBgQCMtoV6e9VGX4AEfpuHvAAnMYQFgeBiYTkBKltQ ++XwozhH63uMMomUmtSG87Sz1TmrXadjAhy8gsG6I0pWaN7QgBuFnzQ/HOkwTm+qKw ++AsrZt4zeXNwsH7QXHEJCFnCmqw9QzEoZTrNtHJHpNboBuVnYcoueZEJrP8OnUG3r ++UjmopwKBgAqB2KYYMUqAOvYcBnEfLDmyZv9BTVNHbR2lKkMYqv5LlvDaBxVfilE0 ++2riO4p6BaAdvzXjKeRrGNEKoHNBpOSfYCOM16NjL8hIZB1CaV3WbT5oY+jp7Mzd5 ++7d56RZOE+ERK2uz/7JX9VSsM/LbH9pJibd4e8mikDS9ntciqOH/3 ++-----END RSA PRIVATE KEY----- diff --git a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch b/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch deleted file mode 100644 index b208537..0000000 --- a/ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch +++ /dev/null @@ -1,31 +0,0 @@ -From bfa2f72cfa3bfde34049d26dcb24976316074ad7 Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Mon, 21 Mar 2022 15:36:51 +0100 -Subject: [PATCH] Fix a test for `bin/bundle update --bundler` to pass on - ruby/ruby. - -Consider the case that the latest Bundler version on RubyGems is higher than -the `system_bundler_version` (= `Bundler::VERSION`) in `make test-bundler` on -ruby/ruby. - -See . ---- - spec/bundler/commands/binstubs_spec.rb | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/spec/bundler/commands/binstubs_spec.rb b/spec/bundler/commands/binstubs_spec.rb -index 198226207bc..2634f43417c 100644 ---- a/spec/bundler/commands/binstubs_spec.rb -+++ b/spec/bundler/commands/binstubs_spec.rb -@@ -226,7 +226,10 @@ - - it "calls through to the latest bundler version" do - sys_exec "bin/bundle update --bundler", :env => { "DEBUG" => "1" } -- expect(out).to include %(Using bundler #{system_bundler_version}\n) -+ using_bundler_line = /Using bundler ([\w\.]+)\n/.match(out) -+ expect(using_bundler_line).to_not be_nil -+ latest_version = using_bundler_line[1] -+ expect(Gem::Version.new(latest_version)).to be >= Gem::Version.new(system_bundler_version) - end - - it "calls through to the explicit bundler version" do diff --git a/ruby-spec-Fix-tests-on-tzdata-2022b.patch b/ruby-spec-Fix-tests-on-tzdata-2022b.patch deleted file mode 100644 index 19386d9..0000000 --- a/ruby-spec-Fix-tests-on-tzdata-2022b.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 7e9ec8a20b0f7469b415283d2ec0c22087f8eb2b Mon Sep 17 00:00:00 2001 -From: Jun Aruga -Date: Wed, 24 Aug 2022 12:02:56 +0200 -Subject: [PATCH] Fix tests with Europe/Amsterdam pre-1970 time on tzdata - version 2022b. - -The Time Zone Database (tzdata) changed the pre-1970 timestamps in some zones -including Europe/Amsterdam on tzdata version 2022b or later. -See . - -The tzdata RPM package maintainer on Fedora project suggested changing the Ruby -test, because the change is intentional. -See . - -We use post-1970 time test data to simplify the test. ---- - core/time/shared/local.rb | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/spec/ruby/core/time/shared/local.rb b/spec/ruby/core/time/shared/local.rb -index 43f331c4c..c4aa7a7ea 100644 ---- a/spec/ruby/core/time/shared/local.rb -+++ b/spec/ruby/core/time/shared/local.rb -@@ -8,10 +8,10 @@ describe :time_local, shared: true do - - platform_is_not :windows do - describe "timezone changes" do -- it "correctly adjusts the timezone change to 'CEST' on 'Europe/Amsterdam'" do -+ it "correctly adjusts the timezone change to 'CET' on 'Europe/Amsterdam'" do - with_timezone("Europe/Amsterdam") do -- Time.send(@method, 1940, 5, 16).to_a.should == -- [0, 40, 1, 16, 5, 1940, 4, 137, true, "CEST"] -+ Time.send(@method, 1970, 5, 16).to_a.should == -+ [0, 0, 0, 16, 5, 1970, 6, 136, false, "CET"] - end - end - end --- -2.36.1 - diff --git a/ruby.spec b/ruby.spec index b5638a6..dee6a13 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 3 -%global minor_version 1 -%global teeny_version 2 +%global minor_version 3 +%global teeny_version 0 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -10,7 +10,7 @@ #%%global milestone rc1 # Keep the revision enabled for pre-releases from GIT. -#%%global revision fb4df44d16 +#%%global revision 5124f9ac75 %global ruby_archive %{name}-%{ruby_version} @@ -18,61 +18,124 @@ %if 0%{?milestone:1}%{?revision:1} != 0 %global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision}} %define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d") -%define development_release %{?milestone}%{?!milestone:%{?revision:%{ruby_archive_timestamp}git%{revision}}} +%define development_release ~%{ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}} %endif -%global release 142 -%{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}} - # The RubyGems library has to stay out of Ruby directory tree, since the # RubyGems should be share by all Ruby implementations. %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.3.7 -%global rubygems_molinillo_version 0.7.0 +%global rubygems_version 3.5.3 +%global rubygems_molinillo_version 0.8.0 +%global rubygems_net_http_version 0.4.0 +%global rubygems_net_protocol_version 0.2.2 +%global rubygems_optparse_version 0.4.0 +%global rubygems_resolv_version 0.3.0 +%global rubygems_timeout_version 0.4.1 +%global rubygems_tsort_version 0.2.0 # Default gems. -%global bundler_version 2.3.7 -%global bundler_connection_pool_version 2.3.0 -%global bundler_fileutils_version 1.4.1 -%global bundler_molinillo_version 0.7.0 -%global bundler_net_http_persistent_version 4.0.0 -%global bundler_thor_version 1.2.1 -%global bundler_tmpdir_version 0.1.0 -# TODO: Check the version if/when available in library. -%global bundler_tsort_version 0.1.1 -%global bundler_uri_version 0.10.1 +%global bundler_version 2.5.3 +%global bundler_connection_pool_version 2.4.1 +%global bundler_fileutils_version 1.7.2 +%global bundler_net_http_persistent_version 4.0.2 +%global bundler_pub_grub_version 0.5.0 +%global bundler_thor_version 1.3.0 +%global bundler_tsort_version 0.2.0 +%global bundler_uri_version 0.13.0 -%global bigdecimal_version 3.1.1 -%global did_you_mean_version 1.6.1 -%global erb_version 2.2.3 -%global io_console_version 0.5.11 -%global irb_version 1.4.1 -%global json_version 2.6.1 -%global openssl_version 3.0.0 -%global psych_version 4.0.3 -%global racc_version 1.6.0 -%global rdoc_version 6.4.0 -%global stringio_version 3.0.1 +%global abbrev_version 0.1.2 +%global base64_version 0.2.0 +%global benchmark_version 0.3.0 +%global cgi_version 0.4.1 +%global csv_version 3.2.8 +%global date_version 3.3.4 +%global delegate_version 0.3.1 +%global did_you_mean_version 1.6.3 +%global digest_version 3.1.1 +%global drb_version 2.2.0 +%global english_version 0.8.0 +%global erb_version 4.0.3 +%global error_highlight_version 0.6.0 +%global etc_version 1.4.3 +%global fcntl_version 1.1.0 +%global fiddle_version 1.1.2 +%global fileutils_version 1.7.2 +%global find_version 0.2.0 +%global forwardable_version 1.3.3 +%global getoptlong_version 0.2.1 +%global io_nonblock_version 0.3.0 +%global io_wait_version 0.3.1 +%global ipaddr_version 1.2.6 +%global logger_version 1.6.0 +%global mutex_m_version 0.2.0 +%global net_http_version 0.4.0 +%global net_protocol_version 0.2.2 +%global nkf_version 0.1.3 +%global observer_version 0.1.2 +%global open3_version 0.2.1 +%global openssl_version 3.2.0 +%global open_uri_version 0.4.1 +%global optparse_version 0.4.0 +%global ostruct_version 0.6.0 +%global pathname_version 0.3.0 +%global pp_version 0.5.0 +%global prettyprint_version 0.2.0 +%global pstore_version 0.1.3 +%global readline_version 0.0.4 +%global reline_version 0.4.1 +%global resolv_version 0.3.0 +%global resolv_replace_version 0.1.1 +%global rinda_version 0.2.0 +%global ruby2_keywords_version 0.0.5 +%global securerandom_version 0.3.1 +%global set_version 1.1.0 +%global shellwords_version 0.2.0 +%global singleton_version 0.2.0 +%global stringio_version 3.1.0 +%global strscan_version 3.0.7 +%global syntax_suggest_version 2.0.0 +%global syslog_version 0.1.2 +%global tempfile_version 0.2.1 +%global time_version 0.3.0 +%global timeout_version 0.4.1 +%global tmpdir_version 0.2.0 +%global tsort_version 0.2.0 +%global un_version 0.3.0 +%global uri_version 0.13.0 +%global weakref_version 0.1.3 +%global win32ole_version 1.8.10 +%global yaml_version 0.3.0 +%global prism_version 0.19.0 +%global zlib_version 3.1.0 + +# Gemified default gems. +%global bigdecimal_version 3.1.5 +%global io_console_version 0.7.1 +%global irb_version 1.11.0 +%global json_version 2.7.1 +%global psych_version 5.1.2 +%global rdoc_version 6.6.2 # Bundled gems. -%global minitest_version 5.15.0 -%global power_assert_version 2.0.1 -%global rake_version 13.0.6 -%global test_unit_version 3.5.3 -%global rexml_version 3.2.5 -%global rss_version 0.2.9 -%global net_ftp_version 0.1.3 -%global net_imap_version 0.2.3 -%global net_pop_version 0.1.1 -%global net_smtp_version 0.3.1 +%global debug_version 1.9.1 +%global net_ftp_version 0.3.3 +%global net_imap_version 0.4.9 +%global net_pop_version 0.1.2 +%global net_smtp_version 0.4.0 %global matrix_version 0.4.2 +%global minitest_version 5.20.0 +%global power_assert_version 2.0.3 %global prime_version 0.1.2 -%global rbs_version 2.1.0 -%global typeprof_version 0.21.2 -%global debug_version 1.4.0 +%global racc_version 1.7.3 +%global rake_version 13.1.0 +%global rbs_version 3.4.0 +%global rexml_version 3.2.6 +%global rss_version 0.3.0 +%global test_unit_version 3.6.1 +%global typeprof_version 0.21.9 %global tapset_libdir %(echo %{_libdir} | sed 's/64//')* @@ -85,6 +148,11 @@ %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 +%ifarch x86_64 aarch64 +%bcond_without yjit +%endif # Enable test when building on local. %bcond_with bundler_tests @@ -94,13 +162,15 @@ Summary: An interpreter of object-oriented scripting language Name: ruby -Version: %{ruby_version} -Release: %{release_string} +Version: %{ruby_version}%{?development_release} +Release: 1%{?dist} +# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c +# ISC: missing/strl{cat,cpy}.c # Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ... # MIT and CCO: ccan/* # zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c -# UCD: some of enc/trans/**/*.src -License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD +# Unicode-DFS-2015: some of enc/trans/**/*.src +License: (Ruby OR BSD-2-Clause) AND BSD-3-Clause AND ISC AND Public Domain AND MIT and CC0 AND zlib AND Unicode-DFS-2015 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 @@ -126,6 +196,11 @@ Source15: test_openssl_fips.rb %{load:%{SOURCE4}} %{load:%{SOURCE5}} +%global __local_generator_requires make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE9}" +%global __local_generator_provides make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE10}" +%global __local_generator_conflicts make -C %{_builddir}/%{buildsubdir}/%{_vpath_builddir} -s runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE11}" +%global __local_generator_path ^%{gem_dir}/specifications/.*\.gemspec$ + # Fix ruby_version abuse. # https://bugs.ruby-lang.org/issues/11002 Patch0: ruby-2.3.0-ruby_version.patch @@ -141,8 +216,6 @@ Patch3: 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 -# Make mkmf verbose by default -Patch5: ruby-1.9.3-mkmf-verbose.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 @@ -152,109 +225,73 @@ Patch5: ruby-1.9.3-mkmf-verbose.patch # https://lists.fedoraproject.org/archives/list/ruby-sig@lists.fedoraproject.org/message/LH6L6YJOYQT4Y5ZNOO4SLIPTUWZ5V45Q/ # For now, load the ABRT hook via this simple patch: Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch -# Prevent segfaults running with SystemTap due to `RubyVM::FrozenCore` being -# corrupted by GC. -# https://bugzilla.redhat.com/show_bug.cgi?id=2015441 -# https://bugzilla.redhat.com/show_bug.cgi?id=1986206 -# https://bugs.ruby-lang.org/issues/18257 -Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch -# Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. -# https://bugs.ruby-lang.org/issues/16492 -Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Fix a test for `bin/bundle update --bundler` in `make test-bundler`. -# https://bugs.ruby-lang.org/issues/18643 -# https://github.com/rubygems/rubygems/commit/bfa2f72cfa3bfde34049d26dcb24976316074ad7 -Patch20: ruby-bundler-2.4.0-bundle-update-bundler-test-in-ruby.patch -# Workaround gem binary extensions build and installation issues. -# https://bugs.ruby-lang.org/issues/18373 -# https://github.com/ruby/ruby/pull/5774 -Patch21: ruby-3.2.0-Build-extension-libraries-in-bundled-gems.patch -# If digest argument to method `sign` is nil, -# NULL will be provided to OpenSSL function -# to let it choose digest itself. -# https://github.com/ruby/openssl/pull/507 -Patch22: ruby-3.1.1-ossl_ocsp-use-null.patch -# Replace SHA1 usage in tests. -# https://github.com/ruby/openssl/pull/511 -Patch23: ruby-3.1.2-ossl-tests-replace-sha1.patch -# If GC compaction is not supported on platform, define the -# corresponding GC methods as not implemented. -# https://bugs.ruby-lang.org/issues/18779 -# https://github.com/ruby/ruby/pull/5934 -Patch24: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch -# To regenerate the patch you need to have ruby, autoconf, xz, tar and make installed: -# tar -Jxvf ./ruby-3.1.2.tar.xz -# git clone https://github.com/ruby/ruby.git -# cd ruby && git checkout v3_1_2 -# patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch -# ./autogen.sh && ./configure -# make gc.rbinc miniprelude.c -# cd .. -# diff -u {ruby-3.1.2,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch -# diff -u {ruby-3.1.2,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch -Patch25: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch -# Define the GC compaction support macro at run time. -# https://bugs.ruby-lang.org/issues/18829 -# https://github.com/ruby/ruby/pull/6019 -# https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20 -Patch26: ruby-3.2.0-Detect-compaction-support-during-runtime.patch -# Bypass git submodule test failure on Git >= 2.38.1. -# https://github.com/ruby/ruby/pull/6587 -Patch27: ruby-3.2.0-git-2.38.1-fix-rubygems-test.patch -# Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. -# https://github.com/ruby/spec/pull/939 -Patch28: ruby-spec-Fix-tests-on-tzdata-2022b.patch -# Fix Time Zone Database 2022g. -# https://bugs.ruby-lang.org/issues/19187 -# https://github.com/ruby/ruby/commit/a1124dc162810f86cb0bff58cde24064cfc561bc -Patch29: ruby-3.1.3-Fix-for-tzdata-2022g.patch -# Fix OpenSSL.fips_mode in OpenSSL 3 FIPS. -# https://github.com/ruby/openssl/pull/608 -# https://github.com/ruby/ruby/commit/678d41bc51fe31834eec0b653ba0e47de5420aa0 -Patch30: ruby-3.3.0-openssl-3.2.0-fix-fips-get-set-in-openssl-3.patch -# Fix OpenSSL::PKey.read in OpenSSL 3 FIPS. -# The patch is a combination of the following 2 commits to simplify the patch. -# https://github.com/ruby/openssl/pull/615 -# https://github.com/ruby/ruby/commit/2a4834057b30a26c38ece3961b370c0b2ee59380 -# https://github.com/ruby/openssl/pull/669 -# https://github.com/ruby/ruby/commit/b0ec1db8a72c530460abd9462ac75845362886bd -Patch31: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-read-in-openssl-3.patch -# Enable tests in OpenSSL FIPS. -# https://github.com/ruby/openssl/pull/615 -# https://github.com/ruby/ruby/commit/920bc71284f417f9044b0dc1822b1d29a8fc61e5 -Patch32: ruby-3.3.0-openssl-3.2.0-fips-enable-tests.patch -# ssl: use ffdhe2048 from RFC 7919 as the default DH group parameters -# https://github.com/ruby/openssl/pull/674 -# https://github.com/ruby/ruby/commit/b6d7cdc2bad0eadbca73f3486917f0ec7a475814 -Patch33: ruby-3.3.0-openssl-3.2.0-fips-fix-pkey-dh-require-openssl.patch +# Disable syntax_suggest test suite, which tries to download its dependencies. +# https://bugs.ruby-lang.org/issues/19297 +Patch9: ruby-3.3.0-Disable-syntax-suggest-test-case.patch +# Revert patches causing segfaults in alexandria package. +# https://bugs.ruby-lang.org/issues/20079 +Patch10: ruby-3.3.0-Revert-Optimize-allocations-in-Hash-compare_by_identity.patch +# Fix net-http test errors due to expired certificate +# https://github.com/ruby/ruby/commit/d3933fc753187a055a4904af82f5f3794c88c416 +# https://bugs.ruby-lang.org/issues/20106 +Patch11: ruby-3.4.0-ruby-net-http-Renew-test-certificates.patch +# Armv8.3+ capable CPUs might segfault with incorrect compilation options. +# See related upstream report: https://bugs.ruby-lang.org/issues/20085 +# https://bugs.ruby-lang.org/issues/20154 +Patch12: ruby-3.4.0-fix-branch-protection-compilation-for-arm.patch +# Revert adding AI_ADDRCONFIG flag to getaddrinfo(3) calls. +# It is causing problems when network is in certain, valid, configuration. +# When loopback interface is IPv6 capable, but no regular network interface +# is IPv6 capable, in some situations (such as in TestNetHTTPLocalBind) +# this might result in creating IPv4 socket and then binding it +# to IPv6 family connection. +# That is incorrect behavior and such operation will result in +# Errno::EAFNOSUPPORT exception. +# The point of the upstream change is to workaround a glibc bug +# that is not present for us. Therefore we can safely revert the change. +# https://bugs.ruby-lang.org/issues/20208 +Patch13: ruby-3.4.0-Revert-Set-AI_ADDRCONFIG-when-making-getaddrinfo.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} -Suggests: rubypick +%{?with_rubypick:Suggests: rubypick} Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} +BuildRequires: rpm-local-generator-support +# Build dependencies BuildRequires: autoconf -%{?with_gmp:BuildRequires: gmp-devel} -BuildRequires: libffi-devel -BuildRequires: openssl-devel -BuildRequires: libyaml-devel -BuildRequires: readline-devel -# Needed to pass test_set_program_name(TestRubyOptions) -BuildRequires: procps -%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} -# RubyGems test suite optional dependencies. -%{?with_git:BuildRequires: git} -%{?with_cmake:BuildRequires: %{_bindir}/cmake} -# Required to test hardening. -%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} -%{?with_hostname:BuildRequires: %{_bindir}/hostname} -BuildRequires: multilib-rpm-config BuildRequires: gcc BuildRequires: make +BuildRequires: libffi-devel +BuildRequires: libyaml-devel +BuildRequires: openssl-devel BuildRequires: zlib-devel +%{?with_gmp:BuildRequires: gmp-devel} +%{?with_systemtap:BuildRequires: %{_bindir}/dtrace} +%{?with_yjit:BuildRequires: %{_bindir}/rustc} + +# Install section +BuildRequires: multilib-rpm-config + +# Check dependencies + +# Required to test hardening. +%{?with_hardening_test:BuildRequires: %{_bindir}/checksec} + +# Needed to pass test_set_program_name(TestRubyOptions) +BuildRequires: procps +# Neede by `Socket.gethostname returns the host name ERROR` +%{?with_hostname:BuildRequires: %{_bindir}/hostname} + +# RubyGems test suite optional dependencies. +%{?with_git:BuildRequires: git} +# `cmake` is required for test/rubygems/test_gem_ext_cmake_builder.rb. +%{?with_cmake:BuildRequires: %{_bindir}/cmake} + # The bundler/spec/runtime/setup_spec.rb requires the command `man`. %{?with_bundler_tests:BuildRequires: %{_bindir}/man} + # This package provides %%{_bindir}/ruby-mri therefore it is marked by this # virtual provide. It can be installed as dependency of rubypick. Provides: ruby(runtime_executable) = %{ruby_release} @@ -282,7 +319,6 @@ Ruby or an application embedding Ruby. %package libs Summary: Libraries necessary to run Ruby -License: Ruby or BSD Provides: ruby(release) = %{ruby_release} # Virtual provides for CCAN copylibs. @@ -295,7 +331,8 @@ Provides: bundled(ccan-list) # StdLib default gems. Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-openssl) = %{openssl_version} -Provides: bundled(rubygem-racc) = %{racc_version} + + %description libs This package includes the libruby, necessary to run Ruby. @@ -305,16 +342,32 @@ This package includes the libruby, necessary to run Ruby. %package -n rubygems Summary: The Ruby standard for packaging ruby libraries Version: %{rubygems_version} -License: Ruby or MIT +# BSD-2-Clause OR Ruby: +# lib/rubygems/net-http/ +# lib/rubygems/net-protocol/ +# lib/rubygems/optparse/ +# lib/rubygems/resolv/ +# lib/rubygems/timeout/ +# lib/rubygems/tsort/ +# MIT: lib/rubygems/resolver/molinillo +License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND MIT Requires: ruby(release) Recommends: rubygem(bundler) >= %{bundler_version} Recommends: rubygem(rdoc) >= %{rdoc_version} -Recommends: rubygem(io-console) >= %{io_console_version} +Recommends: rubygem(io-console) Requires: rubygem(psych) >= %{psych_version} Provides: gem = %{version}-%{release} Provides: ruby(rubygems) = %{version}-%{release} +Provides: bundled(rubygems) = %{rubygems_version} # https://github.com/rubygems/rubygems/pull/1189#issuecomment-121600910 Provides: bundled(rubygem-molinillo) = %{rubygems_molinillo_version} +Provides: bundled(rubygem-net-http) = %{rubygems_net_http_version} +Provides: bundled(rubygem-net-protocol) = %{rubygems_net_protocol_version} +Provides: bundled(rubygem-optparse) = %{rubygems_optparse_version} +Provides: bundled(rubygem-resolv) = %{rubygems_resolv_version} +Provides: bundled(rubygem-timeout) = %{rubygems_timeout_version} +Provides: bundled(rubygem-tsort) = %{rubygems_tsort_version} + BuildArch: noarch %description -n rubygems @@ -325,7 +378,7 @@ libraries. %package -n rubygems-devel Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} -License: Ruby or MIT +License: MIT Requires: ruby(rubygems) >= %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} @@ -343,17 +396,11 @@ Macros and development tools for packaging RubyGems. %package default-gems Summary: Default gems which are part of Ruby StdLib -Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) -# Include the io-console dependency for reline. -Requires: rubygem(io-console) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 -Obsoletes: rubygem-racc < 1.4.16-130 # Obsoleted by Ruby 3.0 in F34 timeframe. Obsoletes: rubygem-openssl < 2.2.0-145 -Provides: rubygem(openssl) = %{openssl_version}-%{release} -Provides: rubygem(stringio) = %{stringio_version} BuildArch: noarch %description default-gems @@ -364,17 +411,13 @@ StdLib. %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -# ruby-default-gems is required to run irb. -# https://bugs.ruby-lang.org/issues/16951 -Requires: ruby-default-gems >= %{ruby_version} +License: Ruby OR BSD-2-Clause Provides: irb = %{version}-%{release} -Provides: rubygem(irb) = %{version}-%{release} +Provides: bundled(rubygem-irb) = %{irb_version} # Obsoleted by Ruby 2.6 in F30 timeframe. -Provides: ruby(irb) = %{ruby_version}-%{release} -Provides: ruby-irb = %{ruby_version}-%{release} -Obsoletes: ruby-irb < %{ruby_version}-%{release} +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 @@ -385,16 +428,19 @@ from the terminal. %package -n rubygem-rdoc Summary: A tool to generate HTML and command-line documentation for Ruby projects Version: %{rdoc_version} -# SIL: lib/rdoc/generator/template/darkfish/css/fonts.css -License: GPLv2 and Ruby and MIT and OFL -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(io-console) >= %{io_console_version} +# BSD-3-Clause: lib/rdoc/generator/darkfish.rb +# CC-BY-2.5: lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +# OFL-1.1-RFN: lib/rdoc/generator/template/darkfish/css/fonts.css +# Note that RDoc now embeds Racc parser: +# https://github.com/ruby/rdoc/pull/1019 +# Luckily, this should have no license impact: +# https://github.com/ruby/racc/blob/5eb07b28bfb3e193a1cac07798fe7be7e1e246c4/lib/racc/parser.rb#L8-L10 +License: GPL-2.0-only AND Ruby AND BSD-3-Clause AND CC-BY-2.5 AND OFL-1.1-RFN +Requires: rubygem(io-console) Requires: rubygem(json) >= %{json_version} -Requires: rubygem(psych) >= %{psych_version} Provides: rdoc = %{version}-%{release} Provides: ri = %{version}-%{release} -Provides: rubygem(rdoc) = %{version}-%{release} +Provides: bundled(rubygem-rdoc) = %{rdoc_version} BuildArch: noarch %description -n rubygem-rdoc @@ -415,10 +461,8 @@ This package contains documentation for %{name}. %package -n rubygem-bigdecimal Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic Version: %{bigdecimal_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(bigdecimal) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-bigdecimal) = %{bigdecimal_version} %description -n rubygem-bigdecimal Ruby provides built-in support for arbitrary precision integer arithmetic. @@ -436,9 +480,8 @@ conversion between base 10 and base 2. %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(io-console) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-io-console) = %{io_console_version} %description -n rubygem-io-console IO/Console provides very simple and portable access to console. It doesn't @@ -448,11 +491,9 @@ 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} -# UCD: ext/json/generator/generator.c -License: (Ruby or GPLv2) and UCD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(json) = %{version}-%{release} +# Unicode-DFS-2015: ext/json/ext/generator/generator.c +License: (Ruby OR BSD-2-Clause) AND Unicode-DFS-2015 +Provides: bundled(rubygem-json) = %{json_version} %description -n rubygem-json This is a implementation of the JSON specification according to RFC 4627. @@ -465,10 +506,7 @@ markup language. Summary: A libyaml wrapper for Ruby Version: %{psych_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(stringio) >= %{stringio_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: bundled(rubygem-psych) = %{psych_version} %description -n rubygem-psych Psych is a YAML parser and emitter. Psych leverages @@ -480,18 +518,25 @@ serialize and de-serialize most Ruby objects to and from the YAML format. %package -n rubygem-bundler Summary: Library and utilities to manage a Ruby application's gem dependencies Version: %{bundler_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} +# BSD-2-Clause OR Ruby: +# lib/bundler/vendor/fileutils +# lib/bundler/vendor/tsort +# lib/bundler/vendor/uri +# MIT: +# lib/bundler/vendor/connection_pool +# lib/bundler/vendor/net-http-persistent +# lib/bundler/vendor/pub_brub +# lib/bundler/vendor/thor +# lib/rubygems/resolver/molinillo +License: MIT AND (Ruby OR BSD-2-Clause) Requires: rubygem(io-console) -Provides: rubygem(bundler) = %{version}-%{release} +Provides: bundled(rubygem-bundler) = %{bundler_version} # https://github.com/bundler/bundler/issues/3647 Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version} Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version} -Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version} -Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-net-http-persistent) = %{bundler_net_http_persistent_version} +Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version} Provides: bundled(rubygem-thor) = %{bundler_thor_version} -Provides: bundled(rubygem-tmpdir) = %{bundler_tmpdir_version} Provides: bundled(rubygem-uri) = %{bundler_uri_version} BuildArch: noarch @@ -507,14 +552,13 @@ many machines, systematically and repeatably. %package bundled-gems Summary: Bundled gems which are part of Ruby StdLib -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(net-ftp) = %{net_ftp_version} -Provides: rubygem(net-imap) = %{net_imap_version} -Provides: rubygem(net-pop) = %{net_pop_version} -Provides: rubygem(net-smtp) = %{net_smtp_version} -Provides: rubygem(matrix) = %{matrix_version} -Provides: rubygem(prime) = %{prime_version} -Provides: rubygem(debug) = %{debug_version} +Provides: bundled(rubygem-debug) = %{debug_version} +Provides: bundled(rubygem-matrix) = %{matrix_version} +Provides: bundled(rubygem-net-ftp) = %{net_ftp_version} +Provides: bundled(rubygem-net-imap) = %{net_imap_version} +Provides: bundled(rubygem-net-pop) = %{net_pop_version} +Provides: bundled(rubygem-net-smtp) = %{net_smtp_version} +Provides: bundled(rubygem-prime) = %{prime_version} %description bundled-gems Bundled gems which are part of Ruby StdLib. While being part of Ruby, these @@ -525,9 +569,7 @@ needs to be listed in Gemfile to be used by Bundler. Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(minitest) = %{version}-%{release} +Provides: bundled(rubygem-minitest) = %{minitest_version} BuildArch: noarch %description -n rubygem-minitest @@ -548,10 +590,8 @@ output. %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(power_assert) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-power_assert) = %{power_assert_version} BuildArch: noarch %description -n rubygem-power_assert @@ -564,10 +604,8 @@ condition is not satisfied. Summary: Ruby based make-like utility Version: %{rake_version} License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} Provides: rake = %{version}-%{release} -Provides: rubygem(rake) = %{version}-%{release} +Provides: bundled(rubygem-rake) = %{rake_version} BuildArch: noarch %description -n rubygem-rake @@ -578,10 +616,8 @@ specified in standard Ruby syntax. %package -n rubygem-rbs Summary: Type signature for Ruby Version: %{rbs_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rbs) = %{version}-%{release} +License: Ruby OR BSD-2-Clause +Provides: bundled(rubygem-rbs) = %{rbs_version} %description -n rubygem-rbs RBS is the language for type signatures for Ruby and standard library @@ -592,12 +628,8 @@ definitions. Summary: An xUnit family unit testing framework for Ruby Version: %{test_unit_version} # lib/test/unit/diff.rb is a double license of the Ruby license and PSF license. -# lib/test-unit.rb is a dual license of the Ruby license and LGPLv2.1 or later. -License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+) -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(power_assert) -Provides: rubygem(test-unit) = %{version}-%{release} +License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR Python-2.0.1) +Provides: bundled(rubygem-test-unit) = %{test_unit_version} BuildArch: noarch %description -n rubygem-test-unit @@ -607,14 +639,24 @@ programming software development methodology, for Smalltalk's SUnit. It allows writing tests, checking results and automated testing in Ruby. +%package -n rubygem-racc +Version: %{racc_version} +Summary: Racc is a LALR(1) parser generator +License: Ruby OR BSD-2-Clause +URL: https://github.com/ruby/racc +Provides: bundled(rubygem-racc) = %{racc_version} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. +It is written in Ruby itself, and generates Ruby program. + + %package -n rubygem-rexml Summary: An XML toolkit for Ruby Version: %{rexml_version} -License: BSD +License: BSD-2-Clause URL: https://github.com/ruby/rexml -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rexml) = %{version}-%{release} +Provides: bundled(rubygem-rexml) = %{rexml_version} BuildArch: noarch %description -n rubygem-rexml @@ -632,11 +674,9 @@ features such as XPath. %package -n rubygem-rss Summary: Family of libraries that support various formats of XML "feeds" Version: %{rss_version} -License: BSD +License: BSD-2-Clause URL: https://github.com/ruby/rss -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(rss) = %{version}-%{release} +Provides: bundled(rubygem-rss) = %{rss_version} BuildArch: noarch %description -n rubygem-rss @@ -651,10 +691,7 @@ Summary: TypeProf is a type analysis tool for Ruby code based on abstract int Version: %{typeprof_version} License: MIT URL: https://github.com/ruby/typeprof -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Requires: rubygem(rbs) >= %{rbs_version} -Provides: rubygem(typeprof) = %{version}-%{release} +Provides: bundled(rubygem-typeprof) = %{typeprof_version} BuildArch: noarch %description -n rubygem-typeprof @@ -668,39 +705,20 @@ analysis result in RBS format, a standard type description format for Ruby %prep %setup -q -n %{ruby_archive} -# Remove bundled libraries to be sure they are not used. -rm -rf ext/psych/yaml -rm -rf ext/fiddle/libffi* - -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch19 -p1 -%patch20 -p1 - -# Once the upstream tarball contains the files on the right place, this code -# won't be necessary. This should happen at the same moment when the patch21 -# is not needed anymore. -mkdir .bundle/specifications -find .bundle/gems -name '*-[0-9]*.gemspec' -exec cp -t .bundle/specifications/ {} + -%patch21 -p1 -%patch22 -%patch23 -p1 -%patch24 -p1 -%patch25 -p1 -%patch26 -p1 -%patch27 -p1 -%patch28 -p1 -%patch29 -p1 -%patch30 -p1 -%patch31 -p1 -%patch32 -p1 -%patch33 -p1 +# Use `%%patch -P N` form for better compatibility. `%%patch N` is available on +# RPM version >= 4.18 and `%%patchN` was deprecated. +# https://github.com/rpm-software-management/rpm/blob/656fe42af1d497c35769c740fcc98950e1455bad/docs/manual/spec.md?plain=1#L515 +%patch -P 0 -p1 +%patch -P 1 -p1 +%patch -P 2 -p1 +%patch -P 3 -p1 +%patch -P 4 -p1 +%patch -P 6 -p1 +%patch -P 9 -p1 +%patch -P 10 -p1 +%patch -P 11 -p1 +%patch -P 12 -p1 +%patch -P 13 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -708,6 +726,11 @@ cp -a %{SOURCE3} . %build autoconf +%global _configure %{_builddir}/%{buildsubdir}/configure + +mkdir -p %{_vpath_builddir} +pushd %{_vpath_builddir} + %configure \ --with-rubylibprefix='%{ruby_libdir}' \ --with-archlibdir='%{_libdir}' \ @@ -724,27 +747,28 @@ autoconf --with-ruby-pc='%{name}.pc' \ --with-compress-debug-sections=no \ --disable-rpath \ + --enable-mkmf-verbose \ --enable-shared \ --with-ruby-version='' \ --enable-multiarch \ + %{?with_yjit: --enable-yjit} \ + +popd # V=1 in %%make_build outputs the compiler options more verbosely. # https://bugs.ruby-lang.org/issues/18756 -%make_build COPY="cp -p" +%make_build COPY="cp -p" -C %{_vpath_builddir} %install rm -rf %{buildroot} -%make_install +%make_install -C %{_vpath_builddir} # TODO: Regenerate RBS parser in lib/rbs/parser.rb # Rename ruby/config.h to ruby/config-.h to avoid file conflicts on # multilib systems and install config.h wrapper %multilib_fix_c_header --file %{_includedir}/%{name}/config.h -# TODO: The correct patch should be %%{_includedir}/%%{name}/rb_mjit_min_header-%%{ruby_version}.h -# https://bugs.ruby-lang.org/issues/15425 -%multilib_fix_c_header --file %{_includedir}/rb_mjit_min_header-%{ruby_version}.h # Rename the ruby executable. It is replaced by RubyPick. %{?with_rubypick:mv %{buildroot}%{_bindir}/%{name}{,-mri}} @@ -766,15 +790,15 @@ test ! "$(ls -A %{buildroot}%{rubygems_dir}/rubygems/ssl_certs/ 2>/dev/null)" # Move macros file into proper place and replace the %%{name} macro, since it # would be wrongly evaluated during build of other packages. -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d -install -m 644 %{SOURCE4} %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.ruby -install -m 644 %{SOURCE5} %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems -sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmconfigdir}/macros.d/macros.rubygems +mkdir -p %{buildroot}%{_rpmmacrodir} +install -m 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.ruby +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.ruby +install -m 644 %{SOURCE5} %{buildroot}%{_rpmmacrodir}/macros.rubygems +sed -i "s/%%{name}/%{name}/" %{buildroot}%{_rpmmacrodir}/macros.rubygems # Install dependency generators. -mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs -install -m 644 %{SOURCE8} %{buildroot}%{_rpmconfigdir}/fileattrs +mkdir -p %{buildroot}%{_fileattrsdir} +install -m 644 %{SOURCE8} %{buildroot}%{_fileattrsdir} install -m 755 %{SOURCE9} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE10} %{buildroot}%{_rpmconfigdir} install -m 755 %{SOURCE11} %{buildroot}%{_rpmconfigdir} @@ -794,60 +818,60 @@ mkdir -p %{buildroot}%{_exec_prefix}/lib{,64}/gems/%{name} # Move bundled rubygems to %%gem_dir and %%gem_extdir_mri # make symlinks for io-console and bigdecimal, which are considered to be part of stdlib by other Gems -mkdir -p %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib -mv %{buildroot}%{ruby_libdir}/irb* %{buildroot}%{gem_dir}/gems/irb-%{irb_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/irb-%{irb_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb.rb %{buildroot}%{ruby_libdir}/irb.rb -ln -s %{gem_dir}/gems/irb-%{irb_version}/lib/irb %{buildroot}%{ruby_libdir}/irb +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 +ln -s %{gem_libdir irb} %{buildroot}%{ruby_libdir}/irb -mkdir -p %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_dir}/gems/rdoc-%{rdoc_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/rdoc-%{rdoc_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_libdir rdoc} +mv %{buildroot}%{ruby_libdir}/rdoc* %{buildroot}%{gem_libdir rdoc} +mv %{buildroot}%{gem_spec -d rdoc} %{buildroot}%{gem_spec rdoc} -mkdir -p %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal -mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib -mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -touch %{buildroot}%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/bigdecimal-%{bigdecimal_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/bigdecimal-%{bigdecimal_version}/lib/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal -ln -s %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so +mkdir -p %{buildroot}%{gem_libdir bigdecimal} +mkdir -p %{buildroot}%{gem_extdir_mri bigdecimal} +mv %{buildroot}%{ruby_libdir}/bigdecimal %{buildroot}%{gem_libdir bigdecimal} +mv %{buildroot}%{ruby_libarchdir}/bigdecimal.so %{buildroot}%{gem_extdir_mri bigdecimal} +touch %{buildroot}%{gem_extdir_mri bigdecimal}/gem.build_complete +mv %{buildroot}%{gem_spec -d bigdecimal} %{buildroot}%{gem_spec bigdecimal} +ln -s %{gem_libdir bigdecimal}/bigdecimal %{buildroot}%{ruby_libdir}/bigdecimal +ln -s %{gem_extdir_mri bigdecimal}/bigdecimal.so %{buildroot}%{ruby_libarchdir}/bigdecimal.so # TODO: Put help files into proper location. # https://bugs.ruby-lang.org/issues/15359 -mkdir -p %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/bundler-%{bundler_version}.gemspec %{buildroot}%{gem_dir}/specifications +mkdir -p %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{ruby_libdir}/bundler %{buildroot}%{gem_libdir bundler} +mv %{buildroot}%{gem_spec -d bundler} %{buildroot}%{gem_spec bundler} -mkdir -p %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io -mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_dir}/gems/io-console-%{io_console_version}/lib -mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/io -touch %{buildroot}%{_libdir}/gems/%{name}/io-console-%{io_console_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/io-console-%{io_console_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/io-console-%{io_console_version}/lib/io %{buildroot}%{ruby_libdir}/io -ln -s %{_libdir}/gems/%{name}/io-console-%{io_console_version}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so +mkdir -p %{buildroot}%{gem_libdir io-console} +mkdir -p %{buildroot}%{gem_extdir_mri io-console}/io +mv %{buildroot}%{ruby_libdir}/io %{buildroot}%{gem_libdir io-console} +mv %{buildroot}%{ruby_libarchdir}/io/console.so %{buildroot}%{gem_extdir_mri io-console}/io +touch %{buildroot}%{gem_extdir_mri io-console}/gem.build_complete +mv %{buildroot}%{gem_spec -d io-console} %{buildroot}%{gem_spec io-console} +ln -s %{gem_libdir io-console}/io %{buildroot}%{ruby_libdir}/io +ln -s %{gem_extdir_mri io-console}/io/console.so %{buildroot}%{ruby_libarchdir}/io/console.so -mkdir -p %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version} -mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_dir}/gems/json-%{json_version}/lib -mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/json-%{json_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/json-%{json_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/json-%{json_version}/lib/json.rb %{buildroot}%{ruby_libdir}/json.rb -ln -s %{gem_dir}/gems/json-%{json_version}/lib/json %{buildroot}%{ruby_libdir}/json -ln -s %{_libdir}/gems/%{name}/json-%{json_version}/json/ %{buildroot}%{ruby_libarchdir}/json +mkdir -p %{buildroot}%{gem_libdir json} +mkdir -p %{buildroot}%{gem_extdir_mri json} +mv %{buildroot}%{ruby_libdir}/json* %{buildroot}%{gem_libdir json} +mv %{buildroot}%{ruby_libarchdir}/json/ %{buildroot}%{gem_extdir_mri json} +touch %{buildroot}%{gem_extdir_mri json}/gem.build_complete +mv %{buildroot}%{gem_spec -d json} %{buildroot}%{gem_spec json} +ln -s %{gem_libdir json}/json.rb %{buildroot}%{ruby_libdir}/json.rb +ln -s %{gem_libdir json}/json %{buildroot}%{ruby_libdir}/json +ln -s %{gem_extdir_mri json}/json/ %{buildroot}%{ruby_libarchdir}/json -mkdir -p %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version} -mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_dir}/gems/psych-%{psych_version}/lib -mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/psych-%{psych_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/psych-%{psych_version}.gemspec %{buildroot}%{gem_dir}/specifications -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir}/psych -ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych.rb %{buildroot}%{ruby_libdir}/psych.rb -ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so +mkdir -p %{buildroot}%{gem_libdir psych} +mkdir -p %{buildroot}%{gem_extdir_mri psych} +mv %{buildroot}%{ruby_libdir}/psych* %{buildroot}%{gem_libdir psych} +mv %{buildroot}%{ruby_libarchdir}/psych.so %{buildroot}%{gem_extdir_mri psych} +touch %{buildroot}%{gem_extdir_mri psych}/gem.build_complete +mv %{buildroot}%{gem_spec -d psych} %{buildroot}%{gem_spec psych} +ln -s %{gem_libdir psych}/psych %{buildroot}%{ruby_libdir}/psych +ln -s %{gem_libdir psych}/psych.rb %{buildroot}%{ruby_libdir}/psych.rb +ln -s %{gem_extdir_mri psych}/psych.so %{buildroot}%{ruby_libarchdir}/psych.so # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). @@ -862,10 +886,10 @@ find %{buildroot}%{gem_dir}/gems/*/lib -name \*.so -delete # Move man pages into proper location mkdir -p %{buildroot}%{_mandir}/man{1,5} -mv %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/doc/rake.1 %{buildroot}%{_mandir}/man1 +mv %{buildroot}%{gem_instdir rake}/doc/rake.1 %{buildroot}%{_mandir}/man1 # https://bugs.ruby-lang.org/issues/17778 -cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.1 %{buildroot}%{_mandir}/man1 -cp -a %{buildroot}%{gem_dir}/gems/bundler-%{bundler_version}/lib/bundler/man/*.5 %{buildroot}%{_mandir}/man5 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.1 %{buildroot}%{_mandir}/man1 +cp -a %{buildroot}%{gem_libdir bundler}/bundler/man/*.5 %{buildroot}%{_mandir}/man5 %if %{with systemtap} # Install a tapset and fix up the path to the library. @@ -888,93 +912,162 @@ echo 'doc/pty' >> .ruby-doc.ja sed -i 's/^/%doc /' .ruby-doc.* sed -i 's/^/%lang(ja) /' .ruby-doc.ja -# Remove useless .github directory from Rake. -# https://github.com/ruby/rake/pull/333 -rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github - %check %if 0%{?with_hardening_test} # Check Ruby hardening. -checksec --file=libruby.so.%{ruby_version} | \ +checksec --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \ grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}" %endif # Check RubyGems version. -[ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ] +[ "`make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT='%{_builddir}/%{buildsubdir}/bin/gem -v' | tail -1`" == '%{rubygems_version}' ] # Check Rubygems bundled dependencies versions. # Molinillo. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Gem; module Resolver; end; end; \ require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \ - puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \ - == '%{rubygems_molinillo_version}' ] + puts '%%{rubygems_molinillo_version}: %{rubygems_molinillo_version}'; \ + puts %Q[Gem::Resolver::Molinillo::VERSION: #{Gem::Resolver::Molinillo::VERSION}]; \ + exit 1 if Gem::Resolver::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \ +\"" + +# Net::HTTP. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rubygems/net-http/lib/net/http'; \ + puts '%%{rubygems_net_http_version}: %{rubygems_net_http_version}'; \ + puts %Q[Gem::Net::HTTP::VERSION: #{Gem::Net::HTTP::VERSION}]; \ + exit 1 if Gem::Net::HTTP::VERSION != '%{rubygems_net_http_version}'; \ +\"" + +# Net::Protocol. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; module Net; end; end; \ + require 'rubygems/net-protocol/lib/net/protocol'; \ + puts '%%{rubygems_net_protocol_version}: %{rubygems_net_protocol_version}'; \ + puts %Q[Gem::Net::Protocol::VERSION: #{Gem::Net::Protocol::VERSION}]; \ + exit 1 if Gem::Net::Protocol::VERSION != '%{rubygems_net_protocol_version}'; \ +\"" + +# OptParse. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/optparse/lib/optparse'; \ + puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \ + puts %Q[Gem::OptionParser::Version: #{Gem::OptionParser::Version}]; \ + exit 1 if Gem::OptionParser::Version != '%{rubygems_optparse_version}'; \ +\"" + +# Resolv. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/resolv/lib/resolv'; \ + puts '%%{rubygems_resolv_version}: %{rubygems_resolv_version}'; \ + puts %Q[Gem::Resolv::VERSION: #{Gem::Resolv::VERSION}]; \ + exit 1 if Gem::Resolv::VERSION != '%{rubygems_resolv_version}'; \ +\"" + +# Timeout. +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/timeout/lib/timeout'; \ + puts '%%{rubygems_timeout_version}: %{rubygems_timeout_version}'; \ + puts %Q[Gem::Timeout::VERSION: #{Gem::Timeout::VERSION}]; \ + exit 1 if Gem::Timeout::VERSION != '%{rubygems_timeout_version}'; \ +\"" + +# TSort +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + require 'rubygems/tsort/lib/tsort'; \ + puts '%%{rubygems_tsort_version}: %{rubygems_tsort_version}'; \ + puts %Q[Gem::TSort::VERSION: #{Gem::TSort::VERSION}]; \ + exit 1 if Gem::TSort::VERSION != '%{rubygems_tsort_version}'; \ +\"" # Check Bundler bundled dependencies versions. # connection_pool. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \ - puts Bundler::ConnectionPool::VERSION\\\"\" | tail -1`" \ - == '%{bundler_connection_pool_version}' ] + puts '%%{bundler_connection_pool_version}; %{bundler_connection_pool_version}'; \ + puts %Q[Bundler::ConnectionPool::VERSION: #{Bundler::ConnectionPool::VERSION}]; \ + exit 1 if Bundler::ConnectionPool::VERSION != '%{bundler_connection_pool_version}'; \ +\"" # FileUtils. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/fileutils/lib/fileutils'; \ - puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \ - == '%{bundler_fileutils_version}' ] + puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \ + puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \ + exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \ +\"" -# Molinillo. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +# PubGrub +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ - require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'; \ - puts Bundler::Molinillo::VERSION\\\"\" | tail -1`" \ - == '%{bundler_molinillo_version}' ] + require 'bundler/vendor/pub_grub/lib/pub_grub/version'; \ + puts '%%{bundler_pub_grub_version}: %{bundler_pub_grub_version}'; \ + puts %Q[Bundler::PubGrub::VERSION: #{Bundler::PubGrub::VERSION}]; \ + exit 1 if Bundler::PubGrub::VERSION != '%{bundler_pub_grub_version}'; \ +\"" # Net::HTTP::Persistent. -# Require `rubygems` to workaround the `': uninitialized -# constant Gem (NameError) issue. -# https://github.com/rubygems/rubygems/issues/5119 -[ "`make runruby TESTRUN_SCRIPT=\"-rrubygems -e \\\" \ - module Bundler; module Persistent; module Net; module HTTP; \ - end; end; end; end; \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Gem; end; \ + module Bundler; end; \ require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \ - puts Bundler::Persistent::Net::HTTP::Persistent::VERSION\\\"\" | tail -1`" \ - == '%{bundler_net_http_persistent_version}' ] + puts '%%{bundler_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \ + puts %Q[Gem::Net::HTTP::Persistent::VERSION: #{Gem::Net::HTTP::Persistent::VERSION}]; \ + exit 1 if Gem::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \ +\"" # Thor. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/thor/lib/thor/version'; \ - puts Bundler::Thor::VERSION\\\"\" | tail -1`" \ - == '%{bundler_thor_version}' ] + puts '%%{bundler_thor_version}: %{bundler_thor_version}'; \ + puts %Q[Bundler::Thor::VERSION: #{Bundler::Thor::VERSION}]; \ + exit 1 if Bundler::Thor::VERSION != '%{bundler_thor_version}'; \ +\"" -# tmpdir. -# TODO: There is no version in bundled tmpdir yet. -#%%{global bundler_tmpdir_version} +# TSort +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ + module Bundler; end; \ + require 'bundler/vendor/tsort/lib/tsort'; \ + puts '%%{bundler_tsort_version}: %{bundler_tsort_version}'; \ + puts %Q[Bundler::TSort::VERSION: #{Bundler::TSort::VERSION}]; \ + exit 1 if Bundler::TSort::VERSION != '%{bundler_tsort_version}'; \ +\"" # URI. -[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \ +make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \ module Bundler; end; \ require 'bundler/vendor/uri/lib/uri/version'; \ - puts Bundler::URI::VERSION\\\"\" | tail -1`" \ - == '%{bundler_uri_version}' ] + puts '%%{bundler_uri_version}: %{bundler_uri_version}'; \ + puts %Q[Bundler::URI::VERSION: #{Bundler::URI::VERSION}]; \ + exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \ +\"" # test_debug(TestRubyOptions) fails due to LoadError reported in debug mode, # when abrt.rb cannot be required (seems to be easier way then customizing # the test suite). -touch abrt.rb +touch %{_vpath_builddir}/abrt.rb # Check if abrt hook is required (RubyGems are disabled by default when using # runruby, so re-enable them). -make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}" # Check if systemtap is supported. -%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}} +%if %{with systemtap} +ln -sfr probes.d %{_vpath_builddir}/ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE14} +%endif DISABLE_TESTS="" MSPECOPTS="" @@ -982,53 +1075,17 @@ MSPECOPTS="" # Avoid `hostname' dependency. %{!?with_hostname:MSPECOPTS="-P 'Socket.gethostname returns the host name'"} -# https://bugs.ruby-lang.org/issues/18380 -DISABLE_TESTS="$DISABLE_TESTS -n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" - -# These tests use certificates that were generated using SHA1, which seems to be the problem with them -# as setting the crypto policy to LEGACY makes them pass. -# https://github.com/rubygems/rubygems/issues/5454 -DISABLE_TESTS="$DISABLE_TESTS \ - -n !/TestGemSecurityPolicy#test_check_cert_issuer/ \ - -n !/TestGemSecurityPolicy#test_check_chain/ \ - -n !/TestGemSecurityPolicy#test_check_chain_invalid/ \ - -n !/TestGemSecurityPolicy#test_verify_signatures_missing/ \ - -n !/TestGemSecurityPolicy#test_verify_signatures_trust/ \ - -n !/TestGemSecurityPolicy#test_check_root/ \ - -n !/TestGemSecurityPolicy#test_verify_signatures_chain/ \ - -n !/TestGemSecurityPolicy#test_verify_chain_signatures/ \ - -n !/TestGemSecurityPolicy#test_verify_signatures/ \ - -n !/TestGemSecurityPolicy#test_verify_signatures_root/ \ - -n !/TestGemSecuritySigner#test_sign/ \ - -n !/TestGemPackage#test_verify_security_policy_checksum_missing/ \ - -n !/TestGemPackage#test_build_auto_signed/ \ - -n !/TestGemPackage#test_build_signed_encrypted_key/ \ - -n !/TestGemPackage#test_verify_security_policy_low_security/ \ - -n !/TestGemPackage#test_build_auto_signed_encrypted_key/ \ - -n !/TestGemPackage#test_build_signed/ \ - -n !/TestGemPackageTarWriter#test_add_file_signer/ \ - -n !/TestGemRequest#test_configure_connection_for_https/ \ - -n !/TestGemRequest#test_configure_connection_for_https_ssl_ca_cert/" - -# Several test broken by libffi-3.4.2. There should be fix in libffi, once -# other components are fixed. -# https://bugzilla.redhat.com/show_bug.cgi?id=2040380 -mv test/fiddle/test_import.rb{,.disable} -mv test/fiddle/test_closure.rb{,.disable} -DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunc#test_qsort1/" -DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/" - # 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 check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" + make -C %{_vpath_builddir} check TESTS="-v --show-skip $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Run Ruby OpenSSL tests in OpenSSL FIPS. -make runruby TESTRUN_SCRIPT=" \ +make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=" \ -I%{_builddir}/%{buildsubdir}/tool/lib --enable-gems \ %{SOURCE15} %{_builddir}/%{buildsubdir} --verbose" -%{?with_bundler_tests:make test-bundler-parallel} +%{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel} %files %license BSDL @@ -1036,9 +1093,7 @@ make runruby TESTRUN_SCRIPT=" \ %lang(ja) %license COPYING.ja %license GPL %license LEGAL -%{_bindir}/erb %{_bindir}/%{name}%{?with_rubypick:-mri} -%{_mandir}/man1/erb* %{_mandir}/man1/ruby* %files devel @@ -1048,7 +1103,7 @@ make runruby TESTRUN_SCRIPT=" \ %license GPL %license LEGAL -%{_rpmconfigdir}/macros.d/macros.ruby +%{_rpmmacrodir}/macros.ruby %{_includedir}/* %{_libdir}/libruby.so @@ -1078,6 +1133,7 @@ make runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/abbrev.rb %{ruby_libdir}/base64.rb %{ruby_libdir}/benchmark* +%{ruby_libdir}/bundled_gems.rb %{ruby_libdir}/cgi* %{ruby_libdir}/coverage.rb %{ruby_libdir}/csv* @@ -1119,11 +1175,14 @@ make runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/resolv-replace.rb %{ruby_libdir}/rinda %{ruby_libdir}/ripper* +%dir %{ruby_libdir}/ruby_vm +%{ruby_libdir}/ruby_vm/rjit %{ruby_libdir}/securerandom.rb %{ruby_libdir}/set* %{ruby_libdir}/shellwords.rb %{ruby_libdir}/singleton* %{ruby_libdir}/socket.rb +%{ruby_libdir}/syntax_suggest* %{ruby_libdir}/syslog %{ruby_libdir}/tempfile.rb %{ruby_libdir}/timeout* @@ -1135,6 +1194,7 @@ make runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/uri* %{ruby_libdir}/weakref* %{ruby_libdir}/yaml* +%{ruby_libdir}/prism* # Platform specific libraries. %{_libdir}/libruby.so.{%{major_minor_version},%{ruby_version}} @@ -1214,6 +1274,7 @@ make runruby TESTRUN_SCRIPT=" \ %{ruby_libarchdir}/enc/windows_1254.so %{ruby_libarchdir}/enc/windows_1257.so %{ruby_libarchdir}/enc/windows_31j.so +%{ruby_libarchdir}/erb/escape.so %{ruby_libarchdir}/etc.so %{ruby_libarchdir}/fcntl.so %{ruby_libarchdir}/fiddle.so @@ -1228,7 +1289,6 @@ make runruby TESTRUN_SCRIPT=" \ %dir %{ruby_libarchdir}/rbconfig %{ruby_libarchdir}/rbconfig.rb %{ruby_libarchdir}/rbconfig/sizeof.so -%{ruby_libarchdir}/readline.so %{ruby_libarchdir}/ripper.so %{ruby_libarchdir}/socket.so %{ruby_libarchdir}/stringio.so @@ -1240,9 +1300,6 @@ make runruby TESTRUN_SCRIPT=" \ %{ruby_libdir}/did_you_mean* %{ruby_libdir}/openssl* %{ruby_libarchdir}/openssl.so -%{ruby_libdir}/racc* -%dir %{ruby_libarchdir}/racc -%{ruby_libarchdir}/racc/cparse.so %{?with_systemtap:%{_systemtap_datadir}} @@ -1269,98 +1326,95 @@ make runruby TESTRUN_SCRIPT=" \ %exclude %{gem_dir}/cache/* %files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmmacrodir}/macros.rubygems +%{_fileattrsdir}/rubygems.attr %{_rpmconfigdir}/rubygems.req %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con %files default-gems -%{gem_dir}/specifications/default/abbrev-0.1.0.gemspec -%{gem_dir}/specifications/default/base64-0.1.1.gemspec -%{gem_dir}/specifications/default/benchmark-0.2.0.gemspec -%{gem_dir}/specifications/default/cgi-0.3.1.gemspec -%{gem_dir}/specifications/default/csv-3.2.2.gemspec -%{gem_dir}/specifications/default/date-3.2.2.gemspec -%{gem_dir}/specifications/default/delegate-0.2.0.gemspec -%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec -%{gem_dir}/specifications/default/digest-3.1.0.gemspec -%{gem_dir}/specifications/default/drb-2.1.0.gemspec -%{gem_dir}/specifications/default/english-0.7.1.gemspec -%{gem_dir}/specifications/default/erb-%{erb_version}.gemspec -%{gem_dir}/specifications/default/error_highlight-0.3.0.gemspec -%{gem_dir}/specifications/default/etc-1.3.0.gemspec -%{gem_dir}/specifications/default/fcntl-1.0.1.gemspec -%{gem_dir}/specifications/default/fiddle-1.1.0.gemspec -%{gem_dir}/specifications/default/fileutils-1.6.0.gemspec -%{gem_dir}/specifications/default/find-0.1.1.gemspec -%{gem_dir}/specifications/default/forwardable-1.3.2.gemspec -%{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec -%{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec -%{gem_dir}/specifications/default/io-wait-0.2.1.gemspec -%{gem_dir}/specifications/default/ipaddr-1.2.4.gemspec -%{gem_dir}/specifications/default/logger-1.5.0.gemspec -%{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec -%{gem_dir}/specifications/default/net-http-0.2.0.gemspec -%{gem_dir}/specifications/default/net-protocol-0.1.2.gemspec -%{gem_dir}/specifications/default/nkf-0.1.1.gemspec -%{gem_dir}/specifications/default/observer-0.1.1.gemspec -%{gem_dir}/specifications/default/open3-0.1.1.gemspec -%{gem_dir}/specifications/default/open-uri-0.2.0.gemspec -%{gem_dir}/specifications/default/optparse-0.2.0.gemspec -%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec -%{gem_dir}/specifications/default/ostruct-0.5.2.gemspec -%{gem_dir}/specifications/default/pathname-0.2.0.gemspec -%{gem_dir}/specifications/default/pp-0.3.0.gemspec -%{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec -%{gem_dir}/specifications/default/pstore-0.1.1.gemspec -%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec -%{gem_dir}/specifications/default/readline-0.0.3.gemspec -%{gem_dir}/specifications/default/readline-ext-0.1.4.gemspec -%{gem_dir}/specifications/default/reline-0.3.0.gemspec -%{gem_dir}/specifications/default/resolv-0.2.1.gemspec -%{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec -%{gem_dir}/specifications/default/rinda-0.1.1.gemspec -%{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec -%{gem_dir}/specifications/default/securerandom-0.1.1.gemspec -%{gem_dir}/specifications/default/set-1.0.2.gemspec -%{gem_dir}/specifications/default/shellwords-0.1.0.gemspec -%{gem_dir}/specifications/default/singleton-0.1.1.gemspec -%{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec -%{gem_dir}/specifications/default/strscan-3.0.1.gemspec -%{gem_dir}/specifications/default/syslog-0.1.0.gemspec -%{gem_dir}/specifications/default/tempfile-0.1.2.gemspec -%{gem_dir}/specifications/default/time-0.2.0.gemspec -%{gem_dir}/specifications/default/timeout-0.2.0.gemspec -%{gem_dir}/specifications/default/tmpdir-0.1.2.gemspec -%{gem_dir}/specifications/default/tsort-0.1.0.gemspec -%{gem_dir}/specifications/default/un-0.2.0.gemspec -%{gem_dir}/specifications/default/uri-0.11.0.gemspec -%{gem_dir}/specifications/default/weakref-0.1.1.gemspec -#%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec -%{gem_dir}/specifications/default/yaml-0.2.0.gemspec -%{gem_dir}/specifications/default/zlib-2.1.1.gemspec - -%{gem_dir}/gems/erb-%{erb_version} -# Use standalone rubygem-racc if Racc binary is required. Shipping this -# executable in both packages might possibly cause conflicts. The situation -# could be better if Ruby generated these files: -# https://github.com/ruby/ruby/pull/2545 -%exclude %{_bindir}/racc -%exclude %{gem_dir}/gems/racc-%{racc_version}/bin +%gem_spec -d abbrev +%gem_spec -d base64 +%gem_spec -d benchmark +%gem_spec -d cgi +%gem_spec -d csv +%gem_spec -d date +%gem_spec -d delegate +%gem_spec -d did_you_mean +%gem_spec -d digest +%gem_spec -d drb +%gem_spec -d english +%gem_spec -d erb +%gem_instdir erb +%{_bindir}/erb +%{_mandir}/man1/erb* +%gem_spec -d error_highlight +%gem_spec -d etc +%gem_spec -d fcntl +%gem_spec -d fiddle +%gem_spec -d fileutils +%gem_spec -d find +%gem_spec -d forwardable +%gem_spec -d getoptlong +%gem_spec -d io-nonblock +%gem_spec -d io-wait +%gem_spec -d ipaddr +%gem_spec -d logger +%gem_spec -d mutex_m +%gem_spec -d net-http +%gem_spec -d net-protocol +%gem_spec -d nkf +%gem_spec -d observer +%gem_spec -d open3 +%gem_spec -d open-uri +%gem_spec -d optparse +%gem_spec -d openssl +%gem_spec -d ostruct +%gem_spec -d pathname +%gem_spec -d pp +%gem_spec -d prettyprint +%gem_spec -d pstore +%gem_spec -d readline +%gem_spec -d reline +%gem_spec -d resolv +%gem_spec -d resolv-replace +%gem_spec -d rinda +%gem_spec -d ruby2_keywords +%gem_spec -d securerandom +%gem_spec -d set +%gem_spec -d shellwords +%gem_spec -d singleton +%gem_spec -d stringio +%gem_spec -d strscan +%gem_spec -d syntax_suggest +%{_bindir}/syntax_suggest +%gem_instdir syntax_suggest +%gem_spec -d syslog +%gem_spec -d tempfile +%gem_spec -d time +%gem_spec -d timeout +%gem_spec -d tmpdir +%gem_spec -d tsort +%gem_spec -d un +%gem_spec -d uri +%gem_spec -d weakref +#%%gem_spec -d win32ole +%gem_spec -d yaml +%gem_spec -d prism +%gem_spec -d zlib %files -n rubygem-irb %{_bindir}/irb %{ruby_libdir}/irb* -%{gem_dir}/gems/irb-%{irb_version} -%{gem_dir}/specifications/irb-%{irb_version}.gemspec +%{gem_instdir irb} +%{gem_spec irb} %{_mandir}/man1/irb.1* %files -n rubygem-rdoc %{_bindir}/rdoc %{_bindir}/ri -%{gem_dir}/gems/rdoc-%{rdoc_version} -%{gem_dir}/specifications/rdoc-%{rdoc_version}.gemspec +%{gem_instdir rdoc} +%{gem_spec rdoc} %{_mandir}/man1/ri* %files doc -f .ruby-doc.en -f .ruby-doc.ja @@ -1372,211 +1426,232 @@ make runruby TESTRUN_SCRIPT=" \ %files -n rubygem-bigdecimal %{ruby_libdir}/bigdecimal* %{ruby_libarchdir}/bigdecimal* -%{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} -%{gem_dir}/gems/bigdecimal-%{bigdecimal_version} -%{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec +%{gem_extdir_mri bigdecimal} +%{gem_instdir bigdecimal} +%{gem_spec bigdecimal} %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so -%{_libdir}/gems/%{name}/io-console-%{io_console_version} -%{gem_dir}/gems/io-console-%{io_console_version} -%{gem_dir}/specifications/io-console-%{io_console_version}.gemspec +%{gem_extdir_mri io-console} +%{gem_instdir io-console} +%{gem_spec io-console} %files -n rubygem-json %{ruby_libdir}/json* %{ruby_libarchdir}/json* -%{_libdir}/gems/%{name}/json-%{json_version} -%{gem_dir}/gems/json-%{json_version} -%{gem_dir}/specifications/json-%{json_version}.gemspec +%{gem_extdir_mri json} +%{gem_instdir json} +%{gem_spec json} %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb %{ruby_libarchdir}/psych.so -%{_libdir}/gems/%{name}/psych-%{psych_version} -%dir %{gem_dir}/gems/psych-%{psych_version} -%{gem_dir}/gems/psych-%{psych_version}/lib -%{gem_dir}/specifications/psych-%{psych_version}.gemspec +%{gem_extdir_mri psych} +%dir %{gem_instdir psych} +%{gem_libdir psych} +%{gem_spec psych} %files -n rubygem-bundler %{_bindir}/bundle %{_bindir}/bundler -%{gem_dir}/gems/bundler-%{bundler_version} -%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{gem_instdir bundler} +%{gem_spec bundler} %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* %files bundled-gems +# rdbg %{_bindir}/rdbg -%dir %{_libdir}/gems/%{name}/debug-%{debug_version} -%{_libdir}/gems/%{name}/debug-%{debug_version}/gem.build_complete -%dir %{_libdir}/gems/%{name}/debug-%{debug_version}/debug -%{_libdir}/gems/%{name}/debug-%{debug_version}/debug/debug.so -%dir %{gem_dir}/gems/debug-%{debug_version} -%exclude %{gem_dir}/gems/debug-%{debug_version}/.* -%doc %{gem_dir}/gems/debug-%{debug_version}/CONTRIBUTING.md -%{gem_dir}/gems/debug-%{debug_version}/Gemfile -%license %{gem_dir}/gems/debug-%{debug_version}/LICENSE.txt -%doc %{gem_dir}/gems/debug-%{debug_version}/README.md -%{gem_dir}/gems/debug-%{debug_version}/Rakefile -%doc %{gem_dir}/gems/debug-%{debug_version}/TODO.md -%{gem_dir}/gems/debug-%{debug_version}/bin -%{gem_dir}/gems/debug-%{debug_version}/exe -%{gem_dir}/gems/debug-%{debug_version}/lib -%{gem_dir}/gems/debug-%{debug_version}/misc -%{gem_dir}/specifications/debug-%{debug_version}.gemspec +%dir %{gem_extdir_mri debug} +%{gem_extdir_mri debug}/gem.build_complete +%dir %{gem_extdir_mri debug}/debug +%{gem_extdir_mri debug}/debug/debug.so +%dir %{gem_instdir debug} +%exclude %{gem_instdir debug}/.* +%doc %{gem_instdir debug}/CONTRIBUTING.md +%{gem_instdir debug}/Gemfile +%license %{gem_instdir debug}/LICENSE.txt +%doc %{gem_instdir debug}/README.md +%{gem_instdir debug}/Rakefile +%doc %{gem_instdir debug}/TODO.md +%{gem_instdir debug}/exe +%{gem_libdir debug} +%{gem_instdir debug}/misc +%{gem_spec debug} -%dir %{gem_dir}/gems/net-ftp-%{net_ftp_version} -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Gemfile -%license %{gem_dir}/gems/net-ftp-%{net_ftp_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-ftp-%{net_ftp_version}/README.md -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Rakefile -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/bin -%{gem_dir}/gems/net-ftp-%{net_ftp_version}/lib -%{gem_dir}/specifications/net-ftp-%{net_ftp_version}.gemspec +# net-ftp +%dir %{gem_instdir net-ftp} +%{gem_instdir net-ftp}/Gemfile +%license %{gem_instdir net-ftp}/LICENSE.txt +%doc %{gem_instdir net-ftp}/README.md +%{gem_instdir net-ftp}/Rakefile +%{gem_libdir net-ftp} +%{gem_spec net-ftp} -%dir %{gem_dir}/gems/net-imap-%{net_imap_version} -%{gem_dir}/gems/net-imap-%{net_imap_version}/Gemfile -%license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md -%{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile -%{gem_dir}/gems/net-imap-%{net_imap_version}/lib -%{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec +# net-imap +%dir %{gem_instdir net-imap} +%{gem_instdir net-imap}/Gemfile +%license %{gem_instdir net-imap}/LICENSE.txt +%doc %{gem_instdir net-imap}/README.md +%{gem_instdir net-imap}/Rakefile +%{gem_instdir net-imap}/docs +%{gem_libdir net-imap} +%{gem_instdir net-imap}/rakelib +%{gem_spec net-imap} -%dir %{gem_dir}/gems/net-pop-%{net_pop_version} -%{gem_dir}/gems/net-pop-%{net_pop_version}/Gemfile -%license %{gem_dir}/gems/net-pop-%{net_pop_version}/LICENSE.txt -%doc %{gem_dir}/gems/net-pop-%{net_pop_version}/README.md -%{gem_dir}/gems/net-pop-%{net_pop_version}/Rakefile -%{gem_dir}/gems/net-pop-%{net_pop_version}/bin -%{gem_dir}/gems/net-pop-%{net_pop_version}/lib -%{gem_dir}/specifications/net-pop-%{net_pop_version}.gemspec +# net-pop +%dir %{gem_instdir net-pop} +%{gem_instdir net-pop}/Gemfile +%license %{gem_instdir net-pop}/LICENSE.txt +%doc %{gem_instdir net-pop}/README.md +%{gem_instdir net-pop}/Rakefile +%{gem_libdir net-pop} +%{gem_spec net-pop} -%dir %{gem_dir}/gems/net-smtp-%{net_smtp_version} -%license %{gem_dir}/gems/net-smtp-%{net_smtp_version}/LICENSE.txt -%{gem_dir}/gems/net-smtp-%{net_smtp_version}/lib -%{gem_dir}/specifications/net-smtp-%{net_smtp_version}.gemspec +# net-smtp +%dir %{gem_instdir net-smtp} +%doc %{gem_instdir net-smtp}/NEWS.md +%doc %{gem_instdir net-smtp}/README.md +%license %{gem_instdir net-smtp}/LICENSE.txt +%{gem_libdir net-smtp} +%{gem_spec net-smtp} -%dir %{gem_dir}/gems/matrix-%{matrix_version} -%license %{gem_dir}/gems/matrix-%{matrix_version}/LICENSE.txt -%{gem_dir}/gems/matrix-%{matrix_version}/lib -%{gem_dir}/specifications/matrix-%{matrix_version}.gemspec +# matrix +%dir %{gem_instdir matrix} +%license %{gem_instdir matrix}/LICENSE.txt +%{gem_libdir matrix} +%{gem_spec matrix} -%dir %{gem_dir}/gems/prime-%{prime_version} -%{gem_dir}/gems/prime-%{prime_version}/Gemfile -%license %{gem_dir}/gems/prime-%{prime_version}/LICENSE.txt -%doc %{gem_dir}/gems/prime-%{prime_version}/README.md -%{gem_dir}/gems/prime-%{prime_version}/Rakefile -%{gem_dir}/gems/prime-%{prime_version}/bin -%{gem_dir}/gems/prime-%{prime_version}/lib -%{gem_dir}/specifications/prime-%{prime_version}.gemspec +# prime +%dir %{gem_instdir prime} +%{gem_instdir prime}/Gemfile +%license %{gem_instdir prime}/LICENSE.txt +%doc %{gem_instdir prime}/README.md +%{gem_instdir prime}/Rakefile +%{gem_instdir prime}/bin +%{gem_libdir prime} +%{gem_spec prime} %files -n rubygem-minitest -%dir %{gem_dir}/gems/minitest-%{minitest_version} -%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* -%{gem_dir}/gems/minitest-%{minitest_version}/Manifest.txt -%{gem_dir}/gems/minitest-%{minitest_version}/design_rationale.rb -%{gem_dir}/gems/minitest-%{minitest_version}/lib -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec -%doc %{gem_dir}/gems/minitest-%{minitest_version}/History.rdoc -%doc %{gem_dir}/gems/minitest-%{minitest_version}/README.rdoc -%{gem_dir}/gems/minitest-%{minitest_version}/Rakefile -%{gem_dir}/gems/minitest-%{minitest_version}/test +%dir %{gem_instdir minitest} +%exclude %{gem_instdir minitest}/.* +%{gem_instdir minitest}/Manifest.txt +%{gem_instdir minitest}/design_rationale.rb +%{gem_libdir minitest} +%{gem_spec minitest} +%doc %{gem_instdir minitest}/History.rdoc +%doc %{gem_instdir minitest}/README.rdoc +%{gem_instdir minitest}/Rakefile +%{gem_instdir minitest}/test %files -n rubygem-power_assert -%dir %{gem_dir}/gems/power_assert-%{power_assert_version} -%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/BSDL -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/COPYING -%license %{gem_dir}/gems/power_assert-%{power_assert_version}/LEGAL -%{gem_dir}/gems/power_assert-%{power_assert_version}/lib -%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec -%{gem_dir}/gems/power_assert-%{power_assert_version}/Gemfile -%doc %{gem_dir}/gems/power_assert-%{power_assert_version}/README.md -%{gem_dir}/gems/power_assert-%{power_assert_version}/Rakefile +%dir %{gem_instdir power_assert} +%exclude %{gem_instdir power_assert}/.* +%license %{gem_instdir power_assert}/BSDL +%license %{gem_instdir power_assert}/COPYING +%license %{gem_instdir power_assert}/LEGAL +%{gem_libdir power_assert} +%{gem_spec power_assert} +%{gem_instdir power_assert}/Gemfile +%doc %{gem_instdir power_assert}/README.md +%{gem_instdir power_assert}/Rakefile %files -n rubygem-rake %{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec +%{gem_instdir rake} +%{gem_spec rake} %{_mandir}/man1/rake.1* %files -n rubygem-rbs %{_bindir}/rbs -%dir %{_libdir}/gems/%{name}/rbs-%{rbs_version} -%{_libdir}/gems/%{name}/rbs-%{rbs_version}/gem.build_complete -%{_libdir}/gems/%{name}/rbs-%{rbs_version}/rbs_extension.so -%dir %{gem_dir}/gems/rbs-%{rbs_version} -%exclude %{gem_dir}/gems/rbs-%{rbs_version}/.* -%license %{gem_dir}/gems/rbs-%{rbs_version}/BSDL -%doc %{gem_dir}/gems/rbs-%{rbs_version}/CHANGELOG.md -%license %{gem_dir}/gems/rbs-%{rbs_version}/COPYING -%{gem_dir}/gems/rbs-%{rbs_version}/Gemfile -%doc %{gem_dir}/gems/rbs-%{rbs_version}/README.md -%{gem_dir}/gems/rbs-%{rbs_version}/Rakefile -%{gem_dir}/gems/rbs-%{rbs_version}/Steepfile -%{gem_dir}/gems/rbs-%{rbs_version}/core -%doc %{gem_dir}/gems/rbs-%{rbs_version}/docs -%{gem_dir}/gems/rbs-%{rbs_version}/exe -%{gem_dir}/gems/rbs-%{rbs_version}/goodcheck.yml -%{gem_dir}/gems/rbs-%{rbs_version}/lib -%{gem_dir}/gems/rbs-%{rbs_version}/schema -%{gem_dir}/gems/rbs-%{rbs_version}/sig -%{gem_dir}/gems/rbs-%{rbs_version}/stdlib -%{gem_dir}/gems/rbs-%{rbs_version}/steep -%{gem_dir}/specifications/rbs-%{rbs_version}.gemspec +%dir %{gem_extdir_mri rbs} +%{gem_extdir_mri rbs}/gem.build_complete +%{gem_extdir_mri rbs}/rbs_extension.so +%dir %{gem_instdir rbs} +%exclude %{gem_instdir rbs}/.* +%license %{gem_instdir rbs}/BSDL +%doc %{gem_instdir rbs}/CHANGELOG.md +%license %{gem_instdir rbs}/COPYING +%{gem_instdir rbs}/Gemfile* +%doc %{gem_instdir rbs}/README.md +%{gem_instdir rbs}/Rakefile +%{gem_instdir rbs}/Steepfile +%{gem_instdir rbs}/core +%doc %{gem_instdir rbs}/docs +%{gem_instdir rbs}/exe +%{gem_instdir rbs}/goodcheck.yml +%{gem_libdir rbs} +%{gem_instdir rbs}/schema +%{gem_instdir rbs}/sig +%{gem_instdir rbs}/stdlib +%{gem_spec rbs} %files -n rubygem-test-unit -%dir %{gem_dir}/gems/test-unit-%{test_unit_version} -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/BSDL -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/COPYING -%license %{gem_dir}/gems/test-unit-%{test_unit_version}/PSFL -%{gem_dir}/gems/test-unit-%{test_unit_version}/lib -%{gem_dir}/gems/test-unit-%{test_unit_version}/sample -%{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec -%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/README.md -%{gem_dir}/gems/test-unit-%{test_unit_version}/Rakefile -%doc %{gem_dir}/gems/test-unit-%{test_unit_version}/doc +%dir %{gem_instdir test-unit} +%license %{gem_instdir test-unit}/BSDL +%license %{gem_instdir test-unit}/COPYING +%license %{gem_instdir test-unit}/PSFL +%{gem_libdir test-unit} +%{gem_instdir test-unit}/sample +%{gem_spec test-unit} +%doc %{gem_instdir test-unit}/README.md +%{gem_instdir test-unit}/Rakefile +%doc %{gem_instdir test-unit}/doc + +%files -n rubygem-racc +%dir %{gem_instdir racc} +%{_bindir}/racc +%{gem_extdir_mri racc} +%license %{gem_instdir racc}/COPYING +%doc %{gem_instdir racc}/ChangeLog +%lang(ja) %doc %{gem_instdir racc}/README.ja.rdoc +%doc %{gem_instdir racc}/README.rdoc +%doc %{gem_instdir racc}/TODO +%{gem_instdir racc}/bin +%doc %{gem_instdir racc}/doc +%{gem_libdir racc} +%{gem_spec racc} %files -n rubygem-rexml -%dir %{gem_dir}/gems/rexml-%{rexml_version} -%license %{gem_dir}/gems/rexml-%{rexml_version}/LICENSE.txt -%doc %{gem_dir}/gems/rexml-%{rexml_version}/NEWS.md -%doc %{gem_dir}/gems/rexml-%{rexml_version}/doc -%{gem_dir}/gems/rexml-%{rexml_version}/lib -%{gem_dir}/specifications/rexml-%{rexml_version}.gemspec -%doc %{gem_dir}/gems/rexml-%{rexml_version}/README.md +%dir %{gem_instdir rexml} +%license %{gem_instdir rexml}/LICENSE.txt +%doc %{gem_instdir rexml}/NEWS.md +%doc %{gem_instdir rexml}/doc +%{gem_libdir rexml} +%{gem_spec rexml} +%doc %{gem_instdir rexml}/README.md %files -n rubygem-rss -%dir %{gem_dir}/gems/rss-%{rss_version} -%exclude %{gem_dir}/gems/rss-%{rss_version}/.* -%license %{gem_dir}/gems/rss-%{rss_version}/LICENSE.txt -%doc %{gem_dir}/gems/rss-%{rss_version}/NEWS.md -%{gem_dir}/gems/rss-%{rss_version}/lib -%{gem_dir}/specifications/rss-%{rss_version}.gemspec -%doc %{gem_dir}/gems/rss-%{rss_version}/Gemfile -%doc %{gem_dir}/gems/rss-%{rss_version}/README.md -%doc %{gem_dir}/gems/rss-%{rss_version}/Rakefile -%doc %{gem_dir}/gems/rss-%{rss_version}/test +%dir %{gem_instdir rss} +%exclude %{gem_instdir rss}/.* +%license %{gem_instdir rss}/LICENSE.txt +%doc %{gem_instdir rss}/NEWS.md +%{gem_libdir rss} +%{gem_spec rss} +%doc %{gem_instdir rss}/README.md %files -n rubygem-typeprof -%dir %{gem_dir}/gems/typeprof-%{typeprof_version} +%dir %{gem_instdir typeprof} %{_bindir}/typeprof -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/.* -%license %{gem_dir}/gems/typeprof-%{typeprof_version}/LICENSE -%{gem_dir}/gems/typeprof-%{typeprof_version}/exe -%{gem_dir}/gems/typeprof-%{typeprof_version}/lib -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/tools -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/typeprof-lsp -%exclude %{gem_dir}/gems/typeprof-%{typeprof_version}/vscode -%{gem_dir}/specifications/typeprof-%{typeprof_version}.gemspec -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Gemfile* -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/README.md -%doc %{gem_dir}/gems/typeprof-%{typeprof_version}/Rakefile +%exclude %{gem_instdir typeprof}/.* +%license %{gem_instdir typeprof}/LICENSE +%{gem_instdir typeprof}/exe +%{gem_libdir typeprof} +%doc %{gem_instdir typeprof}/tools +%exclude %{gem_instdir typeprof}/typeprof-lsp +%{gem_spec typeprof} +%doc %{gem_instdir typeprof}/Gemfile* +%doc %{gem_instdir typeprof}/README.md +%doc %{gem_instdir typeprof}/Rakefile %changelog +* Wed Jan 17 2024 Jarek Prokop - 3.3.0-1 +- Upgrade to Ruby 3.3.0. + Resolves: RHEL-17089 + * Sun Dec 03 2023 Jun Aruga - 3.1.2-142 - Bypass git submodule test failure on Git >= 2.38.1. - Fix tests with Europe/Amsterdam pre-1970 time on tzdata version 2022b. diff --git a/sources b/sources index 9cefc8d..10a3d0b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-3.1.2.tar.xz) = 4a74e9efc6ea4b3eff4fec7534eb1fff4794d021531defc2e9937e53c6668db8ecdc0fff2bc23d5e6602d0df344a2caa85b31c5414309541e3d5313ec82b6e21 +SHA512 (ruby-3.3.0.tar.xz) = 7959c5753bfa0bfc4d6d74060869aabbe9815c1c97930659da11b917ee0803ddbbd80e869e00c48b8694b4ba48709c3b6493fd045568e36e902616c35ababf01