git: 633b51aa6f3e - main - lang/ruby31: Add new port

From: Yasuhiro Kimura <yasu_at_FreeBSD.org>
Date: Sun, 19 Dec 2021 00:37:12 UTC
The branch main has been updated by yasu:

URL: https://cgit.FreeBSD.org/ports/commit/?id=633b51aa6f3efa1e4cc4ebcf07b95880cdd9a3fe

commit 633b51aa6f3efa1e4cc4ebcf07b95880cdd9a3fe
Author:     Yasuhiro Kimura <yasu@FreeBSD.org>
AuthorDate: 2021-11-09 15:19:42 +0000
Commit:     Yasuhiro Kimura <yasu@FreeBSD.org>
CommitDate: 2021-12-19 00:34:57 +0000

    lang/ruby31: Add new port
    
    Add preview1 of Ruby 3.3 series.
    
    To handle pre-release version, Mk/bsd.ruby.mk is changed as following.
    
    * New variable RUBY_DISTVERSION is introduced. It keeps DISTVERSION of
      each ruby port (lang/rubyXY).
    * The value of RUBY_VERSION, RUBY_PORTVERSION, RUBY_WRKSRC and
      RUBY_DISTNAME is set by using that of RUBY_DISTVERSION
    
    ReleaseNotes:   https://www.ruby-lang.org/en/news/2021/11/09/ruby-3-1-0-preview1-released/
    PR:             259746
    Approved by:    maintainer timeout (> 1 month)
---
 Mk/bsd.default-versions.mk                         |     2 +-
 Mk/bsd.ruby.mk                                     |    29 +-
 lang/Makefile                                      |     1 +
 lang/ruby31/Makefile                               |   216 +
 lang/ruby31/distinfo                               |     3 +
 lang/ruby31/files/patch-configure.ac               |    19 +
 lang/ruby31/files/patch-lib_mkmf.rb                |    11 +
 .../files/patch-lib_rdoc_generator_json__index.rb  |    20 +
 lang/ruby31/files/patch-tool_mkconfig.rb           |    14 +
 lang/ruby31/files/patch-tool_rbinstall.rb          |   189 +
 lang/ruby31/pkg-descr                              |    19 +
 lang/ruby31/pkg-message                            |    37 +
 lang/ruby31/pkg-plist                              | 14379 +++++++++++++++++++
 13 files changed, 14930 insertions(+), 9 deletions(-)

diff --git a/Mk/bsd.default-versions.mk b/Mk/bsd.default-versions.mk
index ff5a45ed0b0f..53519b606af4 100644
--- a/Mk/bsd.default-versions.mk
+++ b/Mk/bsd.default-versions.mk
@@ -115,7 +115,7 @@ PYTHON_DEFAULT?=	3.8
 PYTHON2_DEFAULT?=	2.7
 # Possible values: 3.6, 3.7, 3.8, 3.9, 3.10
 PYTHON3_DEFAULT?=	3.8
-# Possible values: 2.6, 2.7, 3.0
+# Possible values: 2.6, 2.7, 3.0, 3.1
 RUBY_DEFAULT?=		2.7
 # Possible values: rust, rust-nightly
 RUST_DEFAULT?=		rust
diff --git a/Mk/bsd.ruby.mk b/Mk/bsd.ruby.mk
index 3abf32058c94..30182178af26 100644
--- a/Mk/bsd.ruby.mk
+++ b/Mk/bsd.ruby.mk
@@ -47,6 +47,8 @@ Ruby_Include_MAINTAINER=	ruby@FreeBSD.org
 #			  the form of `x.y.z' (see below for current value).
 # RUBY_VERSION_CODE	- Integer version of RUBY_VERSION in the form of 
 #			  `xyz'.
+# RUBY_DISTVERSION	- DISTVERSION for the standard ruby ports (ruby,
+#			  ruby-gdbm, etc.).
 # RUBY_PORTVERSION	- PORTVERSION for the standard ruby ports (ruby,
 #			  ruby-gdbm, etc.).
 # RUBY_PORTREVISION	- PORTREVISION for the standard ruby ports.
@@ -133,7 +135,7 @@ RUBY?=			${LOCALBASE}/bin/ruby${RUBY_SUFFIX}
 #
 # Ruby 2.6
 #
-RUBY_VERSION=		2.6.9
+RUBY_DISTVERSION=	2.6.9
 RUBY_PORTREVISION=	0
 RUBY_PORTEPOCH=		1
 RUBY26=			""	# PLIST_SUB helpers
@@ -142,7 +144,7 @@ RUBY26=			""	# PLIST_SUB helpers
 #
 # Ruby 2.7
 #
-RUBY_VERSION=		2.7.5
+RUBY_DISTVERSION=	2.7.5
 RUBY_PORTREVISION=	0
 RUBY_PORTEPOCH=		1
 RUBY27=			""	# PLIST_SUB helpers
@@ -151,10 +153,18 @@ RUBY27=			""	# PLIST_SUB helpers
 #
 # Ruby 3.0
 #
-RUBY_VERSION=		3.0.3
+RUBY_DISTVERSION=	3.0.3
 RUBY_PORTREVISION=	0
 RUBY_PORTEPOCH=		1
 RUBY30=			""	# PLIST_SUB helpers
+. elif ${RUBY_VER} == 3.1
+#
+# Ruby 3.1
+#
+RUBY_DISTVERSION=	3.1.0-preview1
+RUBY_PORTREVISION=	0
+RUBY_PORTEPOCH=		1
+RUBY31=			""	# PLIST_SUB helpers
 
 # When adding a version, please keep the comment in
 # Mk/bsd.default-versions.mk in sync.
@@ -162,9 +172,10 @@ RUBY30=			""	# PLIST_SUB helpers
 #
 # Other versions
 #
-IGNORE=	Only ruby 2.6, 2.7 and 3.0 are supported
+IGNORE=	Only ruby 2.6, 2.7, 3.0 and 3.1 are supported
 _INVALID_RUBY_VER=	1
 . endif
