From b0aebb750cf4a6bc2c05ba5d33861f1daf650e00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 1 Apr 2020 21:05:13 +0200 Subject: [PATCH 01/21] Upgrade to Ruby 2.7.1. --- ruby-2.1.0-custom-rubygems-location.patch | 10 +- ruby-2.3.0-ruby_version.patch | 2 +- ruby-2.7.0-Remove-RubyGems-dependency.patch | 2 +- ...-the-fact-that-lchmod-can-EOPNOTSUPP.patch | 88 ++++++++++++ ...0-Moved-not-implemented-method-tests.patch | 131 ++++++++++++++++++ ruby.spec | 18 +-- sources | 2 +- 7 files changed, 236 insertions(+), 17 deletions(-) create mode 100644 ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch create mode 100644 ruby-2.8.0-Moved-not-implemented-method-tests.patch diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index 14e20ec..c256708 100644 --- a/ruby-2.1.0-custom-rubygems-location.patch +++ b/ruby-2.1.0-custom-rubygems-location.patch @@ -67,15 +67,15 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index b47b6e1..0b99408 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb -@@ -338,6 +338,7 @@ def CONFIG.[](name, mandatory = false) - sitearchlibdir = CONFIG["sitearchdir"] - vendorlibdir = CONFIG["vendorlibdir"] - vendorarchlibdir = CONFIG["vendorarchdir"] +@@ -343,6 +343,7 @@ def CONFIG.[](name, mandatory = false) + vendorlibdir = CONFIG["vendorlibdir"] + vendorarchlibdir = CONFIG["vendorarchdir"] + end +rubygemsdir = CONFIG["rubygemsdir"] mandir = CONFIG["mandir", true] docdir = CONFIG["docdir", true] enable_shared = CONFIG["ENABLE_SHARED"] == 'yes' -@@ -565,7 +566,16 @@ def stub +@@ -570,7 +571,16 @@ def stub install?(:local, :comm, :lib) do prepare "library scripts", rubylibdir noinst = %w[*.txt *.rdoc *.gemspec] diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index 11f73f3..bf51605 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -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 -@@ -428,7 +428,7 @@ def CONFIG.[](name, mandatory = false) +@@ -433,7 +433,7 @@ def CONFIG.[](name, mandatory = false) install?(:doc, :rdoc) do if $rdocdir diff --git a/ruby-2.7.0-Remove-RubyGems-dependency.patch b/ruby-2.7.0-Remove-RubyGems-dependency.patch index 4205217..4166900 100644 --- a/ruby-2.7.0-Remove-RubyGems-dependency.patch +++ b/ruby-2.7.0-Remove-RubyGems-dependency.patch @@ -13,7 +13,7 @@ diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b index a54be2a..06739f1 100644 --- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb -@@ -202,10 +202,10 @@ class Bundler::Persistent::Net::HTTP::Persistent +@@ -197,10 +197,10 @@ class Bundler::Persistent::Net::HTTP::Persistent ## # The default connection pool size is 1/4 the allowed open files. diff --git a/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch b/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch new file mode 100644 index 0000000..1e09843 --- /dev/null +++ b/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch @@ -0,0 +1,88 @@ +From a19228f878d955eaf2cce086bcf53f46fdf894b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= + +Date: Thu, 23 Jan 2020 15:33:42 +0900 +Subject: [PATCH] brace the fact that lchmod(2) can EOPNOTSUPP + +Musl libc has this function as a tiny wrapper of fchmodat(3posix). On +the other hand Linux kernel does not support changing modes of a symlink. +The operation always fails with EOPNOTSUPP. This fchmodat behaviour is +defined in POSIX. We have to take care of such exceptions. +--- + lib/fileutils.rb | 3 ++- + test/pathname/test_pathname.rb | 2 +- + test/ruby/test_notimp.rb | 19 ++++++++++++------- + 3 files changed, 15 insertions(+), 9 deletions(-) + +diff --git a/lib/fileutils.rb b/lib/fileutils.rb +index a7ad65ae5e98..04788e26ca9c 100644 +--- a/lib/fileutils.rb ++++ b/lib/fileutils.rb +@@ -1345,6 +1345,7 @@ def chmod(mode) + else + File.chmod mode, path() + end ++ rescue Errno::EOPNOTSUPP + end + + def chown(uid, gid) +@@ -1439,7 +1440,7 @@ def copy_metadata(path) + if st.symlink? + begin + File.lchmod mode, path +- rescue NotImplementedError ++ rescue NotImplementedError, Errno::EOPNOTSUPP + end + else + File.chmod mode, path +diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb +index 792510bdfb2d..2ce32a6c1208 100644 +--- a/test/pathname/test_pathname.rb ++++ b/test/pathname/test_pathname.rb +@@ -818,7 +818,7 @@ def test_lchmod + old = path.lstat.mode + begin + path.lchmod(0444) +- rescue NotImplementedError ++ rescue NotImplementedError, Errno::EOPNOTSUPP + next + end + assert_equal(0444, path.lstat.mode & 0777) +diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb +index b069154cfc3f..e13db692b50d 100644 +--- a/test/ruby/test_notimp.rb ++++ b/test/ruby/test_notimp.rb +@@ -13,11 +13,11 @@ def test_respond_to_fork + + def test_respond_to_lchmod + assert_include(File.methods, :lchmod) +- if /linux/ =~ RUBY_PLATFORM +- assert_equal(false, File.respond_to?(:lchmod)) +- end +- if /freebsd/ =~ RUBY_PLATFORM ++ case RUBY_PLATFORM ++ when /freebsd/, /linux-musl/ + assert_equal(true, File.respond_to?(:lchmod)) ++ when /linux/ ++ assert_equal(false, File.respond_to?(:lchmod)) + end + end + +@@ -57,9 +57,14 @@ def test_call_lchmod + File.open(f, "w") {} + File.symlink f, g + newmode = 0444 +- File.lchmod newmode, "#{d}/g" +- snew = File.lstat(g) +- assert_equal(newmode, snew.mode & 0777) ++ begin ++ File.lchmod newmode, "#{d}/g" ++ rescue Errno::EOPNOTSUPP ++ skip $! ++ else ++ snew = File.lstat(g) ++ assert_equal(newmode, snew.mode & 0777) ++ end + } + end + end diff --git a/ruby-2.8.0-Moved-not-implemented-method-tests.patch b/ruby-2.8.0-Moved-not-implemented-method-tests.patch new file mode 100644 index 0000000..ffc8c52 --- /dev/null +++ b/ruby-2.8.0-Moved-not-implemented-method-tests.patch @@ -0,0 +1,131 @@ +From 72c02aa4b79731c7f25c9267f74b347f1946c704 Mon Sep 17 00:00:00 2001 +From: Nobuyoshi Nakada +Date: Fri, 28 Feb 2020 21:15:37 +0900 +Subject: [PATCH] Moved not-implemented method tests [Bug #16662] + +Test not-implemented method with the dedicated methods, instead of +platform dependent features. +--- + test/-ext-/test_notimplement.rb | 7 +++ + test/ruby/test_notimp.rb | 90 --------------------------------- + 2 files changed, 7 insertions(+), 90 deletions(-) + delete mode 100644 test/ruby/test_notimp.rb + +diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb +index 92a2fd22b8d6..038b507b7312 100644 +--- a/test/-ext-/test_notimplement.rb ++++ b/test/-ext-/test_notimplement.rb +@@ -13,10 +13,17 @@ def test_funcall_notimplement + end + + def test_respond_to ++ assert_include(Bug.methods(false), :notimplement) ++ assert_include(Bug::NotImplement.instance_methods(false), :notimplement) + assert_not_respond_to(Bug, :notimplement) + assert_not_respond_to(Bug::NotImplement.new, :notimplement) + end + ++ def test_method_inspect_notimplement ++ assert_match(/not-implemented/, Bug.method(:notimplement).inspect) ++ assert_match(/not-implemented/, Bug::NotImplement.instance_method(:notimplement).inspect) ++ end ++ + def test_not_method_defined + assert !Bug::NotImplement.method_defined?(:notimplement) + assert !Bug::NotImplement.method_defined?(:notimplement, true) +diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb +deleted file mode 100644 +index e13db692b50d..000000000000 +--- a/test/ruby/test_notimp.rb ++++ /dev/null +@@ -1,90 +0,0 @@ +-# frozen_string_literal: false +-require 'test/unit' +-require 'timeout' +-require 'tmpdir' +- +-class TestNotImplement < Test::Unit::TestCase +- def test_respond_to_fork +- assert_include(Process.methods, :fork) +- if /linux/ =~ RUBY_PLATFORM +- assert_equal(true, Process.respond_to?(:fork)) +- end +- end +- +- def test_respond_to_lchmod +- assert_include(File.methods, :lchmod) +- case RUBY_PLATFORM +- when /freebsd/, /linux-musl/ +- assert_equal(true, File.respond_to?(:lchmod)) +- when /linux/ +- assert_equal(false, File.respond_to?(:lchmod)) +- end +- end +- +- def test_call_fork +- GC.start +- pid = nil +- ps = +- case RUBY_PLATFORM +- when /linux/ # assume Linux Distribution uses procps +- proc {`ps -eLf #{pid}`} +- when /freebsd/ +- proc {`ps -lH #{pid}`} +- when /darwin/ +- proc {`ps -lM #{pid}`} +- else +- proc {`ps -l #{pid}`} +- end +- assert_nothing_raised(Timeout::Error, ps) do +- EnvUtil.timeout(20) { +- pid = fork {} +- Process.wait pid +- pid = nil +- } +- end +- ensure +- if pid +- Process.kill(:KILL, pid) +- Process.wait pid +- end +- end if Process.respond_to?(:fork) +- +- def test_call_lchmod +- if File.respond_to?(:lchmod) +- Dir.mktmpdir {|d| +- f = "#{d}/f" +- g = "#{d}/g" +- File.open(f, "w") {} +- File.symlink f, g +- newmode = 0444 +- begin +- File.lchmod newmode, "#{d}/g" +- rescue Errno::EOPNOTSUPP +- skip $! +- else +- snew = File.lstat(g) +- assert_equal(newmode, snew.mode & 0777) +- end +- } +- end +- end +- +- def test_method_inspect_fork +- m = Process.method(:fork) +- if Process.respond_to?(:fork) +- assert_not_match(/not-implemented/, m.inspect) +- else +- assert_match(/not-implemented/, m.inspect) +- end +- end +- +- def test_method_inspect_lchmod +- m = File.method(:lchmod) +- if File.respond_to?(:lchmod) +- assert_not_match(/not-implemented/, m.inspect) +- else +- assert_match(/not-implemented/, m.inspect) +- end +- end +- +-end diff --git a/ruby.spec b/ruby.spec index 343cefa..be73e0f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 7 -%global teeny_version 0 +%global teeny_version 1 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -33,7 +33,7 @@ %global rubygems_version 3.1.2 %global rubygems_molinillo_version 0.5.7 -%global bundler_version 2.1.2 +%global bundler_version 2.1.4 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.3.0 %global bundler_molinillo_version 0.6.6 @@ -42,13 +42,13 @@ %global bigdecimal_version 2.0.0 %global did_you_mean_version 1.4.0 -%global io_console_version 0.5.3 -%global irb_version 1.2.1 +%global io_console_version 0.5.6 +%global irb_version 1.2.3 %global json_version 2.3.0 %global minitest_version 5.13.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.5 +%global power_assert_version 1.1.7 %global psych_version 3.1.0 %global racc_version 1.4.16 %global rake_version 13.0.1 @@ -727,9 +727,6 @@ ln -s %{_libdir}/gems/%{name}/psych-%{psych_version}/psych.so %{buildroot}%{ruby # https://bugs.ruby-lang.org/issues/15982 rm %{buildroot}%{_bindir}/{racc2y,y2racc} rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -# The 'rdoc' directory is empty and useless ATM. -# https://bugs.ruby-lang.org/issues/16596 -rm -r %{buildroot}%{ruby_libdir}/racc/rdoc mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib @@ -1102,7 +1099,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/pstore-0.1.0.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.2.gemspec +%{gem_dir}/specifications/default/reline-0.1.3.gemspec %{gem_dir}/specifications/default/rexml-3.2.3.gemspec %{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec @@ -1239,6 +1236,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog +* Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 +- Upgrade to Ruby 2.7.1. + * Tue Jan 28 2020 Vít Ondruch - 2.7.0-127 - Provide StdLib links for Racc and install it by default. diff --git a/sources b/sources index d32bf72..38b728a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.0.tar.xz) = dd5690c631bf3a2b76cdc06902bcd76a89713a045e136debab9b8a81ff8c433bbb254aa09e4014ca1cf85a69ff4bcb13de11da5e40c224e7268be43ef2194af7 +SHA512 (ruby-2.7.1.tar.xz) = 79f98b1ea98e0b10ec79da1883e8fc84d48ffe5c09ae945cbebde94365e35a589d919aac965f74d70ca7e21370ecee631ac5a8f9c4eac61d62f5aa629f27bf31 From 43148396c2910ce847fd8b2320017da85db8b730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 2 Apr 2020 08:50:13 +0200 Subject: [PATCH 02/21] Release bump. (Not just in changelog) --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index be73e0f..7a5145f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 127 +%global release 128 %{!?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 From 751b6b74c906a6256607219cbadeed7d843ddaa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 28 Feb 2020 17:09:21 +0100 Subject: [PATCH 03/21] Shuffle bits of .spec file around. Reorganize subpackages to keep default and bundled gems together. --- ruby.spec | 224 +++++++++++++++++++++++++++++------------------------- 1 file changed, 119 insertions(+), 105 deletions(-) diff --git a/ruby.spec b/ruby.spec index 7a5145f..72b5d15 100644 --- a/ruby.spec +++ b/ruby.spec @@ -33,6 +33,7 @@ %global rubygems_version 3.1.2 %global rubygems_molinillo_version 0.5.7 +# Default gems. %global bundler_version 2.1.4 %global bundler_connection_pool_version 2.2.2 %global bundler_fileutils_version 1.3.0 @@ -45,17 +46,19 @@ %global io_console_version 0.5.6 %global irb_version 1.2.3 %global json_version 2.3.0 -%global minitest_version 5.13.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 -%global power_assert_version 1.1.7 %global psych_version 3.1.0 %global racc_version 1.4.16 -%global rake_version 13.0.1 %global rdoc_version 6.2.1 -%global test_unit_version 3.3.4 %global xmlrpc_version 0.3.0 +# Bundled gems. +%global minitest_version 5.13.0 +%global power_assert_version 1.1.7 +%global rake_version 13.0.1 +%global test_unit_version 3.3.4 + # Might not be needed in the future, if we are lucky enough. # https://bugzilla.redhat.com/show_bug.cgi?id=888262 %global tapset_root %{_datadir}/systemtap @@ -259,20 +262,10 @@ BuildArch: noarch Macros and development tools for packaging RubyGems. -%package -n rubygem-rake -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} -BuildArch: noarch - -%description -n rubygem-rake -Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. - +# Default gems +# +# These packages are part of Ruby StdLib and are expected to be loadable even +# with disabled RubyGems. %package -n rubygem-irb Summary: The Interactive Ruby @@ -385,6 +378,73 @@ data to disk or transmit it over a network rather than use a verbose markup language. +%package -n rubygem-openssl +Summary: OpenSSL provides SSL, TLS and general purpose cryptography +Version: %{openssl_version} +License: Ruby or BSD +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(openssl) = %{version}-%{release} + +%description -n rubygem-openssl +OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the +OpenSSL library. + + +%package -n rubygem-psych +Summary: A libyaml wrapper for Ruby +Version: %{psych_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(psych) = %{version}-%{release} + +%description -n rubygem-psych +Psych is a YAML parser and emitter. Psych leverages +libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting +capabilities. In addition to wrapping libyaml, Psych also knows how to +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} +Requires: rubygem(io-console) +Provides: rubygem(bundler) = %{version}-%{release} +# https://github.com/bundler/bundler/issues/3647 +Provides: bundled(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-thor) = %{bundler_thor_version} +BuildArch: noarch + +%description -n rubygem-bundler +Bundler manages an application's dependencies through its entire life, across +many machines, systematically and repeatably. + + +%package -n rubygem-racc +Summary: Racc is a LALR(1) parser generator +Version: %{racc_version} +License: MIT +Requires: ruby(release) +Requires: ruby(rubygems) >= %{rubygems_version} +Provides: rubygem(racc) = %{version}-%{release} + +%description -n rubygem-racc +Racc is a LALR(1) parser generator. It is written in Ruby itself, and +generates Ruby program. + + +# Bundled gems +# +# These are regular packages, which might be installed just optionally. Users +# should list them among their dependencies (in Gemfile). + %package -n rubygem-minitest Summary: Minitest provides a complete suite of testing facilities Version: %{minitest_version} @@ -409,19 +469,6 @@ minitest/pride shows pride in testing and adds coloring to your test output. -%package -n rubygem-openssl -Summary: OpenSSL provides SSL, TLS and general purpose cryptography -Version: %{openssl_version} -License: Ruby or BSD -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(openssl) = %{version}-%{release} - -%description -n rubygem-openssl -OpenSSL provides SSL, TLS and general purpose cryptography. It wraps the -OpenSSL library. - - %package -n rubygem-power_assert Summary: Power Assert for Ruby Version: %{power_assert_version} @@ -437,19 +484,19 @@ It is useful for testing, providing which value wasn't correct when the condition is not satisfied. -%package -n rubygem-psych -Summary: A libyaml wrapper for Ruby -Version: %{psych_version} +%package -n rubygem-rake +Summary: Ruby based make-like utility +Version: %{rake_version} License: MIT Requires: ruby(release) Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(psych) = %{version}-%{release} +Provides: rake = %{version}-%{release} +Provides: rubygem(rake) = %{version}-%{release} +BuildArch: noarch -%description -n rubygem-psych -Psych is a YAML parser and emitter. Psych leverages -libyaml[http://pyyaml.org/wiki/LibYAML] for its YAML parsing and emitting -capabilities. In addition to wrapping libyaml, Psych also knows how to -serialize and de-serialize most Ruby objects to and from the YAML format. +%description -n rubygem-rake +Rake is a Make-like program implemented in Ruby. Tasks and dependencies are +specified in standard Ruby syntax. %package -n rubygem-net-telnet @@ -504,40 +551,6 @@ XMLRPC is a lightweight protocol that enables remote procedure calls over HTTP. -%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} -Requires: rubygem(io-console) -Provides: rubygem(bundler) = %{version}-%{release} -# https://github.com/bundler/bundler/issues/3647 -Provides: bundled(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-thor) = %{bundler_thor_version} -BuildArch: noarch - -%description -n rubygem-bundler -Bundler manages an application's dependencies through its entire life, across -many machines, systematically and repeatably. - - -%package -n rubygem-racc -Summary: Racc is a LALR(1) parser generator -Version: %{racc_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(racc) = %{version}-%{release} - -%description -n rubygem-racc -Racc is a LALR(1) parser generator. It is written in Ruby itself, and -generates Ruby program. - - %prep %setup -q -n %{ruby_archive} @@ -1120,12 +1133,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_rpmconfigdir}/rubygems.prov %{_rpmconfigdir}/rubygems.con -%files -n rubygem-rake -%{_bindir}/rake -%{gem_dir}/gems/rake-%{rake_version} -%{gem_dir}/specifications/rake-%{rake_version}.gemspec -%{_mandir}/man1/rake.1* - %files -n rubygem-irb %{_bindir}/irb %{ruby_libdir}/irb* @@ -1172,11 +1179,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/json-%{json_version} %{gem_dir}/specifications/json-%{json_version}.gemspec -%files -n rubygem-minitest -%{gem_dir}/gems/minitest-%{minitest_version} -%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* -%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec - %files -n rubygem-openssl %{ruby_libdir}/openssl %{ruby_libdir}/openssl.rb @@ -1185,11 +1187,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/openssl-%{openssl_version} %{gem_dir}/specifications/openssl-%{openssl_version}.gemspec -%files -n rubygem-power_assert -%{gem_dir}/gems/power_assert-%{power_assert_version} -%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* -%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec - %files -n rubygem-psych %{ruby_libdir}/psych %{ruby_libdir}/psych.rb @@ -1198,11 +1195,43 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/psych-%{psych_version} %{gem_dir}/specifications/psych-%{psych_version}.gemspec +%files -n rubygem-bundler +%{_bindir}/bundle +%{_bindir}/bundler +%{gem_dir}/gems/bundler-%{bundler_version} +%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec +%{_mandir}/man1/bundle*.1* +%{_mandir}/man5/gemfile.5* + +%files -n rubygem-racc +%{ruby_libdir}/racc* +%{ruby_libarchdir}/racc +%{_bindir}/racc +%{_libdir}/gems/%{name}/racc-%{racc_version} +%{gem_dir}/gems/racc-%{racc_version} +%{gem_dir}/specifications/racc-%{racc_version}.gemspec + +%files -n rubygem-minitest +%{gem_dir}/gems/minitest-%{minitest_version} +%exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* +%{gem_dir}/specifications/minitest-%{minitest_version}.gemspec + %files -n rubygem-net-telnet %{gem_dir}/gems/net-telnet-%{net_telnet_version} %exclude %{gem_dir}/gems/net-telnet-%{net_telnet_version}/.* %{gem_dir}/specifications/net-telnet-%{net_telnet_version}.gemspec +%files -n rubygem-power_assert +%{gem_dir}/gems/power_assert-%{power_assert_version} +%exclude %{gem_dir}/gems/power_assert-%{power_assert_version}/.* +%{gem_dir}/specifications/power_assert-%{power_assert_version}.gemspec + +%files -n rubygem-rake +%{_bindir}/rake +%{gem_dir}/gems/rake-%{rake_version} +%{gem_dir}/specifications/rake-%{rake_version}.gemspec +%{_mandir}/man1/rake.1* + %files -n rubygem-test-unit %{gem_dir}/gems/test-unit-%{test_unit_version} %{gem_dir}/specifications/test-unit-%{test_unit_version}.gemspec @@ -1219,21 +1248,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/xmlrpc-%{xmlrpc_version}/xmlrpc.gemspec %{gem_dir}/specifications/xmlrpc-%{xmlrpc_version}.gemspec -%files -n rubygem-bundler -%{_bindir}/bundle -%{_bindir}/bundler -%{gem_dir}/gems/bundler-%{bundler_version} -%{gem_dir}/specifications/bundler-%{bundler_version}.gemspec -%{_mandir}/man1/bundle*.1* -%{_mandir}/man5/gemfile.5* - -%files -n rubygem-racc -%{ruby_libdir}/racc* -%{ruby_libarchdir}/racc -%{_bindir}/racc -%{_libdir}/gems/%{name}/racc-%{racc_version} -%{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/racc-%{racc_version}.gemspec %changelog * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 From 14ec8663efadada1fc0a8e59ec44f45b0ee76f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 16 Mar 2020 18:56:03 +0100 Subject: [PATCH 04/21] Properly own BigDecimal files. --- ruby.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 72b5d15..9012325 100644 --- a/ruby.spec +++ b/ruby.spec @@ -922,6 +922,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # Platform independent libraries. %dir %{ruby_libdir} %{ruby_libdir}/*.rb +%exclude %{ruby_libdir}/bigdecimal.rb %exclude %{ruby_libdir}/irb.rb %exclude %{ruby_libdir}/json.rb %exclude %{ruby_libdir}/openssl.rb @@ -1154,7 +1155,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_datadir}/ri %files -n rubygem-bigdecimal -%{ruby_libdir}/bigdecimal +%{ruby_libdir}/bigdecimal* %{ruby_libarchdir}/bigdecimal* %{_libdir}/gems/%{name}/bigdecimal-%{bigdecimal_version} %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} From 4de99c92efdcae9ad90487dd551d7f6bf7b8400f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 19 Mar 2020 15:34:39 +0100 Subject: [PATCH 05/21] Be more strict about StdLib content. --- ruby.spec | 98 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 66 insertions(+), 32 deletions(-) diff --git a/ruby.spec b/ruby.spec index 9012325..cfe9474 100644 --- a/ruby.spec +++ b/ruby.spec @@ -921,43 +921,77 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" # List all these files explicitly to prevent surprises # Platform independent libraries. %dir %{ruby_libdir} -%{ruby_libdir}/*.rb -%exclude %{ruby_libdir}/bigdecimal.rb -%exclude %{ruby_libdir}/irb.rb -%exclude %{ruby_libdir}/json.rb -%exclude %{ruby_libdir}/openssl.rb -%exclude %{ruby_libdir}/psych.rb -%exclude %{ruby_libdir}/racc.rb -%{ruby_libdir}/benchmark -%{ruby_libdir}/cgi -%{ruby_libdir}/csv -%{ruby_libdir}/delegate -%{ruby_libdir}/digest -%{ruby_libdir}/drb -%{ruby_libdir}/fiddle -%{ruby_libdir}/forwardable -%{ruby_libdir}/getoptlong -%{ruby_libdir}/logger -%{ruby_libdir}/matrix +%exclude %{ruby_libdir}/bigdecimal* +%exclude %{ruby_libdir}/irb* +%exclude %{ruby_libdir}/json* +%exclude %{ruby_libdir}/openssl* +%exclude %{ruby_libdir}/psych* +%exclude %{ruby_libdir}/racc* +%{ruby_libdir}/abbrev.rb +%{ruby_libdir}/base64.rb +%{ruby_libdir}/benchmark* +%{ruby_libdir}/cgi* +%{ruby_libdir}/coverage.rb +%{ruby_libdir}/csv* +%{ruby_libdir}/date.rb +%{ruby_libdir}/debug.rb +%{ruby_libdir}/delegate* +%{ruby_libdir}/digest* +%{ruby_libdir}/drb* +%{ruby_libdir}/English.rb +%{ruby_libdir}/erb.rb +%{ruby_libdir}/expect.rb +%{ruby_libdir}/fiddle* +%{ruby_libdir}/fileutils.rb +%{ruby_libdir}/find.rb +%{ruby_libdir}/forwardable* +%{ruby_libdir}/getoptlong* +%{ruby_libdir}/io +%{ruby_libdir}/ipaddr.rb +%{ruby_libdir}/kconv.rb +%{ruby_libdir}/logger* +%{ruby_libdir}/matrix* +%{ruby_libdir}/mkmf.rb +%{ruby_libdir}/monitor.rb +%{ruby_libdir}/mutex_m.rb %{ruby_libdir}/net -%{ruby_libdir}/observer -%{ruby_libdir}/open3 -%{ruby_libdir}/optparse -%{ruby_libdir}/ostruct -%{ruby_libdir}/pstore -%{ruby_libdir}/reline +%{ruby_libdir}/observer* +%{ruby_libdir}/open-uri.rb +%{ruby_libdir}/open3* +%{ruby_libdir}/optionparser.rb +%{ruby_libdir}/optparse* +%{ruby_libdir}/ostruct* +%{ruby_libdir}/pathname.rb +%{ruby_libdir}/pp.rb +%{ruby_libdir}/prettyprint.rb +%{ruby_libdir}/prime.rb +%{ruby_libdir}/pstore* +%{ruby_libdir}/readline.rb +%{ruby_libdir}/reline* +%{ruby_libdir}/resolv.rb +%{ruby_libdir}/resolv-replace.rb %{ruby_libdir}/rexml %{ruby_libdir}/rinda -%{ruby_libdir}/ripper -%{ruby_libdir}/rss -%{ruby_libdir}/singleton +%{ruby_libdir}/ripper* +%{ruby_libdir}/rss* +%{ruby_libdir}/securerandom.rb +%{ruby_libdir}/set.rb +%{ruby_libdir}/shellwords.rb +%{ruby_libdir}/singleton* +%{ruby_libdir}/socket.rb %{ruby_libdir}/syslog -%{ruby_libdir}/timeout -%{ruby_libdir}/tracer +%{ruby_libdir}/tempfile.rb +%{ruby_libdir}/timeout* +%{ruby_libdir}/time.rb +%{ruby_libdir}/tmpdir.rb +%{ruby_libdir}/tracer* +%{ruby_libdir}/tsort.rb %{ruby_libdir}/unicode_normalize -%{ruby_libdir}/uri -%{ruby_libdir}/webrick -%{ruby_libdir}/yaml +%{ruby_libdir}/un.rb +%{ruby_libdir}/uri* +%{ruby_libdir}/weakref* +%{ruby_libdir}/webrick* +%{ruby_libdir}/yaml* # Platform specific libraries. %{_libdir}/libruby.so.* From a377b59536b3783edb0202cffdd80d1fd6a68462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 23 Mar 2020 18:38:59 +0100 Subject: [PATCH 06/21] Add ruby-default-gems subpackage shipping all extra default gem content. --- ruby.spec | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/ruby.spec b/ruby.spec index cfe9474..6f31b6f 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 128 +%global release 129 %{!?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 @@ -267,6 +267,17 @@ Macros and development tools for packaging RubyGems. # These packages are part of Ruby StdLib and are expected to be loadable even # with disabled RubyGems. +%package default-gems +Summary: Default gems which are part of Ruby StdLib. +Requires: ruby(rubygems) >= %{rubygems_version} +Supplements: ruby(rubygems) +BuildArch: noarch + +%description default-gems +The .gemspec files and executables of default gems, which are part of Ruby +StdLib. + + %package -n rubygem-irb Summary: The Interactive Ruby Version: %{irb_version} @@ -1120,7 +1131,14 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{gem_dir}/cache/* -# TODO: Gemify these libraries +%files -n rubygems-devel +%{_rpmconfigdir}/macros.d/macros.rubygems +%{_rpmconfigdir}/fileattrs/rubygems.attr +%{_rpmconfigdir}/rubygems.req +%{_rpmconfigdir}/rubygems.prov +%{_rpmconfigdir}/rubygems.con + +%files default-gems %{gem_dir}/specifications/default/benchmark-0.1.0.gemspec %{gem_dir}/specifications/default/cgi-0.1.0.gemspec %{gem_dir}/specifications/default/csv-3.1.2.gemspec @@ -1161,12 +1179,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/yaml-0.1.0.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec -%files -n rubygems-devel -%{_rpmconfigdir}/macros.d/macros.rubygems -%{_rpmconfigdir}/fileattrs/rubygems.attr -%{_rpmconfigdir}/rubygems.req -%{_rpmconfigdir}/rubygems.prov -%{_rpmconfigdir}/rubygems.con %files -n rubygem-irb %{_bindir}/irb @@ -1285,6 +1297,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 +- Add ruby-default-gems subpackage shipping all extra default gem content. + * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 - Upgrade to Ruby 2.7.1. From 7115ab3d1d5fad2c4368fd402fc3a8d181e32a4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 30 Mar 2020 17:39:57 +0200 Subject: [PATCH 07/21] Bundle Racc into StdLib. It is increasingly hard to maintain default gems extracted from StdLib into gems. If they are overlapped by independent versions, it is even harder, because the overlapped versions would need to provide symlinks back to StdLib \[[1]\]. On top of that, the layout differs from upstream, where default gems are always available. Because these small nuances can make hard discoverable race conditions during Ruby application loading and runtime, it will be best to keep the default gems bundled. [1]: https://src.fedoraproject.org/rpms/rubygem-racc/pull-request/1 --- ruby.spec | 67 +++++++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/ruby.spec b/ruby.spec index 6f31b6f..eeefe4d 100644 --- a/ruby.spec +++ b/ruby.spec @@ -159,7 +159,6 @@ Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # https://bugs.ruby-lang.org/issues/16431 Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} -Recommends: rubygem(racc) >= %{racc_version} BuildRequires: autoconf BuildRequires: gdbm-devel @@ -215,6 +214,9 @@ Provides: bundled(ccan-check_type) Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) +# StdLib default gems. +Provides: bundled(rubygem-racc) = %{racc_version} + # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe # so lets obsolete it. This is not the best place, but we don't have # better, unless https://fedorahosted.org/fpc/ticket/645 provides some @@ -271,6 +273,8 @@ Macros and development tools for packaging RubyGems. Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) +# Obsoleted by Ruby 2.7 in F32 timeframe. +Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch %description default-gems @@ -438,19 +442,6 @@ Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably. -%package -n rubygem-racc -Summary: Racc is a LALR(1) parser generator -Version: %{racc_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(racc) = %{version}-%{release} - -%description -n rubygem-racc -Racc is a LALR(1) parser generator. It is written in Ruby itself, and -generates Ruby program. - - # Bundled gems # # These are regular packages, which might be installed just optionally. Users @@ -746,27 +737,6 @@ ln -s %{gem_dir}/gems/psych-%{psych_version}/lib/psych %{buildroot}%{ruby_libdir 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 -# These have wrong shebangs. Exclude them for now and let's see what upstream -# thinks about them. -# https://bugs.ruby-lang.org/issues/15982 -rm %{buildroot}%{_bindir}/{racc2y,y2racc} -rm %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} -mkdir -p %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib -mkdir -p %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version} -mv %{buildroot}%{ruby_libdir}/racc* %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib -mv %{buildroot}%{ruby_libarchdir}/racc/ %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/ -touch %{buildroot}%{_libdir}/gems/%{name}/racc-%{racc_version}/gem.build_complete -mv %{buildroot}%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{buildroot}%{gem_dir}/specifications -# This used to be directories when racc was integral part of StdLib => Keep -# them as directories and link everything in them to prevent directory => -# symlink conversion RPM issues. -mkdir -p %{buildroot}%{ruby_libdir}/racc -mkdir -p %{buildroot}%{ruby_libarchdir}/racc -find %{buildroot}%{gem_dir}/gems/racc-%{racc_version}/lib/racc -maxdepth 1 -type f -exec \ - sh -c 'ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc/`basename {}` %{buildroot}%{ruby_libdir}/racc' \; -ln -s %{gem_dir}/gems/racc-%{racc_version}/lib/racc.rb %{buildroot}%{ruby_libdir}/racc.rb -ln -s %{_libdir}/gems/%{name}/racc-%{racc_version}/racc/cparse.so %{buildroot}%{ruby_libarchdir}/racc/cparse.so - # Move the binary extensions into proper place (if no gem has binary extension, # the extensions directory might be empty). find %{buildroot}%{gem_dir}/extensions/*-%{_target_os}/%{ruby_version}/* -maxdepth 0 \ @@ -937,7 +907,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{ruby_libdir}/json* %exclude %{ruby_libdir}/openssl* %exclude %{ruby_libdir}/psych* -%exclude %{ruby_libdir}/racc* %{ruby_libdir}/abbrev.rb %{ruby_libdir}/base64.rb %{ruby_libdir}/benchmark* @@ -1108,6 +1077,11 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/syslog.so %{ruby_libarchdir}/zlib.so +# Default gems +%{ruby_libdir}/racc* +%dir %{ruby_libarchdir}/racc +%{ruby_libarchdir}/racc/cparse.so + %{?with_systemtap:%{tapset_root}} %files -n rubygems @@ -1179,6 +1153,18 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/yaml-0.1.0.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec +# 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 +# These have wrong shebangs. Exclude them for now and let's see what upstream +# thinks about them. +# https://bugs.ruby-lang.org/issues/15982 +%exclude %{_bindir}/{racc2y,y2racc} +%exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} +%{gem_dir}/gems/racc-%{racc_version} +%{gem_dir}/specifications/default/racc-1.4.16.gemspec %files -n rubygem-irb %{_bindir}/irb @@ -1250,14 +1236,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{_mandir}/man1/bundle*.1* %{_mandir}/man5/gemfile.5* -%files -n rubygem-racc -%{ruby_libdir}/racc* -%{ruby_libarchdir}/racc -%{_bindir}/racc -%{_libdir}/gems/%{name}/racc-%{racc_version} -%{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/racc-%{racc_version}.gemspec - %files -n rubygem-minitest %{gem_dir}/gems/minitest-%{minitest_version} %exclude %{gem_dir}/gems/minitest-%{minitest_version}/.* @@ -1299,6 +1277,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. +- Bundle Racc into StdLib. * Wed Apr 01 2020 Vít Ondruch - 2.7.1-128 - Upgrade to Ruby 2.7.1. From 56c4a588b44e97e6a3502316721d5004cce8b569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Apr 2020 18:12:32 +0200 Subject: [PATCH 08/21] Move Racc .gemspec to better place. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index eeefe4d..ecf2b20 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1137,6 +1137,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/ostruct-0.2.0.gemspec %{gem_dir}/specifications/default/prime-0.1.1.gemspec %{gem_dir}/specifications/default/pstore-0.1.0.gemspec +%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec %{gem_dir}/specifications/default/reline-0.1.3.gemspec @@ -1164,7 +1165,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %exclude %{_bindir}/{racc2y,y2racc} %exclude %{gem_dir}/gems/racc-%{racc_version}/bin/{racc2y,y2racc} %{gem_dir}/gems/racc-%{racc_version} -%{gem_dir}/specifications/default/racc-1.4.16.gemspec %files -n rubygem-irb %{_bindir}/irb From 24f5e64c17e2d669173a36d300a0cab7c4b6bc70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 8 Apr 2020 18:09:44 +0200 Subject: [PATCH 09/21] Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 --- ruby.spec | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/ruby.spec b/ruby.spec index ecf2b20..f212f2a 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 129 +%global release 130 %{!?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 @@ -157,7 +157,6 @@ Recommends: ruby(rubygems) >= %{rubygems_version} Recommends: rubygem(bigdecimal) >= %{bigdecimal_version} # Change this to requires, hopefully just as temporary measure. # https://bugs.ruby-lang.org/issues/16431 -Requires: rubygem(did_you_mean) >= %{did_you_mean_version} Recommends: rubygem(openssl) >= %{openssl_version} BuildRequires: autoconf @@ -215,6 +214,7 @@ Provides: bundled(ccan-container_of) Provides: bundled(ccan-list) # StdLib default gems. +Provides: bundled(rubygem-did_you_mean) = %{did_you_mean_version} Provides: bundled(rubygem-racc) = %{racc_version} # Tcl/Tk support was removed from stdlib in Ruby 2.4, i.e. F27 timeframe @@ -274,6 +274,7 @@ Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. +Obsoletes: rubygem-did_you_mean < %{did_you_mean_version}-%{release} Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch @@ -351,20 +352,6 @@ floating point arithmetic often introduces subtle errors because of the conversion between base 10 and base 2. -%package -n rubygem-did_you_mean -Summary: "Did you mean?" experience in Ruby -Version: %{did_you_mean_version} -License: MIT -Requires: ruby(release) -Requires: ruby(rubygems) >= %{rubygems_version} -Provides: rubygem(did_you_mean) = %{version}-%{release} -BuildArch: noarch - -%description -n rubygem-did_you_mean -"did you mean?" experience in Ruby: the error message will tell you the right -one when you misspelled something. - - %package -n rubygem-io-console Summary: IO/Console is a simple console utilizing library Version: %{io_console_version} @@ -692,11 +679,6 @@ mv %{buildroot}%{ruby_libdir}/bundler.rb %{buildroot}%{gem_dir}/gems/bundler-%{b 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_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{ruby_libdir}/did_you_mean.rb %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{ruby_libdir}/did_you_mean %{buildroot}%{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/lib -mv %{buildroot}%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{buildroot}%{gem_dir}/specifications - 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 @@ -1078,6 +1060,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{ruby_libarchdir}/zlib.so # Default gems +%{ruby_libdir}/did_you_mean* %{ruby_libdir}/racc* %dir %{ruby_libarchdir}/racc %{ruby_libarchdir}/racc/cparse.so @@ -1119,6 +1102,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/specifications/default/date-3.0.0.gemspec %{gem_dir}/specifications/default/dbm-1.1.0.gemspec %{gem_dir}/specifications/default/delegate-0.1.0.gemspec +%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec %{gem_dir}/specifications/default/etc-1.1.0.gemspec %{gem_dir}/specifications/default/fcntl-1.0.0.gemspec %{gem_dir}/specifications/default/fiddle-1.0.0.gemspec @@ -1193,11 +1177,6 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %{gem_dir}/gems/bigdecimal-%{bigdecimal_version} %{gem_dir}/specifications/bigdecimal-%{bigdecimal_version}.gemspec -%files -n rubygem-did_you_mean -%{gem_dir}/gems/did_you_mean-%{did_you_mean_version} -%exclude %{gem_dir}/gems/did_you_mean-%{did_you_mean_version}/.* -%{gem_dir}/specifications/did_you_mean-%{did_you_mean_version}.gemspec - %files -n rubygem-io-console %{ruby_libdir}/io %{ruby_libarchdir}/io/console.so @@ -1275,6 +1254,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 +- Bundle did_you_mean into StdLib. + Resolves: rhbz#1817178 + * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. - Bundle Racc into StdLib. From c961fa70fe022495cb5dcc55524b12a1caf72911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:07:11 +0200 Subject: [PATCH 10/21] Hardcode obsolete version for rubygem-did_you_mean. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index f212f2a..9bbfcfd 100644 --- a/ruby.spec +++ b/ruby.spec @@ -274,7 +274,7 @@ Summary: Default gems which are part of Ruby StdLib. Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. -Obsoletes: rubygem-did_you_mean < %{did_you_mean_version}-%{release} +Obsoletes: rubygem-did_you_mean < 1.4.0-130 Obsoletes: rubygem-racc < %{racc_version}-%{release} BuildArch: noarch From 84feecb70c5e10f71601f91ed9a2199a2e1d94f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:08:21 +0200 Subject: [PATCH 11/21] Hardcode obsolete version for rubygem-racc. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 9bbfcfd..0801542 100644 --- a/ruby.spec +++ b/ruby.spec @@ -275,7 +275,7 @@ Requires: ruby(rubygems) >= %{rubygems_version} Supplements: ruby(rubygems) # Obsoleted by Ruby 2.7 in F32 timeframe. Obsoletes: rubygem-did_you_mean < 1.4.0-130 -Obsoletes: rubygem-racc < %{racc_version}-%{release} +Obsoletes: rubygem-racc < 1.4.16-130 BuildArch: noarch %description default-gems From f75c1691072016ca04da9e7616bf0098a29490a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Wed, 15 Apr 2020 18:45:29 +0200 Subject: [PATCH 12/21] Prevent issues with openssl loading when RubyGems are disabled. --- ...move-unneeded-gem-require-for-ipaddr.patch | 22 +++++++++++++++++++ ruby.spec | 5 +++++ 2 files changed, 27 insertions(+) create mode 100644 ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch diff --git a/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch new file mode 100644 index 0000000..c6923ee --- /dev/null +++ b/ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch @@ -0,0 +1,22 @@ +From 0689147586c6cb56b91bf0f368890f19d630ece1 Mon Sep 17 00:00:00 2001 +From: nobletrout +Date: Tue, 5 Feb 2019 08:14:02 -0500 +Subject: [PATCH] remove unneeded gem require for ipaddr + +ipaddr is a builtin class for ruby, that is occasionally merged. If the version isn't specified by the runtime dependency, then it will default to needing the latest gem rather than the version that ships with that version of ruby. That will lead to all kinds of potential dependency fails that are most likely unneeded since this gem already requires ruby > 2.3.0 +--- + ext/openssl/openssl.gemspec | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec +index 7c17cd54..f721f247 100644 +--- a/ext/openssl/openssl.gemspec ++++ b/ext/openssl/openssl.gemspec +@@ -21,7 +21,6 @@ Gem::Specification.new do |spec| + s.rubygems_version = "3.0.0.beta1" + s.summary = "OpenSSL provides SSL, TLS and general purpose cryptography." + +- s.add_runtime_dependency("ipaddr", [">= 0"]) + s.add_development_dependency("rake", [">= 0"]) + s.add_development_dependency("rake-compiler", [">= 0"]) + s.add_development_dependency("test-unit", ["~> 3.0"]) diff --git a/ruby.spec b/ruby.spec index 0801542..41d4538 100644 --- a/ruby.spec +++ b/ruby.spec @@ -146,6 +146,9 @@ Patch9: ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch # Revert commit which breaks bundled net-http-persistent version check. # https://github.com/drbrain/net-http-persistent/pull/109 Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch +# Prevent issues with openssl loading when RubyGems are disabled. +# https://github.com/ruby/openssl/pull/242 +Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -556,6 +559,7 @@ rm -rf ext/fiddle/libffi* %patch6 -p1 %patch9 -p1 %patch10 -p1 +%patch13 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -1257,6 +1261,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" * Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 - Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 +- Prevent issues with openssl loading when RubyGems are disabled. * Thu Apr 02 2020 Vít Ondruch - 2.7.1-129 - Add ruby-default-gems subpackage shipping all extra default gem content. From 2bfb0d99c862640633bf77ee53e8cb859b7c5e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 16 Apr 2020 10:35:30 +0200 Subject: [PATCH 13/21] Fix changelog identation. --- ruby.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 41d4538..d5cfb10 100644 --- a/ruby.spec +++ b/ruby.spec @@ -2111,7 +2111,7 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" - Disable the static library building. * Tue Dec 04 2007 Release Engineering - 1.8.6.111-2 - - Rebuild for openssl bump +- Rebuild for openssl bump * Wed Oct 31 2007 Akira TAGOH - Fix the dead link. From 25f077ce1409f32b73145ef4c1f40cc2bd5307d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Fri, 15 May 2020 17:49:43 +0200 Subject: [PATCH 14/21] Relax rubygems-devel dependency on rubygems. Independent rubygems package used to provide rubygems-devel subpackages, but this is going to change to ease the independent rubygems package maitenance and therefore ruby package will become the ultimate source of rubygems-devel package. --- ruby.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ruby.spec b/ruby.spec index d5cfb10..78ee1d3 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 130 +%global release 131 %{!?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 @@ -257,7 +257,7 @@ libraries. Summary: Macros and development tools for packaging RubyGems Version: %{rubygems_version} License: Ruby or MIT -Requires: ruby(rubygems) = %{version}-%{release} +Requires: ruby(rubygems) >= %{version}-%{release} # Needed for RDoc documentation format generation. Requires: rubygem(json) >= %{json_version} Requires: rubygem(rdoc) >= %{rdoc_version} @@ -1258,6 +1258,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Fri May 15 2020 Vít Ondruch - 2.7.1-131 +- Relax rubygems-devel dependency on rubygems. + * Wed Apr 08 2020 Vít Ondruch - 2.7.1-130 - Bundle did_you_mean into StdLib. Resolves: rhbz#1817178 From bd311047ff961480e693181d75e09290ccc8de07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Thu, 28 May 2020 14:08:38 +0200 Subject: [PATCH 15/21] Fix `require` behavior allowing to load libraries multiple times. Resolves: rhbz#1835836 --- ruby.spec | 22 +- rubygems-3.1.3-Fix-I-require-priority.patch | 167 +++++++++ ...nd-performance-regression-in-require.patch | 324 ++++++++++++++++++ rubygems-3.1.3-Improve-require.patch | 92 +++++ ...ude-empty-suffix-from-I-require-loop.patch | 29 ++ 5 files changed, 633 insertions(+), 1 deletion(-) create mode 100644 rubygems-3.1.3-Fix-I-require-priority.patch create mode 100644 rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch create mode 100644 rubygems-3.1.3-Improve-require.patch create mode 100644 rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch diff --git a/ruby.spec b/ruby.spec index 78ee1d3..0063e73 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 131 +%global release 132 %{!?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 @@ -149,6 +149,18 @@ Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch # Prevent issues with openssl loading when RubyGems are disabled. # https://github.com/ruby/openssl/pull/242 Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch +# Fix `require` behavior allowing to load libraries multiple times. +# https://github.com/rubygems/rubygems/issues/3647 +# Because there were multiple fixes in `Kernel.require` in recent months, +# pickup all the changes one by one instead of squashing them. +# https://github.com/rubygems/rubygems/pull/3124 +Patch15: rubygems-3.1.3-Fix-I-require-priority.patch +# https://github.com/rubygems/rubygems/pull/3133 +Patch16: rubygems-3.1.3-Improve-require.patch +# https://github.com/rubygems/rubygems/pull/3153 +Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch +# https://github.com/rubygems/rubygems/pull/3639 +Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -560,6 +572,10 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch13 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -1258,6 +1274,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Jun 24 2020 Vít Ondruch - 2.7.1-132 +- Fix `require` behavior allowing to load libraries multiple times. + Resolves: rhbz#1835836 + * Fri May 15 2020 Vít Ondruch - 2.7.1-131 - Relax rubygems-devel dependency on rubygems. diff --git a/rubygems-3.1.3-Fix-I-require-priority.patch b/rubygems-3.1.3-Fix-I-require-priority.patch new file mode 100644 index 0000000..6ed2f76 --- /dev/null +++ b/rubygems-3.1.3-Fix-I-require-priority.patch @@ -0,0 +1,167 @@ +From 912d141a351053d0f6d915b5e7807f6a8f4c0631 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 4 Feb 2020 17:25:56 +0100 +Subject: [PATCH 1/2] Make non "test_" method private + +--- + test/rubygems/test_require.rb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index aa2675af5d..d618a93473 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -532,6 +532,8 @@ def test_require_bundler_with_bundler_version + end + end + ++ private ++ + def silence_warnings + old_verbose, $VERBOSE = $VERBOSE, false + yield + +From b3944384f44b869985051863d8b05b545d09a585 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 4 Feb 2020 17:26:28 +0100 +Subject: [PATCH 2/2] Fix require issue with file extension priority + +If `require "a"` is run when two folders have been specified in the -I +option including a "a.rb" file and a "a.so" file respectively, the ruby +spec says that the ".rb" file should always be preferred. However, the +logic we added in https://github.com/rubygems/rubygems/commit/6b81076d9 +to make the -I option always beat default gems does not respect this +spec, creating a difference from the original ruby-core's require. + +[the ruby spec says]: https://github.com/ruby/spec/blob/d80a6e2b221d4f17a8cadcac75ef950c59cba901/core/kernel/shared/require.rb#L234-L246 +--- + lib/rubygems/core_ext/kernel_require.rb | 28 +++++------ + test/rubygems/test_require.rb | 62 +++++++++++++++++++++++++ + 2 files changed, 74 insertions(+), 16 deletions(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 60f4d18712..369f2c743e 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,18 +43,18 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| +- safe_lp = lp.dup.tap(&Gem::UNTAINT) +- begin +- if File.symlink? safe_lp # for backward compatibility +- next ++ Gem.suffixes.each do |s| ++ $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| ++ safe_lp = lp.dup.tap(&Gem::UNTAINT) ++ begin ++ if File.symlink? safe_lp # for backward compatibility ++ next ++ end ++ rescue SecurityError ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ raise + end +- rescue SecurityError +- RUBYGEMS_ACTIVATION_MONITOR.exit +- raise +- end + +- Gem.suffixes.each do |s| + full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) + if File.file?(full_path) + rp = full_path +@@ -67,12 +67,8 @@ def require(path) + end + + if resolved_path +- begin +- RUBYGEMS_ACTIVATION_MONITOR.exit +- return gem_original_require(resolved_path) +- rescue LoadError +- RUBYGEMS_ACTIVATION_MONITOR.enter +- end ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ return gem_original_require(resolved_path) + end + + if spec = Gem.find_unresolved_default_spec(path) +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index d618a93473..7cffbfa7fe 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -120,6 +120,24 @@ def test_dash_i_beats_default_gems + Object.send :remove_const, :HELLO if Object.const_defined? :HELLO + end + ++ def test_dash_i_respects_default_library_extension_priority ++ skip "extensions don't quite work on jruby" if Gem.java_platform? ++ ++ dash_i_ext_arg = util_install_extension_file('a') ++ dash_i_lib_arg = util_install_ruby_file('a') ++ ++ lp = $LOAD_PATH.dup ++ ++ begin ++ $LOAD_PATH.unshift dash_i_lib_arg ++ $LOAD_PATH.unshift dash_i_ext_arg ++ assert_require 'a' ++ assert_match(/a\.rb$/, $LOADED_FEATURES.last) ++ ensure ++ $LOAD_PATH.replace lp ++ end ++ end ++ + def test_concurrent_require + Object.const_set :FILE_ENTERED_LATCH, Latch.new(2) + Object.const_set :FILE_EXIT_LATCH, Latch.new(1) +@@ -541,4 +559,48 @@ def silence_warnings + $VERBOSE = old_verbose + end + ++ def util_install_extension_file(name) ++ spec = quick_gem name ++ util_build_gem spec ++ ++ spec.extensions << "extconf.rb" ++ write_file File.join(@tempdir, "extconf.rb") do |io| ++ io.write <<-RUBY ++ require "mkmf" ++ create_makefile("#{name}") ++ RUBY ++ end ++ ++ write_file File.join(@tempdir, "#{name}.c") do |io| ++ io.write <<-C ++ #include ++ void Init_#{name}() { } ++ C ++ end ++ ++ spec.files += ["extconf.rb", "#{name}.c"] ++ ++ so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") ++ refute_path_exists so ++ ++ path = Gem::Package.build spec ++ installer = Gem::Installer.at path ++ installer.install ++ assert_path_exists so ++ ++ spec.gem_dir ++ end ++ ++ def util_install_ruby_file(name) ++ dir_lib = Dir.mktmpdir("test_require_lib", @tempdir) ++ dash_i_lib_arg = File.join dir_lib ++ ++ a_rb = File.join dash_i_lib_arg, "#{name}.rb" ++ ++ FileUtils.mkdir_p File.dirname a_rb ++ File.open(a_rb, 'w') { |f| f.write "# #{name}.rb" } ++ ++ dash_i_lib_arg ++ end ++ + end diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch new file mode 100644 index 0000000..b1438dd --- /dev/null +++ b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch @@ -0,0 +1,324 @@ +From 00d98eb8a3245fb93a475ecbbbc4c7ec7e6704cd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:00:00 +0200 +Subject: [PATCH 1/5] Fix performance regression in `require` + +Our check for `-I` paths should not go through all activated gems. +--- + lib/rubygems.rb | 10 ++++++++++ + lib/rubygems/core_ext/kernel_require.rb | 2 +- + lib/rubygems/test_case.rb | 1 + + test/rubygems/test_require.rb | 11 +++++++++++ + 4 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index 843cb49e4a..d1a9a1c7e1 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -660,10 +660,20 @@ def self.load_path_insert_index + index + end + ++ ## ++ # The number of paths in the `$LOAD_PATH` from activated gems. Used to ++ # prioritize `-I` and `ENV['RUBYLIB`]` entries during `require`. ++ ++ def self.activated_gem_paths ++ @activated_gem_paths ||= 0 ++ end ++ + ## + # Add a list of paths to the $LOAD_PATH at the proper place. + + def self.add_to_load_path(*paths) ++ @activated_gem_paths = activated_gem_paths + paths.size ++ + insert_index = load_path_insert_index + + if insert_index +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index ed24111bd5..7625ce1bee 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -47,7 +47,7 @@ def require(path) + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + +- $LOAD_PATH[0...load_path_insert_index].each do |lp| ++ $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility +diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb +index a05a2898d1..53dd495aef 100644 +--- a/lib/rubygems/test_case.rb ++++ b/lib/rubygems/test_case.rb +@@ -379,6 +379,7 @@ def setup + Gem::Security.reset + + Gem.loaded_specs.clear ++ Gem.instance_variable_set(:@activated_gem_paths, 0) + Gem.clear_default_specs + Bundler.reset! + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index f36892f8cc..9f2fe3439a 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -382,6 +382,17 @@ def test_default_gem_require_activates_just_once + assert_equal 0, times_called + end + ++ def test_second_gem_require_does_not_resolve_path_manually_before_going_through_standard_require ++ a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb" ++ install_gem a1 ++ ++ assert_require "test_gem_require_a" ++ ++ stub(:gem_original_require, ->(path) { assert_equal "test_gem_require_a", path }) do ++ require "test_gem_require_a" ++ end ++ end ++ + def test_realworld_default_gem + testing_ruby_repo = !ENV["GEM_COMMAND"].nil? + skip "this test can't work under ruby-core setup" if testing_ruby_repo || java_platform? + +From ae95885dff6189c5ac59bbdf685cb4ec4751fdef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:08:19 +0200 +Subject: [PATCH 2/5] Refactor `Gem.load_path_insert_index` + +--- + lib/rubygems.rb | 13 +++---------- + lib/rubygems/core_ext/kernel_require.rb | 5 +---- + 2 files changed, 4 insertions(+), 14 deletions(-) + +diff --git a/lib/rubygems.rb b/lib/rubygems.rb +index d1a9a1c7e1..ca80326459 100644 +--- a/lib/rubygems.rb ++++ b/lib/rubygems.rb +@@ -657,7 +657,7 @@ def self.load_path_insert_index + + index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] + +- index ++ index || 0 + end + + ## +@@ -674,15 +674,8 @@ def self.activated_gem_paths + def self.add_to_load_path(*paths) + @activated_gem_paths = activated_gem_paths + paths.size + +- insert_index = load_path_insert_index +- +- if insert_index +- # gem directories must come after -I and ENV['RUBYLIB'] +- $LOAD_PATH.insert(insert_index, *paths) +- else +- # we are probably testing in core, -I and RUBYLIB don't apply +- $LOAD_PATH.unshift(*paths) +- end ++ # gem directories must come after -I and ENV['RUBYLIB'] ++ $LOAD_PATH.insert(Gem.load_path_insert_index, *paths) + end + + @yaml_loaded = false +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 7625ce1bee..decf4829f1 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -44,10 +44,7 @@ def require(path) + resolved_path = begin + rp = nil + Gem.suffixes.each do |s| +- load_path_insert_index = Gem.load_path_insert_index +- break unless load_path_insert_index +- +- $LOAD_PATH[0...load_path_insert_index - Gem.activated_gem_paths].each do |lp| ++ $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From da1492e9d7b28d068fbfbb0ba1cafcc516681567 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 19 May 2020 14:32:12 +0200 +Subject: [PATCH 3/5] Extract a local outside the loop + +--- + lib/rubygems/core_ext/kernel_require.rb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index decf4829f1..6a7faaf2d1 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,8 +43,9 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil ++ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths + Gem.suffixes.each do |s| +- $LOAD_PATH[0...Gem.load_path_insert_index - Gem.activated_gem_paths].each do |lp| ++ $LOAD_PATH[0...load_path_check_index].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From 22ad5717c38feda2375b53628d15ae3db2195684 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Thu, 21 May 2020 15:20:57 +0200 +Subject: [PATCH 4/5] Fix `$LOADED_FEATURES` cache sometimes not respected + +In the cases where the initial manually `-I` path resolution succeeded, +we were passing a full path to the original require effectively skipping +the `$LOADED_FEATURES` cache. With this change, we _only_ do the +resolution when a matching requirable path is found in a default gem. In +that case, we skip activation of the default gem if we detect that the +required file will be picked up for a `-I` path. +--- + lib/rubygems/core_ext/kernel_require.rb | 53 +++++++++++-------------- + test/rubygems/test_require.rb | 29 ++++++++++++++ + 2 files changed, 53 insertions(+), 29 deletions(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 6a7faaf2d1..81e37b98bf 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -39,46 +39,41 @@ def require(path) + + path = path.to_path if path.respond_to? :to_path + +- # Ensure -I beats a default gem +- # https://github.com/rubygems/rubygems/pull/1868 +- resolved_path = begin +- rp = nil +- load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths +- Gem.suffixes.each do |s| +- $LOAD_PATH[0...load_path_check_index].each do |lp| +- safe_lp = lp.dup.tap(&Gem::UNTAINT) +- begin +- if File.symlink? safe_lp # for backward compatibility +- next ++ if spec = Gem.find_unresolved_default_spec(path) ++ # Ensure -I beats a default gem ++ # https://github.com/rubygems/rubygems/pull/1868 ++ resolved_path = begin ++ rp = nil ++ load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths ++ Gem.suffixes.each do |s| ++ $LOAD_PATH[0...load_path_check_index].each do |lp| ++ safe_lp = lp.dup.tap(&Gem::UNTAINT) ++ begin ++ if File.symlink? safe_lp # for backward compatibility ++ next ++ end ++ rescue SecurityError ++ RUBYGEMS_ACTIVATION_MONITOR.exit ++ raise + end +- rescue SecurityError +- RUBYGEMS_ACTIVATION_MONITOR.exit +- raise +- end + +- full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) +- if File.file?(full_path) +- rp = full_path +- break ++ full_path = File.expand_path(File.join(safe_lp, "#{path}#{s}")) ++ if File.file?(full_path) ++ rp = full_path ++ break ++ end + end ++ break if rp + end +- break if rp ++ rp + end +- rp +- end + +- if resolved_path +- RUBYGEMS_ACTIVATION_MONITOR.exit +- return gem_original_require(resolved_path) +- end +- +- if spec = Gem.find_unresolved_default_spec(path) + begin + Kernel.send(:gem, spec.name, Gem::Requirement.default_prerelease) + rescue Exception + RUBYGEMS_ACTIVATION_MONITOR.exit + raise +- end ++ end unless resolved_path + end + + # If there are no unresolved deps, then we can use just try +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index 9f2fe3439a..2b11e26dfe 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -45,6 +45,35 @@ def refute_require(path) + refute require(path), "'#{path}' was not yet required" + end + ++ def test_respect_loaded_features_caching_like_standard_require ++ dir = Dir.mktmpdir("test_require", @tempdir) ++ ++ lp1 = File.join dir, 'foo1' ++ foo1 = File.join lp1, 'foo.rb' ++ ++ FileUtils.mkdir_p lp1 ++ File.open(foo1, 'w') { |f| f.write "class Object; HELLO = 'foo1' end" } ++ ++ lp = $LOAD_PATH.dup ++ ++ $LOAD_PATH.unshift lp1 ++ assert_require 'foo' ++ assert_equal "foo1", ::Object::HELLO ++ ++ lp2 = File.join dir, 'foo2' ++ foo2 = File.join lp2, 'foo.rb' ++ ++ FileUtils.mkdir_p lp2 ++ File.open(foo2, 'w') { |f| f.write "class Object; HELLO = 'foo2' end" } ++ ++ $LOAD_PATH.unshift lp2 ++ refute_require 'foo' ++ assert_equal "foo1", ::Object::HELLO ++ ensure ++ $LOAD_PATH.replace lp ++ Object.send :remove_const, :HELLO if Object.const_defined? :HELLO ++ end ++ + # Providing -I on the commandline should always beat gems + def test_dash_i_beats_gems + a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb" + +From db872c7a18d616f4447bdcca3130be6db9e5cb03 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Sat, 23 May 2020 20:18:41 +0200 +Subject: [PATCH 5/5] Remove direct reference to PR + +The code is quite different now, so I think the link might be even +confusing. If you want to know more, use git history. +--- + lib/rubygems/core_ext/kernel_require.rb | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 81e37b98bf..115ae0cb50 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -41,7 +41,6 @@ def require(path) + + if spec = Gem.find_unresolved_default_spec(path) + # Ensure -I beats a default gem +- # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil + load_path_check_index = Gem.load_path_insert_index - Gem.activated_gem_paths diff --git a/rubygems-3.1.3-Improve-require.patch b/rubygems-3.1.3-Improve-require.patch new file mode 100644 index 0000000..2df5c4f --- /dev/null +++ b/rubygems-3.1.3-Improve-require.patch @@ -0,0 +1,92 @@ +From c5197b2ab35ba389f48918e0c773b43b6dca2fa5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Fri, 7 Feb 2020 17:16:05 +0100 +Subject: [PATCH 1/3] Tweaks to get test passing more reliably + +--- + test/rubygems/test_require.rb | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb +index 7cffbfa7fe..67c55416d4 100644 +--- a/test/rubygems/test_require.rb ++++ b/test/rubygems/test_require.rb +@@ -567,18 +567,20 @@ def util_install_extension_file(name) + write_file File.join(@tempdir, "extconf.rb") do |io| + io.write <<-RUBY + require "mkmf" ++ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||' + create_makefile("#{name}") + RUBY + end + + write_file File.join(@tempdir, "#{name}.c") do |io| + io.write <<-C +- #include + void Init_#{name}() { } + C + end + +- spec.files += ["extconf.rb", "#{name}.c"] ++ write_file File.join(@tempdir, "depend") ++ ++ spec.files += ["extconf.rb", "depend", "#{name}.c"] + + so = File.join(spec.gem_dir, "#{name}.#{RbConfig::CONFIG["DLEXT"]}") + refute_path_exists so + +From 7bfd7319cd751837c3ccaf1d97b02846eaaf39d5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 11 Feb 2020 11:56:06 +0100 +Subject: [PATCH 2/3] Fix bug bug calculating $LOAD_PATH's to check in + `require` + +In `Gem.load_path_insert_index` is not set, we end up having +`$LOAD_PATH[0...-1]`, unintentionally skipping the last $LOAD_PATH entry +from the check. + +The correct thing to do in that case is to not even try since we have no +way of distinguisng default LOAD_PATH entries from those added with -I. +--- + lib/rubygems/core_ext/kernel_require.rb | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 369f2c743e..a8d170f13a 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -44,7 +44,10 @@ def require(path) + resolved_path = begin + rp = nil + Gem.suffixes.each do |s| +- $LOAD_PATH[0...Gem.load_path_insert_index || -1].each do |lp| ++ load_path_insert_index = Gem.load_path_insert_index ++ break unless load_path_insert_index ++ ++ $LOAD_PATH[0...load_path_insert_index].each do |lp| + safe_lp = lp.dup.tap(&Gem::UNTAINT) + begin + if File.symlink? safe_lp # for backward compatibility + +From 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Fri, 14 Feb 2020 02:03:04 +0100 +Subject: [PATCH 3/3] Exclude empty suffix from `-I` require loop + +--- + lib/rubygems/core_ext/kernel_require.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index a8d170f13a..9712fb6ac0 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,7 +43,7 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- Gem.suffixes.each do |s| ++ Gem.suffixes[1..-1].each do |s| + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + diff --git a/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch new file mode 100644 index 0000000..463047c --- /dev/null +++ b/rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch @@ -0,0 +1,29 @@ +From 301e30bf97dd603ca81d52b90186908575c4ddf8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Tue, 25 Feb 2020 15:01:44 +0100 +Subject: [PATCH] Revert "Exclude empty suffix from `-I` require loop" + +This reverts commit 4fc0ab21c0f7713829abb522ce3b6d8e24c126b3. + +Technically, extensionless ruby files are valid ruby files that can be +required. For example, `bin/bundle` is sometimes required from other +binstubs even if it's also runnable directly. + +So, we should technically consider this kind of files too. +--- + lib/rubygems/core_ext/kernel_require.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/rubygems/core_ext/kernel_require.rb b/lib/rubygems/core_ext/kernel_require.rb +index 9712fb6ac0..a8d170f13a 100644 +--- a/lib/rubygems/core_ext/kernel_require.rb ++++ b/lib/rubygems/core_ext/kernel_require.rb +@@ -43,7 +43,7 @@ def require(path) + # https://github.com/rubygems/rubygems/pull/1868 + resolved_path = begin + rp = nil +- Gem.suffixes[1..-1].each do |s| ++ Gem.suffixes.each do |s| + load_path_insert_index = Gem.load_path_insert_index + break unless load_path_insert_index + From 13e85fcbded9e9d879a734ba6e790f4494fc2f58 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Wed, 24 Jun 2020 23:39:43 +0200 Subject: [PATCH 16/21] Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 --- ruby.spec | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ruby.spec b/ruby.spec index 0063e73..f985ae6 100644 --- a/ruby.spec +++ b/ruby.spec @@ -303,6 +303,9 @@ 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} Provides: irb = %{version}-%{release} Provides: rubygem(irb) = %{version}-%{release} # Obsoleted by Ruby 2.6 in F30 timeframe. @@ -1274,6 +1277,10 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Wed Jun 24 2020 Jun Aruga - 2.7.1-132 +- Add ruby-default-gems dependency on irb. + Resolves: rhbz#1850541 + * Wed Jun 24 2020 Vít Ondruch - 2.7.1-132 - Fix `require` behavior allowing to load libraries multiple times. Resolves: rhbz#1835836 From 60c64f1945d5e5d171e2b111aa03761ffa109c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Mon, 27 Jul 2020 17:16:51 +0200 Subject: [PATCH 17/21] Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. --- ..._bug_reporter_add-witout-raising-err.patch | 34 +++++++++++++++++++ ruby.spec | 9 ++++- 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch 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 new file mode 100644 index 0000000..64e2114 --- /dev/null +++ b/ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch @@ -0,0 +1,34 @@ +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 +@@ -21,7 +21,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.spec b/ruby.spec index f985ae6..396508c 100644 --- a/ruby.spec +++ b/ruby.spec @@ -22,7 +22,7 @@ %endif -%global release 132 +%global release 133 %{!?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 @@ -161,6 +161,9 @@ Patch16: rubygems-3.1.3-Improve-require.patch Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch # https://github.com/rubygems/rubygems/pull/3639 Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.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 # Add support for .include directive used by OpenSSL config files. # https://github.com/ruby/openssl/pull/216 @@ -579,6 +582,7 @@ rm -rf ext/fiddle/libffi* %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 %patch22 -p1 # Provide an example of usage of the tapset: @@ -1277,6 +1281,9 @@ make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %changelog +* Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 +- Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. + * Wed Jun 24 2020 Jun Aruga - 2.7.1-132 - Add ruby-default-gems dependency on irb. Resolves: rhbz#1850541 From b7f5c02a42b21cbac22575a66bd7c2c1f0fdb9c9 Mon Sep 17 00:00:00 2001 From: Jun Aruga Date: Thu, 28 May 2020 17:31:05 +0200 Subject: [PATCH 18/21] Give an option to increase the timeout in tests. Because setting the option makes some tests stable that are currently randomly failing with error on especially s390x and aarch64. We observed the failing tests are calling `assert_in_out_err` method calling `invoke_ruby` calling method. Then when the `th_stdout.join(timeout)` or `th_stderr.join(timeout)` returns `nil` as thread timeout in `invoke_ruby` method, it causes the error. [1][2] The `test_timeout_scale` macro is to set the environment variable `RUBY_TEST_TIMEOUT_SCALE` to increase the timeout in `apply_timeout_scale` method as = * . As an example, `TestBugReporter#test_bug_reporter_add` test's maximum thread timeout was 56+ seconds for the default timeout 10 seconds. [3] In this case setting `RUBY_TEST_TIMEOUT_SCALE=6` (6 * 10 = 60) is good enough for 56+ seconds. [1] https://github.com/ruby/ruby/blob/v2_7_1/tool/lib/envutil.rb#L149 [2] https://bugs.ruby-lang.org/issues/16492#note-8 [3] https://bugs.ruby-lang.org/issues/16492#note-4 --- ruby.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruby.spec b/ruby.spec index 396508c..b67ddde 100644 --- a/ruby.spec +++ b/ruby.spec @@ -868,7 +868,10 @@ MSPECOPTS="$MSPECOPTS -P 'File.utime allows Time instances in the far future to sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bug_reporter.rb %endif -make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" +# Give an option to increase the timeout in tests. +# https://bugs.ruby-lang.org/issues/16921 +%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \ + make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS" %files %license BSDL From ee59a6a8e258d775266a9fd04f9ad8614efd1169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Oct 2020 16:21:35 +0200 Subject: [PATCH 19/21] Upgrade to Ruby 2.7.2. --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 10 +- ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch | 14 +- ...6.0-config-support-include-directive.patch | 182 ------------------ ruby-2.7.0-Initialize-ABRT-hook.patch | 2 +- ..._bug_reporter_add-witout-raising-err.patch | 2 +- ...-the-fact-that-lchmod-can-EOPNOTSUPP.patch | 88 --------- ...0-Moved-not-implemented-method-tests.patch | 131 ------------- ruby.spec | 18 +- ...nd-performance-regression-in-require.patch | 8 +- sources | 2 +- 14 files changed, 34 insertions(+), 433 deletions(-) delete mode 100644 ruby-2.6.0-config-support-include-directive.patch delete mode 100644 ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch delete mode 100644 ruby-2.8.0-Moved-not-implemented-method-tests.patch diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 6352db3..87583c2 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 -@@ -3102,6 +3102,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3105,6 +3105,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index d48f74e..9d5dc20 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 -@@ -3740,7 +3740,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3743,7 +3743,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index d156a73..3595c0d 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 -@@ -3804,6 +3804,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3807,6 +3807,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index c256708..f0eeb61 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 -@@ -3776,6 +3776,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3779,6 +3779,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='' -@@ -3800,6 +3804,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3803,6 +3807,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index bf51605..fc85914 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3691,9 +3691,6 @@ AS_CASE(["$target_os"], +@@ -3694,9 +3694,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], -@@ -3716,56 +3713,62 @@ AC_ARG_WITH(ridir, +@@ -3719,56 +3716,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3782,6 +3785,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3785,6 +3788,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl @@ -237,7 +237,7 @@ diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index b25068405d..e9fef4a311 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb -@@ -1353,7 +1353,8 @@ def test_self_use_paths +@@ -1378,7 +1378,8 @@ def test_self_use_paths def test_self_user_dir parts = [@userhome, '.gem', Gem.ruby_engine] @@ -247,7 +247,7 @@ index b25068405d..e9fef4a311 100644 assert_equal File.join(parts), Gem.user_dir end -@@ -1429,7 +1430,7 @@ def test_self_vendor_dir +@@ -1454,7 +1455,7 @@ def test_self_vendor_dir vendordir(File.join(@tempdir, 'vendor')) do expected = File.join RbConfig::CONFIG['vendordir'], 'gems', diff --git a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch index 4d81a84..9718d6e 100644 --- a/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch +++ b/ruby-2.3.1-Rely-on-ldd-to-detect-glibc.patch @@ -8,14 +8,14 @@ on Red Hat platforms. This workaround rhbz#1361037 --- - test/fiddle/helper.rb | 105 ------------------------------------------ - 1 file changed, 105 deletions(-) + test/fiddle/helper.rb | 111 ------------------------------------------ + 1 file changed, 111 deletions(-) diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 1da3d93..65148a1 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb -@@ -6,111 +6,6 @@ +@@ -6,115 +6,6 @@ libc_so = libm_so = nil @@ -56,8 +56,7 @@ index 1da3d93..65148a1 100644 - crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase' - libc_so = libm_so = "#{crtname}.dll" -when /darwin/ -- libc_so = "/usr/lib/libc.dylib" -- libm_so = "/usr/lib/libm.dylib" +- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" -when /kfreebsd/ - libc_so = "/lib/libc.so.0.1" - libm_so = "/lib/libm.so.1" @@ -123,6 +122,11 @@ index 1da3d93..65148a1 100644 - -libc_so = nil if !libc_so || (libc_so[0] == ?/ && !File.file?(libc_so)) -libm_so = nil if !libm_so || (libm_so[0] == ?/ && !File.file?(libm_so)) +- +-# macOS 11.0+ removed libSystem.B.dylib from /usr/lib. But It works with dlopen. +-if RUBY_PLATFORM =~ /darwin/ +- libc_so = libm_so = "/usr/lib/libSystem.B.dylib" +-end - if !libc_so || !libm_so ruby = EnvUtil.rubybin diff --git a/ruby-2.6.0-config-support-include-directive.patch b/ruby-2.6.0-config-support-include-directive.patch deleted file mode 100644 index 5b2024b..0000000 --- a/ruby-2.6.0-config-support-include-directive.patch +++ /dev/null @@ -1,182 +0,0 @@ -From f46bac1f3e8634e24c747d06b28e11b874f1e488 Mon Sep 17 00:00:00 2001 -From: Kazuki Yamaguchi -Date: Thu, 16 Aug 2018 19:40:48 +0900 -Subject: [PATCH] config: support .include directive - -OpenSSL 1.1.1 introduces a new '.include' directive. Update our config -parser to support that. - -As mentioned in the referenced GitHub issue, we should use the OpenSSL -API instead of implementing the parsing logic ourselves, but it will -need backwards-incompatible changes which we can't backport to stable -versions. So continue to use the Ruby implementation for now. - -Reference: https://github.com/ruby/openssl/issues/208 ---- - ext/openssl/lib/openssl/config.rb | 54 ++++++++++++++++++++----------- - test/openssl/test_config.rb | 54 +++++++++++++++++++++++++++++++ - 2 files changed, 90 insertions(+), 18 deletions(-) - -diff --git a/ext/openssl/lib/openssl/config.rb b/ext/openssl/lib/openssl/config.rb -index 88225451..ba3a54c8 100644 ---- a/ext/openssl/lib/openssl/config.rb -+++ b/ext/openssl/lib/openssl/config.rb -@@ -77,29 +77,44 @@ def get_key_string(data, section, key) # :nodoc: - def parse_config_lines(io) - section = 'default' - data = {section => {}} -- while definition = get_definition(io) -+ io_stack = [io] -+ while definition = get_definition(io_stack) - definition = clear_comments(definition) - next if definition.empty? -- if definition[0] == ?[ -+ case definition -+ when /\A\[/ - if /\[([^\]]*)\]/ =~ definition - section = $1.strip - data[section] ||= {} - else - raise ConfigError, "missing close square bracket" - end -- else -- if /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ =~ definition -- if $2 -- section = $1 -- key = $2 -- else -- key = $1 -+ when /\A\.include (\s*=\s*)?(.+)\z/ -+ path = $2 -+ if File.directory?(path) -+ files = Dir.glob(File.join(path, "*.{cnf,conf}"), File::FNM_EXTGLOB) -+ else -+ files = [path] -+ end -+ -+ files.each do |filename| -+ begin -+ io_stack << StringIO.new(File.read(filename)) -+ rescue -+ raise ConfigError, "could not include file '%s'" % filename - end -- value = unescape_value(data, section, $3) -- (data[section] ||= {})[key] = value.strip -+ end -+ when /\A([^:\s]*)(?:::([^:\s]*))?\s*=(.*)\z/ -+ if $2 -+ section = $1 -+ key = $2 - else -- raise ConfigError, "missing equal sign" -+ key = $1 - end -+ value = unescape_value(data, section, $3) -+ (data[section] ||= {})[key] = value.strip -+ else -+ raise ConfigError, "missing equal sign" - end - end - data -@@ -212,10 +227,10 @@ def clear_comments(line) - scanned.join - end - -- def get_definition(io) -- if line = get_line(io) -+ def get_definition(io_stack) -+ if line = get_line(io_stack) - while /[^\\]\\\z/ =~ line -- if extra = get_line(io) -+ if extra = get_line(io_stack) - line += extra - else - break -@@ -225,9 +240,12 @@ def get_definition(io) - end - end - -- def get_line(io) -- if line = io.gets -- line.gsub(/[\r\n]*/, '') -+ def get_line(io_stack) -+ while io = io_stack.last -+ if line = io.gets -+ return line.gsub(/[\r\n]*/, '') -+ end -+ io_stack.pop - end - end - end -diff --git a/test/openssl/test_config.rb b/test/openssl/test_config.rb -index 99dcc497..5653b5d0 100644 ---- a/test/openssl/test_config.rb -+++ b/test/openssl/test_config.rb -@@ -120,6 +120,49 @@ def test_s_parse_format - assert_equal("error in line 7: missing close square bracket", excn.message) - end - -+ def test_s_parse_include -+ in_tmpdir("ossl-config-include-test") do |dir| -+ Dir.mkdir("child") -+ File.write("child/a.conf", <<~__EOC__) -+ [default] -+ file-a = a.conf -+ [sec-a] -+ a = 123 -+ __EOC__ -+ File.write("child/b.cnf", <<~__EOC__) -+ [default] -+ file-b = b.cnf -+ [sec-b] -+ b = 123 -+ __EOC__ -+ File.write("include-child.conf", <<~__EOC__) -+ key_outside_section = value_a -+ .include child -+ __EOC__ -+ -+ include_file = <<~__EOC__ -+ [default] -+ file-main = unnamed -+ [sec-main] -+ main = 123 -+ .include = include-child.conf -+ __EOC__ -+ -+ # Include a file by relative path -+ c1 = OpenSSL::Config.parse(include_file) -+ assert_equal(["default", "sec-a", "sec-b", "sec-main"], c1.sections.sort) -+ assert_equal(["file-main", "file-a", "file-b"], c1["default"].keys) -+ assert_equal({"a" => "123"}, c1["sec-a"]) -+ assert_equal({"b" => "123"}, c1["sec-b"]) -+ assert_equal({"main" => "123", "key_outside_section" => "value_a"}, c1["sec-main"]) -+ -+ # Relative paths are from the working directory -+ assert_raise(OpenSSL::ConfigError) do -+ Dir.chdir("child") { OpenSSL::Config.parse(include_file) } -+ end -+ end -+ end -+ - def test_s_load - # alias of new - c = OpenSSL::Config.load -@@ -299,6 +342,17 @@ def test_clone - @it['newsection'] = {'a' => 'b'} - assert_not_equal(@it.sections.sort, c.sections.sort) - end -+ -+ private -+ -+ def in_tmpdir(*args) -+ Dir.mktmpdir(*args) do |dir| -+ dir = File.realpath(dir) -+ Dir.chdir(dir) do -+ yield dir -+ end -+ end -+ end - end - - end diff --git a/ruby-2.7.0-Initialize-ABRT-hook.patch b/ruby-2.7.0-Initialize-ABRT-hook.patch index 58c92cf..5dd2654 100644 --- a/ruby-2.7.0-Initialize-ABRT-hook.patch +++ b/ruby-2.7.0-Initialize-ABRT-hook.patch @@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c index 60c57d6259..1eec16f2c8 100644 --- a/ruby.c +++ b/ruby.c -@@ -1439,10 +1439,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) +@@ -1451,10 +1451,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt) void Init_builtin_features(void); 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 index 64e2114..81384ba 100644 --- 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 @@ -20,7 +20,7 @@ diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_repor index 628fcd0340..2c677cc8a7 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb -@@ -21,7 +21,7 @@ def test_bug_reporter_add +@@ -19,7 +19,7 @@ def test_bug_reporter_add args = ["--disable-gems", "-r-test-/bug_reporter", "-C", tmpdir] stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$" diff --git a/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch b/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch deleted file mode 100644 index 1e09843..0000000 --- a/ruby-2.8.0-Brace-the-fact-that-lchmod-can-EOPNOTSUPP.patch +++ /dev/null @@ -1,88 +0,0 @@ -From a19228f878d955eaf2cce086bcf53f46fdf894b9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=E5=8D=9C=E9=83=A8=E6=98=8C=E5=B9=B3?= - -Date: Thu, 23 Jan 2020 15:33:42 +0900 -Subject: [PATCH] brace the fact that lchmod(2) can EOPNOTSUPP - -Musl libc has this function as a tiny wrapper of fchmodat(3posix). On -the other hand Linux kernel does not support changing modes of a symlink. -The operation always fails with EOPNOTSUPP. This fchmodat behaviour is -defined in POSIX. We have to take care of such exceptions. ---- - lib/fileutils.rb | 3 ++- - test/pathname/test_pathname.rb | 2 +- - test/ruby/test_notimp.rb | 19 ++++++++++++------- - 3 files changed, 15 insertions(+), 9 deletions(-) - -diff --git a/lib/fileutils.rb b/lib/fileutils.rb -index a7ad65ae5e98..04788e26ca9c 100644 ---- a/lib/fileutils.rb -+++ b/lib/fileutils.rb -@@ -1345,6 +1345,7 @@ def chmod(mode) - else - File.chmod mode, path() - end -+ rescue Errno::EOPNOTSUPP - end - - def chown(uid, gid) -@@ -1439,7 +1440,7 @@ def copy_metadata(path) - if st.symlink? - begin - File.lchmod mode, path -- rescue NotImplementedError -+ rescue NotImplementedError, Errno::EOPNOTSUPP - end - else - File.chmod mode, path -diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb -index 792510bdfb2d..2ce32a6c1208 100644 ---- a/test/pathname/test_pathname.rb -+++ b/test/pathname/test_pathname.rb -@@ -818,7 +818,7 @@ def test_lchmod - old = path.lstat.mode - begin - path.lchmod(0444) -- rescue NotImplementedError -+ rescue NotImplementedError, Errno::EOPNOTSUPP - next - end - assert_equal(0444, path.lstat.mode & 0777) -diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb -index b069154cfc3f..e13db692b50d 100644 ---- a/test/ruby/test_notimp.rb -+++ b/test/ruby/test_notimp.rb -@@ -13,11 +13,11 @@ def test_respond_to_fork - - def test_respond_to_lchmod - assert_include(File.methods, :lchmod) -- if /linux/ =~ RUBY_PLATFORM -- assert_equal(false, File.respond_to?(:lchmod)) -- end -- if /freebsd/ =~ RUBY_PLATFORM -+ case RUBY_PLATFORM -+ when /freebsd/, /linux-musl/ - assert_equal(true, File.respond_to?(:lchmod)) -+ when /linux/ -+ assert_equal(false, File.respond_to?(:lchmod)) - end - end - -@@ -57,9 +57,14 @@ def test_call_lchmod - File.open(f, "w") {} - File.symlink f, g - newmode = 0444 -- File.lchmod newmode, "#{d}/g" -- snew = File.lstat(g) -- assert_equal(newmode, snew.mode & 0777) -+ begin -+ File.lchmod newmode, "#{d}/g" -+ rescue Errno::EOPNOTSUPP -+ skip $! -+ else -+ snew = File.lstat(g) -+ assert_equal(newmode, snew.mode & 0777) -+ end - } - end - end diff --git a/ruby-2.8.0-Moved-not-implemented-method-tests.patch b/ruby-2.8.0-Moved-not-implemented-method-tests.patch deleted file mode 100644 index ffc8c52..0000000 --- a/ruby-2.8.0-Moved-not-implemented-method-tests.patch +++ /dev/null @@ -1,131 +0,0 @@ -From 72c02aa4b79731c7f25c9267f74b347f1946c704 Mon Sep 17 00:00:00 2001 -From: Nobuyoshi Nakada -Date: Fri, 28 Feb 2020 21:15:37 +0900 -Subject: [PATCH] Moved not-implemented method tests [Bug #16662] - -Test not-implemented method with the dedicated methods, instead of -platform dependent features. ---- - test/-ext-/test_notimplement.rb | 7 +++ - test/ruby/test_notimp.rb | 90 --------------------------------- - 2 files changed, 7 insertions(+), 90 deletions(-) - delete mode 100644 test/ruby/test_notimp.rb - -diff --git a/test/-ext-/test_notimplement.rb b/test/-ext-/test_notimplement.rb -index 92a2fd22b8d6..038b507b7312 100644 ---- a/test/-ext-/test_notimplement.rb -+++ b/test/-ext-/test_notimplement.rb -@@ -13,10 +13,17 @@ def test_funcall_notimplement - end - - def test_respond_to -+ assert_include(Bug.methods(false), :notimplement) -+ assert_include(Bug::NotImplement.instance_methods(false), :notimplement) - assert_not_respond_to(Bug, :notimplement) - assert_not_respond_to(Bug::NotImplement.new, :notimplement) - end - -+ def test_method_inspect_notimplement -+ assert_match(/not-implemented/, Bug.method(:notimplement).inspect) -+ assert_match(/not-implemented/, Bug::NotImplement.instance_method(:notimplement).inspect) -+ end -+ - def test_not_method_defined - assert !Bug::NotImplement.method_defined?(:notimplement) - assert !Bug::NotImplement.method_defined?(:notimplement, true) -diff --git a/test/ruby/test_notimp.rb b/test/ruby/test_notimp.rb -deleted file mode 100644 -index e13db692b50d..000000000000 ---- a/test/ruby/test_notimp.rb -+++ /dev/null -@@ -1,90 +0,0 @@ --# frozen_string_literal: false --require 'test/unit' --require 'timeout' --require 'tmpdir' -- --class TestNotImplement < Test::Unit::TestCase -- def test_respond_to_fork -- assert_include(Process.methods, :fork) -- if /linux/ =~ RUBY_PLATFORM -- assert_equal(true, Process.respond_to?(:fork)) -- end -- end -- -- def test_respond_to_lchmod -- assert_include(File.methods, :lchmod) -- case RUBY_PLATFORM -- when /freebsd/, /linux-musl/ -- assert_equal(true, File.respond_to?(:lchmod)) -- when /linux/ -- assert_equal(false, File.respond_to?(:lchmod)) -- end -- end -- -- def test_call_fork -- GC.start -- pid = nil -- ps = -- case RUBY_PLATFORM -- when /linux/ # assume Linux Distribution uses procps -- proc {`ps -eLf #{pid}`} -- when /freebsd/ -- proc {`ps -lH #{pid}`} -- when /darwin/ -- proc {`ps -lM #{pid}`} -- else -- proc {`ps -l #{pid}`} -- end -- assert_nothing_raised(Timeout::Error, ps) do -- EnvUtil.timeout(20) { -- pid = fork {} -- Process.wait pid -- pid = nil -- } -- end -- ensure -- if pid -- Process.kill(:KILL, pid) -- Process.wait pid -- end -- end if Process.respond_to?(:fork) -- -- def test_call_lchmod -- if File.respond_to?(:lchmod) -- Dir.mktmpdir {|d| -- f = "#{d}/f" -- g = "#{d}/g" -- File.open(f, "w") {} -- File.symlink f, g -- newmode = 0444 -- begin -- File.lchmod newmode, "#{d}/g" -- rescue Errno::EOPNOTSUPP -- skip $! -- else -- snew = File.lstat(g) -- assert_equal(newmode, snew.mode & 0777) -- end -- } -- end -- end -- -- def test_method_inspect_fork -- m = Process.method(:fork) -- if Process.respond_to?(:fork) -- assert_not_match(/not-implemented/, m.inspect) -- else -- assert_match(/not-implemented/, m.inspect) -- end -- end -- -- def test_method_inspect_lchmod -- m = File.method(:lchmod) -- if File.respond_to?(:lchmod) -- assert_not_match(/not-implemented/, m.inspect) -- else -- assert_match(/not-implemented/, m.inspect) -- end -- end -- --end diff --git a/ruby.spec b/ruby.spec index b67ddde..d7bfbcf 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 7 -%global teeny_version 1 +%global teeny_version 2 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 133 +%global release 135 %{!?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 @@ -30,7 +30,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.1.2 +%global rubygems_version 3.1.4 %global rubygems_molinillo_version 0.5.7 # Default gems. @@ -44,7 +44,7 @@ %global bigdecimal_version 2.0.0 %global did_you_mean_version 1.4.0 %global io_console_version 0.5.6 -%global irb_version 1.2.3 +%global irb_version 1.2.6 %global json_version 2.3.0 %global net_telnet_version 0.2.0 %global openssl_version 2.1.2 @@ -165,10 +165,6 @@ Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.pa # https://bugs.ruby-lang.org/issues/16492 Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch -# Add support for .include directive used by OpenSSL config files. -# https://github.com/ruby/openssl/pull/216 -Patch22: ruby-2.6.0-config-support-include-directive.patch - Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick Recommends: ruby(rubygems) >= %{rubygems_version} @@ -583,7 +579,6 @@ rm -rf ext/fiddle/libffi* %patch17 -p1 %patch18 -p1 %patch19 -p1 -%patch22 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -1154,7 +1149,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %{gem_dir}/specifications/default/racc-%{racc_version}.gemspec %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec -%{gem_dir}/specifications/default/reline-0.1.3.gemspec +%{gem_dir}/specifications/default/reline-0.1.5.gemspec %{gem_dir}/specifications/default/rexml-3.2.3.gemspec %{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec @@ -1284,6 +1279,9 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %changelog +* Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 +- Upgrade to Ruby 2.7.2. + * Mon Jul 27 2020 Vít Ondruch - 2.7.1-133 - Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add. diff --git a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch index b1438dd..ae6ecbb 100644 --- a/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch +++ b/rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.patch @@ -15,7 +15,7 @@ diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 843cb49e4a..d1a9a1c7e1 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb -@@ -660,10 +660,20 @@ def self.load_path_insert_index +@@ -662,10 +662,20 @@ def self.load_path_insert_index index end @@ -53,7 +53,7 @@ diff --git a/lib/rubygems/test_case.rb b/lib/rubygems/test_case.rb index a05a2898d1..53dd495aef 100644 --- a/lib/rubygems/test_case.rb +++ b/lib/rubygems/test_case.rb -@@ -379,6 +379,7 @@ def setup +@@ -385,6 +385,7 @@ def setup Gem::Security.reset Gem.loaded_specs.clear @@ -98,7 +98,7 @@ diff --git a/lib/rubygems.rb b/lib/rubygems.rb index d1a9a1c7e1..ca80326459 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb -@@ -657,7 +657,7 @@ def self.load_path_insert_index +@@ -659,7 +659,7 @@ def self.load_path_insert_index index = $LOAD_PATH.index RbConfig::CONFIG['sitelibdir'] @@ -107,7 +107,7 @@ index d1a9a1c7e1..ca80326459 100644 end ## -@@ -674,15 +674,8 @@ def self.activated_gem_paths +@@ -676,15 +676,8 @@ def self.activated_gem_paths def self.add_to_load_path(*paths) @activated_gem_paths = activated_gem_paths + paths.size diff --git a/sources b/sources index 38b728a..df34d8a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.1.tar.xz) = 79f98b1ea98e0b10ec79da1883e8fc84d48ffe5c09ae945cbebde94365e35a589d919aac965f74d70ca7e21370ecee631ac5a8f9c4eac61d62f5aa629f27bf31 +SHA512 (ruby-2.7.2.tar.xz) = 7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349 From e7150c7c9e95bd70e59d3beabde27d741708c8a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 13 Oct 2020 17:02:57 +0200 Subject: [PATCH 20/21] Enable arm64 optimizations. The same already exists for power/x86. Resolves: rhbz#1884728 --- ...timizations-that-exist-for-power-x86.patch | 178 ++++++++++++++++++ ruby.spec | 5 + 2 files changed, 183 insertions(+) create mode 100644 ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch diff --git a/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch new file mode 100644 index 0000000..decb45f --- /dev/null +++ b/ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch @@ -0,0 +1,178 @@ +From c5806d668f84a86e9e6a522f84b8aa6cb4cdaae9 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 20:46:28 -0500 +Subject: [PATCH 1/3] Enable unaligned accesses on arm64 + +64-bit Arm platforms support unaligned accesses. + +Running the string benchmarks this change improves performance +by an average of 1.04x, min .96x, max 1.21x, median 1.01x +--- + include/ruby/defines.h | 2 +- + regint.h | 2 +- + siphash.c | 2 +- + st.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/include/ruby/defines.h b/include/ruby/defines.h +index 49f673ef936a..0193275e8b78 100644 +--- a/include/ruby/defines.h ++++ b/include/ruby/defines.h +@@ -485,7 +485,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # else +diff --git a/regint.h b/regint.h +index a2f5bbba1d1f..0740429688bc 100644 +--- a/regint.h ++++ b/regint.h +@@ -52,7 +52,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # else +diff --git a/siphash.c b/siphash.c +index 153d2c690ab9..ddf8ee245d81 100644 +--- a/siphash.c ++++ b/siphash.c +@@ -30,7 +30,7 @@ + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # endif +diff --git a/st.c b/st.c +index c11535ef9779..8be466bf733f 100644 +--- a/st.c ++++ b/st.c +@@ -1815,7 +1815,7 @@ st_values_check(st_table *tab, st_data_t *values, st_index_t size, + #ifndef UNALIGNED_WORD_ACCESS + # if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \ +- defined(__powerpc64__) || \ ++ defined(__powerpc64__) || defined(__aarch64__) || \ + defined(__mc68020__) + # define UNALIGNED_WORD_ACCESS 1 + # endif + +From 79b7b9143fda0f33fc9375980cecc61eb42c6f66 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 21:04:37 -0500 +Subject: [PATCH 2/3] arm64 enable gc optimizations + +Similar to x86 and powerpc optimizations. + +| |compare-ruby|built-ruby| +|:------|-----------:|---------:| +|hash1 | 0.225| 0.237| +| | -| 1.05x| +|hash2 | 0.110| 0.110| +| | 1.00x| -| +--- + gc.c | 13 +++++++++++++ + gc.h | 2 ++ + 2 files changed, 15 insertions(+) + +diff --git a/gc.c b/gc.c +index 22972dfc806c..788f06f1586e 100644 +--- a/gc.c ++++ b/gc.c +@@ -1153,6 +1153,19 @@ tick(void) + return val; + } + ++#elif defined(__aarch64__) && defined(__GNUC__) ++typedef unsigned long tick_t; ++#define PRItick "lu" ++ ++static __inline__ tick_t ++tick(void) ++{ ++ unsigned long val; ++ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val)); ++ return val; ++} ++ ++ + #elif defined(_WIN32) && defined(_MSC_VER) + #include + typedef unsigned __int64 tick_t; +diff --git a/gc.h b/gc.h +index 6568079c54e5..47a4ca19a0c5 100644 +--- a/gc.h ++++ b/gc.h +@@ -8,6 +8,8 @@ + #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("movl\t%%esp, %0" : "=r" (*(p))) + #elif defined(__powerpc64__) && defined(__GNUC__) + #define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mr\t%0, %%r1" : "=r" (*(p))) ++#elif defined(__aarch64__) && defined(__GNUC__) ++#define SET_MACHINE_STACK_END(p) __asm__ __volatile__ ("mov\t%0, sp" : "=r" (*(p))) + #else + NOINLINE(void rb_gc_set_stack_end(VALUE **stack_end_p)); + #define SET_MACHINE_STACK_END(p) rb_gc_set_stack_end(p) + +From c985b8c6868a380e44e285368af4a4f414ce3309 Mon Sep 17 00:00:00 2001 +From: Ali Saidi +Date: Wed, 5 Aug 2020 21:15:55 -0500 +Subject: [PATCH 3/3] vm_exec.c: improve performance for arm64 + +| |compare-ruby|built-ruby| +|:------------------------------|-----------:|---------:| +|vm_array | 26.501M| 27.959M| +| | -| 1.06x| +|vm_attr_ivar | 21.606M| 31.429M| +| | -| 1.45x| +|vm_attr_ivar_set | 21.178M| 26.113M| +| | -| 1.23x| +|vm_backtrace | 6.621| 6.668| +| | -| 1.01x| +|vm_bigarray | 26.205M| 29.958M| +| | -| 1.14x| +|vm_bighash | 504.155k| 479.306k| +| | 1.05x| -| +|vm_block | 16.692M| 21.315M| +| | -| 1.28x| +|block_handler_type_iseq | 5.083| 7.004| +| | -| 1.38x| +--- + vm_exec.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/vm_exec.c b/vm_exec.c +index ce2e053ee745..7aa56f6ad620 100644 +--- a/vm_exec.c ++++ b/vm_exec.c +@@ -27,6 +27,9 @@ static void vm_insns_counter_count_insn(int insn) {} + #elif defined(__GNUC__) && defined(__powerpc64__) + #define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg) + ++#elif defined(__GNUC__) && defined(__aarch64__) ++#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg) ++ + #else + #define DECL_SC_REG(type, r, reg) register type reg_##r + #endif +@@ -74,6 +77,11 @@ vm_exec_core(rb_execution_context_t *ec, VALUE initial) + DECL_SC_REG(rb_control_frame_t *, cfp, "15"); + #define USE_MACHINE_REGS 1 + ++#elif defined(__GNUC__) && defined(__aarch64__) ++ DECL_SC_REG(const VALUE *, pc, "19"); ++ DECL_SC_REG(rb_control_frame_t *, cfp, "20"); ++#define USE_MACHINE_REGS 1 ++ + #else + register rb_control_frame_t *reg_cfp; + const VALUE *reg_pc; diff --git a/ruby.spec b/ruby.spec index d7bfbcf..a019f46 100644 --- a/ruby.spec +++ b/ruby.spec @@ -164,6 +164,10 @@ Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.pa # 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 +# Enable arm64 optimizations. +# https://bugzilla.redhat.com/show_bug.cgi?id=1884728 +# https://github.com/ruby/ruby/pull/3393 +Patch20: ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -579,6 +583,7 @@ rm -rf ext/fiddle/libffi* %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . From b6e89657ac04fe967cb08e1eaa0f0d7cffd9c422 Mon Sep 17 00:00:00 2001 From: Pavel Valena Date: Wed, 7 Apr 2021 01:28:04 +0200 Subject: [PATCH 21/21] Upgrade to Ruby 2.7.3. --- ...0-Enable-configuration-of-archlibdir.patch | 2 +- ...ed-paths-when-empty-version-string-i.patch | 2 +- ruby-2.1.0-always-use-i386.patch | 2 +- ruby-2.1.0-custom-rubygems-location.patch | 4 +- ruby-2.3.0-ruby_version.patch | 6 +-- ruby.spec | 38 ++++++------------- sources | 2 +- 7 files changed, 21 insertions(+), 35 deletions(-) diff --git a/ruby-2.1.0-Enable-configuration-of-archlibdir.patch b/ruby-2.1.0-Enable-configuration-of-archlibdir.patch index 87583c2..c249372 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 -@@ -3105,6 +3105,11 @@ AS_IF([test ${multiarch+set}], [ +@@ -3115,6 +3115,11 @@ AS_IF([test ${multiarch+set}], [ ]) archlibdir='${libdir}/${arch}' diff --git a/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch b/ruby-2.1.0-Prevent-duplicated-paths-when-empty-version-string-i.patch index 9d5dc20..1694f87 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 -@@ -3743,7 +3743,8 @@ AS_CASE(["$ruby_version_dir_name"], +@@ -3753,7 +3753,8 @@ AS_CASE(["$ruby_version_dir_name"], ruby_version_dir=/'${ruby_version_dir_name}' if test -z "${ruby_version_dir_name}"; then diff --git a/ruby-2.1.0-always-use-i386.patch b/ruby-2.1.0-always-use-i386.patch index 3595c0d..f41bd0b 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 -@@ -3807,6 +3807,8 @@ AC_SUBST(vendorarchdir)dnl +@@ -3817,6 +3817,8 @@ AC_SUBST(vendorarchdir)dnl AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl diff --git a/ruby-2.1.0-custom-rubygems-location.patch b/ruby-2.1.0-custom-rubygems-location.patch index f0eeb61..dde1098 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 -@@ -3779,6 +3779,10 @@ AC_ARG_WITH(vendorarchdir, +@@ -3789,6 +3789,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='' -@@ -3803,6 +3807,7 @@ AC_SUBST(sitearchdir)dnl +@@ -3813,6 +3817,7 @@ AC_SUBST(sitearchdir)dnl AC_SUBST(vendordir)dnl AC_SUBST(vendorlibdir)dnl AC_SUBST(vendorarchdir)dnl diff --git a/ruby-2.3.0-ruby_version.patch b/ruby-2.3.0-ruby_version.patch index fc85914..7efe039 100644 --- a/ruby-2.3.0-ruby_version.patch +++ b/ruby-2.3.0-ruby_version.patch @@ -20,7 +20,7 @@ diff --git a/configure.ac b/configure.ac index 80b137e380..63cd3b4f8b 100644 --- a/configure.ac +++ b/configure.ac -@@ -3694,9 +3694,6 @@ AS_CASE(["$target_os"], +@@ -3704,9 +3704,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], -@@ -3719,56 +3716,62 @@ AC_ARG_WITH(ridir, +@@ -3729,56 +3726,62 @@ AC_ARG_WITH(ridir, AC_SUBST(ridir) AC_SUBST(RI_BASE_NAME) @@ -120,7 +120,7 @@ index 80b137e380..63cd3b4f8b 100644 AS_IF([test "${LOAD_RELATIVE+set}"], [ AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE) -@@ -3785,6 +3788,7 @@ AC_SUBST(sitearchincludedir)dnl +@@ -3795,6 +3798,7 @@ AC_SUBST(sitearchincludedir)dnl AC_SUBST(arch)dnl AC_SUBST(sitearch)dnl AC_SUBST(ruby_version)dnl diff --git a/ruby.spec b/ruby.spec index a019f46..c0b2d8b 100644 --- a/ruby.spec +++ b/ruby.spec @@ -1,6 +1,6 @@ %global major_version 2 %global minor_version 7 -%global teeny_version 2 +%global teeny_version 3 %global major_minor_version %{major_version}.%{minor_version} %global ruby_version %{major_minor_version}.%{teeny_version} @@ -22,7 +22,7 @@ %endif -%global release 135 +%global release 136 %{!?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 @@ -30,7 +30,7 @@ %global rubygems_dir %{_datadir}/rubygems # Bundled libraries versions -%global rubygems_version 3.1.4 +%global rubygems_version 3.1.6 %global rubygems_molinillo_version 0.5.7 # Default gems. @@ -149,25 +149,9 @@ Patch10: ruby-2.7.0-Remove-RubyGems-dependency.patch # Prevent issues with openssl loading when RubyGems are disabled. # https://github.com/ruby/openssl/pull/242 Patch13: ruby-2.8.0-remove-unneeded-gem-require-for-ipaddr.patch -# Fix `require` behavior allowing to load libraries multiple times. -# https://github.com/rubygems/rubygems/issues/3647 -# Because there were multiple fixes in `Kernel.require` in recent months, -# pickup all the changes one by one instead of squashing them. -# https://github.com/rubygems/rubygems/pull/3124 -Patch15: rubygems-3.1.3-Fix-I-require-priority.patch -# https://github.com/rubygems/rubygems/pull/3133 -Patch16: rubygems-3.1.3-Improve-require.patch -# https://github.com/rubygems/rubygems/pull/3153 -Patch17: rubygems-3.1.3-Revert-Exclude-empty-suffix-from-I-require-loop.patch -# https://github.com/rubygems/rubygems/pull/3639 -Patch18: rubygems-3.1.3-Fix-correctness-and-performance-regression-in-require.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 -# Enable arm64 optimizations. -# https://bugzilla.redhat.com/show_bug.cgi?id=1884728 -# https://github.com/ruby/ruby/pull/3393 -Patch20: ruby-3.0.0-preview1-Enable-arm64-optimizations-that-exist-for-power-x86.patch Requires: %{name}-libs%{?_isa} = %{version}-%{release} Suggests: rubypick @@ -578,12 +562,7 @@ rm -rf ext/fiddle/libffi* %patch9 -p1 %patch10 -p1 %patch13 -p1 -%patch15 -p1 -%patch16 -p1 -%patch17 -p1 -%patch18 -p1 %patch19 -p1 -%patch20 -p1 # Provide an example of usage of the tapset: cp -a %{SOURCE3} . @@ -780,6 +759,10 @@ sed -i 's/^/%lang(ja) /' .ruby-doc.ja # https://github.com/ruby/rake/pull/333 rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github +# Remove accidentaly added files +# https://bugs.ruby-lang.org/issues/17784 +rm -rf %{buildroot}%{ruby_libdir}/exe/ + %check %if 0%{?with_hardening_test} # Check Ruby hardening. @@ -1155,7 +1138,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %{gem_dir}/specifications/default/readline-0.0.2.gemspec %{gem_dir}/specifications/default/readline-ext-0.1.0.gemspec %{gem_dir}/specifications/default/reline-0.1.5.gemspec -%{gem_dir}/specifications/default/rexml-3.2.3.gemspec +%{gem_dir}/specifications/default/rexml-3.2.3.1.gemspec %{gem_dir}/specifications/default/rss-0.2.8.gemspec %{gem_dir}/specifications/default/sdbm-1.0.0.gemspec %{gem_dir}/specifications/default/singleton-0.1.0.gemspec @@ -1164,7 +1147,7 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %{gem_dir}/specifications/default/timeout-0.1.0.gemspec %{gem_dir}/specifications/default/tracer-0.1.0.gemspec %{gem_dir}/specifications/default/uri-0.10.0.gemspec -%{gem_dir}/specifications/default/webrick-1.6.0.gemspec +%{gem_dir}/specifications/default/webrick-1.6.1.gemspec %{gem_dir}/specifications/default/yaml-0.1.0.gemspec %{gem_dir}/specifications/default/zlib-1.1.0.gemspec @@ -1284,6 +1267,9 @@ sed -i '/assert_in_out_err/ s/)/, timeout: 30)/' test/-ext-/bug_reporter/test_bu %changelog +* Wed Apr 07 2021 Pavel Valena - 2.7.3-136 +- Upgrade to Ruby 2.7.3. + * Tue Oct 13 2020 Vít Ondruch - 2.7.2-135 - Upgrade to Ruby 2.7.2. diff --git a/sources b/sources index df34d8a..79172c3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (ruby-2.7.2.tar.xz) = 7972278b096aa768c7adf2befd26003e18781a29ca317640317d30d93d6e963ded197724c8e2f1dfe1e838c5647176d414a74732a62e931fb50d6f2e0f777349 +SHA512 (ruby-2.7.3.tar.xz) = b755d418b3bab2f9f6a8893afd13869269f17065643dde78b9e85ae3538a6d0617893db6e9c3908e00a40c7577a5c912a7c822d8f245cdcfb857be76dfb66c1e