Upgrade to Ruby 3.2.0.
For details of the evolution please check `private-ruby-3.2` branch.
This commit is contained in:
parent
25858e766a
commit
f2899ee090
@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac
|
||||
index d261ea57b5..3c13076b82 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3374,6 +3374,11 @@ AS_IF([test ${multiarch+set}], [
|
||||
@@ -3410,6 +3410,11 @@ AS_IF([test ${multiarch+set}], [
|
||||
])
|
||||
|
||||
archlibdir='${libdir}/${arch}'
|
||||
@ -23,6 +23,3 @@ index d261ea57b5..3c13076b82 100644
|
||||
sitearchlibdir='${libdir}/${sitearch}'
|
||||
archincludedir='${includedir}/${arch}'
|
||||
sitearchincludedir='${includedir}/${sitearch}'
|
||||
--
|
||||
2.22.0
|
||||
|
||||
|
@ -14,7 +14,7 @@ diff --git a/configure.ac b/configure.ac
|
||||
index c42436c23d..d261ea57b5 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4032,7 +4032,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
||||
@@ -4195,7 +4195,8 @@ AS_CASE(["$ruby_version_dir_name"],
|
||||
ruby_version_dir=/'${ruby_version_dir_name}'
|
||||
|
||||
if test -z "${ruby_version_dir_name}"; then
|
||||
@ -75,6 +75,3 @@ index 07076d4..35e6c3c 100755
|
||||
when /^ARCH_FLAG$/
|
||||
val = "arch_flag || #{val}" if universal
|
||||
when /^UNIVERSAL_ARCHNAMES$/
|
||||
--
|
||||
1.9.0
|
||||
|
||||
|
@ -11,7 +11,7 @@ diff --git a/configure.ac b/configure.ac
|
||||
index 3c13076b82..93af30321d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4096,6 +4096,8 @@ AC_SUBST(vendorarchdir)dnl
|
||||
@@ -4259,6 +4259,8 @@ AC_SUBST(vendorarchdir)dnl
|
||||
AC_SUBST(CONFIGURE, "`echo $0 | sed 's|.*/||'`")dnl
|
||||
AC_SUBST(configure_args, "`echo "${ac_configure_args}" | sed 's/\\$/$$/g'`")dnl
|
||||
|
||||
@ -20,6 +20,3 @@ index 3c13076b82..93af30321d 100644
|
||||
AS_IF([test "${universal_binary-no}" = yes ], [
|
||||
arch="universal-${target_os}"
|
||||
AS_IF([test "${rb_cv_architecture_available}" = yes], [
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
@ -15,7 +15,7 @@ diff --git a/configure.ac b/configure.ac
|
||||
index 93af30321d..bc13397e0e 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4068,6 +4068,10 @@ AC_ARG_WITH(vendorarchdir,
|
||||
@@ -4231,6 +4231,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=''
|
||||
@@ -4092,6 +4096,7 @@ AC_SUBST(sitearchdir)dnl
|
||||
@@ -4255,6 +4259,7 @@ AC_SUBST(sitearchdir)dnl
|
||||
AC_SUBST(vendordir)dnl
|
||||
AC_SUBST(vendorlibdir)dnl
|
||||
AC_SUBST(vendorarchdir)dnl
|
||||
@ -75,7 +75,7 @@ index e9110a17ca..76a1f0a315 100755
|
||||
mandir = CONFIG["mandir", true]
|
||||
docdir = CONFIG["docdir", true]
|
||||
enable_shared = CONFIG["ENABLE_SHARED"] == 'yes'
|
||||
@@ -590,7 +591,16 @@ def stub
|
||||
@@ -595,7 +596,16 @@ def stub
|
||||
install?(:local, :comm, :lib) do
|
||||
prepare "library scripts", rubylibdir
|
||||
noinst = %w[*.txt *.rdoc *.gemspec]
|
||||
@ -92,6 +92,3 @@ index e9110a17ca..76a1f0a315 100755
|
||||
end
|
||||
|
||||
install?(:local, :comm, :hdr, :'comm-hdr') do
|
||||
--
|
||||
1.8.3.1
|
||||
|
||||
|
@ -12,15 +12,15 @@ ruby_version_dir_name now specifies custom version string for versioned
|
||||
directories, e.g. instead of default X.Y.Z, you can specify whatever
|
||||
string.
|
||||
---
|
||||
configure.ac | 64 ++++++++++++++++++++++++---------------------
|
||||
configure.ac | 66 ++++++++++++++++++++++++---------------------
|
||||
template/ruby.pc.in | 1 +
|
||||
2 files changed, 35 insertions(+), 30 deletions(-)
|
||||
2 files changed, 36 insertions(+), 31 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 80b137e380..63cd3b4f8b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3983,9 +3983,6 @@ AS_CASE(["$target_os"],
|
||||
@@ -4145,9 +4145,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],
|
||||
@@ -4008,56 +4005,62 @@ AC_ARG_WITH(ridir,
|
||||
@@ -4170,57 +4167,63 @@ AC_ARG_WITH(ridir,
|
||||
AC_SUBST(ridir)
|
||||
AC_SUBST(RI_BASE_NAME)
|
||||
|
||||
@ -46,6 +46,7 @@ index 80b137e380..63cd3b4f8b 100644
|
||||
-AS_IF([test ${RUBY_LIB_VERSION_STYLE+set}], [
|
||||
- {
|
||||
- echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||
- echo '@%:@include "confdefs.h"'
|
||||
- echo '#define STRINGIZE(x) x'
|
||||
- test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||
- echo '#include "version.h"'
|
||||
@ -61,6 +62,7 @@ index 80b137e380..63cd3b4f8b 100644
|
||||
+RUBY_LIB_VERSION_STYLE='3 /* full */'
|
||||
+{
|
||||
+echo "#define RUBY_LIB_VERSION_STYLE $RUBY_LIB_VERSION_STYLE"
|
||||
+echo '@%:@include "confdefs.h"'
|
||||
+echo '#define STRINGIZE(x) x'
|
||||
+test -f revision.h -o -f "${srcdir}/revision.h" || echo '#define RUBY_REVISION 0'
|
||||
+echo '#include "version.h"'
|
||||
@ -120,7 +122,7 @@ index 80b137e380..63cd3b4f8b 100644
|
||||
|
||||
AS_IF([test "${LOAD_RELATIVE+set}"], [
|
||||
AC_DEFINE_UNQUOTED(LOAD_RELATIVE, $LOAD_RELATIVE)
|
||||
@@ -4074,6 +4077,7 @@ AC_SUBST(sitearchincludedir)dnl
|
||||
@@ -4237,6 +4240,7 @@ AC_SUBST(sitearchincludedir)dnl
|
||||
AC_SUBST(arch)dnl
|
||||
AC_SUBST(sitearch)dnl
|
||||
AC_SUBST(ruby_version)dnl
|
||||
@ -140,8 +142,6 @@ index 8a2c066..c81b211 100644
|
||||
RUBY_API_VERSION=@RUBY_API_VERSION@
|
||||
RUBY_PROGRAM_VERSION=@RUBY_PROGRAM_VERSION@
|
||||
arch=@arch@
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
||||
From 518850aba6eee76de7715aae8d37330e34b01983 Mon Sep 17 00:00:00 2001
|
||||
@ -171,7 +171,7 @@ diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
|
||||
index d4c110e..d39c9a6 100755
|
||||
--- a/tool/rbinstall.rb
|
||||
+++ b/tool/rbinstall.rb
|
||||
@@ -448,7 +448,7 @@ def CONFIG.[](name, mandatory = false)
|
||||
@@ -453,7 +453,7 @@ def CONFIG.[](name, mandatory = false)
|
||||
|
||||
install?(:doc, :rdoc) do
|
||||
if $rdocdir
|
||||
@ -180,9 +180,6 @@ index d4c110e..d39c9a6 100755
|
||||
prepare "rdoc", ridatadir
|
||||
install_recursive($rdocdir, ridatadir, :no_install => rdoc_noinst, :mode => $data_mode)
|
||||
end
|
||||
--
|
||||
2.23.0
|
||||
|
||||
|
||||
From 9f0ec0233f618cbb862629816b22491c3df79578 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
@ -217,7 +214,7 @@ index d4ff4a262c..3f9a5bf590 100644
|
||||
File.join parts
|
||||
end
|
||||
|
||||
@@ -234,7 +235,7 @@ def self.vendor_dir # :nodoc:
|
||||
@@ -248,7 +249,7 @@ def self.vendor_dir # :nodoc:
|
||||
return nil unless RbConfig::CONFIG.key? "vendordir"
|
||||
|
||||
File.join RbConfig::CONFIG["vendordir"], "gems",
|
||||
@ -249,8 +246,6 @@ index b25068405d..e9fef4a311 100644
|
||||
|
||||
assert_equal expected, Gem.vendor_dir
|
||||
end
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
||||
From 88c38a030c22dbf9422ece847bdfbf87d6659313 Mon Sep 17 00:00:00 2001
|
||||
@ -267,7 +262,7 @@ diff --git a/configure.ac b/configure.ac
|
||||
index a00f2b6776..999e2d6d5d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -115,7 +115,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
||||
@@ -124,7 +124,7 @@ RUBY_BASE_NAME=`echo ruby | sed "$program_transform_name"`
|
||||
RUBYW_BASE_NAME=`echo rubyw | sed "$program_transform_name"`
|
||||
AC_SUBST(RUBY_BASE_NAME)
|
||||
AC_SUBST(RUBYW_BASE_NAME)
|
||||
@ -276,6 +271,3 @@ index a00f2b6776..999e2d6d5d 100644
|
||||
|
||||
dnl checks for alternative programs
|
||||
AC_CANONICAL_BUILD
|
||||
--
|
||||
2.1.0
|
||||
|
||||
|
@ -43,7 +43,7 @@ diff --git a/common.mk b/common.mk
|
||||
index b2e5b2b6d0..f39f81da5c 100644
|
||||
--- a/common.mk
|
||||
+++ b/common.mk
|
||||
@@ -82,7 +82,8 @@ ENC_MK = enc.mk
|
||||
@@ -86,7 +86,8 @@ ENC_MK = enc.mk
|
||||
MAKE_ENC = -f $(ENC_MK) V="$(V)" UNICODE_HDR_DIR="$(UNICODE_HDR_DIR)" \
|
||||
RUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BOOTSTRAPRUBY)" $(mflags)
|
||||
|
||||
@ -57,7 +57,7 @@ diff --git a/ruby.c b/ruby.c
|
||||
index 60c57d6259..1eec16f2c8 100644
|
||||
--- a/ruby.c
|
||||
+++ b/ruby.c
|
||||
@@ -1623,10 +1623,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt)
|
||||
@@ -1572,10 +1572,14 @@ proc_options(long argc, char **argv, ruby_cmdline_options_t *opt, int envopt)
|
||||
|
||||
void Init_builtin_features(void);
|
||||
|
||||
@ -72,6 +72,3 @@ index 60c57d6259..1eec16f2c8 100644
|
||||
rb_const_remove(rb_cObject, rb_intern_const("TMP_RUBY_PREFIX"));
|
||||
}
|
||||
|
||||
--
|
||||
2.24.1
|
||||
|
||||
|
@ -20,15 +20,12 @@ 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
|
||||
@@ -22,7 +22,7 @@ def test_bug_reporter_add
|
||||
args = ["--disable-gems", "-r-test-/bug_reporter",
|
||||
@@ -28,7 +28,7 @@ def test_bug_reporter_add
|
||||
"-C", tmpdir]
|
||||
stdin = "register_sample_bug_reporter(12345); Process.kill :SEGV, $$"
|
||||
args.push("--yjit") if yjit_enabled? # We want the printed description to match this process's RUBY_DESCRIPTION
|
||||
stdin = "#{no_core}register_sample_bug_reporter(12345); Process.kill :SEGV, $$"
|
||||
- assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT")
|
||||
+ assert_in_out_err(args, stdin, [], expected_stderr, encoding: "ASCII-8BIT", timeout_error: nil)
|
||||
ensure
|
||||
FileUtils.rm_rf(tmpdir) if tmpdir
|
||||
end
|
||||
--
|
||||
2.27.0
|
||||
|
||||
|
@ -21,7 +21,7 @@ diff --git a/vm.c b/vm.c
|
||||
index 8ce8b279d4..3d189fa63a 100644
|
||||
--- a/vm.c
|
||||
+++ b/vm.c
|
||||
@@ -479,7 +479,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id,
|
||||
@@ -547,7 +547,15 @@ rb_dtrace_setup(rb_execution_context_t *ec, VALUE klass, ID id,
|
||||
}
|
||||
type = BUILTIN_TYPE(klass);
|
||||
if (type == T_CLASS || type == T_ICLASS || type == T_MODULE) {
|
||||
@ -38,6 +38,3 @@ index 8ce8b279d4..3d189fa63a 100644
|
||||
const char *classname, *filename;
|
||||
const char *methodname = rb_id2name(id);
|
||||
if (methodname && (filename = rb_source_location_cstr(&args->line_no)) != 0) {
|
||||
--
|
||||
2.34.1
|
||||
|
||||
|
@ -1,70 +0,0 @@
|
||||
From a1124dc162810f86cb0bff58cde24064cfc561bc Mon Sep 17 00:00:00 2001
|
||||
From: nagachika <nagachika@ruby-lang.org>
|
||||
Date: Fri, 9 Dec 2022 21:11:47 +0900
|
||||
Subject: [PATCH] merge revision(s) 58cc3c9f387dcf8f820b43e043b540fa06248da3:
|
||||
[Backport #19187]
|
||||
|
||||
[Bug #19187] Fix for tzdata-2022g
|
||||
|
||||
---
|
||||
test/ruby/test_time_tz.rb | 21 +++++++++++++++------
|
||||
1 file changed, 15 insertions(+), 6 deletions(-)
|
||||
---
|
||||
test/ruby/test_time_tz.rb | 21 +++++++++++++++------
|
||||
1 files changed, 15 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/test/ruby/test_time_tz.rb b/test/ruby/test_time_tz.rb
|
||||
index b6785f336028d..939f218ed4d10 100644
|
||||
--- a/test/ruby/test_time_tz.rb
|
||||
+++ b/test/ruby/test_time_tz.rb
|
||||
@@ -7,9 +7,9 @@ class TestTimeTZ < Test::Unit::TestCase
|
||||
has_lisbon_tz = true
|
||||
force_tz_test = ENV["RUBY_FORCE_TIME_TZ_TEST"] == "yes"
|
||||
case RUBY_PLATFORM
|
||||
- when /linux/
|
||||
+ when /darwin|linux/
|
||||
force_tz_test = true
|
||||
- when /darwin|freebsd|openbsd/
|
||||
+ when /freebsd|openbsd/
|
||||
has_lisbon_tz = false
|
||||
force_tz_test = true
|
||||
end
|
||||
@@ -95,6 +95,9 @@ def group_by(e, &block)
|
||||
CORRECT_KIRITIMATI_SKIP_1994 = with_tz("Pacific/Kiritimati") {
|
||||
Time.local(1994, 12, 31, 0, 0, 0).year == 1995
|
||||
}
|
||||
+ CORRECT_SINGAPORE_1982 = with_tz("Asia/Singapore") {
|
||||
+ "2022g" if Time.local(1981, 12, 31, 23, 59, 59).utc_offset == 8*3600
|
||||
+ }
|
||||
|
||||
def time_to_s(t)
|
||||
t.to_s
|
||||
@@ -140,9 +143,12 @@ def test_america_managua
|
||||
|
||||
def test_asia_singapore
|
||||
with_tz(tz="Asia/Singapore") {
|
||||
- assert_time_constructor(tz, "1981-12-31 23:59:59 +0730", :local, [1981,12,31,23,59,59])
|
||||
- assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,0,0])
|
||||
- assert_time_constructor(tz, "1982-01-01 00:59:59 +0800", :local, [1982,1,1,0,29,59])
|
||||
+ assert_time_constructor(tz, "1981-12-31 23:29:59 +0730", :local, [1981,12,31,23,29,59])
|
||||
+ if CORRECT_SINGAPORE_1982
|
||||
+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1981,12,31,23,30,00])
|
||||
+ assert_time_constructor(tz, "1982-01-01 00:00:00 +0800", :local, [1982,1,1,0,0,0])
|
||||
+ assert_time_constructor(tz, "1982-01-01 00:29:59 +0800", :local, [1982,1,1,0,29,59])
|
||||
+ end
|
||||
assert_time_constructor(tz, "1982-01-01 00:30:00 +0800", :local, [1982,1,1,0,30,0])
|
||||
}
|
||||
end
|
||||
@@ -450,8 +456,11 @@ def self.gen_zdump_test(data)
|
||||
America/Managua Wed Jan 1 04:59:59 1997 UTC = Tue Dec 31 23:59:59 1996 EST isdst=0 gmtoff=-18000
|
||||
America/Managua Wed Jan 1 05:00:00 1997 UTC = Tue Dec 31 23:00:00 1996 CST isdst=0 gmtoff=-21600
|
||||
Asia/Singapore Sun Aug 8 16:30:00 1965 UTC = Mon Aug 9 00:00:00 1965 SGT isdst=0 gmtoff=27000
|
||||
-Asia/Singapore Thu Dec 31 16:29:59 1981 UTC = Thu Dec 31 23:59:59 1981 SGT isdst=0 gmtoff=27000
|
||||
+Asia/Singapore Thu Dec 31 15:59:59 1981 UTC = Thu Dec 31 23:29:59 1981 SGT isdst=0 gmtoff=27000
|
||||
Asia/Singapore Thu Dec 31 16:30:00 1981 UTC = Fri Jan 1 00:30:00 1982 SGT isdst=0 gmtoff=28800
|
||||
+End
|
||||
+ gen_zdump_test <<'End' if CORRECT_SINGAPORE_1982
|
||||
+Asia/Singapore Thu Dec 31 16:00:00 1981 UTC = Fri Jan 1 00:00:00 1982 SGT isdst=0 gmtoff=28800
|
||||
End
|
||||
gen_zdump_test CORRECT_TOKYO_DST_1951 ? <<'End' + (CORRECT_TOKYO_DST_1951 < "2018f" ? <<'2018e' : <<'2018f') : <<'End'
|
||||
Asia/Tokyo Sat May 5 14:59:59 1951 UTC = Sat May 5 23:59:59 1951 JST isdst=0 gmtoff=32400
|
@ -1,291 +0,0 @@
|
||||
From 4d9cc9afa47981520d991d19fd78b322f1ba9f2a Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Wed, 22 Jun 2022 01:03:49 +0200
|
||||
Subject: [PATCH] Detect compaction support during runtime.
|
||||
|
||||
The patch is created by backporting 3 commits from
|
||||
the upstream Ruby master branch in the chronological order below.
|
||||
|
||||
https://github.com/ruby/ruby/commit/52d42e702375446746164a0251e1a10bce813b78
|
||||
https://github.com/ruby/ruby/commit/79eaaf2d0b641710613f16525e4b4c439dfe854e
|
||||
https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20
|
||||
|
||||
== How to create this patch ==
|
||||
|
||||
Download Ruby source code.
|
||||
```
|
||||
$ git clone https://github.com/ruby/ruby.git
|
||||
$ cd ruby
|
||||
```
|
||||
|
||||
First create a commit squashed from the 3 commits above.
|
||||
Checkout the second commmit above, and create a temporary branch.
|
||||
```
|
||||
$ git checkout 79eaaf2d0b641710613f16525e4b4c439dfe854e
|
||||
$ git checkout -b wip/detect-compaction-runtime-tmp
|
||||
```
|
||||
|
||||
Cherry pick the third commit on the second commit.
|
||||
```
|
||||
$ git cherry-pick 2c190863239bee3f54cfb74b16bb6ea4cae6ed20
|
||||
```
|
||||
|
||||
Squash the last 3 commits on the branch.
|
||||
```
|
||||
$ git rebase -i 2223eb082afa6d05321b69df783d4133b9aacba6
|
||||
```
|
||||
|
||||
Then checkout Ruby 3.1.2 branch.
|
||||
Create a new branch.
|
||||
Merge the Fedora Ruby's
|
||||
ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch.
|
||||
```
|
||||
$ git checkout v3_1_2
|
||||
$ git checkout -b wip/detect-compaction-runtime
|
||||
$ patch -p1 <
|
||||
~/fed/ruby/ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch
|
||||
$ git add gc.c gc.rb test/ruby/test_gc_compact.rb
|
||||
$ git commit
|
||||
```
|
||||
|
||||
Merge the squashed one commit on the
|
||||
`wip/detect-compaction-runtime-tmp` branch
|
||||
into the `wip/detect-compaction-runtime` branch.
|
||||
```
|
||||
$ git cherry-pick <the squashed commit above>
|
||||
```
|
||||
|
||||
Fix conflicts seeing the difference by `git show <the squashed commit
|
||||
above>`
|
||||
on another terminal.
|
||||
```
|
||||
$ vi gc.c
|
||||
$ git add gc.c
|
||||
$ git commit
|
||||
```
|
||||
|
||||
== Notes for the patch ==
|
||||
|
||||
```
|
||||
+# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC)
|
||||
```
|
||||
|
||||
We use the USE_MMAP_ALIGNED_ALLOC instead of HEAP_PAGE_ALLOC_USE_MMAP on
|
||||
the line above. Because while the Ruby on the master branch replaced the
|
||||
USE_MMAP_ALIGNED_ALLOC with HEAP_PAGE_ALLOC_USE_MMAP, Ruby 3.1.2 doesn't.
|
||||
See <https://github.com/ruby/ruby/commit/fe21b7794af0cdb7ebd502e2c0da38c68fd89839>.
|
||||
|
||||
```
|
||||
+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1);
|
||||
```
|
||||
|
||||
We added the line in the case that GC_COMPACTION_SUPPORTED is true.
|
||||
Because while the Ruby on the master branch defines the
|
||||
GC.verify_compaction_references in the gc.rb in
|
||||
the case that GC_COMPACTION_SUPPORTED is true, Ruby 3.1.2
|
||||
doesn't define it in the gc.rb.
|
||||
See <https://github.com/ruby/ruby/commit/b96a3a6fd2093e1dbea5491c002da515652dd347>.
|
||||
|
||||
```
|
||||
+ OPT(GC_COMPACTION_SUPPORTED);
|
||||
```
|
||||
|
||||
We added the line to expose the C macro to Ruby level.
|
||||
In Ruby the macro existance can then be checked like so:
|
||||
```Ruby
|
||||
GC::OPTS.include?("GC_COMPACTION_SUPPORTED")
|
||||
```
|
||||
It will return `true` if the GC_COMPACTION_SUPPORTED evaluates to `true` on the
|
||||
C level, `false` otherwise.
|
||||
See <https://github.com/ruby/ruby/blob/b96a3a6fd2093e1dbea5491c002da515652dd347/gc.c#L14091>
|
||||
|
||||
== Original commit messages ==
|
||||
|
||||
This is a combination of 3 commits.
|
||||
This is the 1st commit message:
|
||||
~~~
|
||||
Rename GC_COMPACTION_SUPPORTED
|
||||
|
||||
Naming this macro GC_COMPACTION_SUPPORTED is misleading because it
|
||||
only checks whether compaction is supported at compile time.
|
||||
|
||||
[Bug #18829]
|
||||
~~~
|
||||
|
||||
This is the commit message #2:
|
||||
~~~
|
||||
Include runtime checks for compaction support
|
||||
|
||||
Commit 0c36ba53192c5a0d245c9b626e4346a32d7d144e changed GC compaction
|
||||
methods to not be implemented when not supported. However, that commit
|
||||
only does compile time checks (which currently only checks for WASM),
|
||||
but there are additional compaction support checks during run time.
|
||||
|
||||
This commit changes it so that GC compaction methods aren't defined
|
||||
during run time if the platform does not support GC compaction.
|
||||
|
||||
[Bug #18829]
|
||||
~~~
|
||||
|
||||
This is the commit message #3:
|
||||
~~~
|
||||
Suppress code unused unless GC_CAN_COMPILE_COMPACTION
|
||||
~~~
|
||||
---
|
||||
gc.c | 63 +++++++++++++++++++++++++++++++++++++++++-------------------
|
||||
1 file changed, 43 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/gc.c b/gc.c
|
||||
index 1c35856c44..bff0666a17 100644
|
||||
--- a/gc.c
|
||||
+++ b/gc.c
|
||||
@@ -4984,6 +4984,23 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap)
|
||||
static void gc_update_references(rb_objspace_t * objspace);
|
||||
static void invalidate_moved_page(rb_objspace_t *objspace, struct heap_page *page);
|
||||
|
||||
+#ifndef GC_CAN_COMPILE_COMPACTION
|
||||
+#if defined(__wasi__) /* WebAssembly doesn't support signals */
|
||||
+# define GC_CAN_COMPILE_COMPACTION 0
|
||||
+#else
|
||||
+# define GC_CAN_COMPILE_COMPACTION 1
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#if defined(__MINGW32__) || defined(_WIN32)
|
||||
+# define GC_COMPACTION_SUPPORTED 1
|
||||
+#else
|
||||
+/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for
|
||||
+ * the read barrier, so we must disable compaction. */
|
||||
+# define GC_COMPACTION_SUPPORTED (GC_CAN_COMPILE_COMPACTION && USE_MMAP_ALIGNED_ALLOC)
|
||||
+#endif
|
||||
+
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
static void
|
||||
read_barrier_handler(uintptr_t address)
|
||||
{
|
||||
@@ -5004,6 +5021,7 @@ read_barrier_handler(uintptr_t address)
|
||||
}
|
||||
RB_VM_LOCK_LEAVE();
|
||||
}
|
||||
+#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
static LPTOP_LEVEL_EXCEPTION_FILTER old_handler;
|
||||
@@ -9267,13 +9285,7 @@ gc_start_internal(rb_execution_context_t *ec, VALUE self, VALUE full_mark, VALUE
|
||||
|
||||
/* For now, compact implies full mark / sweep, so ignore other flags */
|
||||
if (RTEST(compact)) {
|
||||
- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for
|
||||
- * the read barrier, so we must disable compaction. */
|
||||
-#if !defined(__MINGW32__) && !defined(_WIN32)
|
||||
- if (!USE_MMAP_ALIGNED_ALLOC) {
|
||||
- rb_raise(rb_eNotImpError, "Compaction isn't available on this platform");
|
||||
- }
|
||||
-#endif
|
||||
+ GC_ASSERT(GC_COMPACTION_SUPPORTED);
|
||||
|
||||
reason |= GPR_FLAG_COMPACT;
|
||||
}
|
||||
@@ -9438,7 +9450,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size)
|
||||
return (VALUE)src;
|
||||
}
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
static int
|
||||
compare_free_slots(const void *left, const void *right, void *dummy)
|
||||
{
|
||||
@@ -10166,7 +10178,7 @@ gc_update_references(rb_objspace_t *objspace)
|
||||
gc_update_table_refs(objspace, finalizer_table);
|
||||
}
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}}
|
||||
@@ -10207,7 +10219,7 @@ gc_compact_stats(VALUE self)
|
||||
# define gc_compact_stats rb_f_notimplement
|
||||
#endif
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
static void
|
||||
root_obj_check_moved_i(const char *category, VALUE obj, void *data)
|
||||
{
|
||||
@@ -10286,7 +10298,7 @@ gc_compact(VALUE self)
|
||||
# define gc_compact rb_f_notimplement
|
||||
#endif
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash
|
||||
@@ -10817,7 +10829,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _)
|
||||
return rb_gc_disable();
|
||||
}
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.auto_compact = flag
|
||||
@@ -10831,8 +10843,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _)
|
||||
static VALUE
|
||||
gc_set_auto_compact(VALUE _, VALUE v)
|
||||
{
|
||||
- /* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for
|
||||
- * the read barrier, so we must disable automatic compaction. */
|
||||
+ GC_ASSERT(GC_COMPACTION_SUPPORTED);
|
||||
|
||||
ruby_enable_autocompact = RTEST(v);
|
||||
return v;
|
||||
@@ -10841,7 +10852,8 @@ gc_set_auto_compact(VALUE _, VALUE v)
|
||||
# define gc_set_auto_compact rb_f_notimplement
|
||||
#endif
|
||||
|
||||
-#if GC_COMPACTION_SUPPORTED
|
||||
+
|
||||
+#if GC_CAN_COMPILE_COMPACTION
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.auto_compact -> true or false
|
||||
@@ -13714,11 +13726,21 @@ Init_GC(void)
|
||||
rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0);
|
||||
rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0);
|
||||
#endif
|
||||
- rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0);
|
||||
- rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0);
|
||||
- rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1);
|
||||
- rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0);
|
||||
- rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1);
|
||||
+ if (GC_COMPACTION_SUPPORTED) {
|
||||
+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1);
|
||||
+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1);
|
||||
+ }
|
||||
+ else {
|
||||
+ rb_define_singleton_method(rb_mGC, "compact", rb_f_notimplement, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact", rb_f_notimplement, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact=", rb_f_notimplement, 1);
|
||||
+ rb_define_singleton_method(rb_mGC, "latest_compact_info", rb_f_notimplement, 0);
|
||||
+ /* When !GC_COMPACTION_SUPPORTED, this method is not defined in gc.rb */
|
||||
+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1);
|
||||
+ }
|
||||
|
||||
#if GC_DEBUG_STRESS_TO_CLASS
|
||||
rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1);
|
||||
@@ -13742,6 +13764,7 @@ Init_GC(void)
|
||||
OPT(MALLOC_ALLOCATED_SIZE);
|
||||
OPT(MALLOC_ALLOCATED_SIZE_CHECK);
|
||||
OPT(GC_PROFILE_DETAIL_MEMORY);
|
||||
+ OPT(GC_COMPACTION_SUPPORTED);
|
||||
#undef OPT
|
||||
OBJ_FREEZE(opts);
|
||||
}
|
||||
--
|
||||
2.36.1
|
||||
|
73
ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch
Normal file
73
ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From 5e2f8761b2342ee58f9689a7d62d48ec031e59c0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 2 Jan 2023 14:30:13 +0100
|
||||
Subject: [PATCH] Revert "Fix test-syntax-suggest order"
|
||||
|
||||
This reverts commit 18c1ca8f4c0748905d5cedb6c044df507ea8ad6a.
|
||||
---
|
||||
common.mk | 12 ++++--------
|
||||
defs/gmake.mk | 2 +-
|
||||
2 files changed, 5 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/common.mk b/common.mk
|
||||
index d0558697d7..e73841aae7 100644
|
||||
--- a/common.mk
|
||||
+++ b/common.mk
|
||||
@@ -767,7 +767,8 @@ clean-spec: PHONY
|
||||
-$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD)
|
||||
-$(Q) $(RMALL) rubyspec_temp
|
||||
|
||||
-check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all
|
||||
+check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \
|
||||
+ $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest
|
||||
$(ECHO) check succeeded
|
||||
-$(Q) : : "run only on sh"; \
|
||||
if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \
|
||||
@@ -903,8 +904,6 @@ yes-test-spec: test-spec-precheck
|
||||
$(ACTIONS_ENDGROUP)
|
||||
no-test-spec:
|
||||
|
||||
-check: $(DOT_WAIT) test-spec
|
||||
-
|
||||
RUNNABLE = $(LIBRUBY_RELATIVE:no=un)-runnable
|
||||
runnable: $(RUNNABLE) prog $(tooldir)/mkrunnable.rb PHONY
|
||||
$(Q) $(MINIRUBY) $(tooldir)/mkrunnable.rb -v $(EXTOUT)
|
||||
@@ -1457,7 +1456,6 @@ test-syntax-suggest-precheck: $(TEST_RUNNABLE)-test-syntax-suggest-precheck
|
||||
no-test-syntax-suggest-precheck:
|
||||
yes-test-syntax-suggest-precheck: main
|
||||
|
||||
-test-syntax-suggest-prepare: $(TEST_RUNNABLE)-test-syntax-suggest-prepare
|
||||
no-test-syntax-suggest-prepare: no-test-syntax-suggest-precheck
|
||||
yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck
|
||||
$(ACTIONS_GROUP)
|
||||
@@ -1467,15 +1465,13 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck
|
||||
|
||||
RSPECOPTS =
|
||||
SYNTAX_SUGGEST_SPECS =
|
||||
-PREPARE_SYNTAX_SUGGEST = test-syntax-suggest-prepare
|
||||
+PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare
|
||||
test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest
|
||||
-yes-test-syntax-suggest: yes-$(PREPARE_SYNTAX_SUGGEST)
|
||||
+yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST)
|
||||
$(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \
|
||||
--require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS)
|
||||
no-test-syntax-suggest:
|
||||
|
||||
-check: $(DOT_WAIT) $(TEST_RUNNABLE)-$(PREPARE_SYNTAX_SUGGEST) test-syntax-suggest
|
||||
-
|
||||
test-bundler-precheck: $(TEST_RUNNABLE)-test-bundler-precheck
|
||||
no-test-bundler-precheck:
|
||||
yes-test-bundler-precheck: main $(arch)-fake.rb
|
||||
diff --git a/defs/gmake.mk b/defs/gmake.mk
|
||||
index 54fef6685f..0aa403a4eb 100644
|
||||
--- a/defs/gmake.mk
|
||||
+++ b/defs/gmake.mk
|
||||
@@ -84,7 +84,7 @@ endif
|
||||
ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \
|
||||
btest-ruby test-knownbug test-basic \
|
||||
test-testframework test-tool test-ruby test-all \
|
||||
- test-spec test-syntax-suggest-prepare test-syntax-suggest \
|
||||
+ test-spec test-syntax-suggest \
|
||||
test-bundler-prepare test-bundler test-bundler-parallel \
|
||||
test-bundled-gems-precheck test-bundled-gems-fetch \
|
||||
test-bundled-gems-prepare test-bundled-gems-run \
|
67
ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch
Normal file
67
ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From cf60e383a9c98da5cd75012f2aabfa4a2774aade Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Mon, 2 Jan 2023 14:16:39 +0100
|
||||
Subject: [PATCH] Revert "Test syntax_suggest by `make check`"
|
||||
|
||||
This reverts commit cae53842735237ccf71a13873fd0d1ae7f165582.
|
||||
---
|
||||
common.mk | 6 ++----
|
||||
defs/gmake.mk | 6 ++----
|
||||
2 files changed, 4 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/common.mk b/common.mk
|
||||
index 27f6a9d89d..8021f03a58 100644
|
||||
--- a/common.mk
|
||||
+++ b/common.mk
|
||||
@@ -767,8 +767,7 @@ clean-spec: PHONY
|
||||
-$(Q) $(RMDIRS) $(RUBYSPEC_CAPIEXT) 2> $(NULL) || $(NULLCMD)
|
||||
-$(Q) $(RMALL) rubyspec_temp
|
||||
|
||||
-check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all \
|
||||
- $(DOT_WAIT) test-spec $(DOT_WAIT) test-syntax-suggest
|
||||
+check: main $(DOT_WAIT) test $(DOT_WAIT) test-tool $(DOT_WAIT) test-all $(DOT_WAIT) test-spec
|
||||
$(ECHO) check succeeded
|
||||
-$(Q) : : "run only on sh"; \
|
||||
if [ x"$(GIT)" != x ] && $(CHDIR) "$(srcdir)" && \
|
||||
@@ -1465,9 +1464,8 @@ yes-test-syntax-suggest-prepare: yes-test-syntax-suggest-precheck
|
||||
|
||||
RSPECOPTS =
|
||||
SYNTAX_SUGGEST_SPECS =
|
||||
-PREPARE_SYNTAX_SUGGEST = yes-test-syntax-suggest-prepare
|
||||
test-syntax-suggest: $(TEST_RUNNABLE)-test-syntax-suggest
|
||||
-yes-test-syntax-suggest: $(PREPARE_SYNTAX_SUGGEST)
|
||||
+yes-test-syntax-suggest: yes-test-syntax-suggest-prepare
|
||||
$(XRUBY) -C $(srcdir) -Ispec/syntax_suggest .bundle/bin/rspec \
|
||||
--require spec_helper $(RSPECOPTS) spec/syntax_suggest/$(SYNTAX_SUGGEST_SPECS)
|
||||
no-test-syntax-suggest:
|
||||
diff --git a/defs/gmake.mk b/defs/gmake.mk
|
||||
index 0aa403a4eb..dc9d31f49e 100644
|
||||
--- a/defs/gmake.mk
|
||||
+++ b/defs/gmake.mk
|
||||
@@ -27,7 +27,7 @@ TEST_DEPENDS := $(filter-out commit $(TEST_TARGETS),$(MAKECMDGOALS))
|
||||
TEST_TARGETS := $(patsubst great,exam,$(TEST_TARGETS))
|
||||
TEST_DEPENDS := $(filter-out great $(TEST_TARGETS),$(TEST_DEPENDS))
|
||||
TEST_TARGETS := $(patsubst exam,check,$(TEST_TARGETS))
|
||||
-TEST_TARGETS := $(patsubst check,test-syntax-suggest test-spec test-all test-tool test-short,$(TEST_TARGETS))
|
||||
+TEST_TARGETS := $(patsubst check,test-spec test-all test-tool test-short,$(TEST_TARGETS))
|
||||
TEST_TARGETS := $(patsubst test-rubyspec,test-spec,$(TEST_TARGETS))
|
||||
TEST_DEPENDS := $(filter-out exam check test-spec $(TEST_TARGETS),$(TEST_DEPENDS))
|
||||
TEST_TARGETS := $(patsubst love,check,$(TEST_TARGETS))
|
||||
@@ -40,7 +40,6 @@ TEST_TARGETS := $(patsubst test-short,btest-ruby test-knownbug test-basic,$(TEST
|
||||
TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-run,$(TEST_TARGETS))
|
||||
TEST_TARGETS := $(patsubst test-bundled-gems-run,test-bundled-gems-run $(PREPARE_BUNDLED_GEMS),$(TEST_TARGETS))
|
||||
TEST_TARGETS := $(patsubst test-bundled-gems-prepare,test-bundled-gems-prepare $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch,$(TEST_TARGETS))
|
||||
-TEST_TARGETS := $(patsubst test-syntax-suggest,test-syntax-suggest $(PREPARE_SYNTAX_SUGGEST),$(TEST_TARGETS))
|
||||
TEST_DEPENDS := $(filter-out test-short $(TEST_TARGETS),$(TEST_DEPENDS))
|
||||
TEST_DEPENDS += $(if $(filter great exam love check,$(MAKECMDGOALS)),all exts)
|
||||
endif
|
||||
@@ -84,8 +83,7 @@ endif
|
||||
ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \
|
||||
btest-ruby test-knownbug test-basic \
|
||||
test-testframework test-tool test-ruby test-all \
|
||||
- test-spec test-syntax-suggest \
|
||||
- test-bundler-prepare test-bundler test-bundler-parallel \
|
||||
+ test-spec test-bundler-prepare test-bundler test-bundler-parallel \
|
||||
test-bundled-gems-precheck test-bundled-gems-fetch \
|
||||
test-bundled-gems-prepare test-bundled-gems-run \
|
||||
)
|
@ -1,502 +0,0 @@
|
||||
From 1b3502156a665e2782f366aa5ac8c3bfd7637ab8 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Dalessio <mike.dalessio@gmail.com>
|
||||
Date: Mon, 23 May 2022 15:40:22 -0400
|
||||
Subject: [PATCH 1/2] Move compaction-related methods into gc.c
|
||||
|
||||
These methods are removed from gc.rb and added to gc.c:
|
||||
|
||||
- GC.compact
|
||||
- GC.auto_compact
|
||||
- GC.auto_compact=
|
||||
- GC.latest_compact_info
|
||||
- GC.verify_compaction_references
|
||||
|
||||
This is a prefactor to allow setting these methods to
|
||||
`rb_f_notimplement` in a followup commit.
|
||||
---
|
||||
gc.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
|
||||
gc.rb | 68 ---------------------------------------
|
||||
2 files changed, 91 insertions(+), 78 deletions(-)
|
||||
|
||||
diff --git a/gc.c b/gc.c
|
||||
index ef9327df1f..1c35856c44 100644
|
||||
--- a/gc.c
|
||||
+++ b/gc.c
|
||||
@@ -10164,8 +10164,20 @@ gc_update_references(rb_objspace_t *objspace)
|
||||
gc_update_table_refs(objspace, finalizer_table);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * call-seq:
|
||||
+ * GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}}
|
||||
+ *
|
||||
+ * Returns information about object moved in the most recent GC compaction.
|
||||
+ *
|
||||
+ * The returned hash has two keys :considered and :moved. The hash for
|
||||
+ * :considered lists the number of objects that were considered for movement
|
||||
+ * by the compactor, and the :moved hash lists the number of objects that
|
||||
+ * were actually moved. Some objects can't be moved (maybe they were pinned)
|
||||
+ * so these numbers can be used to calculate compaction efficiency.
|
||||
+ */
|
||||
static VALUE
|
||||
-gc_compact_stats(rb_execution_context_t *ec, VALUE self)
|
||||
+gc_compact_stats(VALUE self)
|
||||
{
|
||||
size_t i;
|
||||
rb_objspace_t *objspace = &rb_objspace;
|
||||
@@ -10238,22 +10250,70 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * call-seq:
|
||||
+ * GC.compact
|
||||
+ *
|
||||
+ * This function compacts objects together in Ruby's heap. It eliminates
|
||||
+ * unused space (or fragmentation) in the heap by moving objects in to that
|
||||
+ * unused space. This function returns a hash which contains statistics about
|
||||
+ * which objects were moved. See `GC.latest_gc_info` for details about
|
||||
+ * compaction statistics.
|
||||
+ *
|
||||
+ * This method is implementation specific and not expected to be implemented
|
||||
+ * in any implementation besides MRI.
|
||||
+ */
|
||||
static VALUE
|
||||
-gc_compact(rb_execution_context_t *ec, VALUE self)
|
||||
+gc_compact(VALUE self)
|
||||
{
|
||||
/* Run GC with compaction enabled */
|
||||
- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue);
|
||||
+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue);
|
||||
|
||||
- return gc_compact_stats(ec, self);
|
||||
+ return gc_compact_stats(self);
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * call-seq:
|
||||
+ * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash
|
||||
+ *
|
||||
+ * Verify compaction reference consistency.
|
||||
+ *
|
||||
+ * This method is implementation specific. During compaction, objects that
|
||||
+ * were moved are replaced with T_MOVED objects. No object should have a
|
||||
+ * reference to a T_MOVED object after compaction.
|
||||
+ *
|
||||
+ * This function doubles the heap to ensure room to move all objects,
|
||||
+ * compacts the heap to make sure everything moves, updates all references,
|
||||
+ * then performs a full GC. If any object contains a reference to a T_MOVED
|
||||
+ * object, that object should be pushed on the mark stack, and will
|
||||
+ * make a SEGV.
|
||||
+ */
|
||||
static VALUE
|
||||
-gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE double_heap, VALUE toward_empty)
|
||||
+gc_verify_compaction_references(int argc, VALUE *argv, VALUE self)
|
||||
{
|
||||
rb_objspace_t *objspace = &rb_objspace;
|
||||
+ VALUE kwargs, double_heap = Qfalse, toward_empty = Qfalse;
|
||||
+ static ID id_toward, id_double_heap, id_empty;
|
||||
+
|
||||
+ if (!id_toward) {
|
||||
+ id_toward = rb_intern("toward");
|
||||
+ id_double_heap = rb_intern("double_heap");
|
||||
+ id_empty = rb_intern("empty");
|
||||
+ }
|
||||
+
|
||||
+ rb_scan_args(argc, argv, ":", &kwargs);
|
||||
+ if (!NIL_P(kwargs)) {
|
||||
+ if (rb_hash_has_key(kwargs, ID2SYM(id_toward))) {
|
||||
+ VALUE toward = rb_hash_aref(kwargs, ID2SYM(id_toward));
|
||||
+ toward_empty = (toward == ID2SYM(id_empty)) ? Qtrue : Qfalse;
|
||||
+ }
|
||||
+ if (rb_hash_has_key(kwargs, ID2SYM(id_double_heap))) {
|
||||
+ double_heap = rb_hash_aref(kwargs, ID2SYM(id_double_heap));
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/* Clear the heap. */
|
||||
- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qfalse);
|
||||
+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qfalse);
|
||||
|
||||
RB_VM_LOCK_ENTER();
|
||||
{
|
||||
@@ -10273,12 +10333,12 @@ gc_verify_compaction_references(rb_execution_context_t *ec, VALUE self, VALUE do
|
||||
}
|
||||
RB_VM_LOCK_LEAVE();
|
||||
|
||||
- gc_start_internal(ec, self, Qtrue, Qtrue, Qtrue, Qtrue);
|
||||
+ gc_start_internal(NULL, self, Qtrue, Qtrue, Qtrue, Qtrue);
|
||||
|
||||
objspace_reachable_objects_from_root(objspace, root_obj_check_moved_i, NULL);
|
||||
objspace_each_objects(objspace, heap_check_moved_i, NULL, TRUE);
|
||||
|
||||
- return gc_compact_stats(ec, self);
|
||||
+ return gc_compact_stats(self);
|
||||
}
|
||||
|
||||
VALUE
|
||||
@@ -10739,8 +10799,18 @@ gc_disable(rb_execution_context_t *ec, VALUE _)
|
||||
return rb_gc_disable();
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * call-seq:
|
||||
+ * GC.auto_compact = flag
|
||||
+ *
|
||||
+ * Updates automatic compaction mode.
|
||||
+ *
|
||||
+ * When enabled, the compactor will execute on every major collection.
|
||||
+ *
|
||||
+ * Enabling compaction will degrade performance on major collections.
|
||||
+ */
|
||||
static VALUE
|
||||
-gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v)
|
||||
+gc_set_auto_compact(VALUE _, VALUE v)
|
||||
{
|
||||
/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for
|
||||
* the read barrier, so we must disable automatic compaction. */
|
||||
@@ -10754,8 +10824,14 @@ gc_set_auto_compact(rb_execution_context_t *ec, VALUE _, VALUE v)
|
||||
return v;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * call-seq:
|
||||
+ * GC.auto_compact -> true or false
|
||||
+ *
|
||||
+ * Returns whether or not automatic compaction has been enabled.
|
||||
+ */
|
||||
static VALUE
|
||||
-gc_get_auto_compact(rb_execution_context_t *ec, VALUE _)
|
||||
+gc_get_auto_compact(VALUE _)
|
||||
{
|
||||
return RBOOL(ruby_enable_autocompact);
|
||||
}
|
||||
@@ -13617,6 +13693,11 @@ Init_GC(void)
|
||||
rb_define_singleton_method(rb_mGC, "malloc_allocated_size", gc_malloc_allocated_size, 0);
|
||||
rb_define_singleton_method(rb_mGC, "malloc_allocations", gc_malloc_allocations, 0);
|
||||
#endif
|
||||
+ rb_define_singleton_method(rb_mGC, "compact", gc_compact, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact", gc_get_auto_compact, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "auto_compact=", gc_set_auto_compact, 1);
|
||||
+ rb_define_singleton_method(rb_mGC, "latest_compact_info", gc_compact_stats, 0);
|
||||
+ rb_define_singleton_method(rb_mGC, "verify_compaction_references", gc_verify_compaction_references, -1);
|
||||
|
||||
#if GC_DEBUG_STRESS_TO_CLASS
|
||||
rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1);
|
||||
diff --git a/gc.rb b/gc.rb
|
||||
index 72637f3796..9265dd7b57 100644
|
||||
--- a/gc.rb
|
||||
+++ b/gc.rb
|
||||
@@ -38,27 +38,6 @@ def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true
|
||||
Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false
|
||||
end
|
||||
|
||||
- # call-seq:
|
||||
- # GC.auto_compact -> true or false
|
||||
- #
|
||||
- # Returns whether or not automatic compaction has been enabled.
|
||||
- #
|
||||
- def self.auto_compact
|
||||
- Primitive.gc_get_auto_compact
|
||||
- end
|
||||
-
|
||||
- # call-seq:
|
||||
- # GC.auto_compact = flag
|
||||
- #
|
||||
- # Updates automatic compaction mode.
|
||||
- #
|
||||
- # When enabled, the compactor will execute on every major collection.
|
||||
- #
|
||||
- # Enabling compaction will degrade performance on major collections.
|
||||
- def self.auto_compact=(flag)
|
||||
- Primitive.gc_set_auto_compact(flag)
|
||||
- end
|
||||
-
|
||||
# call-seq:
|
||||
# GC.enable -> true or false
|
||||
#
|
||||
@@ -210,53 +189,6 @@ def self.latest_gc_info hash_or_key = nil
|
||||
Primitive.gc_latest_gc_info hash_or_key
|
||||
end
|
||||
|
||||
- # call-seq:
|
||||
- # GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}}
|
||||
- #
|
||||
- # Returns information about object moved in the most recent GC compaction.
|
||||
- #
|
||||
- # The returned hash has two keys :considered and :moved. The hash for
|
||||
- # :considered lists the number of objects that were considered for movement
|
||||
- # by the compactor, and the :moved hash lists the number of objects that
|
||||
- # were actually moved. Some objects can't be moved (maybe they were pinned)
|
||||
- # so these numbers can be used to calculate compaction efficiency.
|
||||
- def self.latest_compact_info
|
||||
- Primitive.gc_compact_stats
|
||||
- end
|
||||
-
|
||||
- # call-seq:
|
||||
- # GC.compact
|
||||
- #
|
||||
- # This function compacts objects together in Ruby's heap. It eliminates
|
||||
- # unused space (or fragmentation) in the heap by moving objects in to that
|
||||
- # unused space. This function returns a hash which contains statistics about
|
||||
- # which objects were moved. See `GC.latest_gc_info` for details about
|
||||
- # compaction statistics.
|
||||
- #
|
||||
- # This method is implementation specific and not expected to be implemented
|
||||
- # in any implementation besides MRI.
|
||||
- def self.compact
|
||||
- Primitive.gc_compact
|
||||
- end
|
||||
-
|
||||
- # call-seq:
|
||||
- # GC.verify_compaction_references(toward: nil, double_heap: false) -> hash
|
||||
- #
|
||||
- # Verify compaction reference consistency.
|
||||
- #
|
||||
- # This method is implementation specific. During compaction, objects that
|
||||
- # were moved are replaced with T_MOVED objects. No object should have a
|
||||
- # reference to a T_MOVED object after compaction.
|
||||
- #
|
||||
- # This function doubles the heap to ensure room to move all objects,
|
||||
- # compacts the heap to make sure everything moves, updates all references,
|
||||
- # then performs a full GC. If any object contains a reference to a T_MOVED
|
||||
- # object, that object should be pushed on the mark stack, and will
|
||||
- # make a SEGV.
|
||||
- def self.verify_compaction_references(toward: nil, double_heap: false)
|
||||
- Primitive.gc_verify_compaction_references(double_heap, toward == :empty)
|
||||
- end
|
||||
-
|
||||
# call-seq:
|
||||
# GC.using_rvargc? -> true or false
|
||||
#
|
||||
|
||||
From d3273559356db6852d1fd794f0f076fba100e09e Mon Sep 17 00:00:00 2001
|
||||
From: Mike Dalessio <mike.dalessio@gmail.com>
|
||||
Date: Mon, 23 May 2022 17:31:14 -0400
|
||||
Subject: [PATCH 2/2] Define unsupported GC compaction methods as
|
||||
rb_f_notimplement
|
||||
|
||||
Fixes [Bug #18779]
|
||||
|
||||
Define the following methods as `rb_f_notimplement` on unsupported
|
||||
platforms:
|
||||
|
||||
- GC.compact
|
||||
- GC.auto_compact
|
||||
- GC.auto_compact=
|
||||
- GC.latest_compact_info
|
||||
- GC.verify_compaction_references
|
||||
|
||||
This change allows users to call `GC.respond_to?(:compact)` to
|
||||
properly test for compaction support. Previously, it was necessary to
|
||||
invoke `GC.compact` or `GC.verify_compaction_references` and check if
|
||||
those methods raised `NotImplementedError` to determine if compaction
|
||||
was supported.
|
||||
|
||||
This follows the precedent set for other platform-specific
|
||||
methods. For example, in `process.c` for methods such as
|
||||
`Process.fork`, `Process.setpgid`, and `Process.getpriority`.
|
||||
---
|
||||
gc.c | 31 +++++++++++++++----
|
||||
test/ruby/test_gc_compact.rb | 58 ++++++++++++++++++++++++++----------
|
||||
2 files changed, 69 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/gc.c b/gc.c
|
||||
index 92ed76cf96..d71924846a 100644
|
||||
--- a/gc.c
|
||||
+++ b/gc.c
|
||||
@@ -9438,6 +9438,7 @@ gc_move(rb_objspace_t *objspace, VALUE scan, VALUE free, size_t slot_size)
|
||||
return (VALUE)src;
|
||||
}
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
static int
|
||||
compare_free_slots(const void *left, const void *right, void *dummy)
|
||||
{
|
||||
@@ -9485,6 +9486,7 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace)
|
||||
free(page_list);
|
||||
}
|
||||
}
|
||||
+#endif
|
||||
|
||||
static void
|
||||
gc_ref_update_array(rb_objspace_t * objspace, VALUE v)
|
||||
@@ -10164,6 +10166,7 @@ gc_update_references(rb_objspace_t *objspace)
|
||||
gc_update_table_refs(objspace, finalizer_table);
|
||||
}
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}}
|
||||
@@ -10200,7 +10203,11 @@ gc_compact_stats(VALUE self)
|
||||
|
||||
return h;
|
||||
}
|
||||
+#else
|
||||
+# define gc_compact_stats rb_f_notimplement
|
||||
+#endif
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
static void
|
||||
root_obj_check_moved_i(const char *category, VALUE obj, void *data)
|
||||
{
|
||||
@@ -10262,6 +10269,10 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data)
|
||||
*
|
||||
* This method is implementation specific and not expected to be implemented
|
||||
* in any implementation besides MRI.
|
||||
+ *
|
||||
+ * To test whether GC compaction is supported, use the idiom:
|
||||
+ *
|
||||
+ * GC.respond_to?(:compact)
|
||||
*/
|
||||
static VALUE
|
||||
gc_compact(VALUE self)
|
||||
@@ -10271,7 +10282,11 @@ gc_compact(VALUE self)
|
||||
|
||||
return gc_compact_stats(self);
|
||||
}
|
||||
+#else
|
||||
+# define gc_compact rb_f_notimplement
|
||||
+#endif
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash
|
||||
@@ -10340,6 +10355,9 @@ gc_verify_compaction_references(int argc, VALUE *argv, VALUE self)
|
||||
|
||||
return gc_compact_stats(self);
|
||||
}
|
||||
+#else
|
||||
+# define gc_verify_compaction_references rb_f_notimplement
|
||||
+#endif
|
||||
|
||||
VALUE
|
||||
rb_gc_start(void)
|
||||
@@ -10799,6 +10817,7 @@ gc_disable(rb_execution_context_t *ec, VALUE _)
|
||||
return rb_gc_disable();
|
||||
}
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.auto_compact = flag
|
||||
@@ -10814,16 +10833,15 @@ gc_set_auto_compact(VALUE _, VALUE v)
|
||||
{
|
||||
/* If not MinGW, Windows, or does not have mmap, we cannot use mprotect for
|
||||
* the read barrier, so we must disable automatic compaction. */
|
||||
-#if !defined(__MINGW32__) && !defined(_WIN32)
|
||||
- if (!USE_MMAP_ALIGNED_ALLOC) {
|
||||
- rb_raise(rb_eNotImpError, "Automatic compaction isn't available on this platform");
|
||||
- }
|
||||
-#endif
|
||||
|
||||
ruby_enable_autocompact = RTEST(v);
|
||||
return v;
|
||||
}
|
||||
+#else
|
||||
+# define gc_set_auto_compact rb_f_notimplement
|
||||
+#endif
|
||||
|
||||
+#if GC_COMPACTION_SUPPORTED
|
||||
/*
|
||||
* call-seq:
|
||||
* GC.auto_compact -> true or false
|
||||
@@ -10835,6 +10853,9 @@ gc_get_auto_compact(VALUE _)
|
||||
{
|
||||
return RBOOL(ruby_enable_autocompact);
|
||||
}
|
||||
+#else
|
||||
+# define gc_get_auto_compact rb_f_notimplement
|
||||
+#endif
|
||||
|
||||
static int
|
||||
get_envparam_size(const char *name, size_t *default_value, size_t lower_bound)
|
||||
diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb
|
||||
index 42ad028530..411d5eab69 100644
|
||||
--- a/test/ruby/test_gc_compact.rb
|
||||
+++ b/test/ruby/test_gc_compact.rb
|
||||
@@ -9,14 +9,7 @@
|
||||
end
|
||||
|
||||
class TestGCCompact < Test::Unit::TestCase
|
||||
- module SupportsCompact
|
||||
- def setup
|
||||
- skip "autocompact not supported on this platform" unless supports_auto_compact?
|
||||
- super
|
||||
- end
|
||||
-
|
||||
- private
|
||||
-
|
||||
+ module CompactionSupportInspector
|
||||
def supports_auto_compact?
|
||||
return true unless defined?(Etc::SC_PAGE_SIZE)
|
||||
|
||||
@@ -30,10 +23,19 @@ def supports_auto_compact?
|
||||
end
|
||||
end
|
||||
|
||||
- include SupportsCompact
|
||||
+ module OmitUnlessCompactSupported
|
||||
+ include CompactionSupportInspector
|
||||
+
|
||||
+ def setup
|
||||
+ omit "autocompact not supported on this platform" unless supports_auto_compact?
|
||||
+ super
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
+ include OmitUnlessCompactSupported
|
||||
|
||||
class AutoCompact < Test::Unit::TestCase
|
||||
- include SupportsCompact
|
||||
+ include OmitUnlessCompactSupported
|
||||
|
||||
def test_enable_autocompact
|
||||
before = GC.auto_compact
|
||||
@@ -87,13 +89,39 @@ def test_implicit_compaction_does_something
|
||||
end
|
||||
end
|
||||
|
||||
- def os_page_size
|
||||
- return true unless defined?(Etc::SC_PAGE_SIZE)
|
||||
+ class CompactMethodsNotImplemented < Test::Unit::TestCase
|
||||
+ include CompactionSupportInspector
|
||||
+
|
||||
+ def assert_not_implemented(method, *args)
|
||||
+ omit "autocompact is supported on this platform" if supports_auto_compact?
|
||||
+
|
||||
+ assert_raise(NotImplementedError) { GC.send(method, *args) }
|
||||
+ refute(GC.respond_to?(method), "GC.#{method} should be defined as rb_f_notimplement")
|
||||
+ end
|
||||
+
|
||||
+ def test_gc_compact_not_implemented
|
||||
+ assert_not_implemented(:compact)
|
||||
+ end
|
||||
+
|
||||
+ def test_gc_auto_compact_get_not_implemented
|
||||
+ assert_not_implemented(:auto_compact)
|
||||
+ end
|
||||
+
|
||||
+ def test_gc_auto_compact_set_not_implemented
|
||||
+ assert_not_implemented(:auto_compact=, true)
|
||||
+ end
|
||||
+
|
||||
+ def test_gc_latest_compact_info_not_implemented
|
||||
+ assert_not_implemented(:latest_compact_info)
|
||||
+ end
|
||||
+
|
||||
+ def test_gc_verify_compaction_references_not_implemented
|
||||
+ assert_not_implemented(:verify_compaction_references)
|
||||
+ end
|
||||
end
|
||||
|
||||
- def setup
|
||||
- skip "autocompact not supported on this platform" unless supports_auto_compact?
|
||||
- super
|
||||
+ def os_page_size
|
||||
+ return true unless defined?(Etc::SC_PAGE_SIZE)
|
||||
end
|
||||
|
||||
def test_gc_compact_stats
|
@ -1,502 +0,0 @@
|
||||
--- ruby-3.1.3/gc.rbinc 2022-11-24 11:20:33.000000000 +0100
|
||||
+++ ruby/gc.rbinc 2022-11-25 11:50:19.939820992 +0100
|
||||
@@ -9,27 +9,27 @@
|
||||
#include "builtin.h" /* for RB_BUILTIN_FUNCTION */
|
||||
struct rb_execution_context_struct; /* in vm_core.h */
|
||||
|
||||
-static VALUE builtin_inline_class_277(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
+static VALUE builtin_inline_class_209(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
{
|
||||
MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);
|
||||
-#line 277 "gc.rb"
|
||||
+#line 209 "gc.rb"
|
||||
|
||||
rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;
|
||||
return flag;
|
||||
#line 20 "gc.rbinc"
|
||||
}
|
||||
|
||||
-static VALUE builtin_inline_class_289(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
+static VALUE builtin_inline_class_221(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
{
|
||||
-#line 289 "gc.rb"
|
||||
+#line 221 "gc.rb"
|
||||
return
|
||||
RBOOL(rb_objspace.flags.measure_gc);
|
||||
#line 28 "gc.rbinc"
|
||||
}
|
||||
|
||||
-static VALUE builtin_inline_class_299(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
+static VALUE builtin_inline_class_231(struct rb_execution_context_struct *ec, const VALUE self)
|
||||
{
|
||||
-#line 299 "gc.rb"
|
||||
+#line 231 "gc.rb"
|
||||
return
|
||||
ULL2NUM(rb_objspace.profile.total_time_ns);
|
||||
#line 36 "gc.rbinc"
|
||||
@@ -52,31 +52,6 @@
|
||||
}
|
||||
|
||||
static void
|
||||
-mjit_compile_invokebuiltin_for_gc_get_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
-{
|
||||
- fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n");
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_get_auto_compact */\n", (VALUE)gc_get_auto_compact);
|
||||
- fprintf(f, " val = f(ec, self);\n");
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-mjit_compile_invokebuiltin_for_gc_set_auto_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
-{
|
||||
- fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE);\n");
|
||||
- if (index == -1) {
|
||||
- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 1);
|
||||
- }
|
||||
- else {
|
||||
- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n");
|
||||
- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index);
|
||||
- }
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_set_auto_compact */\n", (VALUE)gc_set_auto_compact);
|
||||
- fprintf(f, " val = f(ec, self, argv[0]);\n");
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
mjit_compile_invokebuiltin_for_gc_enable(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
{
|
||||
fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
@@ -161,40 +136,6 @@
|
||||
}
|
||||
|
||||
static void
|
||||
-mjit_compile_invokebuiltin_for_gc_compact_stats(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
-{
|
||||
- fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n");
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact_stats */\n", (VALUE)gc_compact_stats);
|
||||
- fprintf(f, " val = f(ec, self);\n");
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-mjit_compile_invokebuiltin_for_gc_compact(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
-{
|
||||
- fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n");
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_compact */\n", (VALUE)gc_compact);
|
||||
- fprintf(f, " val = f(ec, self);\n");
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
-mjit_compile_invokebuiltin_for_gc_verify_compaction_references(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
-{
|
||||
- fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
- fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE, VALUE, VALUE);\n");
|
||||
- if (index == -1) {
|
||||
- fprintf(f, " const VALUE *argv = &stack[%d];\n", stack_size - 2);
|
||||
- }
|
||||
- else {
|
||||
- fprintf(f, " const unsigned int lnum = GET_ISEQ()->body->local_table_size;\n");
|
||||
- fprintf(f, " const VALUE *argv = GET_EP() - lnum - VM_ENV_DATA_SIZE + 1 + %ld;\n", index);
|
||||
- }
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == gc_verify_compaction_references */\n", (VALUE)gc_verify_compaction_references);
|
||||
- fprintf(f, " val = f(ec, self, argv[0], argv[1]);\n");
|
||||
-}
|
||||
-
|
||||
-static void
|
||||
mjit_compile_invokebuiltin_for__bi0(FILE *f, long index, unsigned stack_size, bool inlinable_p)
|
||||
{
|
||||
fprintf(f, " VALUE self = GET_SELF();\n");
|
||||
@@ -202,7 +143,7 @@
|
||||
if (inlinable_p) {
|
||||
fprintf(f, "%s", " {\n");
|
||||
fprintf(f, "%s", " MAYBE_UNUSED(const VALUE) flag = rb_vm_lvar(ec, -3);\n");
|
||||
- fprintf(f, "%s", "#line 277 \"gc.rb\"\n");
|
||||
+ fprintf(f, "%s", "#line 209 \"gc.rb\"\n");
|
||||
fprintf(f, "%s", " \n");
|
||||
fprintf(f, "%s", " rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n");
|
||||
fprintf(f, "%s", " return flag;\n");
|
||||
@@ -211,7 +152,7 @@
|
||||
fprintf(f, "%s", " \n");
|
||||
return;
|
||||
}
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_277 */\n", (VALUE)builtin_inline_class_277);
|
||||
+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_209 */\n", (VALUE)builtin_inline_class_209);
|
||||
fprintf(f, " val = f(ec, self);\n");
|
||||
}
|
||||
|
||||
@@ -222,7 +163,7 @@
|
||||
fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n");
|
||||
if (inlinable_p) {
|
||||
fprintf(f, "%s", " {\n");
|
||||
- fprintf(f, "%s", "#line 289 \"gc.rb\"\n");
|
||||
+ fprintf(f, "%s", "#line 221 \"gc.rb\"\n");
|
||||
fprintf(f, "%s", " return \n");
|
||||
fprintf(f, "%s", " RBOOL(rb_objspace.flags.measure_gc);\n");
|
||||
fprintf(f, "%s", "#line 52 \"gc.rbinc\"\n");
|
||||
@@ -230,7 +171,7 @@
|
||||
fprintf(f, "%s", " \n");
|
||||
return;
|
||||
}
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_289 */\n", (VALUE)builtin_inline_class_289);
|
||||
+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_221 */\n", (VALUE)builtin_inline_class_221);
|
||||
fprintf(f, " val = f(ec, self);\n");
|
||||
}
|
||||
|
||||
@@ -241,7 +182,7 @@
|
||||
fprintf(f, " typedef VALUE (*func)(rb_execution_context_t *, VALUE);\n");
|
||||
if (inlinable_p) {
|
||||
fprintf(f, "%s", " {\n");
|
||||
- fprintf(f, "%s", "#line 299 \"gc.rb\"\n");
|
||||
+ fprintf(f, "%s", "#line 231 \"gc.rb\"\n");
|
||||
fprintf(f, "%s", " return \n");
|
||||
fprintf(f, "%s", " ULL2NUM(rb_objspace.profile.total_time_ns);\n");
|
||||
fprintf(f, "%s", "#line 59 \"gc.rbinc\"\n");
|
||||
@@ -249,7 +190,7 @@
|
||||
fprintf(f, "%s", " \n");
|
||||
return;
|
||||
}
|
||||
- fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_299 */\n", (VALUE)builtin_inline_class_299);
|
||||
+ fprintf(f, " func f = (func)%"PRIuVALUE"; /* == builtin_inline_class_231 */\n", (VALUE)builtin_inline_class_231);
|
||||
fprintf(f, " val = f(ec, self);\n");
|
||||
}
|
||||
|
||||
@@ -258,21 +199,16 @@
|
||||
// table definition
|
||||
static const struct rb_builtin_function gc_table[] = {
|
||||
RB_BUILTIN_FUNCTION(0, gc_start_internal, gc_start_internal, 4, mjit_compile_invokebuiltin_for_gc_start_internal),
|
||||
- RB_BUILTIN_FUNCTION(1, gc_get_auto_compact, gc_get_auto_compact, 0, mjit_compile_invokebuiltin_for_gc_get_auto_compact),
|
||||
- RB_BUILTIN_FUNCTION(2, gc_set_auto_compact, gc_set_auto_compact, 1, mjit_compile_invokebuiltin_for_gc_set_auto_compact),
|
||||
- RB_BUILTIN_FUNCTION(3, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable),
|
||||
- RB_BUILTIN_FUNCTION(4, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable),
|
||||
- RB_BUILTIN_FUNCTION(5, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get),
|
||||
- RB_BUILTIN_FUNCTION(6, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m),
|
||||
- RB_BUILTIN_FUNCTION(7, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count),
|
||||
- RB_BUILTIN_FUNCTION(8, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat),
|
||||
- RB_BUILTIN_FUNCTION(9, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info),
|
||||
- RB_BUILTIN_FUNCTION(10, gc_compact_stats, gc_compact_stats, 0, mjit_compile_invokebuiltin_for_gc_compact_stats),
|
||||
- RB_BUILTIN_FUNCTION(11, gc_compact, gc_compact, 0, mjit_compile_invokebuiltin_for_gc_compact),
|
||||
- RB_BUILTIN_FUNCTION(12, gc_verify_compaction_references, gc_verify_compaction_references, 2, mjit_compile_invokebuiltin_for_gc_verify_compaction_references),
|
||||
- RB_BUILTIN_FUNCTION(13, _bi0, builtin_inline_class_277, 0, mjit_compile_invokebuiltin_for__bi0),
|
||||
- RB_BUILTIN_FUNCTION(14, _bi1, builtin_inline_class_289, 0, mjit_compile_invokebuiltin_for__bi1),
|
||||
- RB_BUILTIN_FUNCTION(15, _bi2, builtin_inline_class_299, 0, mjit_compile_invokebuiltin_for__bi2),
|
||||
+ RB_BUILTIN_FUNCTION(1, gc_enable, gc_enable, 0, mjit_compile_invokebuiltin_for_gc_enable),
|
||||
+ RB_BUILTIN_FUNCTION(2, gc_disable, gc_disable, 0, mjit_compile_invokebuiltin_for_gc_disable),
|
||||
+ RB_BUILTIN_FUNCTION(3, gc_stress_get, gc_stress_get, 0, mjit_compile_invokebuiltin_for_gc_stress_get),
|
||||
+ RB_BUILTIN_FUNCTION(4, gc_stress_set_m, gc_stress_set_m, 1, mjit_compile_invokebuiltin_for_gc_stress_set_m),
|
||||
+ RB_BUILTIN_FUNCTION(5, gc_count, gc_count, 0, mjit_compile_invokebuiltin_for_gc_count),
|
||||
+ RB_BUILTIN_FUNCTION(6, gc_stat, gc_stat, 1, mjit_compile_invokebuiltin_for_gc_stat),
|
||||
+ RB_BUILTIN_FUNCTION(7, gc_latest_gc_info, gc_latest_gc_info, 1, mjit_compile_invokebuiltin_for_gc_latest_gc_info),
|
||||
+ RB_BUILTIN_FUNCTION(8, _bi0, builtin_inline_class_209, 0, mjit_compile_invokebuiltin_for__bi0),
|
||||
+ RB_BUILTIN_FUNCTION(9, _bi1, builtin_inline_class_221, 0, mjit_compile_invokebuiltin_for__bi1),
|
||||
+ RB_BUILTIN_FUNCTION(10, _bi2, builtin_inline_class_231, 0, mjit_compile_invokebuiltin_for__bi2),
|
||||
RB_BUILTIN_FUNCTION(-1, NULL, NULL, 0, 0),
|
||||
};
|
||||
|
||||
@@ -282,8 +218,6 @@
|
||||
COMPILER_WARNING_ERROR(-Wincompatible-pointer-types)
|
||||
#endif
|
||||
if (0) rb_builtin_function_check_arity4(gc_start_internal);
|
||||
- if (0) rb_builtin_function_check_arity0(gc_get_auto_compact);
|
||||
- if (0) rb_builtin_function_check_arity1(gc_set_auto_compact);
|
||||
if (0) rb_builtin_function_check_arity0(gc_enable);
|
||||
if (0) rb_builtin_function_check_arity0(gc_disable);
|
||||
if (0) rb_builtin_function_check_arity0(gc_stress_get);
|
||||
@@ -291,12 +225,9 @@
|
||||
if (0) rb_builtin_function_check_arity0(gc_count);
|
||||
if (0) rb_builtin_function_check_arity1(gc_stat);
|
||||
if (0) rb_builtin_function_check_arity1(gc_latest_gc_info);
|
||||
- if (0) rb_builtin_function_check_arity0(gc_compact_stats);
|
||||
- if (0) rb_builtin_function_check_arity0(gc_compact);
|
||||
- if (0) rb_builtin_function_check_arity2(gc_verify_compaction_references);
|
||||
- if (0) rb_builtin_function_check_arity0(builtin_inline_class_277);
|
||||
- if (0) rb_builtin_function_check_arity0(builtin_inline_class_289);
|
||||
- if (0) rb_builtin_function_check_arity0(builtin_inline_class_299);
|
||||
+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_209);
|
||||
+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_221);
|
||||
+ if (0) rb_builtin_function_check_arity0(builtin_inline_class_231);
|
||||
COMPILER_WARNING_POP
|
||||
|
||||
// load
|
||||
--- ruby-3.1.3/miniprelude.c 2022-11-24 11:20:33.000000000 +0100
|
||||
+++ ruby/miniprelude.c 2022-11-25 11:50:20.012820803 +0100
|
||||
@@ -545,11 +545,10 @@
|
||||
|
||||
static const char prelude_name2[] = "<internal:gc>";
|
||||
static const struct {
|
||||
- char L0[479]; /* 1..58 */
|
||||
- char L58[508]; /* 59..204 */
|
||||
- char L204[504]; /* 205..275 */
|
||||
- char L275[490]; /* 276..306 */
|
||||
- char L306[128]; /* 307..312 */
|
||||
+ char L0[492]; /* 1..70 */
|
||||
+ char L70[468]; /* 71..197 */
|
||||
+ char L197[470]; /* 198..237 */
|
||||
+ char L237[211]; /* 238..244 */
|
||||
} prelude_code2 = {
|
||||
#line 1 "gc.rb"
|
||||
""/* for gc.c */
|
||||
@@ -593,29 +592,6 @@
|
||||
" end\n"
|
||||
"\n"
|
||||
"\n"/* call-seq: */
|
||||
-"\n"/* GC.auto_compact -> true or false */
|
||||
-"\n"/* */
|
||||
-"\n"/* Returns whether or not automatic compaction has been enabled. */
|
||||
-"\n"/* */
|
||||
-" def self.auto_compact\n"
|
||||
-" Primitive.gc_get_auto_compact\n"
|
||||
-" end\n"
|
||||
-"\n"
|
||||
-"\n"/* call-seq: */
|
||||
-"\n"/* GC.auto_compact = flag */
|
||||
-"\n"/* */
|
||||
-"\n"/* Updates automatic compaction mode. */
|
||||
-"\n"/* */
|
||||
-"\n"/* When enabled, the compactor will execute on every major collection. */
|
||||
-"\n"/* */
|
||||
-"\n"/* Enabling compaction will degrade performance on major collections. */
|
||||
-" def self.auto_compact=(flag)\n"
|
||||
-,
|
||||
-#line 59 "gc.rb"
|
||||
-" Primitive.gc_set_auto_compact(flag)\n"
|
||||
-" end\n"
|
||||
-"\n"
|
||||
-"\n"/* call-seq: */
|
||||
"\n"/* GC.enable -> true or false */
|
||||
"\n"/* */
|
||||
"\n"/* Enables garbage collection, returning +true+ if garbage */
|
||||
@@ -645,6 +621,8 @@
|
||||
"\n"/* GC.stress -> integer, true or false */
|
||||
"\n"/* */
|
||||
"\n"/* Returns current status of GC stress mode. */
|
||||
+,
|
||||
+#line 71 "gc.rb"
|
||||
" def self.stress\n"
|
||||
" Primitive.gc_stress_get\n"
|
||||
" end\n"
|
||||
@@ -758,8 +736,6 @@
|
||||
"\n"/* GC.latest_gc_info(:major_by) -> :malloc */
|
||||
"\n"/* */
|
||||
"\n"/* Returns information about the most recent garbage collection. */
|
||||
-,
|
||||
-#line 205 "gc.rb"
|
||||
"\n"/* */
|
||||
"\n"/* If the optional argument, hash, is given, */
|
||||
"\n"/* it is overwritten and returned. */
|
||||
@@ -768,59 +744,14 @@
|
||||
" Primitive.gc_latest_gc_info hash_or_key\n"
|
||||
" end\n"
|
||||
"\n"
|
||||
-"\n"/* call-seq: */
|
||||
-"\n"/* GC.latest_compact_info -> {:considered=>{:T_CLASS=>11}, :moved=>{:T_CLASS=>11}} */
|
||||
-"\n"/* */
|
||||
-"\n"/* Returns information about object moved in the most recent GC compaction. */
|
||||
-"\n"/* */
|
||||
-"\n"/* The returned hash has two keys :considered and :moved. The hash for */
|
||||
-"\n"/* :considered lists the number of objects that were considered for movement */
|
||||
-"\n"/* by the compactor, and the :moved hash lists the number of objects that */
|
||||
-"\n"/* were actually moved. Some objects can't be moved (maybe they were pinned) */
|
||||
-"\n"/* so these numbers can be used to calculate compaction efficiency. */
|
||||
-" def self.latest_compact_info\n"
|
||||
-" Primitive.gc_compact_stats\n"
|
||||
-" end\n"
|
||||
-"\n"
|
||||
-"\n"/* call-seq: */
|
||||
-"\n"/* GC.compact */
|
||||
-"\n"/* */
|
||||
-"\n"/* This function compacts objects together in Ruby's heap. It eliminates */
|
||||
-"\n"/* unused space (or fragmentation) in the heap by moving objects in to that */
|
||||
-"\n"/* unused space. This function returns a hash which contains statistics about */
|
||||
-"\n"/* which objects were moved. See `GC.latest_gc_info` for details about */
|
||||
-"\n"/* compaction statistics. */
|
||||
-"\n"/* */
|
||||
-"\n"/* This method is implementation specific and not expected to be implemented */
|
||||
-"\n"/* in any implementation besides MRI. */
|
||||
-" def self.compact\n"
|
||||
-" Primitive.gc_compact\n"
|
||||
-" end\n"
|
||||
-"\n"
|
||||
-"\n"/* call-seq: */
|
||||
-"\n"/* GC.verify_compaction_references(toward: nil, double_heap: false) -> hash */
|
||||
-"\n"/* */
|
||||
-"\n"/* Verify compaction reference consistency. */
|
||||
-"\n"/* */
|
||||
-"\n"/* This method is implementation specific. During compaction, objects that */
|
||||
-"\n"/* were moved are replaced with T_MOVED objects. No object should have a */
|
||||
-"\n"/* reference to a T_MOVED object after compaction. */
|
||||
-"\n"/* */
|
||||
-"\n"/* This function doubles the heap to ensure room to move all objects, */
|
||||
-"\n"/* compacts the heap to make sure everything moves, updates all references, */
|
||||
-"\n"/* then performs a full GC. If any object contains a reference to a T_MOVED */
|
||||
-"\n"/* object, that object should be pushed on the mark stack, and will */
|
||||
-"\n"/* make a SEGV. */
|
||||
-" def self.verify_compaction_references(toward: nil, double_heap: false)\n"
|
||||
-" Primitive.gc_verify_compaction_references(double_heap, toward == :empty)\n"
|
||||
-" end\n"
|
||||
-"\n"
|
||||
"\n"/* call-seq: */
|
||||
"\n"/* GC.using_rvargc? -> true or false */
|
||||
"\n"/* */
|
||||
"\n"/* Returns true if using experimental feature Variable Width Allocation, false */
|
||||
"\n"/* otherwise. */
|
||||
" def self.using_rvargc?\n"/* :nodoc: */
|
||||
+,
|
||||
+#line 198 "gc.rb"
|
||||
" GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] > 1\n"
|
||||
" end\n"
|
||||
"\n"
|
||||
@@ -831,8 +762,6 @@
|
||||
"\n"/* Enable to measure GC time. */
|
||||
"\n"/* You can get the result with <tt>GC.stat(:time)</tt>. */
|
||||
"\n"/* Note that GC time measurement can cause some performance overhead. */
|
||||
-,
|
||||
-#line 276 "gc.rb"
|
||||
" def self.measure_total_time=(flag)\n"
|
||||
" Primitive.cstmt! %{\n"
|
||||
" rb_objspace.flags.measure_gc = RTEST(flag) ? TRUE : FALSE;\n"
|
||||
@@ -863,15 +792,15 @@
|
||||
"end\n"
|
||||
"\n"
|
||||
"module ObjectSpace\n"
|
||||
-" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n"
|
||||
,
|
||||
-#line 307 "gc.rb"
|
||||
+#line 238 "gc.rb"
|
||||
+" def garbage_collect full_mark: true, immediate_mark: true, immediate_sweep: true\n"
|
||||
" Primitive.gc_start_internal full_mark, immediate_mark, immediate_sweep, false\n"
|
||||
" end\n"
|
||||
"\n"
|
||||
" module_function :garbage_collect\n"
|
||||
"end\n"
|
||||
-#line 875 "miniprelude.c"
|
||||
+#line 804 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name3[] = "<internal:numeric>";
|
||||
@@ -1223,7 +1152,7 @@
|
||||
" end\n"
|
||||
"\n"
|
||||
"end\n"
|
||||
-#line 1227 "miniprelude.c"
|
||||
+#line 1156 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name4[] = "<internal:io>";
|
||||
@@ -1354,7 +1283,7 @@
|
||||
" Primitive.io_write_nonblock(buf, exception)\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 1358 "miniprelude.c"
|
||||
+#line 1287 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name5[] = "<internal:marshal>";
|
||||
@@ -1402,7 +1331,7 @@
|
||||
" alias restore load\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 1406 "miniprelude.c"
|
||||
+#line 1335 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name6[] = "<internal:pack>";
|
||||
@@ -1724,7 +1653,7 @@
|
||||
" Primitive.pack_unpack1(fmt, offset)\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 1728 "miniprelude.c"
|
||||
+#line 1657 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name7[] = "<internal:trace_point>";
|
||||
@@ -2111,7 +2040,7 @@
|
||||
" Primitive.tracepoint_attr_instruction_sequence\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 2115 "miniprelude.c"
|
||||
+#line 2044 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name8[] = "<internal:warning>";
|
||||
@@ -2172,7 +2101,7 @@
|
||||
" Primitive.rb_warn_m(msgs, uplevel, category)\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 2176 "miniprelude.c"
|
||||
+#line 2105 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name9[] = "<internal:array>";
|
||||
@@ -2249,7 +2178,7 @@
|
||||
" end\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 2253 "miniprelude.c"
|
||||
+#line 2182 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name10[] = "<internal:kernel>";
|
||||
@@ -2438,7 +2367,7 @@
|
||||
" end\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 2442 "miniprelude.c"
|
||||
+#line 2371 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name11[] = "<internal:ractor>";
|
||||
@@ -3309,7 +3238,7 @@
|
||||
" }\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 3313 "miniprelude.c"
|
||||
+#line 3242 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name12[] = "<internal:timev>";
|
||||
@@ -3632,7 +3561,7 @@
|
||||
" Primitive.time_init_args(year, mon, mday, hour, min, sec, zone)\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 3636 "miniprelude.c"
|
||||
+#line 3565 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name13[] = "<internal:nilclass>";
|
||||
@@ -3665,7 +3594,7 @@
|
||||
" return 0.0\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 3669 "miniprelude.c"
|
||||
+#line 3598 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name14[] = "<internal:prelude>";
|
||||
@@ -3695,7 +3624,7 @@
|
||||
"\n"
|
||||
" private :pp\n"
|
||||
"end\n"
|
||||
-#line 3699 "miniprelude.c"
|
||||
+#line 3628 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name15[] = "<internal:gem_prelude>";
|
||||
@@ -3722,7 +3651,7 @@
|
||||
"rescue LoadError\n"
|
||||
" warn \"`did_you_mean' was not loaded.\"\n"
|
||||
"end if defined?(DidYouMean)\n"
|
||||
-#line 3726 "miniprelude.c"
|
||||
+#line 3655 "miniprelude.c"
|
||||
};
|
||||
|
||||
static const char prelude_name16[] = "<internal:yjit>";
|
||||
@@ -4063,7 +3992,7 @@
|
||||
" end\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
-#line 4067 "miniprelude.c"
|
||||
+#line 3996 "miniprelude.c"
|
||||
};
|
||||
|
||||
COMPILER_WARNING_POP
|
@ -1,339 +0,0 @@
|
||||
From 32648da2f6f8036581859c12af2c38b0cf7abf08 Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Tue, 18 Oct 2022 09:52:13 +0200
|
||||
Subject: [PATCH] Use SHA256 instead of SHA1 where needed in tests.
|
||||
|
||||
Systems such as RHEL 9 are moving away from SHA1
|
||||
disabling it completely in default configuration.
|
||||
---
|
||||
test/openssl/test_asn1.rb | 6 +++---
|
||||
test/openssl/test_ns_spki.rb | 2 +-
|
||||
test/openssl/test_pkey_dsa.rb | 4 ++--
|
||||
test/openssl/test_pkey_ec.rb | 4 ++--
|
||||
test/openssl/test_pkey_rsa.rb | 18 +++++++++---------
|
||||
test/openssl/test_x509cert.rb | 4 +++-
|
||||
test/openssl/test_x509crl.rb | 20 ++++++++++----------
|
||||
test/openssl/test_x509req.rb | 25 +++++++++++++------------
|
||||
8 files changed, 43 insertions(+), 40 deletions(-)
|
||||
|
||||
diff --git a/test/openssl/test_asn1.rb b/test/openssl/test_asn1.rb
|
||||
index 0fd797158..c79bc1429 100644
|
||||
--- a/test/openssl/test_asn1.rb
|
||||
+++ b/test/openssl/test_asn1.rb
|
||||
@@ -14,7 +14,7 @@ def test_decode_x509_certificate
|
||||
["keyUsage","keyCertSign, cRLSign",true],
|
||||
["subjectKeyIdentifier","hash",false],
|
||||
]
|
||||
- dgst = OpenSSL::Digest.new('SHA1')
|
||||
+ dgst = OpenSSL::Digest.new('SHA256')
|
||||
cert = OpenSSL::TestUtils.issue_cert(
|
||||
subj, key, s, exts, nil, nil, digest: dgst, not_before: now, not_after: now+3600)
|
||||
|
||||
@@ -42,7 +42,7 @@ def test_decode_x509_certificate
|
||||
assert_equal(OpenSSL::ASN1::Sequence, sig.class)
|
||||
assert_equal(2, sig.value.size)
|
||||
assert_equal(OpenSSL::ASN1::ObjectId, sig.value[0].class)
|
||||
- assert_equal("1.2.840.113549.1.1.5", sig.value[0].oid)
|
||||
+ assert_equal("1.2.840.113549.1.1.11", sig.value[0].oid)
|
||||
assert_equal(OpenSSL::ASN1::Null, sig.value[1].class)
|
||||
|
||||
dn = tbs_cert.value[3] # issuer
|
||||
@@ -189,7 +189,7 @@ def test_decode_x509_certificate
|
||||
assert_equal(OpenSSL::ASN1::Null, pkey.value[0].value[1].class)
|
||||
|
||||
assert_equal(OpenSSL::ASN1::BitString, sig_val.class)
|
||||
- cululated_sig = key.sign(OpenSSL::Digest.new('SHA1'), tbs_cert.to_der)
|
||||
+ cululated_sig = key.sign(OpenSSL::Digest.new('SHA256'), tbs_cert.to_der)
|
||||
assert_equal(cululated_sig, sig_val.value)
|
||||
end
|
||||
|
||||
diff --git a/test/openssl/test_ns_spki.rb b/test/openssl/test_ns_spki.rb
|
||||
index ed3be86e2..383931b98 100644
|
||||
--- a/test/openssl/test_ns_spki.rb
|
||||
+++ b/test/openssl/test_ns_spki.rb
|
||||
@@ -22,7 +22,7 @@ def test_build_data
|
||||
spki = OpenSSL::Netscape::SPKI.new
|
||||
spki.challenge = "RandomString"
|
||||
spki.public_key = key1.public_key
|
||||
- spki.sign(key1, OpenSSL::Digest.new('SHA1'))
|
||||
+ spki.sign(key1, OpenSSL::Digest.new('SHA256'))
|
||||
assert(spki.verify(spki.public_key))
|
||||
assert(spki.verify(key1.public_key))
|
||||
assert(!spki.verify(key2.public_key))
|
||||
diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb
|
||||
index de6aa63e2..d1059093c 100644
|
||||
--- a/test/openssl/test_pkey_dsa.rb
|
||||
+++ b/test/openssl/test_pkey_dsa.rb
|
||||
@@ -55,8 +55,8 @@ def test_sign_verify
|
||||
assert_equal true, dsa512.verify(OpenSSL::Digest.new('DSS1'), signature, data)
|
||||
end
|
||||
|
||||
- signature = dsa512.sign("SHA1", data)
|
||||
- assert_equal true, dsa512.verify("SHA1", signature, data)
|
||||
+ signature = dsa512.sign("SHA256", data)
|
||||
+ assert_equal true, dsa512.verify("SHA256", signature, data)
|
||||
|
||||
signature0 = (<<~'end;').unpack("m")[0]
|
||||
MCwCFH5h40plgU5Fh0Z4wvEEpz0eE9SnAhRPbkRB8ggsN/vsSEYMXvJwjGg/
|
||||
diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb
|
||||
index 9a4818de8..451bab032 100644
|
||||
--- a/test/openssl/test_pkey_ec.rb
|
||||
+++ b/test/openssl/test_pkey_ec.rb
|
||||
@@ -100,8 +100,8 @@ def test_check_key
|
||||
def test_sign_verify
|
||||
p256 = Fixtures.pkey("p256")
|
||||
data = "Sign me!"
|
||||
- signature = p256.sign("SHA1", data)
|
||||
- assert_equal true, p256.verify("SHA1", signature, data)
|
||||
+ signature = p256.sign("SHA256", data)
|
||||
+ assert_equal true, p256.verify("SHA256", signature, data)
|
||||
|
||||
signature0 = (<<~'end;').unpack("m")[0]
|
||||
MEQCIEOTY/hD7eI8a0qlzxkIt8LLZ8uwiaSfVbjX2dPAvN11AiAQdCYx56Fq
|
||||
diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb
|
||||
index fa84b76f4..b0ae5784b 100644
|
||||
--- a/test/openssl/test_pkey_rsa.rb
|
||||
+++ b/test/openssl/test_pkey_rsa.rb
|
||||
@@ -80,8 +80,8 @@ def test_new_break
|
||||
def test_sign_verify
|
||||
rsa1024 = Fixtures.pkey("rsa1024")
|
||||
data = "Sign me!"
|
||||
- signature = rsa1024.sign("SHA1", data)
|
||||
- assert_equal true, rsa1024.verify("SHA1", signature, data)
|
||||
+ signature = rsa1024.sign("SHA256", data)
|
||||
+ assert_equal true, rsa1024.verify("SHA256", signature, data)
|
||||
|
||||
signature0 = (<<~'end;').unpack("m")[0]
|
||||
oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+
|
||||
@@ -118,10 +118,10 @@ def test_sign_verify_options
|
||||
def test_sign_verify_raw
|
||||
key = Fixtures.pkey("rsa-1")
|
||||
data = "Sign me!"
|
||||
- hash = OpenSSL::Digest.digest("SHA1", data)
|
||||
- signature = key.sign_raw("SHA1", hash)
|
||||
- assert_equal true, key.verify_raw("SHA1", signature, hash)
|
||||
- assert_equal true, key.verify("SHA1", signature, data)
|
||||
+ hash = OpenSSL::Digest.digest("SHA256", data)
|
||||
+ signature = key.sign_raw("SHA256", hash)
|
||||
+ assert_equal true, key.verify_raw("SHA256", signature, hash)
|
||||
+ assert_equal true, key.verify("SHA256", signature, data)
|
||||
|
||||
# Too long data
|
||||
assert_raise(OpenSSL::PKey::PKeyError) {
|
||||
@@ -134,9 +134,9 @@ def test_sign_verify_raw
|
||||
"rsa_pss_saltlen" => 20,
|
||||
"rsa_mgf1_md" => "SHA256"
|
||||
}
|
||||
- sig_pss = key.sign_raw("SHA1", hash, pssopts)
|
||||
- assert_equal true, key.verify("SHA1", sig_pss, data, pssopts)
|
||||
- assert_equal true, key.verify_raw("SHA1", sig_pss, hash, pssopts)
|
||||
+ sig_pss = key.sign_raw("SHA256", hash, pssopts)
|
||||
+ assert_equal true, key.verify("SHA256", sig_pss, data, pssopts)
|
||||
+ assert_equal true, key.verify_raw("SHA256", sig_pss, hash, pssopts)
|
||||
end
|
||||
|
||||
def test_sign_verify_raw_legacy
|
||||
diff --git a/test/openssl/test_x509cert.rb b/test/openssl/test_x509cert.rb
|
||||
index d696b98c0..64805504d 100644
|
||||
--- a/test/openssl/test_x509cert.rb
|
||||
+++ b/test/openssl/test_x509cert.rb
|
||||
@@ -173,13 +173,14 @@ def test_invalid_extension
|
||||
end
|
||||
|
||||
def test_sign_and_verify_rsa_sha1
|
||||
- cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "sha1")
|
||||
+ cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil, digest: "SHA1")
|
||||
assert_equal(false, cert.verify(@rsa1024))
|
||||
assert_equal(true, cert.verify(@rsa2048))
|
||||
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa256) })
|
||||
assert_equal(false, certificate_error_returns_false { cert.verify(@dsa512) })
|
||||
cert.serial = 2
|
||||
assert_equal(false, cert.verify(@rsa2048))
|
||||
+ rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1
|
||||
end
|
||||
|
||||
def test_sign_and_verify_rsa_md5
|
||||
@@ -229,6 +230,7 @@ def test_dsa_with_sha2
|
||||
# SHA1 is allowed from OpenSSL 1.0.0 (0.9.8 requires DSS1)
|
||||
cert = issue_cert(@ca, @dsa256, 1, [], nil, nil, digest: "sha1")
|
||||
assert_equal("dsaWithSHA1", cert.signature_algorithm)
|
||||
+ rescue OpenSSL::X509::CertificateError # RHEL 9 disables SHA1
|
||||
end
|
||||
|
||||
def test_check_private_key
|
||||
diff --git a/test/openssl/test_x509crl.rb b/test/openssl/test_x509crl.rb
|
||||
index bcdb0a697..146ee0730 100644
|
||||
--- a/test/openssl/test_x509crl.rb
|
||||
+++ b/test/openssl/test_x509crl.rb
|
||||
@@ -20,7 +20,7 @@ def test_basic
|
||||
|
||||
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
|
||||
crl = issue_crl([], 1, now, now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(1, crl.version)
|
||||
assert_equal(cert.issuer.to_der, crl.issuer.to_der)
|
||||
assert_equal(now, crl.last_update)
|
||||
@@ -57,7 +57,7 @@ def test_revoked
|
||||
]
|
||||
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
|
||||
crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
revoked = crl.revoked
|
||||
assert_equal(5, revoked.size)
|
||||
assert_equal(1, revoked[0].serial)
|
||||
@@ -98,7 +98,7 @@ def test_revoked
|
||||
|
||||
revoke_info = (1..1000).collect{|i| [i, now, 0] }
|
||||
crl = issue_crl(revoke_info, 1, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
revoked = crl.revoked
|
||||
assert_equal(1000, revoked.size)
|
||||
assert_equal(1, revoked[0].serial)
|
||||
@@ -124,7 +124,7 @@ def test_extension
|
||||
|
||||
cert = issue_cert(@ca, @rsa2048, 1, cert_exts, nil, nil)
|
||||
crl = issue_crl([], 1, Time.now, Time.now+1600, crl_exts,
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
exts = crl.extensions
|
||||
assert_equal(3, exts.size)
|
||||
assert_equal("1", exts[0].value)
|
||||
@@ -160,24 +160,24 @@ def test_extension
|
||||
assert_equal(false, exts[2].critical?)
|
||||
|
||||
no_ext_crl = issue_crl([], 1, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal nil, no_ext_crl.authority_key_identifier
|
||||
end
|
||||
|
||||
def test_crlnumber
|
||||
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
|
||||
crl = issue_crl([], 1, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_match(1.to_s, crl.extensions[0].value)
|
||||
assert_match(/X509v3 CRL Number:\s+#{1}/m, crl.to_text)
|
||||
|
||||
crl = issue_crl([], 2**32, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_match((2**32).to_s, crl.extensions[0].value)
|
||||
assert_match(/X509v3 CRL Number:\s+#{2**32}/m, crl.to_text)
|
||||
|
||||
crl = issue_crl([], 2**100, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_match(/X509v3 CRL Number:\s+#{2**100}/m, crl.to_text)
|
||||
assert_match((2**100).to_s, crl.extensions[0].value)
|
||||
end
|
||||
@@ -185,7 +185,7 @@ def test_crlnumber
|
||||
def test_sign_and_verify
|
||||
cert = issue_cert(@ca, @rsa2048, 1, [], nil, nil)
|
||||
crl = issue_crl([], 1, Time.now, Time.now+1600, [],
|
||||
- cert, @rsa2048, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @rsa2048, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(false, crl.verify(@rsa1024))
|
||||
assert_equal(true, crl.verify(@rsa2048))
|
||||
assert_equal(false, crl_error_returns_false { crl.verify(@dsa256) })
|
||||
@@ -195,7 +195,7 @@ def test_sign_and_verify
|
||||
|
||||
cert = issue_cert(@ca, @dsa512, 1, [], nil, nil)
|
||||
crl = issue_crl([], 1, Time.now, Time.now+1600, [],
|
||||
- cert, @dsa512, OpenSSL::Digest.new('SHA1'))
|
||||
+ cert, @dsa512, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(false, crl_error_returns_false { crl.verify(@rsa1024) })
|
||||
assert_equal(false, crl_error_returns_false { crl.verify(@rsa2048) })
|
||||
assert_equal(false, crl.verify(@dsa256))
|
||||
diff --git a/test/openssl/test_x509req.rb b/test/openssl/test_x509req.rb
|
||||
index ee9c678fb..ff17c4116 100644
|
||||
--- a/test/openssl/test_x509req.rb
|
||||
+++ b/test/openssl/test_x509req.rb
|
||||
@@ -23,31 +23,31 @@ def issue_csr(ver, dn, key, digest)
|
||||
end
|
||||
|
||||
def test_public_key
|
||||
- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der)
|
||||
req = OpenSSL::X509::Request.new(req.to_der)
|
||||
assert_equal(@rsa1024.public_key.to_der, req.public_key.to_der)
|
||||
|
||||
- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(@dsa512.public_key.to_der, req.public_key.to_der)
|
||||
req = OpenSSL::X509::Request.new(req.to_der)
|
||||
assert_equal(@dsa512.public_key.to_der, req.public_key.to_der)
|
||||
end
|
||||
|
||||
def test_version
|
||||
- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(0, req.version)
|
||||
req = OpenSSL::X509::Request.new(req.to_der)
|
||||
assert_equal(0, req.version)
|
||||
|
||||
- req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(1, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(1, req.version)
|
||||
req = OpenSSL::X509::Request.new(req.to_der)
|
||||
assert_equal(1, req.version)
|
||||
end
|
||||
|
||||
def test_subject
|
||||
- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(@dn.to_der, req.subject.to_der)
|
||||
req = OpenSSL::X509::Request.new(req.to_der)
|
||||
assert_equal(@dn.to_der, req.subject.to_der)
|
||||
@@ -78,9 +78,9 @@ def test_attr
|
||||
OpenSSL::X509::Attribute.new("msExtReq", attrval),
|
||||
]
|
||||
|
||||
- req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req0 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
attrs.each{|attr| req0.add_attribute(attr) }
|
||||
- req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req1 = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
req1.attributes = attrs
|
||||
assert_equal(req0.to_der, req1.to_der)
|
||||
|
||||
@@ -108,6 +108,7 @@ def test_sign_and_verify_rsa_sha1
|
||||
assert_equal(false, request_error_returns_false { req.verify(@dsa512) })
|
||||
req.version = 1
|
||||
assert_equal(false, req.verify(@rsa1024))
|
||||
+ rescue OpenSSL::X509::RequestError # RHEL 9 disables SHA1
|
||||
end
|
||||
|
||||
def test_sign_and_verify_rsa_md5
|
||||
@@ -122,7 +123,7 @@ def test_sign_and_verify_rsa_md5
|
||||
end
|
||||
|
||||
def test_sign_and_verify_dsa
|
||||
- req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @dsa512, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(false, request_error_returns_false { req.verify(@rsa1024) })
|
||||
assert_equal(false, request_error_returns_false { req.verify(@rsa2048) })
|
||||
assert_equal(false, req.verify(@dsa256))
|
||||
@@ -137,14 +138,14 @@ def test_sign_and_verify_dsa_md5
|
||||
end
|
||||
|
||||
def test_dup
|
||||
- req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA1'))
|
||||
+ req = issue_csr(0, @dn, @rsa1024, OpenSSL::Digest.new('SHA256'))
|
||||
assert_equal(req.to_der, req.dup.to_der)
|
||||
end
|
||||
|
||||
def test_eq
|
||||
- req1 = issue_csr(0, @dn, @rsa1024, "sha1")
|
||||
- req2 = issue_csr(0, @dn, @rsa1024, "sha1")
|
||||
- req3 = issue_csr(0, @dn, @rsa1024, "sha256")
|
||||
+ req1 = issue_csr(0, @dn, @rsa1024, "sha256")
|
||||
+ req2 = issue_csr(0, @dn, @rsa1024, "sha256")
|
||||
+ req3 = issue_csr(0, @dn, @rsa1024, "sha512")
|
||||
|
||||
assert_equal false, req1 == 12345
|
||||
assert_equal true, req1 == req2
|
@ -1,61 +0,0 @@
|
||||
From a1f6cbc26119244a3556864c5402123666db5376 Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Tue, 12 Apr 2022 09:44:21 +0200
|
||||
Subject: [PATCH 1/2] Let OpenSSL choose the digest if digest for
|
||||
Openssl::OCSP::Request#sign is nil.
|
||||
|
||||
---
|
||||
ext/openssl/ossl_ocsp.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c
|
||||
index 1e87484a..543df271 100644
|
||||
--- a/ext/openssl/ossl_ocsp.c
|
||||
+++ b/ext/openssl/ossl_ocsp.c
|
||||
@@ -382,7 +382,7 @@ ossl_ocspreq_sign(int argc, VALUE *argv, VALUE self)
|
||||
if (!NIL_P(flags))
|
||||
flg = NUM2INT(flags);
|
||||
if (NIL_P(digest))
|
||||
- md = EVP_sha1();
|
||||
+ md = NULL;
|
||||
else
|
||||
md = ossl_evp_get_digestbyname(digest);
|
||||
if (NIL_P(certs))
|
||||
|
||||
From 27efcd7e1ccc8afb9bb57f8616e4d01f0656d1dc Mon Sep 17 00:00:00 2001
|
||||
From: Jarek Prokop <jprokop@redhat.com>
|
||||
Date: Tue, 12 Apr 2022 09:44:37 +0200
|
||||
Subject: [PATCH 2/2] Let OpenSSL choose the digest if digest for
|
||||
Openssl::OCSP::BasicResponse#sign is nil.
|
||||
|
||||
---
|
||||
ext/openssl/ossl_ocsp.c | 2 +-
|
||||
test/openssl/test_ocsp.rb | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c
|
||||
index 543df271..9c8d768d 100644
|
||||
--- a/ext/openssl/ossl_ocsp.c
|
||||
+++ b/ext/openssl/ossl_ocsp.c
|
||||
@@ -1033,7 +1033,7 @@ ossl_ocspbres_sign(int argc, VALUE *argv, VALUE self)
|
||||
if (!NIL_P(flags))
|
||||
flg = NUM2INT(flags);
|
||||
if (NIL_P(digest))
|
||||
- md = EVP_sha1();
|
||||
+ md = NULL;
|
||||
else
|
||||
md = ossl_evp_get_digestbyname(digest);
|
||||
if (NIL_P(certs))
|
||||
diff --git a/test/openssl/test_ocsp.rb b/test/openssl/test_ocsp.rb
|
||||
index ef7321ab..85f13375 100644
|
||||
--- a/test/openssl/test_ocsp.rb
|
||||
+++ b/test/openssl/test_ocsp.rb
|
||||
@@ -99,7 +99,7 @@ def test_request_der
|
||||
request.sign(@cert, @cert_key, [@ca_cert], 0)
|
||||
asn1 = OpenSSL::ASN1.decode(request.to_der)
|
||||
assert_equal cid.to_der, asn1.value[0].value.find { |a| a.tag_class == :UNIVERSAL }.value[0].value[0].to_der
|
||||
- assert_equal OpenSSL::ASN1.ObjectId("sha1WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der
|
||||
+ assert_equal OpenSSL::ASN1.ObjectId("sha256WithRSAEncryption").to_der, asn1.value[1].value[0].value[0].value[0].to_der
|
||||
assert_equal @cert.to_der, asn1.value[1].value[0].value[2].value[0].value[0].to_der
|
||||
assert_equal @ca_cert.to_der, asn1.value[1].value[0].value[2].value[0].value[1].to_der
|
||||
assert_equal asn1.to_der, OpenSSL::OCSP::Request.new(asn1.to_der).to_der
|
@ -1,38 +0,0 @@
|
||||
From 656f25987cf2885104d5b13c8d3f5b7d32f1b333 Mon Sep 17 00:00:00 2001
|
||||
From: Jean Boussier <jean.boussier@gmail.com>
|
||||
Date: Wed, 23 Nov 2022 12:10:36 +0100
|
||||
Subject: [PATCH] [ruby/cgi] Fix test_cgi_cookie_new_with_domain to pass on
|
||||
older rubies
|
||||
|
||||
https://github.com/ruby/cgi/commit/05f0c58048
|
||||
---
|
||||
test/cgi/test_cgi_cookie.rb | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/test/cgi/test_cgi_cookie.rb b/test/cgi/test_cgi_cookie.rb
|
||||
index e3ec4bea5286..6d31932d321a 100644
|
||||
--- a/test/cgi/test_cgi_cookie.rb
|
||||
+++ b/test/cgi/test_cgi_cookie.rb
|
||||
@@ -62,18 +62,18 @@ def test_cgi_cookie_new_complex
|
||||
|
||||
def test_cgi_cookie_new_with_domain
|
||||
h = {'name'=>'name1', 'value'=>'value1'}
|
||||
- cookie = CGI::Cookie.new('domain'=>'a.example.com', **h)
|
||||
+ cookie = CGI::Cookie.new(h.merge('domain'=>'a.example.com'))
|
||||
assert_equal('a.example.com', cookie.domain)
|
||||
|
||||
- cookie = CGI::Cookie.new('domain'=>'1.example.com', **h)
|
||||
+ cookie = CGI::Cookie.new(h.merge('domain'=>'1.example.com'))
|
||||
assert_equal('1.example.com', cookie.domain, 'enhanced by RFC 1123')
|
||||
|
||||
assert_raise(ArgumentError) {
|
||||
- CGI::Cookie.new('domain'=>'-a.example.com', **h)
|
||||
+ CGI::Cookie.new(h.merge('domain'=>'-a.example.com'))
|
||||
}
|
||||
|
||||
assert_raise(ArgumentError) {
|
||||
- CGI::Cookie.new('domain'=>'a-.example.com', **h)
|
||||
+ CGI::Cookie.new(h.merge('domain'=>'a-.example.com'))
|
||||
}
|
||||
end
|
||||
|
@ -1,44 +0,0 @@
|
||||
From 745dcf5326ea2c8e2047a3bddeb0fbb7e7d07649 Mon Sep 17 00:00:00 2001
|
||||
From: Xenor Chang <tubaxenor@gmail.com>
|
||||
Date: Mon, 28 Nov 2022 12:34:06 +0800
|
||||
Subject: [PATCH] [ruby/cgi] Loosen the domain regex to accept '.'
|
||||
(https://github.com/ruby/cgi/pull/29)
|
||||
|
||||
* Loosen the domain regex to accept '.'
|
||||
|
||||
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
https://github.com/ruby/cgi/commit/5e09d632f3
|
||||
Co-authored-by: Hiroshi SHIBATA <hsbt@ruby-lang.org>
|
||||
---
|
||||
lib/cgi/cookie.rb | 2 +-
|
||||
test/cgi/test_cgi_cookie.rb | 3 +++
|
||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/cgi/cookie.rb b/lib/cgi/cookie.rb
|
||||
index 1a9c1a82c123..9498e2f9faf9 100644
|
||||
--- a/lib/cgi/cookie.rb
|
||||
+++ b/lib/cgi/cookie.rb
|
||||
@@ -42,7 +42,7 @@ class Cookie < Array
|
||||
|
||||
TOKEN_RE = %r"\A[[!-~]&&[^()<>@,;:\\\"/?=\[\]{}]]+\z"
|
||||
PATH_VALUE_RE = %r"\A[[ -~]&&[^;]]*\z"
|
||||
- DOMAIN_VALUE_RE = %r"\A(?<label>(?!-)[-A-Za-z0-9]+(?<!-))(?:\.\g<label>)*\z"
|
||||
+ DOMAIN_VALUE_RE = %r"\A\.?(?<label>(?!-)[-A-Za-z0-9]+(?<!-))(?:\.\g<label>)*\z"
|
||||
|
||||
# Create a new CGI::Cookie object.
|
||||
#
|
||||
diff --git a/test/cgi/test_cgi_cookie.rb b/test/cgi/test_cgi_cookie.rb
|
||||
index 6d31932d321a..eadae4531365 100644
|
||||
--- a/test/cgi/test_cgi_cookie.rb
|
||||
+++ b/test/cgi/test_cgi_cookie.rb
|
||||
@@ -65,6 +65,9 @@ def test_cgi_cookie_new_with_domain
|
||||
cookie = CGI::Cookie.new(h.merge('domain'=>'a.example.com'))
|
||||
assert_equal('a.example.com', cookie.domain)
|
||||
|
||||
+ cookie = CGI::Cookie.new(h.merge('domain'=>'.example.com'))
|
||||
+ assert_equal('.example.com', cookie.domain)
|
||||
+
|
||||
cookie = CGI::Cookie.new(h.merge('domain'=>'1.example.com'))
|
||||
assert_equal('1.example.com', cookie.domain, 'enhanced by RFC 1123')
|
||||
|
@ -1,24 +0,0 @@
|
||||
From 54c8df06ff9e161012f89d19a4e3aa2e0e37e1b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?V=C3=ADt=20Ondruch?= <vondruch@redhat.com>
|
||||
Date: Tue, 23 Aug 2022 10:41:28 +0200
|
||||
Subject: [PATCH] Drop hard dependency on RDoc.
|
||||
|
||||
This has been introduced in 026700499dfd640b2072d7bf0370247a98d5ac40,
|
||||
but it seems that this is just be mistake, otherwise the later handling
|
||||
of `LoadError` would not be needed.
|
||||
---
|
||||
lib/irb/input-method.rb | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb
|
||||
index fd68239e..a8227caa 100644
|
||||
--- a/lib/irb/input-method.rb
|
||||
+++ b/lib/irb/input-method.rb
|
||||
@@ -14,7 +14,6 @@
|
||||
require_relative 'completion'
|
||||
require 'io/console'
|
||||
require 'reline'
|
||||
-require 'rdoc'
|
||||
|
||||
module IRB
|
||||
STDIN_FILE_NAME = "(line)" # :nodoc:
|
@ -1,35 +0,0 @@
|
||||
From b24852058fc87c940252c8a711c60ae2eb298082 Mon Sep 17 00:00:00 2001
|
||||
From: Jun Aruga <jaruga@redhat.com>
|
||||
Date: Thu, 25 Aug 2022 20:11:34 +0200
|
||||
Subject: [PATCH] Require RDoc in `input-method.rb` again in a limited scope.
|
||||
|
||||
RDoc is implemented as soft dependency in IRB. See how the rdoc is required in
|
||||
the files. I reverted the commit below.
|
||||
|
||||
```
|
||||
$ grep -ril rdoc lib/
|
||||
lib/irb/cmd/help.rb
|
||||
lib/irb/completion.rb
|
||||
lib/irb/easter-egg.rb
|
||||
lib/irb/input-method.rb
|
||||
```
|
||||
---
|
||||
lib/irb/input-method.rb | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb
|
||||
index a8227ca..b77fd32 100644
|
||||
--- a/lib/irb/input-method.rb
|
||||
+++ b/lib/irb/input-method.rb
|
||||
@@ -320,6 +320,11 @@ def auto_indent(&block)
|
||||
[195, 164], # The "ä" that appears when Alt+d is pressed on xterm.
|
||||
[226, 136, 130] # The "∂" that appears when Alt+d in pressed on iTerm2.
|
||||
]
|
||||
+ begin
|
||||
+ require 'rdoc'
|
||||
+ rescue LoadError
|
||||
+ return nil
|
||||
+ end
|
||||
|
||||
if just_cursor_moving and completion_journey_data.nil?
|
||||
return nil
|
424
ruby.spec
424
ruby.spec
@ -1,6 +1,6 @@
|
||||
%global major_version 3
|
||||
%global minor_version 1
|
||||
%global teeny_version 3
|
||||
%global minor_version 2
|
||||
%global teeny_version 0
|
||||
%global major_minor_version %{major_version}.%{minor_version}
|
||||
|
||||
%global ruby_version %{major_minor_version}.%{teeny_version}
|
||||
@ -10,7 +10,7 @@
|
||||
#%%global milestone rc1
|
||||
|
||||
# Keep the revision enabled for pre-releases from GIT.
|
||||
#%%global revision fb4df44d16
|
||||
#%%global revision c5eefb7f37
|
||||
|
||||
%global ruby_archive %{name}-%{ruby_version}
|
||||
|
||||
@ -18,63 +18,58 @@
|
||||
%if 0%{?milestone:1}%{?revision:1} != 0
|
||||
%global ruby_archive %{ruby_archive}-%{?milestone}%{?!milestone:%{?revision}}
|
||||
%define ruby_archive_timestamp %(stat --printf='@%Y' %{_sourcedir}/%{ruby_archive}.tar.xz | date -f - +"%Y%m%d")
|
||||
%define development_release %{?milestone}%{?!milestone:%{?revision:%{ruby_archive_timestamp}git%{revision}}}
|
||||
%define development_release ~%{ruby_archive_timestamp}%{?milestone}%{?!milestone:%{?revision:git%{revision}}}
|
||||
%endif
|
||||
|
||||
|
||||
%global release 175
|
||||
%{!?release_string:%define release_string %{?development_release:0.}%{release}%{?development_release:.%{development_release}}%{?dist}}
|
||||
|
||||
# The RubyGems library has to stay out of Ruby directory tree, since the
|
||||
# RubyGems should be share by all Ruby implementations.
|
||||
%global rubygems_dir %{_datadir}/rubygems
|
||||
|
||||
# Bundled libraries versions
|
||||
%global rubygems_version 3.3.26
|
||||
%global rubygems_molinillo_version 0.7.0
|
||||
%global rubygems_optparse_version 0.2.0
|
||||
%global rubygems_version 3.4.1
|
||||
%global rubygems_molinillo_version 0.8.0
|
||||
%global rubygems_optparse_version 0.3.0
|
||||
%global rubygems_tsort_version 0.1.0
|
||||
|
||||
# Default gems.
|
||||
%global bundler_version 2.3.26
|
||||
%global bundler_version 2.4.1
|
||||
%global bundler_connection_pool_version 2.3.0
|
||||
%global bundler_fileutils_version 1.4.1
|
||||
%global bundler_molinillo_version 0.8.0
|
||||
%global bundler_net_http_persistent_version 4.0.0
|
||||
%global bundler_fileutils_version 1.7.0
|
||||
%global bundler_pub_grub_version 0.5.0
|
||||
%global bundler_net_http_persistent_version 4.0.1
|
||||
%global bundler_thor_version 1.2.1
|
||||
%global bundler_tmpdir_version 0.1.0
|
||||
# TODO: Check the version if/when available in library.
|
||||
%global bundler_tsort_version 0.1.1
|
||||
%global bundler_uri_version 0.10.1
|
||||
%global bundler_uri_version 0.12.0
|
||||
|
||||
%global bigdecimal_version 3.1.1
|
||||
%global did_you_mean_version 1.6.1
|
||||
%global erb_version 2.2.3
|
||||
%global io_console_version 0.5.11
|
||||
%global irb_version 1.4.1
|
||||
%global json_version 2.6.1
|
||||
%global openssl_version 3.0.1
|
||||
%global psych_version 4.0.4
|
||||
%global racc_version 1.6.0
|
||||
%global rdoc_version 6.4.0
|
||||
%global stringio_version 3.0.1
|
||||
%global bigdecimal_version 3.1.3
|
||||
%global did_you_mean_version 1.6.3
|
||||
%global erb_version 4.0.2
|
||||
%global io_console_version 0.6.0
|
||||
%global irb_version 1.6.2
|
||||
%global json_version 2.6.3
|
||||
%global openssl_version 3.1.0
|
||||
%global psych_version 5.0.1
|
||||
%global racc_version 1.6.2
|
||||
%global rdoc_version 6.5.0
|
||||
%global stringio_version 3.0.4
|
||||
|
||||
# Bundled gems.
|
||||
%global minitest_version 5.15.0
|
||||
%global power_assert_version 2.0.1
|
||||
%global minitest_version 5.16.3
|
||||
%global power_assert_version 2.0.3
|
||||
%global rake_version 13.0.6
|
||||
%global test_unit_version 3.5.3
|
||||
%global test_unit_version 3.5.7
|
||||
%global rexml_version 3.2.5
|
||||
%global rss_version 0.2.9
|
||||
%global net_ftp_version 0.1.3
|
||||
%global net_imap_version 0.2.3
|
||||
%global net_pop_version 0.1.1
|
||||
%global net_smtp_version 0.3.1
|
||||
%global net_ftp_version 0.2.0
|
||||
%global net_imap_version 0.3.4
|
||||
%global net_pop_version 0.1.2
|
||||
%global net_smtp_version 0.3.3
|
||||
%global matrix_version 0.4.2
|
||||
%global prime_version 0.1.2
|
||||
%global rbs_version 2.7.0
|
||||
%global rbs_version 2.8.2
|
||||
%global typeprof_version 0.21.3
|
||||
%global debug_version 1.6.3
|
||||
%global debug_version 1.7.1
|
||||
|
||||
%global tapset_libdir %(echo %{_libdir} | sed 's/64//')*
|
||||
|
||||
@ -87,6 +82,11 @@
|
||||
%bcond_without gmp
|
||||
%bcond_without hostname
|
||||
%bcond_without systemtap
|
||||
# YJIT is supported on x86_64 and aarch64.
|
||||
# https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md
|
||||
%ifarch x86_64 aarch64
|
||||
%bcond_without yjit
|
||||
%endif
|
||||
# Enable test when building on local.
|
||||
%bcond_with bundler_tests
|
||||
|
||||
@ -100,13 +100,15 @@
|
||||
|
||||
Summary: An interpreter of object-oriented scripting language
|
||||
Name: ruby
|
||||
Version: %{ruby_version}
|
||||
Release: %{release_string}
|
||||
Version: %{ruby_version}%{?development_release}
|
||||
Release: 176%{?dist}
|
||||
# BSD-3-Clause: missing/{crypt,mt19937,setproctitle}.c
|
||||
# ISC: missing/strl{cat,cpy}.c
|
||||
# Public Domain for example for: include/ruby/st.h, strftime.c, missing/*, ...
|
||||
# MIT and CCO: ccan/*
|
||||
# zlib: ext/digest/md5/md5.*, ext/nkf/nkf-utf8/nkf.c
|
||||
# UCD: some of enc/trans/**/*.src
|
||||
License: (Ruby or BSD) and Public Domain and MIT and CC0 and zlib and UCD
|
||||
# Unicode-DFS-2015: some of enc/trans/**/*.src
|
||||
License: (Ruby OR BSD-2-Clause) AND BSD-3-Clause AND ISC AND Public Domain AND MIT and CC0 AND zlib AND Unicode-DFS-2015
|
||||
URL: https://www.ruby-lang.org/
|
||||
Source0: https://cache.ruby-lang.org/pub/%{name}/%{major_minor_version}/%{ruby_archive}.tar.xz
|
||||
Source1: operating_system.rb
|
||||
@ -162,52 +164,11 @@ Patch6: ruby-2.7.0-Initialize-ABRT-hook.patch
|
||||
Patch7: ruby-3.1.0-Don-t-query-RubyVM-FrozenCore-for-class-path.patch
|
||||
# Avoid possible timeout errors in TestBugReporter#test_bug_reporter_add.
|
||||
# https://bugs.ruby-lang.org/issues/16492
|
||||
Patch19: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch
|
||||
# If GC compaction is not supported on platform, define the
|
||||
# corresponding GC methods as not implemented.
|
||||
# https://bugs.ruby-lang.org/issues/18779
|
||||
# https://github.com/ruby/ruby/pull/5934
|
||||
Patch22: ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch
|
||||
# To regenerate the patch you need to have ruby, autoconf, xz, tar and make installed:
|
||||
# tar -Jxvf ./ruby-3.1.3.tar.xz
|
||||
# git clone https://github.com/ruby/ruby.git
|
||||
# cd ruby && git checkout v3_1_3
|
||||
# patch -p1 < ../ruby-3.2.0-define-unsupported-gc-compaction-methods-as-rb_f_notimplement.patch
|
||||
# ./autogen.sh && ./configure
|
||||
# make gc.rbinc miniprelude.c
|
||||
# cd ..
|
||||
# diff -u {ruby-3.1.3,ruby}/gc.rbinc > ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch
|
||||
# diff -u {ruby-3.1.3,ruby}/miniprelude.c >> ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch
|
||||
Patch23: ruby-3.2.0-define-unsupported-gc-compaction-methods_generated-files.patch
|
||||
# Define the GC compaction support macro at run time.
|
||||
# https://bugs.ruby-lang.org/issues/18829
|
||||
# https://github.com/ruby/ruby/pull/6019
|
||||
# https://github.com/ruby/ruby/commit/2c190863239bee3f54cfb74b16bb6ea4cae6ed20
|
||||
Patch24: ruby-3.2.0-Detect-compaction-support-during-runtime.patch
|
||||
# Drop hard dependency on RDoc in IRB.
|
||||
# https://github.com/ruby/irb/pull/393
|
||||
Patch27: ruby-irb-1.4.1-drop-rdoc-hard-dep.patch
|
||||
# Set soft dependency on RDoc in input-method.rb in IRB.
|
||||
# https://github.com/ruby/irb/pull/395
|
||||
Patch28: ruby-irb-1.4.1-set-rdoc-soft-dep.patch
|
||||
# CGI is now too restrictive about leading '.' in domain, leading to failures
|
||||
# in Rack, rack-test or ActionPack.
|
||||
# https://github.com/ruby/ruby/commit/656f25987cf2885104d5b13c8d3f5b7d32f1b333
|
||||
Patch29: ruby-3.2.0-ruby-cgi-Fix-test_cgi_cookie_new_with_domain-to-pass.patch
|
||||
# https://github.com/ruby/cgi/pull/29
|
||||
# https://github.com/ruby/ruby/commit/745dcf5326ea2c8e2047a3bddeb0fbb7e7d07649
|
||||
Patch30: ruby-3.2.0-ruby-cgi-Loosen-the-domain-regex-to-accept.patch
|
||||
# Fix Time Zone Database 2022g.
|
||||
# https://bugs.ruby-lang.org/issues/19187
|
||||
# https://github.com/ruby/ruby/commit/a1124dc162810f86cb0bff58cde24064cfc561bc
|
||||
Patch31: ruby-3.1.3-Fix-for-tzdata-2022g.patch
|
||||
# If digest argument to method `sign` is nil, # NULL will be provided to
|
||||
# OpenSSL function to let it choose digest itself.
|
||||
# https://github.com/ruby/openssl/pull/507
|
||||
Patch32: ruby-3.2.0-ossl_ocsp-use-null.patch
|
||||
# Replace SHA1 usage in tests.
|
||||
# https://github.com/ruby/openssl/pull/554
|
||||
Patch33: ruby-3.2.0-ossl-tests-replace-sha1.patch
|
||||
Patch8: ruby-2.7.1-Timeout-the-test_bug_reporter_add-witout-raising-err.patch
|
||||
# Disable syntax_suggest test suite, which tries to download its dependencies.
|
||||
# https://bugs.ruby-lang.org/issues/19297
|
||||
Patch9: ruby-3.2.0-Revert-Fix-test-syntax-suggest-order.patch
|
||||
Patch10: ruby-3.2.0-Revert-Test-syntax_suggest-by-make-check.patch
|
||||
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
Suggests: rubypick
|
||||
@ -233,6 +194,7 @@ BuildRequires: multilib-rpm-config
|
||||
BuildRequires: gcc
|
||||
BuildRequires: make
|
||||
BuildRequires: zlib-devel
|
||||
%{?with_yjit:BuildRequires: %{_bindir}/rustc}
|
||||
# The bundler/spec/runtime/setup_spec.rb requires the command `man`.
|
||||
%{?with_bundler_tests:BuildRequires: %{_bindir}/man}
|
||||
|
||||
@ -263,7 +225,6 @@ Ruby or an application embedding Ruby.
|
||||
|
||||
%package libs
|
||||
Summary: Libraries necessary to run Ruby
|
||||
License: Ruby or BSD
|
||||
Provides: ruby(release) = %{ruby_release}
|
||||
|
||||
# Virtual provides for CCAN copylibs.
|
||||
@ -296,7 +257,10 @@ This package includes the libruby, necessary to run Ruby.
|
||||
%package -n rubygems
|
||||
Summary: The Ruby standard for packaging ruby libraries
|
||||
Version: %{rubygems_version}
|
||||
License: Ruby or MIT
|
||||
# BSD-2-Clause: lib/rubygems/tsort/
|
||||
# BSD-2-Clause OR Ruby: lib/rubygems/optparse/
|
||||
# MIT: lib/rubygems/resolver/molinillo
|
||||
License: (Ruby OR MIT) AND BSD-2-Clause AND (BSD-2-Clause OR Ruby) AND MIT
|
||||
Requires: ruby(release)
|
||||
Recommends: rubygem(bundler) >= %{bundler_version}
|
||||
Recommends: rubygem(rdoc) >= %{rdoc_version}
|
||||
@ -316,7 +280,7 @@ libraries.
|
||||
%package -n rubygems-devel
|
||||
Summary: Macros and development tools for packaging RubyGems
|
||||
Version: %{rubygems_version}
|
||||
License: Ruby or MIT
|
||||
License: MIT
|
||||
Requires: ruby(rubygems) >= %{version}-%{release}
|
||||
# Needed for RDoc documentation format generation.
|
||||
Requires: rubygem(json) >= %{json_version}
|
||||
@ -355,18 +319,19 @@ StdLib.
|
||||
%package -n rubygem-irb
|
||||
Summary: The Interactive Ruby
|
||||
Version: %{irb_version}
|
||||
License: Ruby OR BSD-2-Clause
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
# ruby-default-gems is required to run irb.
|
||||
# https://bugs.ruby-lang.org/issues/16951
|
||||
Requires: ruby-default-gems >= %{ruby_version}
|
||||
Requires: ruby-default-gems >= %{ruby_version}%{?development_release}
|
||||
Recommends: rubygem(rdoc) >= %{rdoc_version}
|
||||
Provides: irb = %{version}-%{release}
|
||||
Provides: rubygem(irb) = %{version}-%{release}
|
||||
# Obsoleted by Ruby 2.6 in F30 timeframe.
|
||||
Provides: ruby(irb) = %{ruby_version}-%{release}
|
||||
Provides: ruby-irb = %{ruby_version}-%{release}
|
||||
Obsoletes: ruby-irb < %{ruby_version}-%{release}
|
||||
Provides: ruby(irb) = %{ruby_version}%{?development_release}-%{release}
|
||||
Provides: ruby-irb = %{ruby_version}%{?development_release}-%{release}
|
||||
Obsoletes: ruby-irb < %{ruby_version}%{?development_release}-%{release}
|
||||
BuildArch: noarch
|
||||
|
||||
%description -n rubygem-irb
|
||||
@ -377,8 +342,10 @@ from the terminal.
|
||||
%package -n rubygem-rdoc
|
||||
Summary: A tool to generate HTML and command-line documentation for Ruby projects
|
||||
Version: %{rdoc_version}
|
||||
# SIL: lib/rdoc/generator/template/darkfish/css/fonts.css
|
||||
License: GPLv2 and Ruby and MIT and OFL
|
||||
# BSD-3-Clause: lib/rdoc/generator/darkfish.rb
|
||||
# CC-BY-2.5: lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif
|
||||
# OFL-1.1-RFN: lib/rdoc/generator/template/darkfish/css/fonts.css
|
||||
License: GPL-2.0-only AND Ruby AND BSD-3-Clause AND CC-BY-2.5 AND OFL-1.1-RFN
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Requires: rubygem(io-console) >= %{io_console_version}
|
||||
@ -407,7 +374,7 @@ This package contains documentation for %{name}.
|
||||
%package -n rubygem-bigdecimal
|
||||
Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic
|
||||
Version: %{bigdecimal_version}
|
||||
License: Ruby or BSD
|
||||
License: Ruby OR BSD-2-Clause
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Provides: rubygem(bigdecimal) = %{version}-%{release}
|
||||
@ -428,6 +395,7 @@ conversion between base 10 and base 2.
|
||||
%package -n rubygem-io-console
|
||||
Summary: IO/Console is a simple console utilizing library
|
||||
Version: %{io_console_version}
|
||||
License: Ruby OR BSD-2-Clause
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Provides: rubygem(io-console) = %{version}-%{release}
|
||||
@ -440,8 +408,8 @@ provide higher layer features, such like curses and readline.
|
||||
%package -n rubygem-json
|
||||
Summary: This is a JSON implementation as a Ruby extension in C
|
||||
Version: %{json_version}
|
||||
# UCD: ext/json/generator/generator.c
|
||||
License: (Ruby or GPLv2) and UCD
|
||||
# Unicode-DFS-2015: ext/json/ext/generator/generator.c
|
||||
License: (Ruby OR BSD-2-Clause) AND Unicode-DFS-2015
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Provides: rubygem(json) = %{version}-%{release}
|
||||
@ -480,10 +448,9 @@ Provides: rubygem(bundler) = %{version}-%{release}
|
||||
# https://github.com/bundler/bundler/issues/3647
|
||||
Provides: bundled(rubygem-connection_pool) = %{bundler_connection_pool_version}
|
||||
Provides: bundled(rubygem-fileutils) = %{bundler_fileutils_version}
|
||||
Provides: bundled(rubygem-molinillo) = %{bundler_molinillo_version}
|
||||
Provides: bundled(rubygem-pub_grub) = %{bundler_pub_grub_version}
|
||||
Provides: bundled(rubygem-net-http-persisntent) = %{bundler_net_http_persistent_version}
|
||||
Provides: bundled(rubygem-thor) = %{bundler_thor_version}
|
||||
Provides: bundled(rubygem-tmpdir) = %{bundler_tmpdir_version}
|
||||
Provides: bundled(rubygem-uri) = %{bundler_uri_version}
|
||||
BuildArch: noarch
|
||||
|
||||
@ -542,7 +509,7 @@ output.
|
||||
%package -n rubygem-power_assert
|
||||
Summary: Power Assert for Ruby
|
||||
Version: %{power_assert_version}
|
||||
License: Ruby or BSD
|
||||
License: Ruby OR BSD-2-Clause
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Provides: rubygem(power_assert) = %{version}-%{release}
|
||||
@ -572,7 +539,7 @@ specified in standard Ruby syntax.
|
||||
%package -n rubygem-rbs
|
||||
Summary: Type signature for Ruby
|
||||
Version: %{rbs_version}
|
||||
License: Ruby or BSD
|
||||
License: Ruby OR BSD-2-Clause
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Provides: rubygem(rbs) = %{version}-%{release}
|
||||
@ -586,8 +553,7 @@ definitions.
|
||||
Summary: An xUnit family unit testing framework for Ruby
|
||||
Version: %{test_unit_version}
|
||||
# lib/test/unit/diff.rb is a double license of the Ruby license and PSF license.
|
||||
# lib/test-unit.rb is a dual license of the Ruby license and LGPLv2.1 or later.
|
||||
License: (Ruby or BSD) and (Ruby or BSD or Python) and (Ruby or BSD or LGPLv2+)
|
||||
License: (Ruby OR BSD-2-Clause) AND (Ruby OR BSD-2-Clause OR Python-2.0.1)
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
Requires: rubygem(power_assert)
|
||||
@ -604,7 +570,7 @@ writing tests, checking results and automated testing in Ruby.
|
||||
%package -n rubygem-rexml
|
||||
Summary: An XML toolkit for Ruby
|
||||
Version: %{rexml_version}
|
||||
License: BSD
|
||||
License: BSD-2-Clause
|
||||
URL: https://github.com/ruby/rexml
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
@ -626,7 +592,7 @@ features such as XPath.
|
||||
%package -n rubygem-rss
|
||||
Summary: Family of libraries that support various formats of XML "feeds"
|
||||
Version: %{rss_version}
|
||||
License: BSD
|
||||
License: BSD-2-Clause
|
||||
URL: https://github.com/ruby/rss
|
||||
Requires: ruby(release)
|
||||
Requires: ruby(rubygems) >= %{rubygems_version}
|
||||
@ -673,17 +639,9 @@ rm -rf ext/fiddle/libffi*
|
||||
%patch4 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch19 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
%patch27 -p1
|
||||
%patch28 -p1
|
||||
%patch29 -p1
|
||||
%patch30 -p1
|
||||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
|
||||
# Provide an example of usage of the tapset:
|
||||
cp -a %{SOURCE3} .
|
||||
@ -691,6 +649,11 @@ cp -a %{SOURCE3} .
|
||||
%build
|
||||
autoconf
|
||||
|
||||
%global _configure %{_builddir}/%{buildsubdir}/configure
|
||||
|
||||
mkdir -p %{_vpath_builddir}
|
||||
pushd %{_vpath_builddir}
|
||||
|
||||
%configure \
|
||||
--with-rubylibprefix='%{ruby_libdir}' \
|
||||
--with-archlibdir='%{_libdir}' \
|
||||
@ -711,15 +674,18 @@ autoconf
|
||||
--enable-shared \
|
||||
--with-ruby-version='' \
|
||||
--enable-multiarch \
|
||||
%{?with_yjit: --enable-yjit} \
|
||||
|
||||
popd
|
||||
|
||||
# V=1 in %%make_build outputs the compiler options more verbosely.
|
||||
# https://bugs.ruby-lang.org/issues/18756
|
||||
%make_build COPY="cp -p"
|
||||
%make_build COPY="cp -p" -C %{_vpath_builddir}
|
||||
|
||||
%install
|
||||
rm -rf %{buildroot}
|
||||
|
||||
%make_install
|
||||
%make_install -C %{_vpath_builddir}
|
||||
|
||||
# TODO: Regenerate RBS parser in lib/rbs/parser.rb
|
||||
|
||||
@ -885,24 +851,26 @@ rm -rf %{buildroot}%{gem_dir}/gems/rake-%{rake_version}/.github
|
||||
%check
|
||||
%if 0%{?with_hardening_test}
|
||||
# Check Ruby hardening.
|
||||
checksec --file=libruby.so.%{ruby_version} | \
|
||||
checksec --file=%{_vpath_builddir}/libruby.so.%{ruby_version} | \
|
||||
grep "Full RELRO.*Canary found.*NX enabled.*DSO.*No RPATH.*No RUNPATH.*Yes.*\d*.*\d*.*libruby.so.%{ruby_version}"
|
||||
%endif
|
||||
|
||||
# Check RubyGems version.
|
||||
[ "`make runruby TESTRUN_SCRIPT='bin/gem -v' | tail -1`" == '%{rubygems_version}' ]
|
||||
[ "`make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT='%{_builddir}/%{buildsubdir}/bin/gem -v' | tail -1`" == '%{rubygems_version}' ]
|
||||
|
||||
# Check Rubygems bundled dependencies versions.
|
||||
|
||||
# Molinillo.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Gem; module Resolver; end; end; \
|
||||
require 'rubygems/resolver/molinillo/lib/molinillo/gem_metadata'; \
|
||||
puts Gem::Resolver::Molinillo::VERSION\\\"\" | tail -1`" \
|
||||
== '%{rubygems_molinillo_version}' ]
|
||||
puts '%%{rubygems_molinillo_version}: %{rubygems_molinillo_version}'; \
|
||||
puts %Q[Gem::Resolver::Molinillo::VERSION: #{Gem::Resolver::Molinillo::VERSION}]; \
|
||||
exit 1 if Gem::Resolver::Molinillo::VERSION != '%{rubygems_molinillo_version}'; \
|
||||
\""
|
||||
|
||||
# OptParse.
|
||||
make runruby TESTRUN_SCRIPT="-e \" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Gem; end; \
|
||||
require 'rubygems/optparse/lib/optparse'; \
|
||||
puts '%%{rubygems_optparse_version}: %{rubygems_optparse_version}'; \
|
||||
@ -912,74 +880,92 @@ make runruby TESTRUN_SCRIPT="-e \" \
|
||||
|
||||
# tsort
|
||||
# TODO: Provide some real version test if version is available.
|
||||
make runruby TESTRUN_SCRIPT="-e \" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Gem; end;\
|
||||
require 'rubygems/tsort/lib/tsort'\""
|
||||
|
||||
# Check Bundler bundled dependencies versions.
|
||||
|
||||
# connection_pool.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/connection_pool/lib/connection_pool/version'; \
|
||||
puts Bundler::ConnectionPool::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_connection_pool_version}' ]
|
||||
puts '%%{bundler_connection_pool_version}; %{bundler_connection_pool_version}'; \
|
||||
puts %Q[Bundler::ConnectionPool::VERSION: #{Bundler::ConnectionPool::VERSION}]; \
|
||||
exit 1 if Bundler::ConnectionPool::VERSION != '%{bundler_connection_pool_version}'; \
|
||||
\""
|
||||
|
||||
# FileUtils.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/fileutils/lib/fileutils'; \
|
||||
puts Bundler::FileUtils::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_fileutils_version}' ]
|
||||
puts '%%{bundler_fileutils_version}: %{bundler_fileutils_version}'; \
|
||||
puts %Q[Bundler::FileUtils::VERSION: #{Bundler::FileUtils::VERSION}]; \
|
||||
exit 1 if Bundler::FileUtils::VERSION != '%{bundler_fileutils_version}'; \
|
||||
\""
|
||||
|
||||
# Molinillo.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
# PubGrub
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'; \
|
||||
puts Bundler::Molinillo::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_molinillo_version}' ]
|
||||
require 'bundler/vendor/pub_grub/lib/pub_grub/version'; \
|
||||
puts '%%{bundler_pub_grub_version}: %{bundler_pub_grub_version}'; \
|
||||
puts %Q[Bundler::PubGrub::VERSION: #{Bundler::PubGrub::VERSION}]; \
|
||||
exit 1 if Bundler::PubGrub::VERSION != '%{bundler_pub_grub_version}'; \
|
||||
\""
|
||||
|
||||
# Net::HTTP::Persistent.
|
||||
# Require `rubygems` to workaround the `<class:Wrapper>': uninitialized
|
||||
# constant Gem (NameError) issue.
|
||||
# https://github.com/rubygems/rubygems/issues/5119
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-rrubygems -e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; module Persistent; module Net; module HTTP; \
|
||||
end; end; end; end; \
|
||||
require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'; \
|
||||
puts Bundler::Persistent::Net::HTTP::Persistent::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_net_http_persistent_version}' ]
|
||||
puts '%%{bundler_net_http_persistent_version}: %{bundler_net_http_persistent_version}'; \
|
||||
puts %Q[Bundler::Persistent::Net::HTTP::Persistent::VERSION: #{Bundler::Persistent::Net::HTTP::Persistent::VERSION}]; \
|
||||
exit 1 if Bundler::Persistent::Net::HTTP::Persistent::VERSION != '%{bundler_net_http_persistent_version}'; \
|
||||
\""
|
||||
|
||||
# Thor.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/thor/lib/thor/version'; \
|
||||
puts Bundler::Thor::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_thor_version}' ]
|
||||
puts '%%{bundler_thor_version}: %{bundler_thor_version}'; \
|
||||
puts %Q[Bundler::Thor::VERSION: #{Bundler::Thor::VERSION}]; \
|
||||
exit 1 if Bundler::Thor::VERSION != '%{bundler_thor_version}'; \
|
||||
\""
|
||||
|
||||
# tmpdir.
|
||||
# TODO: There is no version in bundled tmpdir yet.
|
||||
#%%{global bundler_tmpdir_version}
|
||||
# tsort
|
||||
# TODO: Provide some real version test if version is available.
|
||||
#%%{global bundler_tsort_version}
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/tsort/lib/tsort' \""
|
||||
|
||||
# URI.
|
||||
[ "`make runruby TESTRUN_SCRIPT=\"-e \\\" \
|
||||
make -C %{_vpath_builddir} -s runruby TESTRUN_SCRIPT="-e \" \
|
||||
module Bundler; end; \
|
||||
require 'bundler/vendor/uri/lib/uri/version'; \
|
||||
puts Bundler::URI::VERSION\\\"\" | tail -1`" \
|
||||
== '%{bundler_uri_version}' ]
|
||||
puts '%%{bundler_uri_version}: %{bundler_uri_version}'; \
|
||||
puts %Q[Bundler::URI::VERSION: #{Bundler::URI::VERSION}]; \
|
||||
exit 1 if Bundler::URI::VERSION != '%{bundler_uri_version}'; \
|
||||
\""
|
||||
|
||||
|
||||
# test_debug(TestRubyOptions) fails due to LoadError reported in debug mode,
|
||||
# when abrt.rb cannot be required (seems to be easier way then customizing
|
||||
# the test suite).
|
||||
touch abrt.rb
|
||||
touch %{_vpath_builddir}/abrt.rb
|
||||
|
||||
# Check if abrt hook is required (RubyGems are disabled by default when using
|
||||
# runruby, so re-enable them).
|
||||
make runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}"
|
||||
make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT="--enable-gems %{SOURCE13}"
|
||||
|
||||
# Check if systemtap is supported.
|
||||
%{?with_systemtap:make runruby TESTRUN_SCRIPT=%{SOURCE14}}
|
||||
%if %{with systemtap}
|
||||
ln -sfr probes.d %{_vpath_builddir}/
|
||||
make -C %{_vpath_builddir} runruby TESTRUN_SCRIPT=%{SOURCE14}
|
||||
%endif
|
||||
|
||||
DISABLE_TESTS=""
|
||||
MSPECOPTS=""
|
||||
@ -994,6 +980,14 @@ MSPECOPTS=""
|
||||
DISABLE_TESTS="$DISABLE_TESTS -n !/TestReadline#test_interrupt_in_other_thread/"
|
||||
%endif
|
||||
|
||||
%ifarch i686
|
||||
# i686 specific failures.
|
||||
# https://bugs.ruby-lang.org/issues/19147
|
||||
DISABLE_TESTS="$DISABLE_TESTS -n !/TestFileExhaustive#test_expand_path_for_existent_username/"
|
||||
DISABLE_TESTS="$DISABLE_TESTS -n !/TestDir#test_home/"
|
||||
MSPECOPTS="$MSPECOPTS -P 'File.expand_path expands ~ENV..USER..* to.* the user.s home directory'"
|
||||
%endif
|
||||
|
||||
# Several test broken by libffi-3.4.2. There should be fix in libffi, once
|
||||
# other components are fixed.
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2040380
|
||||
@ -1009,12 +1003,17 @@ DISABLE_TESTS="$DISABLE_TESTS -n !/Fiddle::TestFunction#test_argument_count/"
|
||||
mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%endif
|
||||
|
||||
# Disable `TestGCCompact#test_moving_objects_between_size_pools` due to:
|
||||
# `NoMethodError: undefined method `>=' for nil:NilClass` error.
|
||||
# https://bugs.ruby-lang.org/issues/19248
|
||||
DISABLE_TESTS="$DISABLE_TESTS -n !/TestGCCompact#test_moving_objects_between_size_pools/"
|
||||
|
||||
# Give an option to increase the timeout in tests.
|
||||
# https://bugs.ruby-lang.org/issues/16921
|
||||
%{?test_timeout_scale:RUBY_TEST_TIMEOUT_SCALE="%{test_timeout_scale}"} \
|
||||
make check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS"
|
||||
make -C %{_vpath_builddir} check TESTS="-v $DISABLE_TESTS" MSPECOPT="-fs $MSPECOPTS"
|
||||
|
||||
%{?with_bundler_tests:make test-bundler-parallel}
|
||||
%{?with_bundler_tests:make -C %{_vpath_builddir} test-bundler-parallel}
|
||||
|
||||
%files
|
||||
%license BSDL
|
||||
@ -1083,6 +1082,8 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%{ruby_libdir}/ipaddr.rb
|
||||
%{ruby_libdir}/kconv.rb
|
||||
%{ruby_libdir}/logger*
|
||||
# https://bugs.ruby-lang.org/issues/19298
|
||||
%exclude %{ruby_libdir}/mjit
|
||||
%{ruby_libdir}/mkmf.rb
|
||||
%{ruby_libdir}/monitor.rb
|
||||
%{ruby_libdir}/mutex_m.rb
|
||||
@ -1105,11 +1106,14 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%{ruby_libdir}/resolv-replace.rb
|
||||
%{ruby_libdir}/rinda
|
||||
%{ruby_libdir}/ripper*
|
||||
%dir %{ruby_libdir}/ruby_vm
|
||||
%{ruby_libdir}/ruby_vm/mjit
|
||||
%{ruby_libdir}/securerandom.rb
|
||||
%{ruby_libdir}/set*
|
||||
%{ruby_libdir}/shellwords.rb
|
||||
%{ruby_libdir}/singleton*
|
||||
%{ruby_libdir}/socket.rb
|
||||
%{ruby_libdir}/syntax_suggest*
|
||||
%{ruby_libdir}/syslog
|
||||
%{ruby_libdir}/tempfile.rb
|
||||
%{ruby_libdir}/timeout*
|
||||
@ -1200,6 +1204,7 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%{ruby_libarchdir}/enc/windows_1254.so
|
||||
%{ruby_libarchdir}/enc/windows_1257.so
|
||||
%{ruby_libarchdir}/enc/windows_31j.so
|
||||
%{ruby_libarchdir}/erb/escape.so
|
||||
%{ruby_libarchdir}/etc.so
|
||||
%{ruby_libarchdir}/fcntl.so
|
||||
%{ruby_libarchdir}/fiddle.so
|
||||
@ -1262,70 +1267,71 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%{_rpmconfigdir}/rubygems.con
|
||||
|
||||
%files default-gems
|
||||
%{gem_dir}/specifications/default/abbrev-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/abbrev-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/base64-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/benchmark-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/cgi-0.3.5.gemspec
|
||||
%{gem_dir}/specifications/default/csv-3.2.5.gemspec
|
||||
%{gem_dir}/specifications/default/date-3.2.2.gemspec
|
||||
%{gem_dir}/specifications/default/delegate-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/benchmark-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/cgi-0.3.6.gemspec
|
||||
%{gem_dir}/specifications/default/csv-3.2.6.gemspec
|
||||
%{gem_dir}/specifications/default/date-3.3.3.gemspec
|
||||
%{gem_dir}/specifications/default/delegate-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/did_you_mean-%{did_you_mean_version}.gemspec
|
||||
%{gem_dir}/specifications/default/digest-3.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/drb-2.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/english-0.7.1.gemspec
|
||||
%{gem_dir}/specifications/default/digest-3.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/drb-2.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/english-0.7.2.gemspec
|
||||
%{gem_dir}/specifications/default/erb-%{erb_version}.gemspec
|
||||
%{gem_dir}/specifications/default/error_highlight-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/etc-1.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/fcntl-1.0.1.gemspec
|
||||
%{gem_dir}/specifications/default/fiddle-1.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/fileutils-1.6.0.gemspec
|
||||
%{gem_dir}/specifications/default/error_highlight-0.5.1.gemspec
|
||||
%{gem_dir}/specifications/default/etc-1.4.2.gemspec
|
||||
%{gem_dir}/specifications/default/fcntl-1.0.2.gemspec
|
||||
%{gem_dir}/specifications/default/fiddle-1.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/fileutils-1.7.0.gemspec
|
||||
%{gem_dir}/specifications/default/find-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/forwardable-1.3.2.gemspec
|
||||
%{gem_dir}/specifications/default/getoptlong-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/io-nonblock-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/io-wait-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/ipaddr-1.2.4.gemspec
|
||||
%{gem_dir}/specifications/default/logger-1.5.0.gemspec
|
||||
%{gem_dir}/specifications/default/mutex_m-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/net-http-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/net-protocol-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/nkf-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/forwardable-1.3.3.gemspec
|
||||
%{gem_dir}/specifications/default/getoptlong-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/io-nonblock-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/io-wait-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/ipaddr-1.2.5.gemspec
|
||||
%{gem_dir}/specifications/default/logger-1.5.3.gemspec
|
||||
%{gem_dir}/specifications/default/mutex_m-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/net-http-0.3.2.gemspec
|
||||
%{gem_dir}/specifications/default/net-protocol-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/nkf-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/observer-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/open3-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/open-uri-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/optparse-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/open3-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/open-uri-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/optparse-0.3.1.gemspec
|
||||
%{gem_dir}/specifications/default/openssl-%{openssl_version}.gemspec
|
||||
%{gem_dir}/specifications/default/ostruct-0.5.2.gemspec
|
||||
%{gem_dir}/specifications/default/pathname-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/pp-0.3.0.gemspec
|
||||
%{gem_dir}/specifications/default/ostruct-0.5.5.gemspec
|
||||
%{gem_dir}/specifications/default/pathname-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/pp-0.4.0.gemspec
|
||||
%{gem_dir}/specifications/default/prettyprint-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/pstore-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/pstore-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/racc-%{racc_version}.gemspec
|
||||
%{gem_dir}/specifications/default/readline-0.0.3.gemspec
|
||||
%{gem_dir}/specifications/default/readline-ext-0.1.4.gemspec
|
||||
%{gem_dir}/specifications/default/reline-0.3.1.gemspec
|
||||
%{gem_dir}/specifications/default/resolv-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/resolv-replace-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/readline-ext-0.1.5.gemspec
|
||||
%{gem_dir}/specifications/default/reline-0.3.2.gemspec
|
||||
%{gem_dir}/specifications/default/resolv-0.2.2.gemspec
|
||||
%{gem_dir}/specifications/default/resolv-replace-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/rinda-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/ruby2_keywords-0.0.5.gemspec
|
||||
%{gem_dir}/specifications/default/securerandom-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/set-1.0.2.gemspec
|
||||
%{gem_dir}/specifications/default/securerandom-0.2.2.gemspec
|
||||
%{gem_dir}/specifications/default/set-1.0.3.gemspec
|
||||
%{gem_dir}/specifications/default/shellwords-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/singleton-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/stringio-%{stringio_version}.gemspec
|
||||
%{gem_dir}/specifications/default/strscan-3.0.1.gemspec
|
||||
%{gem_dir}/specifications/default/syslog-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/tempfile-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/time-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/timeout-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/tmpdir-0.1.2.gemspec
|
||||
%{gem_dir}/specifications/default/tsort-0.1.0.gemspec
|
||||
%{gem_dir}/specifications/default/un-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/uri-0.11.0.gemspec
|
||||
%{gem_dir}/specifications/default/weakref-0.1.1.gemspec
|
||||
#%%{gem_dir}/specifications/default/win32ole-1.8.8.gemspec
|
||||
%{gem_dir}/specifications/default/yaml-0.2.0.gemspec
|
||||
%{gem_dir}/specifications/default/zlib-2.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/strscan-3.0.5.gemspec
|
||||
%{gem_dir}/specifications/default/syntax_suggest-1.0.2.gemspec
|
||||
%{gem_dir}/specifications/default/syslog-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/tempfile-0.1.3.gemspec
|
||||
%{gem_dir}/specifications/default/time-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/timeout-0.3.1.gemspec
|
||||
%{gem_dir}/specifications/default/tmpdir-0.1.3.gemspec
|
||||
%{gem_dir}/specifications/default/tsort-0.1.1.gemspec
|
||||
%{gem_dir}/specifications/default/un-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/uri-0.12.0.gemspec
|
||||
%{gem_dir}/specifications/default/weakref-0.1.2.gemspec
|
||||
#%%{gem_dir}/specifications/default/win32ole-1.8.9.gemspec
|
||||
%{gem_dir}/specifications/default/yaml-0.2.1.gemspec
|
||||
%{gem_dir}/specifications/default/zlib-3.0.0.gemspec
|
||||
|
||||
%{gem_dir}/gems/erb-%{erb_version}
|
||||
# Use standalone rubygem-racc if Racc binary is required. Shipping this
|
||||
@ -1417,7 +1423,6 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%license %{gem_dir}/gems/net-ftp-%{net_ftp_version}/LICENSE.txt
|
||||
%doc %{gem_dir}/gems/net-ftp-%{net_ftp_version}/README.md
|
||||
%{gem_dir}/gems/net-ftp-%{net_ftp_version}/Rakefile
|
||||
%{gem_dir}/gems/net-ftp-%{net_ftp_version}/bin
|
||||
%{gem_dir}/gems/net-ftp-%{net_ftp_version}/lib
|
||||
%{gem_dir}/specifications/net-ftp-%{net_ftp_version}.gemspec
|
||||
|
||||
@ -1426,7 +1431,10 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%license %{gem_dir}/gems/net-imap-%{net_imap_version}/LICENSE.txt
|
||||
%doc %{gem_dir}/gems/net-imap-%{net_imap_version}/README.md
|
||||
%{gem_dir}/gems/net-imap-%{net_imap_version}/Rakefile
|
||||
%{gem_dir}/gems/net-imap-%{net_imap_version}/benchmarks
|
||||
%{gem_dir}/gems/net-imap-%{net_imap_version}/docs
|
||||
%{gem_dir}/gems/net-imap-%{net_imap_version}/lib
|
||||
%{gem_dir}/gems/net-imap-%{net_imap_version}/rakelib
|
||||
%{gem_dir}/specifications/net-imap-%{net_imap_version}.gemspec
|
||||
|
||||
%dir %{gem_dir}/gems/net-pop-%{net_pop_version}
|
||||
@ -1434,7 +1442,6 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
%license %{gem_dir}/gems/net-pop-%{net_pop_version}/LICENSE.txt
|
||||
%doc %{gem_dir}/gems/net-pop-%{net_pop_version}/README.md
|
||||
%{gem_dir}/gems/net-pop-%{net_pop_version}/Rakefile
|
||||
%{gem_dir}/gems/net-pop-%{net_pop_version}/bin
|
||||
%{gem_dir}/gems/net-pop-%{net_pop_version}/lib
|
||||
%{gem_dir}/specifications/net-pop-%{net_pop_version}.gemspec
|
||||
|
||||
@ -1561,6 +1568,9 @@ mv test/ruby/test_jit.rb{,.disable} || :
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Jan 02 2023 Vít Ondruch <vondruch@redhat.com> - 3.2.0-176
|
||||
- Upgrade to Ruby 3.2.0.
|
||||
|
||||
* Thu Dec 22 2022 Yaakov Selkowitz <yselkowi@redhat.com> - 3.1.3-175
|
||||
- Use SHA256 instead of SHA1 where needed in Openssl tests
|
||||
- Let OpenSSL choose the digest if digest for Openssl::OCSP::BasicResponse#sign is nil
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (ruby-3.1.3.tar.xz) = 4b0fd334ae56132ba98b8a69adad54bdcf7f7aeabd5eba5b0f0399a3868e2054f9026ca1b1cb2dbb197a9e9b0610b263481949c0623a62071546bc5adff8ca69
|
||||
SHA512 (ruby-3.2.0.tar.xz) = 733ecc6709470ee16916deeece9af1c76220ae95d17b2681116aff7f381d99bc3124b1b11b1c2336b2b29e468e91b90f158d5ae5fca810c6cf32a0b6234ae08e
|
||||
|
Loading…
Reference in New Issue
Block a user