+RUBY_VERSION=	${RUBY_DISTVERSION:C/^([0-9]+\.[0-9]+\.[0-9]+).*/\1/}
 .endif # defined(RUBY_VER)
 
 .if !defined(_INVALID_RUBY_VER)
@@ -172,6 +183,7 @@ _INVALID_RUBY_VER=	1
 RUBY26?=		"@comment "
 RUBY27?=		"@comment "
 RUBY30?=		"@comment "
+RUBY31?=		"@comment "
 
 .if defined(BROKEN_RUBY${RUBY_VER:R}${RUBY_VER:E})
 .if ${BROKEN_RUBY${RUBY_VER:R}${RUBY_VER:E}} == "yes"
@@ -181,7 +193,7 @@ BROKEN=			${BROKEN_RUBY${RUBY_VER:R}${RUBY_VER:E}}
 .endif
 .endif
 
-RUBY_WRKSRC=		${WRKDIR}/ruby-${RUBY_VERSION}
+RUBY_WRKSRC=		${WRKDIR}/ruby-${RUBY_DISTVERSION}
 
 RUBY_CONFIGURE_ARGS+=	--with-rubyhdrdir="${PREFIX}/include/ruby-${RUBY_VER}/" \
 			--with-rubylibprefix="${PREFIX}/lib/ruby" \
@@ -203,9 +215,9 @@ _RUBY_VENDORDIR?=	${_RUBY_SYSLIBDIR}/ruby/vendor_ruby
 
 RUBY_DEFAULT_SUFFIX?=	${RUBY_DEFAULT_VER:S/.//}
 
-RUBY_PORTVERSION?=	${RUBY_VERSION}
+RUBY_PORTVERSION?=	${RUBY_DISTVERSION:tl:C/([a-z])[a-z]+/\1/g:C/([0-9])([a-z])/\1.\2/g:C/:(.)/\1/g:C/[^a-z0-9+]+/./g}
 MASTER_SITE_SUBDIR_RUBY?=	${RUBY_VER}
-RUBY_DISTNAME?=		ruby-${RUBY_VERSION}
+RUBY_DISTNAME?=		ruby-${RUBY_DISTVERSION}
 
 RUBY_WRKSRC?=		${WRKDIR}/${RUBY_DISTNAME}
 
@@ -281,7 +293,8 @@ PLIST_SUB+=		${PLIST_RUBY_DIRS:C,DIR="(${LOCALBASE}|${PREFIX})/,DIR=",} \
 			RUBY_DEFAULT_SUFFIX="${RUBY_DEFAULT_SUFFIX}" \
 			RUBY26=${RUBY26} \
 			RUBY27=${RUBY27} \
-			RUBY30=${RUBY30}
+			RUBY30=${RUBY30} \
+			RUBY30=${RUBY31}
 
 .if ${PORT_OPTIONS:MDEBUG}
 RUBY_FLAGS+=	-d
diff --git a/lang/Makefile b/lang/Makefile
index a65262d81751..12d33411c314 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -307,6 +307,7 @@
     SUBDIR += ruby26
     SUBDIR += ruby27
     SUBDIR += ruby30
+    SUBDIR += ruby31
     SUBDIR += rubygem-ruby_language_server
     SUBDIR += runawk
     SUBDIR += rust
diff --git a/lang/ruby31/Makefile b/lang/ruby31/Makefile
new file mode 100644
index 000000000000..58a63c198e4b
--- /dev/null
+++ b/lang/ruby31/Makefile
@@ -0,0 +1,216 @@
+PORTNAME=	ruby
+DISTVERSION=	${RUBY_DISTVERSION}
+PORTREVISION=	${RUBY_PORTREVISION}
+PORTEPOCH=	${RUBY_PORTEPOCH}
+CATEGORIES=	lang ruby
+MASTER_SITES=	RUBY/${MASTER_SITE_SUBDIR_RUBY}
+DIST_SUBDIR=	ruby
+
+MAINTAINER=	ruby@FreeBSD.org
+COMMENT=	Object-oriented interpreted scripting language
+
+LICENSE=	BSD2CLAUSE RUBY
+LICENSE_COMB=	dual
+LICENSE_FILE_BSD2CLAUSE=	${WRKSRC}/BSDL
+LICENSE_FILE_RUBY=	${WRKSRC}/COPYING
+
+# Using LIB_DEPENDS finds the libffi from gcc which causes problems
+BUILD_DEPENDS=	libffi>=0:devel/libffi
+LIB_DEPENDS=	libyaml.so:textproc/libyaml
+RUN_DEPENDS=	libffi>=0:devel/libffi
+
+USES=		autoreconf cpe ssl tar:xz
+CPE_VENDOR=	ruby-lang
+CPE_VERSION=	${RUBY_RELVERSION}
+CPE_UPDATE=	p${RUBY_PATCHLEVEL}
+USE_LDCONFIG=	yes
+USE_RUBY=	yes
+RUBY_NO_BUILD_DEPENDS=	yes
+RUBY_NO_RUN_DEPENDS=	yes
+
+GNU_CONFIGURE=	yes
+CONFIGURE_ARGS=	${RUBY_CONFIGURE_ARGS} \
+		--disable-rpath \
+		--enable-install-static-library \
+		--enable-pthread \
+		--enable-shared \
+		--with-ruby-version=minor \
+		--with-sitedir="${PREFIX}/lib/ruby/site_ruby" \
+		--with-vendordir="${PREFIX}/lib/ruby/vendor_ruby"
+CONFIGURE_ENV=	debugflags=
+
+CPPFLAGS+=	-I${LOCALBASE}/include
+# Keep this, else ruby will fail to load libraries dependent of libpthread.
+LIBS+=		-lpthread -L${LOCALBASE}/lib
+WRKSRC=		${RUBY_WRKSRC}
+
+RUBY_VER=	3.1
+
+OPTIONS_DEFINE=		CAPIDOCS DEBUG DOCS EXAMPLES GMP RDOC
+OPTIONS_DEFAULT=	LIBEDIT RDOC
+OPTIONS_SINGLE=		EDIT
+OPTIONS_SINGLE_EDIT=	LIBEDIT READLINE
+OPTIONS_SUB=		yes
+
+CAPIDOCS_DESC=	Build and install C API documents
+EDIT_DESC=	Which line editing lib to use
+GMP_DESC=	Use GMP to accelerate Bignum operations
+LIBEDIT_DESC=	Use libedit
+RDOC_DESC=	Build and install Rdoc indexes
+READLINE_DESC=	Use libreadline
+
+CAPIDOCS_BUILD_DEPENDS=		dot:graphics/graphviz \
+				doxygen>=1.8.13,2:devel/doxygen
+CAPIDOCS_CONFIGURE_ENABLE=	install-capi
+GMP_LIB_DEPENDS=		libgmp.so:math/gmp
+GMP_CONFIGURE_WITH=		gmp
+LIBEDIT_USES=			libedit
+LIBEDIT_CONFIGURE_ON=		--enable-libedit \
+				--with-libedit-dir=${LOCALBASE}
+RDOC_CONFIGURE_ENABLE=		install-rdoc
+READLINE_USES=			readline
+READLINE_CONFIGURE_ON=		--disable-libedit \
+				--with-readline-dir=${LOCALBASE}
+
+.include <bsd.port.pre.mk>
+
+# PORTREVISION/PORTEPOCH hack
+
+.if ${PORTREVISION} != 0
+_SUF1=		_${PORTREVISION}
+.endif
+
+.if ${PORTEPOCH} != 0
+_SUF2=		,${PORTEPOCH}
+.endif
+
+#.if ${OPSYS} == "FreeBSD"
+#.if exists(/usr/sbin/dtrace) && (${ARCH} == amd64 || ${ARCH} == i386)
+#CONFIGURE_ARGS+=--enable-dtrace
+#.else
+#CONFIGURE_ARGS+=--disable-dtrace
+#.endif
+#.endif
+
+# keep in sync with all platforms where libunwind is available
+.if ${ARCH} == aarch64 || ${ARCH} == amd64 || ${ARCH} == armv7 || ${ARCH} == i386 || ${ARCH} == powerpc64 || ${ARCH} == powerpc64le
+LIB_DEPENDS+=	libunwind.so:devel/libunwind
+.endif
+
+.if (defined(PPC_ABI) && ${PPC_ABI} == ELFv1) || ${ARCH} == powerpc
+USE_GCC=	yes
+.endif
+
+.if ${ARCH} == armv6 || ${ARCH} == armv7
+CONFIGURE_ARGS+=	--with-setjmp-type=_setjmp
+CONFIGURE_ENV+=		ac_cv_func__setjmp=yes
+.endif
+
+.if ${RUBY_VER} == ${RUBY_DEFAULT_VER}
+PLIST_SUB+=	IF_DEFAULT=""
+.else
+PKGNAMESUFFIX=	${RUBY_SUFFIX}
+PLIST_SUB+=	IF_DEFAULT="@comment "
+.endif
+
+INSTALLED_SCRIPTS=	ruby
+INSTALLED_MANUALS=	ruby
+
+EXTSAMPLES=	bigdecimal/sample/*.rb
+
+EXTDOCS=	readline/README ripper/README stringio/README.md \
+		syslog/syslog.txt
+
+# Macros to change variables in rbconfig.rb
+RB_SET_CONF_VAR=	${SH} -c \
+			'${REINPLACE_CMD} -E -e "s,(CONFIG\[\"$$0\"\][[:space:]]*=[[:space:]]*)(\(?)(.*)(\)?),\1\2$$1\4," ${WRKSRC}/rbconfig.rb' \
+			--
+
+post-patch:
+# We get these from other ports
+.for d in bin/* ext/dbm ext/gdbm ext/win32* lib/bundler* libexec/bundler* man/bundle* man/erb.1 man/gemfile* man/irb.1 man/ri.1
+	@${RM} -r ${BUILD_WRKSRC}/${d}
+.endfor
+
+post-build:
+#
+# Hack to allow modules to be installed into separate PREFIX and/or under user
+# privileges
+#
+	@${RB_SET_CONF_VAR} "prefix" "ENV['PREFIX'] || \3"
+	@${RB_SET_CONF_VAR} "INSTALL" "'/usr/bin/install -c'"
+	@${RB_SET_CONF_VAR} "INSTALL_PROGRAM" "ENV['RB_USER_INSTALL'] ? '${INSTALL} ${COPY} ${STRIP} -m ${BINMODE}' : '${INSTALL_PROGRAM}'"
+	@${RB_SET_CONF_VAR} "INSTALL_SCRIPT" "ENV['RB_USER_INSTALL'] ? '${INSTALL} ${COPY} -m ${BINMODE}' : '${INSTALL_SCRIPT}'"
+	@${RB_SET_CONF_VAR} "INSTALL_DATA" "ENV['RB_USER_INSTALL'] ? '${INSTALL} ${COPY} -m ${SHAREMODE}' : '${INSTALL_DATA}'"
+
+post-build-CAPIDOCS-on:
+	@${FIND} ${WRKSRC}/doc -type d -empty -delete
+
+pre-install:
+	${MKDIR} ${STAGEDIR}${RUBY_SITEARCHLIBDIR}
+	${MKDIR} ${STAGEDIR}${RUBY_VENDORARCHLIBDIR}
+
+pre-install-DOCS-on:
+	${MKDIR} ${STAGEDIR}${RUBY_DOCDIR}
+
+pre-install-EXAMPLES-on:
+	${MKDIR} ${STAGEDIR}${RUBY_EXAMPLESDIR}
+
+pre-install-RDOC-on:
+	${MKDIR} ${STAGEDIR}${RUBY_RIDIR}
+	${MKDIR} ${STAGEDIR}${RUBY_SITERIDIR}
+
+post-install:
+.if ${RUBY_VER} == ${RUBY_DEFAULT_VER}
+#
+# Link just installed "ruby" to "ruby27", etc.
+#
+. for FILE in ${INSTALLED_SCRIPTS}
+	${LN} -fs ${FILE}${RUBY_SUFFIX} ${STAGEDIR}${PREFIX}/bin/${FILE}
+. endfor
+#
+# Link "ruby.1.gz" to "ruby27.1.gz", etc.
+#
+. for FILE in ${INSTALLED_MANUALS}
+	${LN} -fs ${FILE}${RUBY_SUFFIX}.1.gz ${STAGEDIR}${MANPREFIX}/man/man1/${FILE}.1.gz
+. endfor
+.endif
+
+post-install-DEBUG-off:
+#
+# XXX: hack to strip ruby binary. Ruby uses its own install script that seems
+# bogus to hack.
+#
+.if defined(STRIP) && ${STRIP} == -s
+	${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ruby${RUBY_SUFFIX}
+	${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libruby${RUBY_SHLIBVER}.so.${RUBY_SHLIBVER}
+	${FIND} ${STAGEDIR}${RUBY_ARCHLIBDIR} -type f -name '*\.so' -exec ${STRIP_CMD} {} \;
+.endif
+
+post-install-DOCS-on:
+	# Create all dirs required (":u" isn't avaiable in STABLE yet :-()
+	${MKDIR} ${EXTDOCS:C|^([^/]+)/.*|\1|:S|^|${STAGEDIR}${RUBY_DOCDIR}/|}
+.for FILE in ${EXTDOCS}
+	${INSTALL_DATA} ${WRKSRC}/ext/${FILE} \
+		${STAGEDIR}${RUBY_DOCDIR}/${FILE:C|^([^/]+)/.*|\1|}/
+.endfor
+	@(cd ${WRKSRC}/doc/ && ${COPYTREE_SHARE} \* ${STAGEDIR}${RUBY_DOCDIR}/)
+	${INSTALL_DATA} ${WRKSRC}/COPYING*	\
+			${WRKSRC}/ChangeLog	\
+			${WRKSRC}/LEGAL		\
+			${WRKSRC}/README*	\
+			${STAGEDIR}${RUBY_DOCDIR}/
+
+post-install-EXAMPLES-on:
+	# Create all dirs required (":u" isn't avaiable in STABLE yet :-()
+	${MKDIR} ${EXTSAMPLES:C|^([^/]+)/.*|\1|:S|^|${STAGEDIR}${RUBY_EXAMPLESDIR}/|}
+.for FILE in ${EXTSAMPLES}
+	${INSTALL_DATA} ${WRKSRC}/ext/${FILE} \
+		${STAGEDIR}${RUBY_EXAMPLESDIR}/${FILE:C|^([^/]+)/.*|\1|}/
+.endfor
+	(cd ${WRKSRC}/sample/ && ${COPYTREE_SHARE} . ${STAGEDIR}${RUBY_EXAMPLESDIR}/)
+
+do-test:
+	cd ${WRKSRC} && ${MAKE_CMD} test
+
+.include <bsd.port.post.mk>
diff --git a/lang/ruby31/distinfo b/lang/ruby31/distinfo
new file mode 100644
index 000000000000..b69eedb2c8b7
--- /dev/null
+++ b/lang/ruby31/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1636471941
+SHA256 (ruby/ruby-3.1.0-preview1.tar.xz) = 86a836ad42f6a7a469fce71ffec48fd3184af55bf79e488b568a4f64adee551d
+SIZE (ruby/ruby-3.1.0-preview1.tar.xz) = 15742844
diff --git a/lang/ruby31/files/patch-configure.ac b/lang/ruby31/files/patch-configure.ac
new file mode 100644
index 000000000000..170a9f3a9fe8
--- /dev/null
+++ b/lang/ruby31/files/patch-configure.ac
@@ -0,0 +1,19 @@
+--- configure.ac.orig	2018-12-28 12:03:09 UTC
++++ configure.ac
+@@ -2678,7 +2678,7 @@ AS_IF([test "$with_dln_a_out" != yes], [
+ 			: ${LDSHARED='$(CC) -shared'}
+ 			AS_IF([test "$rb_cv_binary_elf" = yes], [
+ 			    LDFLAGS="$LDFLAGS -rdynamic"
+-			    DLDFLAGS="$DLDFLAGS "'-Wl,-soname,$@'
++			    DLDFLAGS="$DLDFLAGS "'-Wl,-E'
+ 			], [
+ 			  test "$GCC" = yes && test "$rb_cv_prog_gnu_ld" = yes || LDSHARED='$(LD) -Bshareable'
+ 			])
+@@ -3163,6 +3163,7 @@ AS_CASE("$enable_shared", [yes], [
+     [freebsd*|dragonfly*], [
+ 	LIBRUBY_SO='lib$(RUBY_SO_NAME).$(SOEXT).$(MAJOR)$(MINOR)'
+ 	LIBRUBY_SONAME='$(LIBRUBY_SO)'
++	RUBY_APPEND_OPTIONS(LIBRUBY_DLDFLAGS, ['-Wl,-soname,${LIBRUBY_SO}'])
+ 	AS_IF([test "$rb_cv_binary_elf" != "yes" ], [
+ 	    LIBRUBY_SO="$LIBRUBY_SO.\$(TEENY)"
+ 	    LIBRUBY_ALIASES=''
diff --git a/lang/ruby31/files/patch-lib_mkmf.rb b/lang/ruby31/files/patch-lib_mkmf.rb
new file mode 100644
index 000000000000..f333fdfd2e67
--- /dev/null
+++ b/lang/ruby31/files/patch-lib_mkmf.rb
@@ -0,0 +1,11 @@
+--- lib/mkmf.rb.orig	2018-10-09 14:09:35 UTC
++++ lib/mkmf.rb
+@@ -234,7 +234,7 @@ module MakeMakefile
+   end
+   $extmk ||= false
+   if not $extmk and File.exist?(($hdrdir = RbConfig::CONFIG["rubyhdrdir"]) + "/ruby/ruby.h")
+-    $topdir = $hdrdir
++    $topdir = $hdrdir + "/" + "#{CONFIG['arch']}/ruby/"
+     $top_srcdir = $hdrdir
+     $arch_hdrdir = RbConfig::CONFIG["rubyarchhdrdir"]
+   elsif File.exist?(($hdrdir = ($top_srcdir ||= topdir) + "/include")  + "/ruby.h")
diff --git a/lang/ruby31/files/patch-lib_rdoc_generator_json__index.rb b/lang/ruby31/files/patch-lib_rdoc_generator_json__index.rb
new file mode 100644
index 000000000000..1152e4201544
--- /dev/null
+++ b/lang/ruby31/files/patch-lib_rdoc_generator_json__index.rb
@@ -0,0 +1,20 @@
+--- lib/rdoc/generator/json_index.rb.orig	2017-11-27 10:45:24 UTC
++++ lib/rdoc/generator/json_index.rb
+@@ -175,7 +175,7 @@ class RDoc::Generator::JsonIndex
+     debug_msg "Writing gzipped search index to %s" % outfile
+ 
+     Zlib::GzipWriter.open(outfile) do |gz|
+-      gz.mtime = File.mtime(search_index_file)
++      gz.mtime = 1
+       gz.orig_name = search_index_file.basename.to_s
+       gz.write search_index
+       gz.close
+@@ -193,7 +193,7 @@ class RDoc::Generator::JsonIndex
+         debug_msg "Writing gzipped file to %s" % outfile
+ 
+         Zlib::GzipWriter.open(outfile) do |gz|
+-          gz.mtime = File.mtime(dest)
++          gz.mtime = 1
+           gz.orig_name = dest.basename.to_s
+           gz.write data
+           gz.close
diff --git a/lang/ruby31/files/patch-tool_mkconfig.rb b/lang/ruby31/files/patch-tool_mkconfig.rb
new file mode 100644
index 000000000000..2b9c106e5a61
--- /dev/null
+++ b/lang/ruby31/files/patch-tool_mkconfig.rb
@@ -0,0 +1,14 @@
+--- tool/mkconfig.rb.orig	2019-12-25 09:50:58 UTC
++++ tool/mkconfig.rb
+@@ -160,8 +160,9 @@ def vars.expand(val, config = self)
+   val.replace(newval) unless newval == val
+   val
+ end
+-prefix = vars.expand(vars["prefix"] ||= "")
+-rubyarchdir = vars.expand(vars["rubyarchdir"] ||= "")
++prefix = vars.expand(vars["rubyarchdir"])
++major, minor, *rest = RUBY_VERSION.split('.')
++rubyarchdir = "/lib/ruby/#{major}.#{minor}/#{arch}"
+ relative_archdir = rubyarchdir.rindex(prefix, 0) ? rubyarchdir[prefix.size..-1] : rubyarchdir
+ 
+ puts %[\
diff --git a/lang/ruby31/files/patch-tool_rbinstall.rb b/lang/ruby31/files/patch-tool_rbinstall.rb
new file mode 100644
index 000000000000..2198410406b9
--- /dev/null
+++ b/lang/ruby31/files/patch-tool_rbinstall.rb
@@ -0,0 +1,189 @@
+--- tool/rbinstall.rb.orig	2021-11-09 07:21:54 UTC
++++ tool/rbinstall.rb
+@@ -910,186 +910,6 @@ end
+ 
+ # :startdoc:
+ 
+-install?(:ext, :comm, :gem, :'default-gems', :'default-gems-comm') do
+-  install_default_gem('lib', srcdir, bindir)
+-end
+-install?(:ext, :arch, :gem, :'default-gems', :'default-gems-arch') do
+-  install_default_gem('ext', srcdir, bindir)
+-end
+-
+-def load_gemspec(file, expanded = false)
+-  file = File.realpath(file)
+-  code = File.read(file, encoding: "utf-8:-")
+-  code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do
+-    files = []
+-    if expanded
+-      base = File.dirname(file)
+-      Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n|
+-        case File.basename(n); when ".", ".."; next; end
+-        next if File.directory?(File.join(base, n))
+-        files << n.dump
+-      end
+-    end
+-    "[" + files.join(", ") + "]"
+-  end
+-  spec = eval(code, binding, file)
+-  unless Gem::Specification === spec
+-    raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
+-  end
+-  spec.loaded_from = file
+-  spec.files.reject! {|n| n.end_with?(".gemspec") or n.start_with?(".git")}
+-
+-  spec
+-end
+-
+-def install_default_gem(dir, srcdir, bindir)
+-  gem_dir = Gem.default_dir
+-  install_dir = with_destdir(gem_dir)
+-  prepare "default gems from #{dir}", gem_dir
+-  RbInstall.no_write do
+-    makedirs(Gem.ensure_default_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+-  end
+-
+-  options = {
+-    :install_dir => with_destdir(gem_dir),
+-    :bin_dir => with_destdir(bindir),
+-    :ignore_dependencies => true,
+-    :dir_mode => $dir_mode,
+-    :data_mode => $data_mode,
+-    :prog_mode => $script_mode,
+-    :wrappers => true,
+-    :format_executable => true,
+-    :install_as_default => true,
+-  }
+-  default_spec_dir = Gem.default_specifications_dir
+-
+-  gems = Dir.glob("#{srcdir}/#{dir}/**/*.gemspec").map {|src|
+-    spec = load_gemspec(src)
+-    file_collector = RbInstall::Specs::FileCollector.new(src)
+-    files = file_collector.collect
+-    next if files.empty?
+-    spec.files = files
+-    spec
+-  }
+-  gems.compact.sort_by(&:name).each do |gemspec|
+-    old_gemspecs = Dir[File.join(with_destdir(default_spec_dir), "#{gemspec.name}-*.gemspec")]
+-    if old_gemspecs.size > 0
+-      old_gemspecs.each {|spec| rm spec }
+-    end
+-
+-    full_name = "#{gemspec.name}-#{gemspec.version}"
+-
+-    gemspec.loaded_from = File.join srcdir, gemspec.spec_name
+-
+-    package = RbInstall::DirPackage.new gemspec, {gemspec.bindir => 'libexec'}
+-    ins = RbInstall::UnpackedInstaller.new(package, options)
+-    puts "#{INDENT}#{gemspec.name} #{gemspec.version}"
+-    ins.install
+-  end
+-end
+-
+-install?(:ext, :comm, :gem, :'bundled-gems') do
+-  if CONFIG['CROSS_COMPILING'] == 'yes'
+-    # The following hacky steps set "$ruby = BASERUBY" in tool/fake.rb
+-    $hdrdir = ''
+-    $extmk = nil
+-    $ruby = nil  # ...
+-    ruby_path = $ruby + " -I#{Dir.pwd}" # $baseruby + " -I#{Dir.pwd}"
+-  else
+-    # ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name)))
+-    ENV['RUBYLIB'] = nil
+-    ENV['RUBYOPT'] = nil
+-    ruby_path = File.expand_path(with_destdir(File.join(bindir, ruby_install_name))) + " --disable=gems -I#{with_destdir(archlibdir)}"
+-  end
+-  Gem.instance_variable_set(:@ruby, ruby_path) if Gem.ruby != ruby_path
+-
+-  gem_dir = Gem.default_dir
+-  install_dir = with_destdir(gem_dir)
+-  prepare "bundled gems", gem_dir
+-  RbInstall.no_write do
+-    makedirs(Gem.ensure_gem_subdirectories(install_dir, $dir_mode).map {|d| File.join(gem_dir, d)})
+-  end
+-
+-  installed_gems = {}
+-  options = {
+-    :install_dir => install_dir,
+-    :bin_dir => with_destdir(bindir),
+-    :domain => :local,
+-    :ignore_dependencies => true,
+-    :dir_mode => $dir_mode,
+-    :data_mode => $data_mode,
+-    :prog_mode => $script_mode,
+-    :wrappers => true,
+-    :format_executable => true,
+-  }
+-  gem_ext_dir = "#$extout/gems/#{CONFIG['arch']}"
+-  extensions_dir = with_destdir(Gem::StubSpecification.gemspec_stub("", gem_dir, gem_dir).extensions_dir)
+-
+-  File.foreach("#{srcdir}/gems/bundled_gems") do |name|
+-    next if /^\s*(?:#|$)/ =~ name
+-    next unless /^(\S+)\s+(\S+).*/ =~ name
+-    gem_name = "#$1-#$2"
+-    path = "#{srcdir}/.bundle/gems/#{gem_name}/#{gem_name}.gemspec"
+-    if File.exist?(path)
+-      spec = load_gemspec(path)
+-    else
+-      path = "#{srcdir}/.bundle/gems/#{gem_name}/#$1.gemspec"
+-      next unless File.exist?(path)
+-      spec = load_gemspec(path, true)
+-    end
+-    next unless spec.platform == Gem::Platform::RUBY
+-    next unless spec.full_name == gem_name
+-    if !spec.extensions.empty? && CONFIG["EXTSTATIC"] == "static"
+-      puts "skip installation of #{spec.name} #{spec.version}; bundled gem with an extension library is not supported on --with-static-linked-ext"
+-      next
+-    end
+-    spec.extension_dir = "#{extensions_dir}/#{spec.full_name}"
+-    if File.directory?(ext = "#{gem_ext_dir}/#{spec.full_name}")
+-      spec.extensions[0] ||= "-"
+-    end
+-    package = RbInstall::DirPackage.new spec
+-    ins = RbInstall::UnpackedInstaller.new(package, options)
+-    puts "#{INDENT}#{spec.name} #{spec.version}"
+-    ins.install
+-    unless $dryrun
+-      File.chmod($data_mode, File.join(install_dir, "specifications", "#{spec.full_name}.gemspec"))
+-    end
+-    unless spec.extensions.empty?
+-      install_recursive(ext, spec.extension_dir)
+-    end
+-    installed_gems[spec.full_name] = true
+-  end
+-  installed_gems, gems = Dir.glob(srcdir+'/gems/*.gem').partition {|gem| installed_gems.key?(File.basename(gem, '.gem'))}
+-  unless installed_gems.empty?
+-    prepare "bundled gem cache", gem_dir+"/cache"
+-    install installed_gems, gem_dir+"/cache"
+-  end
+-  next if gems.empty?
+-  if defined?(Zlib)
+-    Gem.instance_variable_set(:@ruby, with_destdir(File.join(bindir, ruby_install_name)))
+-    silent = Gem::SilentUI.new
+-    gems.each do |gem|
+-      package = Gem::Package.new(gem)
+-      inst = RbInstall::GemInstaller.new(package, options)
+-      inst.spec.extension_dir = with_destdir(inst.spec.extension_dir)
+-      begin
+-        Gem::DefaultUserInteraction.use_ui(silent) {inst.install}
+-      rescue Gem::InstallError
+-        next
+-      end
+-      gemname = File.basename(gem)
+-      puts "#{INDENT}#{gemname}"
+-    end
+-    # fix directory permissions
+-    # TODO: Gem.install should accept :dir_mode option or something
+-    File.chmod($dir_mode, *Dir.glob(install_dir+"/**/"))
+-    # fix .gemspec permissions
+-    File.chmod($data_mode, *Dir.glob(install_dir+"/specifications/*.gemspec"))
+-  else
+-    puts "skip installing bundled gems because of lacking zlib"
+-  end
+-end
+-
+ parse_args()
+ 
+ include FileUtils
diff --git a/lang/ruby31/pkg-descr b/lang/ruby31/pkg-descr
new file mode 100644
index 000000000000..f7694c58f475
--- /dev/null
+++ b/lang/ruby31/pkg-descr
@@ -0,0 +1,19 @@
+Ruby is the interpreted scripting language for quick and
+easy object-oriented programming.  It has many features to
+process text files and to do system management tasks (as in
+Perl).  It is simple, straight-forward, and extensible.
+
+Features of Ruby are shown below.
+
+  + Simple Syntax
+  + *Normal* Object-Oriented features(ex. class, method calls)
+  + *Advanced* Object-Oriented features(ex. Mix-in, Singleton-method)
+  + Operator Overloading
+  + Exception Handling
+  + Iterators and Closures
+  + Garbage Collection
+  + Dynamic Loading of Object files(on some architecture)
+  + Highly Portable(works on many UNIX machines, and on DOS,
+    Windows, Mac, BeOS etc.)
+
+WWW: https://www.ruby-lang.org/en/
diff --git a/lang/ruby31/pkg-message b/lang/ruby31/pkg-message
new file mode 100644
index 000000000000..d1c7209d19ff
--- /dev/null
+++ b/lang/ruby31/pkg-message
@@ -0,0 +1,37 @@
+[
+{ type: install
+  message: <<EOM
+Some of the standard commands and libraries are provided as separate
+ports for ease of upgrading:
+
+	devel/ruby-gems:		gem - RubyGems package manager
+	devel/rubygem-debug:		debug - Debugging functionality for Ruby
+	devel/rubygem-erb:		erb - Templating system for Ruby
+	devel/rubygem-irb:		irb - Interactive Ruby
+	devel/rubygem-minitest:		minitest - Complete suite of testing facilities
+	devel/rubygem-power_assert:	power_assert - Power Assert for Ruby
+	devel/rubygem-rake:		rake - Ruby Make
+	devel/rubygem-rbs:		rbs - Language for type signatures for Ruby and standard library definitions
+	devel/rubygem-rdoc:		rdoc - Ruby Documentation System
+	devel/rubygem-test-unit:	test-unit - Unit testing framework for Ruby
+	devel/rubygem-typeprof:		typeprof - Type analysis tool for Ruby code
+	ftp/rubygem-net-ftp:		net-ftp - Support for the File Transfer Protocol
+	mail/rubygem-net-imap:		net-imap - Ruby client api for Internet Message Access Protocol
+	mail/rubygem-net-pop:		net-pop - Ruby client library for POP3
+	mail/rubygem-net-smtp:		net-smtp - Simple Mail Transfer Protocol client library for Ruby
+	math/rubygem-matrix:		matrix - Implementation of Matrix and Vector classes
+	math/rubygem-prime:		prime - Prime numbers and factorization library
+	sysutils/rubygem-bundler:	bundler - Tool that manages gem dependencies for ruby applications
+	textproc/rubygem-rexml:		rexml - XML toolkit for Ruby
+	www/rubygem-rss:		rss - Family of libraries that support various formats of XML "feeds"
+
+And some of the standard libraries are provided as separate ports
+since they require extra dependencies:
+
+	databases/rubygem-dbm:	DBM module
+	databases/rubygem-gdbm:	GDBM module
+
+Install them as occasion demands.
+EOM
+}
+]
diff --git a/lang/ruby31/pkg-plist b/lang/ruby31/pkg-plist
new file mode 100644
index 000000000000..c869299579c2
--- /dev/null
+++ b/lang/ruby31/pkg-plist
@@ -0,0 +1,14379 @@
+%%IF_DEFAULT%%bin/ruby
+bin/ruby%%RUBY_SUFFIX%%
+include/ruby-%%RUBY_VER%%/%%RUBY_ARCH%%/rb_mjit_min_header-%%RUBY_VER%%.0.h
+include/ruby-%%RUBY_VER%%/%%RUBY_ARCH%%/ruby/config.h
+include/ruby-%%RUBY_VER%%/ruby.h
+include/ruby-%%RUBY_VER%%/ruby/assert.h
+include/ruby-%%RUBY_VER%%/ruby/atomic.h
+include/ruby-%%RUBY_VER%%/ruby/backward.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/assume.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/attributes.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/bool.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/gcc_version_since.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/inttypes.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/limits.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/long_long.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/r_cast.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/rmodule.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/stdalign.h
+include/ruby-%%RUBY_VER%%/ruby/backward/2/stdarg.h
+include/ruby-%%RUBY_VER%%/ruby/backward/cxxanyargs.hpp
+include/ruby-%%RUBY_VER%%/ruby/debug.h
+include/ruby-%%RUBY_VER%%/ruby/defines.h
+include/ruby-%%RUBY_VER%%/ruby/digest.h
+include/ruby-%%RUBY_VER%%/ruby/encoding.h
+include/ruby-%%RUBY_VER%%/ruby/fiber/scheduler.h
+include/ruby-%%RUBY_VER%%/ruby/intern.h
+include/ruby-%%RUBY_VER%%/ruby/internal/anyargs.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/char.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/double.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/fixnum.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/gid_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/int.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/intptr_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/long.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/long_long.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/mode_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/off_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/pid_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/short.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/size_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/st_data_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/arithmetic/uid_t.h
+include/ruby-%%RUBY_VER%%/ruby/internal/assume.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/alloc_size.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/artificial.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/cold.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/const.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/constexpr.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/deprecated.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/diagnose_if.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/enum_extensibility.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/error.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/flag_enum.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/forceinline.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/format.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/maybe_unused.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/noalias.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/nodiscard.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/noexcept.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/noinline.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/nonnull.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/noreturn.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/pure.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/restrict.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/returns_nonnull.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/warning.h
+include/ruby-%%RUBY_VER%%/ruby/internal/attr/weakref.h
+include/ruby-%%RUBY_VER%%/ruby/internal/cast.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/apple.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/clang.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/gcc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/intel.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/msvc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_is/sunpro.h
+include/ruby-%%RUBY_VER%%/ruby/internal/compiler_since.h
+include/ruby-%%RUBY_VER%%/ruby/internal/config.h
+include/ruby-%%RUBY_VER%%/ruby/internal/constant_p.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rarray.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rbasic.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rbignum.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rclass.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rdata.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rfile.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rhash.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rmatch.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/robject.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rregexp.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rstring.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rstruct.h
+include/ruby-%%RUBY_VER%%/ruby/internal/core/rtypeddata.h
+include/ruby-%%RUBY_VER%%/ruby/internal/ctype.h
+include/ruby-%%RUBY_VER%%/ruby/internal/dllexport.h
+include/ruby-%%RUBY_VER%%/ruby/internal/dosish.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/coderange.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/ctype.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/encoding.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/pathname.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/re.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/sprintf.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/string.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/symbol.h
+include/ruby-%%RUBY_VER%%/ruby/internal/encoding/transcode.h
+include/ruby-%%RUBY_VER%%/ruby/internal/error.h
+include/ruby-%%RUBY_VER%%/ruby/internal/eval.h
+include/ruby-%%RUBY_VER%%/ruby/internal/event.h
+include/ruby-%%RUBY_VER%%/ruby/internal/fl_type.h
+include/ruby-%%RUBY_VER%%/ruby/internal/gc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/glob.h
+include/ruby-%%RUBY_VER%%/ruby/internal/globals.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/attribute.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/builtin.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/c_attribute.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/cpp_attribute.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/declspec_attribute.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/extension.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/feature.h
+include/ruby-%%RUBY_VER%%/ruby/internal/has/warning.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/array.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/bignum.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/class.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/compar.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/complex.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/cont.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/dir.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/enum.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/enumerator.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/error.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/eval.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/file.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/gc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/hash.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/io.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/load.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/marshal.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/numeric.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/object.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/parse.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/proc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/process.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/random.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/range.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/rational.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/re.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/ruby.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/select.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/select/largesize.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/select/posix.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/signal.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/sprintf.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/string.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/struct.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/thread.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/time.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/variable.h
+include/ruby-%%RUBY_VER%%/ruby/internal/intern/vm.h
+include/ruby-%%RUBY_VER%%/ruby/internal/interpreter.h
+include/ruby-%%RUBY_VER%%/ruby/internal/iterator.h
+include/ruby-%%RUBY_VER%%/ruby/internal/memory.h
+include/ruby-%%RUBY_VER%%/ruby/internal/method.h
+include/ruby-%%RUBY_VER%%/ruby/internal/module.h
+include/ruby-%%RUBY_VER%%/ruby/internal/newobj.h
+include/ruby-%%RUBY_VER%%/ruby/internal/rgengc.h
+include/ruby-%%RUBY_VER%%/ruby/internal/scan_args.h
+include/ruby-%%RUBY_VER%%/ruby/internal/special_consts.h
+include/ruby-%%RUBY_VER%%/ruby/internal/static_assert.h
+include/ruby-%%RUBY_VER%%/ruby/internal/stdalign.h
+include/ruby-%%RUBY_VER%%/ruby/internal/stdbool.h
+include/ruby-%%RUBY_VER%%/ruby/internal/symbol.h
+include/ruby-%%RUBY_VER%%/ruby/internal/value.h
+include/ruby-%%RUBY_VER%%/ruby/internal/value_type.h
+include/ruby-%%RUBY_VER%%/ruby/internal/variable.h
+include/ruby-%%RUBY_VER%%/ruby/internal/warning_push.h
+include/ruby-%%RUBY_VER%%/ruby/internal/xmalloc.h
+include/ruby-%%RUBY_VER%%/ruby/io.h
+include/ruby-%%RUBY_VER%%/ruby/memory_view.h
+include/ruby-%%RUBY_VER%%/ruby/missing.h
+include/ruby-%%RUBY_VER%%/ruby/onigmo.h
+include/ruby-%%RUBY_VER%%/ruby/oniguruma.h
+include/ruby-%%RUBY_VER%%/ruby/ractor.h
+include/ruby-%%RUBY_VER%%/ruby/random.h
+include/ruby-%%RUBY_VER%%/ruby/re.h
+include/ruby-%%RUBY_VER%%/ruby/regex.h
+include/ruby-%%RUBY_VER%%/ruby/ruby.h
+include/ruby-%%RUBY_VER%%/ruby/st.h
+include/ruby-%%RUBY_VER%%/ruby/subst.h
+include/ruby-%%RUBY_VER%%/ruby/thread.h
+include/ruby-%%RUBY_VER%%/ruby/thread_native.h
+include/ruby-%%RUBY_VER%%/ruby/util.h
+include/ruby-%%RUBY_VER%%/ruby/version.h
+include/ruby-%%RUBY_VER%%/ruby/vm.h
+lib/libruby%%RUBY_SHLIBVER%%-static.a
+lib/libruby%%RUBY_SHLIBVER%%.so
+lib/libruby%%RUBY_SHLIBVER%%.so.%%RUBY_SHLIBVER%%
+%%RUBY_LIBDIR%%/English.rb
+%%RUBY_LIBDIR%%/abbrev.rb
+%%RUBY_ARCHLIBDIR%%/bigdecimal.so
+%%RUBY_ARCHLIBDIR%%/cgi/escape.so
+%%RUBY_ARCHLIBDIR%%/continuation.so
+%%RUBY_ARCHLIBDIR%%/coverage.so
+%%RUBY_ARCHLIBDIR%%/date_core.so
+%%RUBY_ARCHLIBDIR%%/digest.so
+%%RUBY_ARCHLIBDIR%%/digest/bubblebabble.so
+%%RUBY_ARCHLIBDIR%%/digest/md5.so
+%%RUBY_ARCHLIBDIR%%/digest/rmd160.so
+%%RUBY_ARCHLIBDIR%%/digest/sha1.so
+%%RUBY_ARCHLIBDIR%%/digest/sha2.so
+%%RUBY_ARCHLIBDIR%%/enc/big5.so
+%%RUBY_ARCHLIBDIR%%/enc/cesu_8.so
+%%RUBY_ARCHLIBDIR%%/enc/cp949.so
+%%RUBY_ARCHLIBDIR%%/enc/emacs_mule.so
+%%RUBY_ARCHLIBDIR%%/enc/encdb.so
+%%RUBY_ARCHLIBDIR%%/enc/euc_jp.so
+%%RUBY_ARCHLIBDIR%%/enc/euc_kr.so
+%%RUBY_ARCHLIBDIR%%/enc/euc_tw.so
+%%RUBY_ARCHLIBDIR%%/enc/gb18030.so
+%%RUBY_ARCHLIBDIR%%/enc/gb2312.so
+%%RUBY_ARCHLIBDIR%%/enc/gbk.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_1.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_10.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_11.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_13.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_14.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_15.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_16.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_2.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_3.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_4.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_5.so
+%%RUBY_ARCHLIBDIR%%/enc/iso_8859_6.so
*** 14147 LINES SKIPPED ***