summaryrefslogtreecommitdiff
path: root/dev-scheme
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-04 05:48:38 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-04 05:48:38 -0500
commitbfd9c39e4712ebdb442d4ca0673061faed1e70e1 (patch)
tree0d7a74b4463ee387f9cf9368ceb1b757f694f72a /dev-scheme
parentf716a9fe6455d39eef01e718aae68dae61c19704 (diff)
downloadbaldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.tar.gz
baldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.tar.xz
baldeagleos-repo-bfd9c39e4712ebdb442d4ca0673061faed1e70e1.zip
Revert "Adding metadata"
This reverts commit f716a9fe6455d39eef01e718aae68dae61c19704.
Diffstat (limited to 'dev-scheme')
-rw-r--r--dev-scheme/akku/Manifest1
-rw-r--r--dev-scheme/akku/akku-1.1.0-r100.ebuild49
-rw-r--r--dev-scheme/akku/metadata.xml21
-rw-r--r--dev-scheme/bigloo/Manifest1
-rw-r--r--dev-scheme/bigloo/bigloo-4.5b-r1.ebuild225
-rw-r--r--dev-scheme/bigloo/files/50bigloo-gentoo.el2
-rw-r--r--dev-scheme/bigloo/files/bigloo-4.5b-makefile.patch36
-rw-r--r--dev-scheme/bigloo/metadata.xml27
-rw-r--r--dev-scheme/bytestructures/Manifest1
-rw-r--r--dev-scheme/bytestructures/bytestructures-2.0.2-r100.ebuild26
-rw-r--r--dev-scheme/bytestructures/metadata.xml13
-rw-r--r--dev-scheme/c-wrapper/Manifest1
-rw-r--r--dev-scheme/c-wrapper/c-wrapper-0.6.1-r2.ebuild53
-rw-r--r--dev-scheme/c-wrapper/c-wrapper-0.6.1-r3.ebuild54
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-clang.patch71
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-closure.patch10
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-extend-parser.patch142
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-float128.patch79
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-gauche-abi-0.98.patch62
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-gcc-15.patch24
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-gcc-5.patch43
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-gentoo.patch51
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-glibc-2.25.patch13
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-info.patch66
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-local-typedef.patch149
-rw-r--r--dev-scheme/c-wrapper/files/c-wrapper-texinfo-6.7.patch34
-rw-r--r--dev-scheme/c-wrapper/metadata.xml8
-rw-r--r--dev-scheme/chez-minikanren/Manifest1
-rw-r--r--dev-scheme/chez-minikanren/chez-minikanren-2018.04.11.ebuild44
-rw-r--r--dev-scheme/chez-minikanren/metadata.xml21
-rw-r--r--dev-scheme/chez/Manifest3
-rw-r--r--dev-scheme/chez/chez-10.3.0.ebuild121
-rw-r--r--dev-scheme/chez/chez-10.4.0.ebuild121
-rw-r--r--dev-scheme/chez/chez-10.4.1.ebuild121
-rw-r--r--dev-scheme/chez/metadata.xml27
-rw-r--r--dev-scheme/chibi/Manifest3
-rw-r--r--dev-scheme/chibi/chibi-0.10.0.ebuild43
-rw-r--r--dev-scheme/chibi/chibi-0.11.0.ebuild45
-rw-r--r--dev-scheme/chibi/chibi-0.12.ebuild29
-rw-r--r--dev-scheme/chibi/chibi-9999.ebuild29
-rw-r--r--dev-scheme/chibi/metadata.xml30
-rw-r--r--dev-scheme/chicken/Manifest2
-rw-r--r--dev-scheme/chicken/chicken-5.3.0.ebuild78
-rw-r--r--dev-scheme/chicken/chicken-5.4.0.ebuild76
-rw-r--r--dev-scheme/chicken/metadata.xml15
-rw-r--r--dev-scheme/cyclone/Manifest2
-rw-r--r--dev-scheme/cyclone/cyclone-0.35.0.ebuild54
-rw-r--r--dev-scheme/cyclone/cyclone-0.36.0.ebuild62
-rw-r--r--dev-scheme/cyclone/cyclone-9999.ebuild62
-rw-r--r--dev-scheme/cyclone/metadata.xml26
-rw-r--r--dev-scheme/elk/Manifest1
-rw-r--r--dev-scheme/elk/elk-3.99.8-r2.ebuild45
-rw-r--r--dev-scheme/elk/elk-3.99.8-r3.ebuild54
-rw-r--r--dev-scheme/elk/files/elk-3.99.8-c99-build-fix.patch33
-rw-r--r--dev-scheme/elk/files/elk-3.99.8-fpurge.patch36
-rw-r--r--dev-scheme/elk/files/elk-3.99.8-implicit-function.patch22
-rw-r--r--dev-scheme/elk/files/elk-3.99.8-implicit-int-incompat-ptr.patch52
-rw-r--r--dev-scheme/elk/files/elk-3.99.8-makefile-ordering.patch23
-rw-r--r--dev-scheme/elk/metadata.xml11
-rw-r--r--dev-scheme/escm/Manifest1
-rw-r--r--dev-scheme/escm/escm-1.1-r1.ebuild39
-rw-r--r--dev-scheme/escm/files/escm-headers.patch10
-rw-r--r--dev-scheme/escm/metadata.xml8
-rw-r--r--dev-scheme/fibers/Manifest1
-rw-r--r--dev-scheme/fibers/fibers-1.2.0_p20230522-r100.ebuild41
-rw-r--r--dev-scheme/fibers/metadata.xml22
-rw-r--r--dev-scheme/gambit/Manifest2
-rw-r--r--dev-scheme/gambit/files/50gambit-gentoo.el10
-rw-r--r--dev-scheme/gambit/gambit-4.9.6.ebuild73
-rw-r--r--dev-scheme/gambit/gambit-4.9.7.ebuild73
-rw-r--r--dev-scheme/gambit/metadata.xml14
-rw-r--r--dev-scheme/gauche-cdb/Manifest1
-rw-r--r--dev-scheme/gauche-cdb/files/gauche-cdb-gauche-package.patch133
-rw-r--r--dev-scheme/gauche-cdb/files/gauche-cdb-undefined-reference.patch22
-rw-r--r--dev-scheme/gauche-cdb/gauche-cdb-0.3.1-r1.ebuild32
-rw-r--r--dev-scheme/gauche-cdb/metadata.xml11
-rw-r--r--dev-scheme/gauche-gl/Manifest1
-rw-r--r--dev-scheme/gauche-gl/files/gauche-gl-0.6-cflags.patch11
-rw-r--r--dev-scheme/gauche-gl/files/gauche-gl-0.6-cg.patch47
-rw-r--r--dev-scheme/gauche-gl/files/gauche-gl-0.6-info.patch66
-rw-r--r--dev-scheme/gauche-gl/files/gauche-gl-0.6-simple.viewer.patch25
-rw-r--r--dev-scheme/gauche-gl/gauche-gl-0.6-r1.ebuild61
-rw-r--r--dev-scheme/gauche-gl/metadata.xml15
-rw-r--r--dev-scheme/gauche-gtk/Manifest1
-rw-r--r--dev-scheme/gauche-gtk/gauche-gtk-0.6.2.ebuild40
-rw-r--r--dev-scheme/gauche-gtk/metadata.xml11
-rw-r--r--dev-scheme/gauche-kakasi/Manifest1
-rw-r--r--dev-scheme/gauche-kakasi/files/gauche-kakasi-gauche-package.patch156
-rw-r--r--dev-scheme/gauche-kakasi/gauche-kakasi-0.1-r1.ebuild31
-rw-r--r--dev-scheme/gauche-kakasi/metadata.xml11
-rw-r--r--dev-scheme/gauche-mecab/Manifest1
-rw-r--r--dev-scheme/gauche-mecab/gauche-mecab-1.0.2-r1.ebuild20
-rw-r--r--dev-scheme/gauche-mecab/metadata.xml11
-rw-r--r--dev-scheme/gauche-qdbm/Manifest1
-rw-r--r--dev-scheme/gauche-qdbm/files/gauche-qdbm-gauche-package.patch147
-rw-r--r--dev-scheme/gauche-qdbm/files/gauche-qdbm-test.patch13
-rw-r--r--dev-scheme/gauche-qdbm/files/gauche-qdbm-undefined-reference.patch11
-rw-r--r--dev-scheme/gauche-qdbm/gauche-qdbm-0.2-r1.ebuild33
-rw-r--r--dev-scheme/gauche-qdbm/metadata.xml11
-rw-r--r--dev-scheme/gauche/Manifest2
-rw-r--r--dev-scheme/gauche/files/gauche-ext-ldflags.patch11
-rw-r--r--dev-scheme/gauche/files/gauche-gauche.m4.patch27
-rw-r--r--dev-scheme/gauche/files/gauche-xz-info.patch31
-rw-r--r--dev-scheme/gauche/gauche-0.9.14.ebuild61
-rw-r--r--dev-scheme/gauche/gauche-0.9.15.ebuild61
-rw-r--r--dev-scheme/gauche/metadata.xml29
-rw-r--r--dev-scheme/goosh/Manifest1
-rw-r--r--dev-scheme/goosh/goosh-1.3-r100.ebuild20
-rw-r--r--dev-scheme/goosh/metadata.xml8
-rw-r--r--dev-scheme/guile-colorized/Manifest1
-rw-r--r--dev-scheme/guile-colorized/guile-colorized-0.1_p20191205-r100.ebuild42
-rw-r--r--dev-scheme/guile-colorized/guile-colorized-9999.ebuild42
-rw-r--r--dev-scheme/guile-colorized/metadata.xml13
-rw-r--r--dev-scheme/guile-commonmark/Manifest1
-rw-r--r--dev-scheme/guile-commonmark/guile-commonmark-0.1.2_pre20240803.ebuild29
-rw-r--r--dev-scheme/guile-commonmark/metadata.xml15
-rw-r--r--dev-scheme/guile-config/Manifest1
-rw-r--r--dev-scheme/guile-config/guile-config-0.5.1-r100.ebuild25
-rw-r--r--dev-scheme/guile-config/metadata.xml22
-rw-r--r--dev-scheme/guile-dbd-postgresql/Manifest1
-rw-r--r--dev-scheme/guile-dbd-postgresql/guile-dbd-postgresql-2.1.9-r1.ebuild37
-rw-r--r--dev-scheme/guile-dbd-postgresql/metadata.xml13
-rw-r--r--dev-scheme/guile-dbd-sqlite3/Manifest1
-rw-r--r--dev-scheme/guile-dbd-sqlite3/guile-dbd-sqlite3-2.1.9-r1.ebuild37
-rw-r--r--dev-scheme/guile-dbd-sqlite3/metadata.xml13
-rw-r--r--dev-scheme/guile-dbi/Manifest1
-rw-r--r--dev-scheme/guile-dbi/files/guile-dbi-2.1.9-find-correct-site-dir.patch32
-rw-r--r--dev-scheme/guile-dbi/guile-dbi-2.1.9.ebuild40
-rw-r--r--dev-scheme/guile-dbi/metadata.xml19
-rw-r--r--dev-scheme/guile-gcrypt/Manifest1
-rw-r--r--dev-scheme/guile-gcrypt/guile-gcrypt-0.4.0-r100.ebuild43
-rw-r--r--dev-scheme/guile-gcrypt/metadata.xml12
-rw-r--r--dev-scheme/guile-gi/Manifest1
-rw-r--r--dev-scheme/guile-gi/files/guile-gi-0.3.2-function-cast.patch89
-rw-r--r--dev-scheme/guile-gi/guile-gi-0.3.2-r100.ebuild64
-rw-r--r--dev-scheme/guile-gi/guile-gi-9999.ebuild64
-rw-r--r--dev-scheme/guile-gi/metadata.xml23
-rw-r--r--dev-scheme/guile-git/Manifest3
-rw-r--r--dev-scheme/guile-git/guile-git-0.11.0.ebuild51
-rw-r--r--dev-scheme/guile-git/guile-git-0.8.0-r1.ebuild51
-rw-r--r--dev-scheme/guile-git/guile-git-0.9.0-r1.ebuild51
-rw-r--r--dev-scheme/guile-git/metadata.xml13
-rw-r--r--dev-scheme/guile-gnutls/Manifest1
-rw-r--r--dev-scheme/guile-gnutls/guile-gnutls-4.0.1.ebuild58
-rw-r--r--dev-scheme/guile-gnutls/metadata.xml14
-rw-r--r--dev-scheme/guile-hall/Manifest1
-rw-r--r--dev-scheme/guile-hall/guile-hall-0.4.1-r101.ebuild31
-rw-r--r--dev-scheme/guile-hall/metadata.xml19
-rw-r--r--dev-scheme/guile-json/Manifest1
-rw-r--r--dev-scheme/guile-json/guile-json-4.7.3-r100.ebuild20
-rw-r--r--dev-scheme/guile-json/metadata.xml12
-rw-r--r--dev-scheme/guile-lib/Manifest2
-rw-r--r--dev-scheme/guile-lib/files/guile-lib-0.2.8.1-guile3-primes.patch26
-rw-r--r--dev-scheme/guile-lib/guile-lib-0.2.7-r100.ebuild30
-rw-r--r--dev-scheme/guile-lib/guile-lib-0.2.8.1.ebuild75
-rw-r--r--dev-scheme/guile-lib/metadata.xml17
-rw-r--r--dev-scheme/guile-libyaml/Manifest1
-rw-r--r--dev-scheme/guile-libyaml/guile-libyaml-20211124-r100.ebuild65
-rw-r--r--dev-scheme/guile-libyaml/metadata.xml13
-rw-r--r--dev-scheme/guile-lzlib/Manifest1
-rw-r--r--dev-scheme/guile-lzlib/guile-lzlib-0.0.2-r100.ebuild45
-rw-r--r--dev-scheme/guile-lzlib/metadata.xml12
-rw-r--r--dev-scheme/guile-ncurses/Manifest1
-rw-r--r--dev-scheme/guile-ncurses/files/guile-ncurses-3.0-slibtool.patch38
-rw-r--r--dev-scheme/guile-ncurses/guile-ncurses-3.1-r100.ebuild72
-rw-r--r--dev-scheme/guile-ncurses/metadata.xml17
-rw-r--r--dev-scheme/guile-nyacc/Manifest1
-rw-r--r--dev-scheme/guile-nyacc/guile-nyacc-1.06.7-r101.ebuild29
-rw-r--r--dev-scheme/guile-nyacc/metadata.xml18
-rw-r--r--dev-scheme/guile-reader/Manifest1
-rw-r--r--dev-scheme/guile-reader/files/guile-reader-0.6.3-implicit-fn-decl.patch25
-rw-r--r--dev-scheme/guile-reader/files/guile-reader-0.6.3-slot.patch66
-rw-r--r--dev-scheme/guile-reader/guile-reader-0.6.3-r100.ebuild60
-rw-r--r--dev-scheme/guile-reader/metadata.xml22
-rw-r--r--dev-scheme/guile-sqlite3/Manifest1
-rw-r--r--dev-scheme/guile-sqlite3/guile-sqlite3-0.1.3-r100.ebuild32
-rw-r--r--dev-scheme/guile-sqlite3/metadata.xml12
-rw-r--r--dev-scheme/guile-ssh/Manifest2
-rw-r--r--dev-scheme/guile-ssh/files/guile-ssh-0.16.2-tests.patch18
-rw-r--r--dev-scheme/guile-ssh/files/guile-ssh-0.16.4-c23.patch33
-rw-r--r--dev-scheme/guile-ssh/guile-ssh-0.16.4-r100.ebuild65
-rw-r--r--dev-scheme/guile-ssh/guile-ssh-0.18.0.ebuild64
-rw-r--r--dev-scheme/guile-ssh/metadata.xml13
-rw-r--r--dev-scheme/guile-zlib/Manifest1
-rw-r--r--dev-scheme/guile-zlib/files/guile-zlib-0.1.0-gentoo.patch13
-rw-r--r--dev-scheme/guile-zlib/guile-zlib-0.1.0-r100.ebuild48
-rw-r--r--dev-scheme/guile-zlib/metadata.xml12
-rw-r--r--dev-scheme/guile-zstd/Manifest1
-rw-r--r--dev-scheme/guile-zstd/guile-zstd-0.1.1-r100.ebuild46
-rw-r--r--dev-scheme/guile-zstd/metadata.xml12
-rw-r--r--dev-scheme/guile/Manifest4
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-fix_guile-config.patch14
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-gcc46.patch39
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-gcc5.patch15
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-gtexinfo-5.patch15
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-makeinfo-5.patch71
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-mkdir-mask.patch35
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-readline.patch34
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-sandbox.patch15
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-texinfo-6.7.patch22
-rw-r--r--dev-scheme/guile/files/guile-1.8.8-tinfo.patch15
-rw-r--r--dev-scheme/guile/files/guile-2.2.3-gentoo-sandbox.patch10
-rw-r--r--dev-scheme/guile/files/guile-2.2.7-stack-up.patch17
-rw-r--r--dev-scheme/guile/files/guile-3.0-fix-32bit-BE.patch30
-rw-r--r--dev-scheme/guile/files/guile-3.0.10-backport-issue72913.patch394
-rw-r--r--dev-scheme/guile/files/guile-3.0.10-c23.patch32
-rw-r--r--dev-scheme/guile/guile-1.8.8-r103.ebuild186
-rw-r--r--dev-scheme/guile/guile-2.2.7-r103.ebuild136
-rw-r--r--dev-scheme/guile/guile-3.0.10-r103.ebuild149
-rw-r--r--dev-scheme/guile/guile-3.0.11.ebuild147
-rw-r--r--dev-scheme/guile/metadata.xml33
-rw-r--r--dev-scheme/jscheme/Manifest1
-rw-r--r--dev-scheme/jscheme/jscheme-7.2-r2.ebuild29
-rw-r--r--dev-scheme/jscheme/metadata.xml16
-rw-r--r--dev-scheme/kawa/Manifest1
-rw-r--r--dev-scheme/kawa/files/kawa-3.1.1-configure.ac-single_AM_INIT_AUTOMAKE.patch17
-rw-r--r--dev-scheme/kawa/kawa-3.1.1-r3.ebuild92
-rw-r--r--dev-scheme/kawa/metadata.xml30
-rw-r--r--dev-scheme/metadata.xml40
-rw-r--r--dev-scheme/mit-scheme/Manifest1
-rw-r--r--dev-scheme/mit-scheme/files/mit-scheme-11.2-implicit-int.patch19
-rw-r--r--dev-scheme/mit-scheme/files/mit-scheme-11.2-no-Werror.patch21
-rw-r--r--dev-scheme/mit-scheme/metadata.xml22
-rw-r--r--dev-scheme/mit-scheme/mit-scheme-12.1-r1.ebuild93
-rw-r--r--dev-scheme/owl-lisp/Manifest2
-rw-r--r--dev-scheme/owl-lisp/files/owl-lisp-0.2.1-make-no-test.patch10
-rw-r--r--dev-scheme/owl-lisp/metadata.xml20
-rw-r--r--dev-scheme/owl-lisp/owl-lisp-0.2.1.ebuild47
-rw-r--r--dev-scheme/owl-lisp/owl-lisp-0.2.2.ebuild49
-rw-r--r--dev-scheme/owl-lisp/owl-lisp-9999.ebuild45
-rw-r--r--dev-scheme/racket/Manifest8
-rw-r--r--dev-scheme/racket/files/racket-8.15-gcc15.patch21
-rw-r--r--dev-scheme/racket/metadata.xml47
-rw-r--r--dev-scheme/racket/racket-8.16.ebuild209
-rw-r--r--dev-scheme/racket/racket-8.17.ebuild211
-rw-r--r--dev-scheme/racket/racket-9.1.ebuild207
-rw-r--r--dev-scheme/racket/racket-9.2.ebuild207
-rw-r--r--dev-scheme/sagittarius/Manifest1
-rw-r--r--dev-scheme/sagittarius/files/sagittarius-0.9.14-compiler-flags.patch17
-rw-r--r--dev-scheme/sagittarius/metadata.xml8
-rw-r--r--dev-scheme/sagittarius/sagittarius-0.9.14.ebuild36
-rw-r--r--dev-scheme/scm/Manifest2
-rw-r--r--dev-scheme/scm/files/scm-5.5.6-multiplefixes.patch81
-rw-r--r--dev-scheme/scm/files/scm-5.5.6-ncurses.patch11
-rw-r--r--dev-scheme/scm/files/scm-5.5.6-respect-ldflags.patch12
-rw-r--r--dev-scheme/scm/files/scm-5.6.4-QA.patch34
-rw-r--r--dev-scheme/scm/files/scm-5.6.4-arrays.patch12
-rw-r--r--dev-scheme/scm/files/scm-5.6.4-c99.patch107
-rw-r--r--dev-scheme/scm/files/scm-5.6.4-ncurses.patch16
-rw-r--r--dev-scheme/scm/files/scm-5.6.4-ported-fixes.patch116
-rw-r--r--dev-scheme/scm/metadata.xml34
-rw-r--r--dev-scheme/scm/scm-5.5.6-r4.ebuild184
-rw-r--r--dev-scheme/scm/scm-5.6.4-r1.ebuild194
-rw-r--r--dev-scheme/scm/scm-5.6.4.ebuild191
-rw-r--r--dev-scheme/skribilo/Manifest1
-rw-r--r--dev-scheme/skribilo/files/50skribilo-gentoo.el3
-rw-r--r--dev-scheme/skribilo/metadata.xml23
-rw-r--r--dev-scheme/skribilo/skribilo-0.10.0-r101.ebuild82
-rw-r--r--dev-scheme/slib/Manifest1
-rw-r--r--dev-scheme/slib/files/50slib1
-rw-r--r--dev-scheme/slib/files/slib-3.2.5-fix-paths.patch42
-rw-r--r--dev-scheme/slib/metadata.xml16
-rw-r--r--dev-scheme/slib/slib-3.3.1-r100.ebuild124
-rw-r--r--dev-scheme/stklos/Manifest2
-rw-r--r--dev-scheme/stklos/files/stklos-gentoo.patch70
-rw-r--r--dev-scheme/stklos/metadata.xml19
-rw-r--r--dev-scheme/stklos/stklos-2.10.ebuild56
-rw-r--r--dev-scheme/stklos/stklos-26.0.ebuild56
-rw-r--r--dev-scheme/tinyscheme/Manifest1
-rw-r--r--dev-scheme/tinyscheme/files/tinyscheme-makefile.patch49
-rw-r--r--dev-scheme/tinyscheme/metadata.xml21
-rw-r--r--dev-scheme/tinyscheme/tinyscheme-1.42.ebuild50
-rw-r--r--dev-scheme/xdgdirs/Manifest1
-rw-r--r--dev-scheme/xdgdirs/metadata.xml10
-rw-r--r--dev-scheme/xdgdirs/xdgdirs-2.2-r100.ebuild34
-rw-r--r--dev-scheme/ypsilon/Manifest1
-rw-r--r--dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-asneeded.patch11
-rw-r--r--dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-clang-cflags.patch23
-rw-r--r--dev-scheme/ypsilon/metadata.xml15
-rw-r--r--dev-scheme/ypsilon/ypsilon-0.9.6_p3-r2.ebuild65
280 files changed, 10752 insertions, 0 deletions
diff --git a/dev-scheme/akku/Manifest b/dev-scheme/akku/Manifest
new file mode 100644
index 000000000000..b40932b926b5
--- /dev/null
+++ b/dev-scheme/akku/Manifest
@@ -0,0 +1 @@
+DIST akku-v1.1.0.tar.bz2 415934 BLAKE2B 71bed28261307e0bff9f0c277795c8b6b4621d13385dc21290408ee189467b15a6e9cd607522b5881328ab8c9e99331e76846d7cf1e2c655b7591dc06294de22 SHA512 8eb61db9196ba95aa6f45acab609e2daf31d52245907ce49c2d2e2d34ee9b2da91baefd3bb2600d0e215bbcefc5e08a0f51555e362d726d7b1fc988215df6ad6
diff --git a/dev-scheme/akku/akku-1.1.0-r100.ebuild b/dev-scheme/akku/akku-1.1.0-r100.ebuild
new file mode 100644
index 000000000000..e0757d0bb958
--- /dev/null
+++ b/dev-scheme/akku/akku-1.1.0-r100.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Language package manager for Scheme"
+HOMEPAGE="https://akkuscm.org/"
+
+if [[ "${PV}" == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/akkuscm/${PN}.git"
+else
+ SRC_URI="https://gitlab.com/akkuscm/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/${PN}-v${PV}"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+# tests require network access
+RESTRICT="test"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ net-misc/curl[ssl]
+"
+DEPEND="${RDEPEND}"
+
+# Installs into its own path
+# https://gitlab.com/akkuscm/akku/-/commit/d25da297fec2a2b16427359a2cbb0ec745dd8c58
+QA_PREBUILT="usr/*/${PN}/guile/*/site-ccache/*"
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_compile() {
+ touch bootstrap.db || die
+
+ guile_src_compile
+}
diff --git a/dev-scheme/akku/metadata.xml b/dev-scheme/akku/metadata.xml
new file mode 100644
index 000000000000..35faaa8be598
--- /dev/null
+++ b/dev-scheme/akku/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ Akku.scm is a language package manager for Scheme.
+ It grabs hold of code and vigorously shakes it until it behaves properly.
+ - No complicated setup to point out where libraries are; Akku finds them!
+ - Separately declare dependencies and locked versions for your project.
+ - Convert R7RS libraries for use with Chez Scheme and other R6RS Scheme implementations.
+ - Numerous R6RS packages, as well as R7RS libraries mirrored from Snow.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://gitlab.com/akkuscm/akku/-/issues</bugs-to>
+ <remote-id type="gitlab">akkuscm/akku</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/bigloo/Manifest b/dev-scheme/bigloo/Manifest
new file mode 100644
index 000000000000..09866c145501
--- /dev/null
+++ b/dev-scheme/bigloo/Manifest
@@ -0,0 +1 @@
+DIST bigloo-4.5b.tar.gz 59015812 BLAKE2B 8dfa73da5ba50a2ec92adde7c9c3fc76841bc0702139238776af2c174099aab85ea28b5d2ec640b6d85f986759b63950f3cfa55e8ec2eb2e73930093b767c93d SHA512 7810f9895ea373f716cd2c93a7b1072d289e2b333632b5b4f293a6317f31a56d2b098790763e96c2d15ce212dafb45c70ec6a7941a344fb8c53a3ef3c6b67feb
diff --git a/dev-scheme/bigloo/bigloo-4.5b-r1.ebuild b/dev-scheme/bigloo/bigloo-4.5b-r1.ebuild
new file mode 100644
index 000000000000..e1175674a698
--- /dev/null
+++ b/dev-scheme/bigloo/bigloo-4.5b-r1.ebuild
@@ -0,0 +1,225 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit elisp-common flag-o-matic toolchain-funcs
+
+MY_PV="${PV/_p/-}" # e.g.: 4.4c_p4 -> 4.4c-4
+MY_P="${PN}-${MY_PV}"
+
+DESCRIPTION="Practical Scheme Compiler with many extensions"
+HOMEPAGE="https://www-sop.inria.fr/indes/fp/Bigloo/index.html"
+SRC_URI="ftp://ftp-sop.inria.fr/indes/fp/Bigloo/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="alsa avahi emacs flac +gmp gpg gstreamer java libuv mp3 pulseaudio +sqlite"
+REQUIRED_USE="flac? ( alsa ) mp3? ( alsa ) gstreamer? ( pulseaudio )"
+
+EMACS_DEPEND="
+ emacs? ( >=app-editors/emacs-23.1:* )
+"
+DEPEND="
+ dev-libs/boehm-gc[threads]
+ dev-libs/libpcre2:=
+ dev-libs/libunistring:=
+ dev-libs/openssl:=
+ alsa? ( media-libs/alsa-lib )
+ avahi? ( net-dns/avahi )
+ flac? ( media-libs/flac:= )
+ gmp? ( dev-libs/gmp:= )
+ gpg? ( app-crypt/gnupg )
+ gstreamer? (
+ media-libs/gst-plugins-base:1.0=
+ media-libs/gstreamer:1.0=
+ )
+ java? (
+ app-arch/zip
+ virtual/jdk:*
+ )
+ libuv? ( dev-libs/libuv:= )
+ mp3? ( media-sound/mpg123 )
+ pulseaudio? ( media-libs/libpulse )
+ sqlite? ( dev-db/sqlite:3= )
+"
+RDEPEND="
+ ${DEPEND}
+ ${EMACS_DEPEND}
+ sys-devel/binutils
+ dev-debug/gdb
+"
+BDEPEND="
+ ${EMACS_DEPEND}
+ sys-apps/texinfo
+"
+
+PATCHES=( "${FILESDIR}/${P}-makefile.patch" )
+
+DOCS=( ChangeLog README.md TODO.org )
+SITEFILE="50${PN}-gentoo.el"
+
+src_prepare() {
+ default
+
+ sed -e "/^ar=/s|=|=\"$(tc-getAR)\"|" \
+ -e "/^ranlib=/s|=|=\"$(tc-getRANLIB)\"|" \
+ -i ./configure \
+ || die
+
+ sed "s|^ar |$(tc-getAR) |" -i ./autoconf/ranlib || die
+}
+
+src_configure() {
+ # -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/858248
+ #
+ # The code has various issues that make it look quite worrying to enable
+ # LTO, so I wouldn't risk it even if upstream fixes this one. Cannot even
+ # test compile the package due to bug #870481, bug #911667
+ #
+ # It is also impossible to test from git if any of these are fixed, since
+ # you need a working version in order to compile from git.
+ filter-lto
+
+ tc-export AR AS CC CPP CXX LD
+ export CFLAGS
+ export LDFLAGS
+
+ local -a myconf=(
+ # Compilation
+ --as="$(tc-getAS)"
+ --cc="$(tc-getCC)"
+ --cflags="${CFLAGS}"
+ --cpicflags="-fPIC"
+ --cwarningflags=""
+ --ldflags="${LDFLAGS}"
+ --gclibdir=/usr/"$(get_libdir)"
+ # Installation directories
+ --prefix=/usr
+ --bindir=/usr/share/${PN}/bin
+ --docdir=/usr/share/doc/${PF}
+ --infodir=/usr/share/info
+ --libdir=/usr/"$(get_libdir)"
+ --mandir=/usr/share/man
+ # Custom internal components
+ --customgc=no
+ --customgmp=no
+ --customlibuv=no
+ --customunistring=no
+ --jvm=$(usex java)
+ --native=yes
+ --sharedbde=yes
+ --sharedcompiler=yes
+ --strip=no
+ # Libraries, Bigloo calls them APIs
+ --disable-phidget # not important for now, only in ::ros-overlay ?
+ --enable-calendar # iCalendar parser
+ --enable-crypto
+ --enable-csv # parsing CSV files
+ --enable-mail # IMAP protocol implementation
+ --enable-multimedia
+ --enable-packrat # packrat parser
+ --enable-phone
+ --enable-pkgcomp
+ --enable-pthread
+ --enable-srfi1
+ --enable-srfi18
+ --enable-ssl
+ --enable-text # BibTeX parser
+ --enable-upnp # Upnp protocol implementation
+ --enable-web # XML, CGI, and RSS parsers
+ $(use_enable alsa)
+ $(use_enable avahi)
+ $(use_enable flac wav)
+ $(use_enable flac)
+ $(use_enable gmp srfi27)
+ $(use_enable gmp)
+ $(use_enable gpg openpgp)
+ $(use_enable gstreamer)
+ $(use_enable libuv)
+ $(use_enable mp3 mpg123)
+ $(use_enable pulseaudio)
+ $(use_enable sqlite pkglib)
+ $(use_enable sqlite)
+ # GNU Emacs libraries
+ --bee=$(usex emacs full partial)
+ --emacs=$(usex emacs "${EMACS}" "no")
+ --lispdir=$(usex emacs "${SITELISP}/${PN}" "")
+ )
+ ebegin "Configuring Bigloo with the following options: ${myconf[@]}"
+ sh ./configure "${myconf[@]}"
+ eend $? || die "configure script failed"
+
+ # When Emacs version is too high (e.g. 28) bigloo will skip compiling
+ # and installing the Emacs support files.
+ # The file "bmacs/Makefile" lists all officially supported Emacs versions.
+ if use emacs ; then
+ sed "/^EMACSBRAND=/s|generic|emacs23|" -i Makefile.config || die
+ fi
+}
+
+src_compile() {
+ emake -j1
+
+ emake -C bdl -j1
+ emake -C bdb -j1
+ emake -C cigloo -j1
+
+ use emacs && emake -C bmacs
+}
+
+src_test() {
+ emake test
+}
+
+src_install() {
+ emake DESTDIR="${D}" LN_S="ln -rs" install
+ emake DESTDIR="${D}" -C bdl install
+ emake DESTDIR="${D}" -C bdb install
+ emake DESTDIR="${D}" -C cigloo install
+
+ # The ".sh" scripts set proper environment and library order for Bigloo,
+ # but programs (and the Bigloo Emacs library, "bee-mode") want "bigloo",
+ # not "bigloo.sh". To make programs work we install all executable files
+ # into "/usr/share/bigloo/bin", and then pick one by one for non-scripts:
+ # if a script with ".sh" extensions exists, then we link the script,
+ # not the picked executable to a binary name, otherwise link the binary.
+ mkdir -p "${D}"/usr/bin || die
+ pushd "${D}" >/dev/null || die
+ local bin bin_link
+ for bin in usr/share/${PN}/bin/* ; do
+ if [[ "${bin}" != *.sh ]] ; then
+ bin_link="usr/bin/$(basename "${bin}")"
+
+ if [[ -f ${bin}.sh ]] ; then
+ ln -s ../../${bin}.sh "${bin_link}" || die
+ else
+ ln -s ../../${bin} "${bin_link}" || die
+ fi
+ fi
+ done
+ popd >/dev/null || die
+
+ if use emacs ; then
+ emake DESTDIR="${D}" install-bee
+
+ elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ fi
+
+ einstalldocs
+
+ # Remove static libs, bug #890820, #891041, #933665
+ find "${ED}" -name "*.a" -delete || die
+ find "${ED}" -name "*.la" -delete || die
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+}
diff --git a/dev-scheme/bigloo/files/50bigloo-gentoo.el b/dev-scheme/bigloo/files/50bigloo-gentoo.el
new file mode 100644
index 000000000000..9cac9f0f7d0f
--- /dev/null
+++ b/dev-scheme/bigloo/files/50bigloo-gentoo.el
@@ -0,0 +1,2 @@
+(add-to-list 'load-path "@SITELISP@")
+(autoload 'bee-mode "bee-mode" "Major mode for editing Bigloo code." t)
diff --git a/dev-scheme/bigloo/files/bigloo-4.5b-makefile.patch b/dev-scheme/bigloo/files/bigloo-4.5b-makefile.patch
new file mode 100644
index 000000000000..a9604c76c77d
--- /dev/null
+++ b/dev-scheme/bigloo/files/bigloo-4.5b-makefile.patch
@@ -0,0 +1,36 @@
+diff -ru a/bdb/Makefile b/bdb/Makefile
+--- a/bdb/Makefile 2024-06-05 17:06:40.098823516 -0000
++++ b/bdb/Makefile 2024-06-05 17:06:45.520796235 -0000
+@@ -23,9 +23,14 @@
+ #*---------------------------------------------------------------------*/
+ #* Booting bdb on a bare system */
+ #*---------------------------------------------------------------------*/
+-boot:
+- @ (cd blib; $(MAKE) all)
+- @ (cd bdb; $(MAKE) MODE=final mode)
++boot: blip-boot bdb-boot
++
++blip-boot:
++ @ $(MAKE) -C bdb MODE=final mode
++
++bdb-boot: blip-boot
++ @ $(MAKE) -C blib all
++
+
+ #*---------------------------------------------------------------------*/
+ #* Populating bdb */
+diff -ru a/bdb/blib/Makefile b/bdb/blib/Makefile
+--- a/bdb/blib/Makefile 2024-06-05 17:06:40.100823506 -0000
++++ b/bdb/blib/Makefile 2024-06-05 17:07:40.738518401 -0000
+@@ -80,9 +80,11 @@
+ #* The implicit rules */
+ #*---------------------------------------------------------------------*/
+ objs/%.o: %.scm
++ mkdir -p $(CLASS_DIR)
+ $(BIGLOO) -no-hello $(BDBFLAGS) -copt $(CPICFLAGS) $< -o $@ -c
+
+ objs/%.o: %.c
++ mkdir -p $(CLASS_DIR)
+ $(CC) $(CFLAGS) $(CPICFLAGS) -I. -I $(LIB) $< -o $@ -c
+
+ $(CLASS_DIR)/%.class: %.scm
diff --git a/dev-scheme/bigloo/metadata.xml b/dev-scheme/bigloo/metadata.xml
new file mode 100644
index 000000000000..a179bb3d4094
--- /dev/null
+++ b/dev-scheme/bigloo/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Bigloo is a Scheme implementation devoted to one goal: enabling Scheme
+ based programming style where C(++) is usually required.
+ Bigloo attempts to make Scheme practical by offering features usually
+ presented by traditional programming languages but not offered by Scheme
+ and functional programming. Bigloo compiles Scheme modules. It delivers
+ small and fast stand alone binary executables. Bigloo enables full
+ connections between Scheme and C programs.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/manuel-serrano/bigloo/issues/</bugs-to>
+ <remote-id type="github">manuel-serrano/bigloo</remote-id>
+ </upstream>
+ <use>
+ <flag name="avahi">Enable Avahi support</flag>
+ <flag name="gpg">Enable GPG support</flag>
+ <flag name="libuv">Enable libuv support</flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-scheme/bytestructures/Manifest b/dev-scheme/bytestructures/Manifest
new file mode 100644
index 000000000000..bdd6de92c25b
--- /dev/null
+++ b/dev-scheme/bytestructures/Manifest
@@ -0,0 +1 @@
+DIST bytestructures-2.0.2.tar.gz 61510 BLAKE2B 01b9bff1d10703e224844540c1557a37ee5291657f2219d1f37dc1cba6965322b5db20a1a9f827cc9897819f297b623eb4ff095409d320a0fce2fd42eccf7562 SHA512 7bda0cf448c1777c0b9b0a30878020c8c29bffb216b209318aa87a82f4a74588ea9722cc86c4f273bd303fe82181c0e8420437b644632c2a9c24305a7c5a935e
diff --git a/dev-scheme/bytestructures/bytestructures-2.0.2-r100.ebuild b/dev-scheme/bytestructures/bytestructures-2.0.2-r100.ebuild
new file mode 100644
index 000000000000..1739ac8b7c62
--- /dev/null
+++ b/dev-scheme/bytestructures/bytestructures-2.0.2-r100.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Structured access to bytevector contents"
+HOMEPAGE="https://github.com/TaylanUB/scheme-bytestructures/"
+SRC_URI="https://github.com/TaylanUB/scheme-${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/scheme-${P}"
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/bytestructures/metadata.xml b/dev-scheme/bytestructures/metadata.xml
new file mode 100644
index 000000000000..0cf45ce6c0e6
--- /dev/null
+++ b/dev-scheme/bytestructures/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/TaylanUB/scheme-bytestructures</bugs-to>
+ <remote-id type="github">TaylanUB/scheme-bytestructures</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/c-wrapper/Manifest b/dev-scheme/c-wrapper/Manifest
new file mode 100644
index 000000000000..885d443f83a9
--- /dev/null
+++ b/dev-scheme/c-wrapper/Manifest
@@ -0,0 +1 @@
+DIST c-wrapper-0.6.1.tgz 843981 BLAKE2B af28cf60eebe0da32c90c030bfdae4457d20731c31220f7eaac33291ea1be104a7aab11fad0560fe6e3d36a5d3afafbd8795fddd633e0c26be226c29012afbc9 SHA512 a03a4d57d112d2c23dac3716bae081e3e6f02dcef261bd8dd518ed8519b43e28f9e61a36f7584b2bcb1762112c128d0b698cda422cc0c9d1190cbf7502ea04b0
diff --git a/dev-scheme/c-wrapper/c-wrapper-0.6.1-r2.ebuild b/dev-scheme/c-wrapper/c-wrapper-0.6.1-r2.ebuild
new file mode 100644
index 000000000000..9addd53b433f
--- /dev/null
+++ b/dev-scheme/c-wrapper/c-wrapper-0.6.1-r2.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+DESCRIPTION="Foreign function interface for C and Objective-C libraries"
+HOMEPAGE="http://www.koguro.net/prog/c-wrapper/"
+SRC_URI="http://www.koguro.net/prog/${PN}/${P}.tgz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="examples"
+
+RDEPEND="dev-scheme/gauche:=
+ dev-libs/libffi:="
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-closure.patch
+ "${FILESDIR}"/${PN}-gauche-abi-0.98.patch
+ "${FILESDIR}"/${PN}-gcc-5.patch
+ "${FILESDIR}"/${PN}-gentoo.patch
+ "${FILESDIR}"/${PN}-glibc-2.25.patch
+ "${FILESDIR}"/${PN}-info.patch
+ "${FILESDIR}"/${PN}-texinfo-6.7.patch
+ "${FILESDIR}"/${PN}-clang.patch
+ "${FILESDIR}"/${PN}-float128.patch
+ "${FILESDIR}"/${PN}-local-typedef.patch
+ "${FILESDIR}"/${PN}-extend-parser.patch
+)
+HTML_DOCS=( doc/${PN}-ref{e,j}.html )
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_test() {
+ emake -j1 -s check
+}
+
+src_install() {
+ default
+
+ if use examples; then
+ docompress -x /usr/share/doc/${PF}/examples
+ dodoc -r examples
+ fi
+}
diff --git a/dev-scheme/c-wrapper/c-wrapper-0.6.1-r3.ebuild b/dev-scheme/c-wrapper/c-wrapper-0.6.1-r3.ebuild
new file mode 100644
index 000000000000..5b4ff185032a
--- /dev/null
+++ b/dev-scheme/c-wrapper/c-wrapper-0.6.1-r3.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+DESCRIPTION="Foreign function interface for C and Objective-C libraries"
+HOMEPAGE="http://www.koguro.net/prog/c-wrapper/"
+SRC_URI="http://www.koguro.net/prog/${PN}/${P}.tgz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="examples"
+
+RDEPEND="dev-scheme/gauche:=
+ dev-libs/libffi:="
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-closure.patch
+ "${FILESDIR}"/${PN}-gauche-abi-0.98.patch
+ "${FILESDIR}"/${PN}-gcc-5.patch
+ "${FILESDIR}"/${PN}-gentoo.patch
+ "${FILESDIR}"/${PN}-glibc-2.25.patch
+ "${FILESDIR}"/${PN}-info.patch
+ "${FILESDIR}"/${PN}-texinfo-6.7.patch
+ "${FILESDIR}"/${PN}-clang.patch
+ "${FILESDIR}"/${PN}-float128.patch
+ "${FILESDIR}"/${PN}-local-typedef.patch
+ "${FILESDIR}"/${PN}-extend-parser.patch
+ "${FILESDIR}"/${PN}-gcc-15.patch
+)
+HTML_DOCS=( doc/${PN}-ref{e,j}.html )
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_test() {
+ emake -j1 -s check
+}
+
+src_install() {
+ default
+
+ if use examples; then
+ docompress -x /usr/share/doc/${PF}/examples
+ dodoc -r examples
+ fi
+}
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-clang.patch b/dev-scheme/c-wrapper/files/c-wrapper-clang.patch
new file mode 100644
index 000000000000..ba39e74df9cf
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-clang.patch
@@ -0,0 +1,71 @@
+--- a/src/c-parser.c
++++ b/src/c-parser.c
+@@ -1667,14 +1667,25 @@
+ ScmObj Scm_ParseMacroCode(ScmObj in, ScmObj macro_list)
+ {
+ static ScmObj trigger_line = SCM_FALSE;
++ static ScmObj is_gcc = SCM_TRUE;
+ ScmObj line_str;
+ ScmObj rx;
++ int n = 0;
++ int i;
+
+ /* skip the first line '# 1 "<stdin>"' */
+ Scm_ReadLineUnsafe(SCM_PORT(in));
+
+ if (SCM_FALSEP(trigger_line)) {
+- trigger_line = SCM_MAKE_STR_IMMUTABLE("# 1 \"<stdin>\"");
++ ScmObj gcc = Scm_GlobalVariableRef(SCM_FIND_MODULE(CPARSER_MODULE_NAME, TRUE), SCM_SYMBOL(SCM_INTERN("GCC")), 0);
++ if (SCM_INTP(Scm_StringScanRight(SCM_STRING(gcc), SCM_STRING(SCM_MAKE_STR_IMMUTABLE("gcc")), SCM_STRING_SCAN_INDEX))) {
++ trigger_line = SCM_MAKE_STR_IMMUTABLE("# 1 \"<stdin>\"");
++ } else if (SCM_INTP(Scm_StringScanRight(SCM_STRING(gcc), SCM_STRING(SCM_MAKE_STR_IMMUTABLE("clang")), SCM_STRING_SCAN_INDEX))) {
++ trigger_line = SCM_MAKE_STR_IMMUTABLE("# 1 \"<stdin>\" 2");
++ is_gcc = SCM_FALSE;
++ } else {
++ Scm_Error("unknown compiler");
++ }
+ }
+
+ while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
+@@ -1683,22 +1694,33 @@
+ }
+ }
+
+- rx = Scm_RegComp(SCM_STRING(SCM_MAKE_STR_IMMUTABLE("^#\\s+\\d+\\s+\"<stdin>\"")), 0);
++ rx = Scm_RegComp(SCM_STRING(SCM_MAKE_STR_IMMUTABLE("^#\\s+(\\d+)\\s+\"<stdin>\"")), 0);
+ line_str = Scm_ReadLineUnsafe(SCM_PORT(in));
+- while (!SCM_EOFP(line_str)) {
+- ScmObj body_str = line_str;
++ for (i = 1; !SCM_EOFP(line_str); i++) {
++ ScmObj body_str;
++ ScmObj rm;
++ if (i < n) {
++ body_str = SCM_MAKE_STR_IMMUTABLE("");
++ goto parse;
++ }
++ body_str = line_str;
+ while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))
+ && SCM_STRING_LENGTH(line_str) >= 13
+ #ifdef SCM_REGEXP_MULTI_LINE
+- && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str), SCM_UNDEFINED, SCM_UNDEFINED))) {
++ && SCM_REGMATCHP(rm = Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str), SCM_UNDEFINED, SCM_UNDEFINED))) {
+ #else
+- && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str)))) {
++ && SCM_REGMATCHP(rm = Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str)))) {
+ #endif
+- if (SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
+- Scm_Error("[bug] unexpected EOF while parsing macro body");
++ if (SCM_TRUEP(is_gcc)) {
++ if (SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
++ Scm_Error("[bug] unexpected EOF while parsing macro body");
++ }
++ body_str = Scm_StringAppend2(SCM_STRING(body_str), SCM_STRING(line_str));
++ } else {
++ n = SCM_INT_VALUE(Scm_StringToNumber(SCM_STRING(Scm_RegMatchSubstr(SCM_REGMATCH(rm), SCM_MAKE_INT(1))), 10, 0));
+ }
+- body_str = Scm_StringAppend2(SCM_STRING(body_str), SCM_STRING(line_str));
+ }
++parse:
+ if (SCM_NULLP(macro_list)) {
+ Scm_Error("[bug] lost macro body");
+ } else {
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-closure.patch b/dev-scheme/c-wrapper/files/c-wrapper-closure.patch
new file mode 100644
index 000000000000..24be1d052fd7
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-closure.patch
@@ -0,0 +1,10 @@
+--- a/src/closure_alloc.c
++++ b/src/closure_alloc.c
+@@ -100,6 +100,7 @@
+ ++(node->n);
+ return;
+ }
++ node = node->next;
+ }
+
+ node = malloc(sizeof(FreeNode));
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-extend-parser.patch b/dev-scheme/c-wrapper/files/c-wrapper-extend-parser.patch
new file mode 100644
index 000000000000..998938a2c428
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-extend-parser.patch
@@ -0,0 +1,142 @@
+https://aur.archlinux.org/cgit/aur.git/tree/14_extend_parser.patch?h=gauche-c-wrapper
+
+Description: Include __int128, make statements before delcarations in functions possible and add some workaround to load x86intrin.h successfully.
+Author: Fabian Brosda <fabi3141@gmx.de>
+Last-Update: 2020-07-10
+
+--- a/lib/c-wrapper/c-parser.scm
++++ b/lib/c-wrapper/c-parser.scm
+@@ -181,6 +181,26 @@
+ ,@(reverse init-list)
+ ,@statements)))
+
++(define-maybe (%COMPOUND-STATEMENT-WITH-DECLARATION-EXT statements-before declaration-list statements)
++ (let ((var-list '())
++ (init-list '()))
++ (for-each (lambda (declaration)
++ (let* ((type (type-of declaration))
++ (identifier (name-of declaration))
++ (init-val (value-of declaration)))
++ ;; TODO: typedef in compound_statement is not supported
++ (push! var-list `(,identifier (make ,type)))
++ (when init-val
++ (push! init-list
++ `(set! ((with-module c-wrapper.c-ffi ref) ,identifier)
++ ,init-val)))))
++ declaration-list)
++ `(begin
++ ,@statements-before
++ (let* ,(reverse var-list)
++ ,@(reverse init-list)
++ ,@statements))))
++
+ (define-maybe (%REF-ARRAY v index)
+ `((with-module c-wrapper.c-ffi ref) ,v ,(%INT index)))
+
+--- a/src/c-grammar.scm
++++ b/src/c-grammar.scm
+@@ -122,6 +122,7 @@
+ (LPAREN expr RPAREN) : (%EXPR-IN-PARENS $2)
+ (LPAREN compound_statement RPAREN) : (%COMPOUND-STATEMENT $2)
+ (LPAREN type_name RPAREN LCBRA initializer_list RCBRA) : #f
++ (LPAREN type_name RPAREN LCBRA initializer_list COMMA RCBRA) : #f
+ (objc_message_expr) : $1
+ (objc_selector_expr) : $1
+ (objc_protocol_expr) : #f
+@@ -474,8 +475,8 @@
+ (LCBRA RCBRA) : (%COMPOUND-STATEMENT '(0))
+ (LCBRA statement_list RCBRA) : (%COMPOUND-STATEMENT $2)
+ (LCBRA declaration_list RCBRA) : (%COMPOUND-STATEMENT '(0))
+- (LCBRA declaration_list statement_list RCBRA)
+- : (%COMPOUND-STATEMENT-WITH-DECLARATION $2 $3)
++ (LCBRA declaration_list statement_list RCBRA) : (%COMPOUND-STATEMENT-WITH-DECLARATION $2 $3)
++ (LCBRA statement_list declaration_list statement_list RCBRA) : (%COMPOUND-STATEMENT-WITH-DECLARATION-EXT $2 $3 $4)
+ (error RCBRA) : #f
+ )
+
+--- a/src/c-lex.c
++++ b/src/c-lex.c
+@@ -361,6 +361,7 @@
+ "void",
+ "_Bool",
+ "_Float128",
++ "__int128",
+ NULL,
+ };
+ int i;
+--- a/src/c-parser.c
++++ b/src/c-parser.c
+@@ -104,6 +104,7 @@
+ DEFINE_SYM(void);
+ DEFINE_SYM(_Bool);
+ DEFINE_SYM(_Float128);
++DEFINE_SYM(__int128);
+ DEFINE_SYM(__builtin_va_list);
+ DEFINE_SYM(U_struct);
+ DEFINE_SYM(U_union);
+@@ -472,7 +473,9 @@
+ } else if (SCM_EQ(car, SYM(_Bool))) {
+ SCM_RETURN(SYM(c_int));
+ } else if (SCM_EQ(car, SYM(_Float128))) {
+ SCM_RETURN(SYM(c_double));
++ } else if (SCM_EQ(car, SYM(__int128))) {
++ SCM_RETURN(SYM(c_longlong));
+ } else if (SCM_EQ(car, SYM(__builtin_va_list))) {
+ SCM_RETURN(SCM_LIST2(SCM_LIST3(SYM(with_module), SYM(c_wrapper_c_ffi), SYM(ptr)), SYM(c_void)));
+ } else if (SCM_PAIRP(car) && SCM_EQ(SCM_CAR(car), SYM(U_struct))) {
+@@ -1024,7 +1027,11 @@
+ Scm_ParserAttributeClear();
+ td_list = Scm_MakeTypeDeclList(type_spec_list, declarator_list);
+ SCM_FOR_EACH(pair, td_list) {
+- Scm_ArgPoolAdd(SCM_TYPE_DECL_NAME(SCM_CAR(pair)));
++ // hack to avoid segfault when loading x86intrin.h
++ // TODO: why is this necessary?
++ if (!SCM_EQ(SCM_CAR(pair), SCM_FALSE)) {
++ Scm_ArgPoolAdd(SCM_TYPE_DECL_NAME(SCM_CAR(pair)));
++ }
+ }
+
+ SCM_RETURN(td_list);
+@@ -1865,6 +1872,7 @@
+ INIT_SYM(void, "void");
+ INIT_SYM(_Bool, "_Bool");
+ INIT_SYM(_Float128, "_Float128");
++ INIT_SYM(__int128, "__int128");
+ INIT_SYM(__builtin_va_list, "__builtin_va_list");
+ INIT_SYM(U_struct, "STRUCT");
+ INIT_SYM(U_union, "UNION");
+--- a/testsuite/Makefile.in
++++ b/testsuite/Makefile.in
+@@ -78,6 +78,7 @@
+ $(GOSH) -I../src -I../lib stdio-test.scm >> test.log
+ $(GOSH) -I../src -I../lib math-test.scm >> test.log
+ $(GOSH) -I../src -I../lib local-typedef.scm >> test.log
++ $(GOSH) -I../src -I../lib stmt-decl.scm >> test.log
+ $(GOSH) -I../src -I../lib inline-test.scm >> test.log
+ $(GOSH) -I../src -I../lib fptr_array-test.scm >> test.log
+ $(GOSH) -I../src -I../lib array_qualifier-test.scm >> test.log
+--- a/testsuite/stmt_decl.h
++++ b/testsuite/stmt_decl.h
+@@ -0,0 +1,6 @@
++void f(int arg1)
++{
++ arg1 = 3;
++ double tmp = arg1;
++ return tmp;
++}
+--- a/testsuite/stmt-decl.scm
++++ b/testsuite/stmt-decl.scm
+@@ -0,0 +1,13 @@
++;;;
++;;; Test include math.h
++;;;
++
++(use gauche.test)
++
++(test-start "test for statement before and after declaration in c function")
++(use c-wrapper)
++
++(c-include "stmt_decl.h")
++
++;; epilogue
++(test-end)
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-float128.patch b/dev-scheme/c-wrapper/files/c-wrapper-float128.patch
new file mode 100644
index 000000000000..acd2f04407dd
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-float128.patch
@@ -0,0 +1,79 @@
+https://aur.archlinux.org/cgit/aur.git/tree/12_float128.patch?h=gauche-c-wrapper
+
+Description: Workaround for usage of math.h including type _Float128
+Author: Fabian Brosda <fabi3141@gmx.de>
+Last-Update: 2020-07-10
+
+--- a/src/c-lex.c
++++ b/src/c-lex.c
+@@ -360,6 +360,7 @@
+ "double",
+ "void",
+ "_Bool",
++ "_Float128",
+ NULL,
+ };
+ int i;
+--- a/src/c-parser.c
++++ b/src/c-parser.c
+@@ -103,6 +103,7 @@
+ DEFINE_SYM(double);
+ DEFINE_SYM(void);
+ DEFINE_SYM(_Bool);
++DEFINE_SYM(_Float128);
+ DEFINE_SYM(__builtin_va_list);
+ DEFINE_SYM(U_struct);
+ DEFINE_SYM(U_union);
+@@ -470,6 +471,8 @@
+ SCM_RETURN(SYM(c_void));
+ } else if (SCM_EQ(car, SYM(_Bool))) {
+ SCM_RETURN(SYM(c_int));
++ } else if (SCM_EQ(car, SYM(_Float128))) {
++ SCM_RETURN(SYM(c_double));
+ } else if (SCM_EQ(car, SYM(__builtin_va_list))) {
+ SCM_RETURN(SCM_LIST2(SCM_LIST3(SYM(with_module), SYM(c_wrapper_c_ffi), SYM(ptr)), SYM(c_void)));
+ } else if (SCM_PAIRP(car) && SCM_EQ(SCM_CAR(car), SYM(U_struct))) {
+@@ -1859,6 +1862,7 @@
+ INIT_SYM(double, "double");
+ INIT_SYM(void, "void");
+ INIT_SYM(_Bool, "_Bool");
++ INIT_SYM(_Float128, "_Float128");
+ INIT_SYM(__builtin_va_list, "__builtin_va_list");
+ INIT_SYM(U_struct, "STRUCT");
+ INIT_SYM(U_union, "UNION");
+--- a/testsuite/Makefile.in
++++ b/testsuite/Makefile.in
+@@ -73,6 +73,7 @@
+ $(GOSH) -I../src -I../lib cwrappertest.scm >> test.log
+ $(GOSH) -I../src -I../lib struct_in_union-test.scm >> test.log
+ $(GOSH) -I../src -I../lib stdio-test.scm >> test.log
++ $(GOSH) -I../src -I../lib math-test.scm >> test.log
+ $(GOSH) -I../src -I../lib inline-test.scm >> test.log
+ $(GOSH) -I../src -I../lib fptr_array-test.scm >> test.log
+ $(GOSH) -I../src -I../lib array_qualifier-test.scm >> test.log
+--- a/testsuite/math-test.scm
++++ b/testsuite/math-test.scm
+@@ -0,0 +1,23 @@
++;;;
++;;; Test include math.h
++;;;
++
++(use gauche.test)
++
++(test-start "c-wrapper (include math.h)")
++(use c-wrapper)
++
++(c-include "math.h")
++
++(test "trunc"
++ 1.0
++ (lambda ()
++ (trunc 1.9)))
++
++(test "pow"
++ 625.0
++ (lambda ()
++ (pow 5 4)))
++
++;; epilogue
++(test-end)
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-gauche-abi-0.98.patch b/dev-scheme/c-wrapper/files/c-wrapper-gauche-abi-0.98.patch
new file mode 100644
index 000000000000..6c9f0cb371b2
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-gauche-abi-0.98.patch
@@ -0,0 +1,62 @@
+--- a/src/c-ffi.c
++++ b/src/c-ffi.c
+@@ -347,7 +347,11 @@
+ }
+ sa = SCM_SLOT_ACCESSOR(SCM_CDR(p));
+ if (0 <= sa->slotNumber) {
++#if !defined(GAUCHE_API_VERSION) || GAUCHE_API_VERSION < 98
+ return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber));
++#else
++ return SCM_FFI_TYPE_DATA(Scm_InstanceSlotRef(ctype, sa->slotNumber, SCM_UNBOUND));
++#endif
+ } else {
+ Scm_Error("wrong slot number: %d", sa->slotNumber);
+ }
+--- a/src/c-lex.c
++++ b/src/c-lex.c
+@@ -992,11 +992,6 @@
+ SCM_RETURN(Scm_MakeInteger(v));
+ }
+
+-ScmObj Scm_ReadStringLiteral()
+-{
+- SCM_RETURN(read_string_literal());
+-}
+-
+ ScmObj Scm_ReadCharacterConstant()
+ {
+ SCM_RETURN(read_character_constant());
+--- a/src/c-lex.h
++++ b/src/c-lex.h
+@@ -78,7 +78,6 @@
+ extern ScmObj Scm_IsForceIdentifierSet(ScmObj v);
+ extern ScmObj Scm_ReadIdentifier(ScmObj l);
+ extern ScmObj Scm_ReadOperator(ScmObj c);
+-extern ScmObj Scm_ReadStringLiteral();
+ extern ScmObj Scm_ReadCharacterConstant();
+ extern ScmObj Scm_ReadOctalOrFlonum(ScmObj l);
+ extern ScmObj Scm_ReadDecimal(ScmObj l);
+--- a/src/c-lexlib.stub
++++ b/src/c-lexlib.stub
+@@ -40,7 +40,11 @@
+ "if (nptr == endptr) {"
+ " SCM_RETURN(SCM_FALSE);"
+ "} else {"
++ "#if !defined(GAUCHE_API_VERSION) || GAUCHE_API_VERSION < 98"
+ " SCM_RETURN(Scm_MakeInteger64((ScmInt64) v));"
++ "#else"
++ " SCM_RETURN(Scm_MakeInteger64((int64_t) v));"
++ "#endif"
+ "}"))
+
+ (define-cproc strtod (nptr::<const-cstring>)
+@@ -136,9 +140,6 @@
+ (define-cproc read-operator (c)
+ (call "Scm_ReadOperator"))
+
+-(define-cproc read-string-literal ()
+- (call "Scm_ReadStringLiteral"))
+-
+ (define-cproc read-character-constant ()
+ (call "Scm_ReadCharacterConstant"))
+
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-gcc-15.patch b/dev-scheme/c-wrapper/files/c-wrapper-gcc-15.patch
new file mode 100644
index 000000000000..9f6128b0c76c
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-gcc-15.patch
@@ -0,0 +1,24 @@
+Fix build with GCC 15
+
+https://bugs.gentoo.org/943982
+
+--- a/src/c-lex.c
++++ b/src/c-lex.c
+@@ -887,7 +887,7 @@ static inline int backslash(int c)
+ case 'x':
+ c1 = buffer_peek_char();
+ if (is_hex_digit_char(c1)) {
+- return readx(c1);
++ return readx();
+ } else {
+ Scm_Error("\\x must be followed by hex-digit, but got '%c'", c1);
+ }
+@@ -934,7 +934,7 @@ static inline int backslash(int c)
+ SCM_LIST1(SCM_MAKE_CHAR(c)));
+ return c;
+ } else {
+- return buffer_read_char(c);
++ return buffer_read_char();
+ }
+ }
+ } else {
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-gcc-5.patch b/dev-scheme/c-wrapper/files/c-wrapper-gcc-5.patch
new file mode 100644
index 000000000000..46ab531b389a
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-gcc-5.patch
@@ -0,0 +1,43 @@
+--- a/src/c-parser.c
++++ b/src/c-parser.c
+@@ -1668,6 +1668,7 @@
+ {
+ static ScmObj trigger_line = SCM_FALSE;
+ ScmObj line_str;
++ ScmObj rx;
+
+ /* skip the first line '# 1 "<stdin>"' */
+ Scm_ReadLineUnsafe(SCM_PORT(in));
+@@ -1682,7 +1683,22 @@
+ }
+ }
+
+- while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
++ rx = Scm_RegComp(SCM_STRING(SCM_MAKE_STR_IMMUTABLE("^#\\s+\\d+\\s+\"<stdin>\"")), 0);
++ line_str = Scm_ReadLineUnsafe(SCM_PORT(in));
++ while (!SCM_EOFP(line_str)) {
++ ScmObj body_str = line_str;
++ while (!SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))
++ && SCM_STRING_LENGTH(line_str) >= 13
++#ifdef SCM_REGEXP_MULTI_LINE
++ && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str), SCM_UNDEFINED, SCM_UNDEFINED))) {
++#else
++ && SCM_REGMATCHP(Scm_RegExec(SCM_REGEXP(rx), SCM_STRING(line_str)))) {
++#endif
++ if (SCM_EOFP(line_str = Scm_ReadLineUnsafe(SCM_PORT(in)))) {
++ Scm_Error("[bug] unexpected EOF while parsing macro body");
++ }
++ body_str = Scm_StringAppend2(SCM_STRING(body_str), SCM_STRING(line_str));
++ }
+ if (SCM_NULLP(macro_list)) {
+ Scm_Error("[bug] lost macro body");
+ } else {
+@@ -1690,7 +1706,7 @@
+ macro_list = SCM_CDR(macro_list);
+ Scm_FilenameSet(SCM_CAAR(pos_name_args));
+ Scm_LineNumberSet(SCM_INT_VALUE(SCM_CDAR(pos_name_args)));
+- parse_macro_body(SCM_CADR(pos_name_args), SCM_CDDR(pos_name_args), line_str);
++ parse_macro_body(SCM_CADR(pos_name_args), SCM_CDDR(pos_name_args), body_str);
+ }
+ }
+
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-gentoo.patch b/dev-scheme/c-wrapper/files/c-wrapper-gentoo.patch
new file mode 100644
index 000000000000..e94d55fa0d21
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-gentoo.patch
@@ -0,0 +1,51 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,7 @@
+
+ dnl Check for libraries
+ dnl Add your macro calls to check required libraries, if you have any.
++PKG_CHECK_MODULES([FFI], [libffi])
+
+ dnl Platform-dependent configuration.
+ AC_ARG_ENABLE(objc, [ --enable-objc turn on Objective-C support])
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -20,9 +20,10 @@
+ GAUCHE_PACKAGE = @GAUCHE_PACKAGE@
+ INSTALL = @GAUCHE_INSTALL@
+
+-CPPFLAGS = -I./libffi/include -DGAUCHE_API_0_8_8 @CPPFLAGS@
++CPPFLAGS = -DGAUCHE_API_0_8_8 @FFI_CFLAGS@ @CPPFLAGS@
++CFLAGS = @CFLAGS@
+ LDFLAGS = @LDFLAGS@
+-LIBS = libffi/.libs/libffi.a @LIBS@
++LIBS = @FFI_LIBS@ @LIBS@
+
+ YACC = @YACC@
+
+@@ -38,7 +39,7 @@
+ SCMFILES =
+ HEADERS =
+
+-TARGET = libffi/.libs/libffi.a $(ARCHFILES)
++TARGET = $(ARCHFILES)
+ GENERATED = libffi
+ CONFIG_GENERATED = libffi/Makefile Makefile cwcompile
+
+@@ -62,13 +63,13 @@
+ cd libffi; $(MAKE)
+
+ c-ffi.$(SOEXT): $(ffi_SRCS)
+- $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS)" --verbose c-ffi $(ffi_SRCS)
++ $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS)" --verbose c-ffi $(ffi_SRCS)
+
+ c-lex.$(SOEXT): $(clex_SRCS)
+- $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS)" --verbose c-lex $(clex_SRCS)
++ $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS)" --verbose c-lex $(clex_SRCS)
+
+ c-parser.$(SOEXT): $(cparser_SRCS) y.tab.c
+- $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS) $(cparser_LIBS)" --verbose c-parser $(cparser_SRCS)
++ $(GAUCHE_PACKAGE) compile --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS) $(cparser_LIBS)" --verbose c-parser $(cparser_SRCS)
+
+ c-grammar.y: c-grammar.scm genyacc.scm
+ $(GOSH) genyacc.scm --outfile=c-grammar.y $<
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-glibc-2.25.patch b/dev-scheme/c-wrapper/files/c-wrapper-glibc-2.25.patch
new file mode 100644
index 000000000000..0776b255bbac
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-glibc-2.25.patch
@@ -0,0 +1,13 @@
+--- a/lib/c-wrapper/c-parser.scm
++++ b/lib/c-wrapper/c-parser.scm
+@@ -1115,7 +1115,9 @@
+ (raise e))))
+ (call-with-gcc-io include-dirs headers options
+ (lambda (in out)
+- (let ((macro-list (queue->list (macro-queue))))
++ (let ((macro-list (filter (lambda (m)
++ (not (string-prefix? "__glibc_macro_warning" (car m))))
++ (queue->list (macro-queue)))))
+ (for-each (lambda (macro-def)
+ (display (car macro-def) out)
+ (newline out))
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-info.patch b/dev-scheme/c-wrapper/files/c-wrapper-info.patch
new file mode 100644
index 000000000000..fed41c6aa2ec
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-info.patch
@@ -0,0 +1,66 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -47,7 +47,6 @@
+ AC_PROG_CC
+ AC_PROG_YACC
+ AC_CHECK_PROGS(MAKEINFO, makeinfo)
+-AC_CHECK_PROGS(GZIP_PROGRAM, gzip)
+ AC_CHECK_PROGS(SED, sed)
+ AC_PATH_PROG([LDCONFIG], [ldconfig], [], [$PATH:/sbin:/usr/sbin])
+
+--- a/doc/Makefile.in
++++ b/doc/Makefile.in
+@@ -11,7 +11,6 @@
+ GAUCHE_CONFIG = @GAUCHE_CONFIG@
+ INSTALL = @GAUCHE_INSTALL@
+ MAKEINFO = @MAKEINFO@
+-GZIP_PROGRAM = @GZIP_PROGRAM@
+
+ TEXIS = c-wrapper-ref.texi
+
+@@ -22,7 +21,7 @@
+ all: info
+
+ install: all
+- if test -f c-wrapper-refe.info.gz -o -f c-wrapper-refj.info.gz; then \
++ if test -f c-wrapper-refe.info -o -f c-wrapper-refj.info; then \
+ for info in *.info*; do \
+ $(INSTALL) -m 444 -T $(infodir) $$info; \
+ done; \
+@@ -47,7 +46,7 @@
+
+ pdf : c-wrapper-refe.pdf
+
+-info : c-wrapper-refe.info.gz c-wrapper-refj.info.gz
++info : c-wrapper-refe.info c-wrapper-refj.info
+
+ c-wrapper-refe.html : c-wrapper-refe.texi
+ texi2html -number c-wrapper-refe.texi
+@@ -64,11 +63,9 @@
+ c-wrapper-refe.texi : $(TEXIS) extract
+ $(GOSH) ./extract -en -o c-wrapper-refe.texi c-wrapper-ref.texi
+
+-c-wrapper-refe.info.gz : c-wrapper-refe.texi
+- if test X$(MAKEINFO) != X -a X$(GZIP_PROGRAM) != X; then \
++c-wrapper-refe.info : c-wrapper-refe.texi
++ if test X$(MAKEINFO) != X; then \
+ $(MAKEINFO) --no-warn c-wrapper-refe.texi; \
+- rm -rf c-wrapper-refe.info*.gz; \
+- $(GZIP_PROGRAM) c-wrapper-refe.info; \
+ fi
+
+ c-wrapper-refj.html : c-wrapper-refj.texi
+@@ -91,11 +88,9 @@
+ c-wrapper-refj.texi : $(TEXIS) extract
+ $(GOSH) ./extract -jp -o c-wrapper-refj.texi c-wrapper-ref.texi
+
+-c-wrapper-refj.info.gz : c-wrapper-refj.texi
+- if test X$(MAKEINFO) != X -a X$(GZIP_PROGRAM) != X; then \
++c-wrapper-refj.info : c-wrapper-refj.texi
++ if test X$(MAKEINFO) != X; then \
+ $(MAKEINFO) --no-warn c-wrapper-refj.texi; \
+- rm -rf c-wrapper-refj.info*.gz; \
+- $(GZIP_PROGRAM) c-wrapper-refj.info ; \
+ fi
+
+ clean:
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-local-typedef.patch b/dev-scheme/c-wrapper/files/c-wrapper-local-typedef.patch
new file mode 100644
index 000000000000..70f4ffcf4cd4
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-local-typedef.patch
@@ -0,0 +1,149 @@
+https://aur.archlinux.org/cgit/aur.git/plain/13_local_typedef.patch?h=gauche-c-wrapper
+
+Description: Basic support for typedefs inside functions
+Author: Fabian Brosda <fabi3141@gmx.de>
+Last-Update: 2020-07-10
+
+--- a/src/c-parser.c
++++ b/src/c-parser.c
+@@ -594,6 +594,26 @@
+ }
+ }
+
++static void emit_typedef(ScmObj type_decl_list)
++{
++ ScmObj p;
++
++ SCM_FOR_EACH(p, type_decl_list) {
++ ScmObj v = SCM_CAR(p);
++ ScmObj ctype = SCM_TYPE_DECL_CTYPE(v);
++ ScmObj new_ctype = SCM_TYPE_DECL_NAME(v);
++ ScmObj sym = CParser_ctype2class_symbol(new_ctype);
++
++ Scm_DefChunkDictSetTypename(new_ctype,
++ Scm_MakeDefChunk(SYM(S_typedef),
++ new_ctype,
++ SCM_LIST1(sym),
++ SCM_LIST3(SYM(S_define), sym, ctype)));
++ Scm_InstallType(new_ctype);
++ }
++}
++
++
+ ScmObj Scm_MakeTypeDecl(ScmObj type_spec_list, ScmObj declarator)
+ {
+ ScmObj lst = SCM_NIL;
+@@ -612,6 +632,7 @@
+
+ SCM_FOR_EACH(pair, type_spec_list) {
+ if (SCM_EQ(SCM_CAR(pair), SYM(U_typedef))) {
++ emit_typedef(Scm_Cons(Scm_MakeTypeDecl(SCM_CDR(pair), declarator), lst));
+ continue;
+ }
+ lst = Scm_Cons(SCM_CAR(pair), lst);
+@@ -1542,25 +1563,6 @@
+ SCM_RETURN(SCM_UNDEFINED);
+ }
+
+-static void emit_typedef(ScmObj type_decl_list)
+-{
+- ScmObj p;
+-
+- SCM_FOR_EACH(p, type_decl_list) {
+- ScmObj v = SCM_CAR(p);
+- ScmObj ctype = SCM_TYPE_DECL_CTYPE(v);
+- ScmObj new_ctype = SCM_TYPE_DECL_NAME(v);
+- ScmObj sym = CParser_ctype2class_symbol(new_ctype);
+-
+- Scm_DefChunkDictSetTypename(new_ctype,
+- Scm_MakeDefChunk(SYM(S_typedef),
+- new_ctype,
+- SCM_LIST1(sym),
+- SCM_LIST3(SYM(S_define), sym, ctype)));
+- Scm_InstallType(new_ctype);
+- }
+-}
+-
+ static void emit_define_extern(ScmObj declaration)
+ {
+ ScmObj ctype = SCM_TYPE_DECL_CTYPE(declaration);
+--- a/testsuite/local_typedef.c
++++ b/testsuite/local_typedef.c
+@@ -0,0 +1,6 @@
++#include "local_typedef.h"
++
++int local_typedef(void)
++{
++ return helper();
++}
+--- a/testsuite/local_typedef.h
++++ b/testsuite/local_typedef.h
+@@ -0,0 +1,8 @@
++extern int local_typedef(void);
++
++int helper(void)
++{
++ typedef int _my_type;
++ _my_type ret = 1;
++ return ret;
++}
+--- a/testsuite/local-typedef.scm
++++ b/testsuite/local-typedef.scm
+@@ -0,0 +1,19 @@
++;;;
++;;; Test local typedefs
++;;;
++
++(use gauche.test)
++
++(test-start "c-wrapper (local typedefs)")
++(use c-wrapper)
++
++(c-load-library "./local_typedef")
++(c-include "./local_typedef.h")
++
++(test "local_typedef"
++ 1
++ (lambda ()
++ (local_typedef)))
++
++;; epilogue
++(test-end)
+--- a/testsuite/Makefile.in
++++ b/testsuite/Makefile.in
+@@ -57,6 +57,9 @@
+ fptr_array.$(DYLIBEXT): fptr_array.o
+ $(CC) $(LDFLAGS) $@ $<
+
++local_typedef.$(DYLIBEXT): local_typedef.o
++ $(CC) $(LDFLAGS) $@ $<
++
+ gcc_extension.$(DYLIBEXT): gcc_extension.o
+ $(CC) $(LDFLAGS) $@ $<
+
+@@ -65,7 +68,7 @@
+
+ check: $(CHECK_TARGET)
+
+-check-c: ffitest.$(DYLIBEXT) fptr_array.$(DYLIBEXT) gcc_extension.$(DYLIBEXT)
++check-c: ffitest.$(DYLIBEXT) fptr_array.$(DYLIBEXT) gcc_extension.$(DYLIBEXT) local_typedef.$(DYLIBEXT)
+ @rm -f test.log
+ $(GOSH) -I../src -I../lib attr-test.scm >> test.log
+ $(GOSH) -I../src -I../lib ffitest.scm >> test.log
+@@ -74,6 +77,7 @@
+ $(GOSH) -I../src -I../lib struct_in_union-test.scm >> test.log
+ $(GOSH) -I../src -I../lib stdio-test.scm >> test.log
+ $(GOSH) -I../src -I../lib math-test.scm >> test.log
++ $(GOSH) -I../src -I../lib local-typedef.scm >> test.log
+ $(GOSH) -I../src -I../lib inline-test.scm >> test.log
+ $(GOSH) -I../src -I../lib fptr_array-test.scm >> test.log
+ $(GOSH) -I../src -I../lib array_qualifier-test.scm >> test.log
+@@ -83,7 +87,7 @@
+ $(GOSH) -I../src -I../lib -I../objc objc-test.scm >> test.log
+
+ clean :
+- rm -rf core ffitest.$(DYLIBEXT) objc-test.$(DYLIBEXT) fptr_array.$(DYLIBEXT) gcc_extension.$(DYLIBEXT) *.o $(GENERATED) *~ test.log so_locations
++ rm -rf core ffitest.$(DYLIBEXT) objc-test.$(DYLIBEXT) fptr_array.$(DYLIBEXT) gcc_extension.$(DYLIBEXT) local_typedef.$(DYLIBEXT) *.o $(GENERATED) *~ test.log so_locations
+
+ distclean : clean
+ rm -rf $(CONFIG_GENERATED)
diff --git a/dev-scheme/c-wrapper/files/c-wrapper-texinfo-6.7.patch b/dev-scheme/c-wrapper/files/c-wrapper-texinfo-6.7.patch
new file mode 100644
index 000000000000..97acd86470eb
--- /dev/null
+++ b/dev-scheme/c-wrapper/files/c-wrapper-texinfo-6.7.patch
@@ -0,0 +1,34 @@
+--- a/doc/c-wrapper-ref.texi
++++ b/doc/c-wrapper-ref.texi
+@@ -14,7 +14,7 @@
+ @direntry
+ * c-wrapper reference: (c-wrapper-refj.info). A generic wrapper for C libraries.
+ @end direntry
+-@documentencoding euc-jp
++@documentencoding UTF-8
+ @c COMMON
+ @comment %**end of header
+
+--- a/doc/extract
++++ b/doc/extract
+@@ -138,8 +138,6 @@
+ ((en) (filter #/^@c EN$/ #/^@c JP$/))
+ ((jp) (filter #/^@c JP$/ #/^@c EN$/))))
+
+- (define outenc (if (eq? *lang* 'jp) 'euc-jp 'utf8))
+-
+ (unless (= (length a) 1) (usage))
+
+ (when (eq? *lang* 'jp)
+@@ -148,9 +146,9 @@
+ (with-input-from-file (car a)
+ (lambda ()
+ (if *outfile*
+- (with-output-to-file *outfile* do-it :encoding outenc)
++ (with-output-to-file *outfile* do-it :encoding 'utf8)
+ (let1 out (open-output-conversion-port
+- (current-output-port) outenc)
++ (current-output-port) 'utf8)
+ (with-output-to-port out do-it)
+ (close-output-port out))))
+ :encoding 'euc-jp)
diff --git a/dev-scheme/c-wrapper/metadata.xml b/dev-scheme/c-wrapper/metadata.xml
new file mode 100644
index 000000000000..987ce1bc2ed6
--- /dev/null
+++ b/dev-scheme/c-wrapper/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+</pkgmetadata>
diff --git a/dev-scheme/chez-minikanren/Manifest b/dev-scheme/chez-minikanren/Manifest
new file mode 100644
index 000000000000..adf548fe469f
--- /dev/null
+++ b/dev-scheme/chez-minikanren/Manifest
@@ -0,0 +1 @@
+DIST chez-minikanren-2018.04.11.tar.gz 14068 BLAKE2B b3d8ca2499b37f085e34e59bfa47c7d2dc7869025b46c0ccee271556b4b3ed89e37a29374e3e78452041e88377ede7d751b81da0959e590d9b7be0adb72efc94 SHA512 39928df2548353917cfaaad37454ceb94db4c87ebbf8a1bd8e7ce3e32ed07a6660e9cc1aeb446e3b7abbc533e8cf24da1f3a2ce3c2efe9cc8c8ed1bd90b88278
diff --git a/dev-scheme/chez-minikanren/chez-minikanren-2018.04.11.ebuild b/dev-scheme/chez-minikanren/chez-minikanren-2018.04.11.ebuild
new file mode 100644
index 000000000000..578cae7255d9
--- /dev/null
+++ b/dev-scheme/chez-minikanren/chez-minikanren-2018.04.11.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# NOTICE: miniKanren does not define a library interface :(
+# so we will make a wrapper to load miniKanren...
+
+EAPI=8
+
+COMMIT=2d50ec5002fe052f5c2f2d72530dcbeb8760fde8
+MY_PN=miniKanren
+
+inherit wrapper
+
+DESCRIPTION="Canonical miniKanren implementation (on Chez Scheme)"
+HOMEPAGE="https://github.com/miniKanren/miniKanren"
+SRC_URI="https://github.com/miniKanren/${MY_PN}/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${MY_PN}-${COMMIT}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="source"
+RESTRICT="strip"
+
+RDEPEND="dev-scheme/chez:="
+DEPEND="${RDEPEND}"
+
+MINIKANREN_HOME=/usr/lib/chezscheme/${MY_PN}
+
+src_compile() {
+ local s=( $( find . -name "*.scm" -exec printf "\"%s\" " {} + ) )
+ local c="(import (chezscheme)) (for-each compile-library (list ${s[@]}))"
+ echo "${c}" | chezscheme --quiet --optimize-level 3 || die
+}
+
+src_install() {
+ insinto ${MINIKANREN_HOME}
+ doins *.so
+ use source && doins *.scm
+
+ make_wrapper ${MY_PN} "chezscheme mk.so" ${MINIKANREN_HOME}
+
+ einstalldocs
+}
diff --git a/dev-scheme/chez-minikanren/metadata.xml b/dev-scheme/chez-minikanren/metadata.xml
new file mode 100644
index 000000000000..b55deda0b0df
--- /dev/null
+++ b/dev-scheme/chez-minikanren/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ miniKanren is an embedded Domain Specific Language for logic programming.
+ The core miniKanren language is very simple, with only three logical
+ operators and one interface operator.
+ miniKanren is designed to be easily modified and extended; extensions
+ include Constraint Logic Programming, probabilistic logic programming,
+ nominal logic programming, and tabling.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/miniKanren/miniKanren/issues</bugs-to>
+ <remote-id type="github">miniKanren/miniKanren</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/chez/Manifest b/dev-scheme/chez/Manifest
new file mode 100644
index 000000000000..c04b3c2bb23d
--- /dev/null
+++ b/dev-scheme/chez/Manifest
@@ -0,0 +1,3 @@
+DIST chez-10.3.0.tar.gz 9227320 BLAKE2B f801fd533b33d286ab816434bde702360be7098a368d1484e2cf768cdb95460e4c32dd65e6b0df0088b5925206ee2207eee139ad3cf6f576f1599f329d831617 SHA512 8b1a2a07f0ce478cfe4c63d9b057dcb93bc3dadcfd86b21548647f0e8a5a25a2eb44152113c2a401247e860b582e51a34cc7962fbca5051667e58ae949b15396
+DIST chez-10.4.0.tar.gz 9584467 BLAKE2B 19bfa4db922f53012c5025b8671e2e4c5443b17fbbc06218433fa67505e807082ac09134bc5a51cec0d68a8e9808bf428f6371421262a7e8c0752d12eeedba48 SHA512 bf91e68b2ad1cee202ab3fbe03f227a73ed5fc6afadf335e7d67d802c980763ef1e142f38145d169e338f698a0737ff34720daa25e61c8fd048adfc4c39fe31b
+DIST chez-10.4.1.tar.gz 9584694 BLAKE2B b704bdeddac414f692aec989d1da95c58fdb7eef7a623e9d0dd89f631b3578a514fd76970e136af5bdd386fafdb1c5fcf9311a7bad977685a0985f6cf7073bcf SHA512 5e22ca5c0abfeed317b75ad6c96a37d9fea0db59f3c684f5dff613f9864018b5027f939c73a60d645e29702dcb51b665dca4871294e553f79679f14ae851a64f
diff --git a/dev-scheme/chez/chez-10.3.0.ebuild b/dev-scheme/chez/chez-10.3.0.ebuild
new file mode 100644
index 000000000000..109f19348d23
--- /dev/null
+++ b/dev-scheme/chez/chez-10.3.0.ebuild
@@ -0,0 +1,121 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit dot-a edo toolchain-funcs
+
+DESCRIPTION="A programming language based on R6RS"
+HOMEPAGE="https://cisco.github.io/ChezScheme/
+ https://github.com/cisco/ChezScheme/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/cisco/ChezScheme"
+else
+ SRC_URI="https://github.com/cisco/ChezScheme/releases/download/v${PV}/csv${PV//a}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/csv${PV//a}"
+
+ KEYWORDS="amd64 ~arm ~x86"
+fi
+
+# Chez Scheme itself is Apache 2.0, but it vendors Nanopass and stex
+# which are both MIT licensed.
+LICENSE="Apache-2.0 MIT"
+SLOT="0/${PV}"
+IUSE="X +ncurses +threads"
+
+# "some output differs from expected", needs in-depth investigation.
+# You may wish to investigate "make.out" test logfiles.
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/lz4:=
+ sys-apps/util-linux
+ virtual/zlib:=
+ X? (
+ x11-libs/libX11
+ )
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ tc-export AR CC CXX LD RANLIB
+
+ default
+
+ if use ncurses ; then
+ local nclibs="\"$($(tc-getPKG_CONFIG) --libs ncurses)\""
+
+ sed -i "s|ncursesLib=-lncurses|ncursesLib=${nclibs}|g" configure || die
+ fi
+}
+
+src_configure() {
+ # See official docs for translation guide.
+ # https://cisco.github.io/ChezScheme/release_notes/v10.0/release_notes.html
+ # "t" for threading + arch_map + "le" for Linux
+ local -A arch_map=(
+ [x86]=i3
+ [amd64]=a6
+ [arm64]=arm64
+ [arm]=arm32
+ [riscv]=rv64
+ [loong]=la64
+ [ppc]=ppc32
+ )
+ local machine="$(usex threads 't' '')${arch_map[${ARCH}]}le"
+
+ lto-guarantee-fat
+
+ local -a myconfargs=(
+ --machine="${machine}"
+ --libkernel
+ --nogzip-man-pages
+
+ --installprefix="/usr"
+ --installbin="/usr/bin"
+ --installlib="/usr/$(get_libdir)"
+ --installman="/usr/share/man"
+ --installschemename="chezscheme"
+ --installpetitename="chezscheme-petite"
+ --installscriptname="chezscheme-script"
+
+ $(usex threads '--threads' '')
+ $(usex ncurses '' '--disable-curses')
+ $(usex X '' '--disable-x11')
+
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ LD="$(tc-getLD)"
+ RANLIB="$(tc-getRANLIB)"
+ STRIP="$(tc-getSTRIP)"
+
+ CFLAGS+="${CFLAGS}"
+ CPPFLAGS+="${CPPFLAGS}"
+ LDFLAGS+="${LDFLAGS}"
+
+ LZ4="$($(tc-getPKG_CONFIG) --libs liblz4)"
+ ZLIB="$($(tc-getPKG_CONFIG) --libs zlib)"
+ )
+ edo sh ./configure "${myconfargs[@]}"
+}
+
+src_install() {
+ # TempRoot == DESTDIR
+ sed -e "s|TempRoot=.*|TempRoot=${ED}|g" -i ./*/Mf-* || die
+
+ emake install
+ strip-lto-bytecode
+ einstalldocs
+}
diff --git a/dev-scheme/chez/chez-10.4.0.ebuild b/dev-scheme/chez/chez-10.4.0.ebuild
new file mode 100644
index 000000000000..4be2f1a206b1
--- /dev/null
+++ b/dev-scheme/chez/chez-10.4.0.ebuild
@@ -0,0 +1,121 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit dot-a edo toolchain-funcs
+
+DESCRIPTION="A programming language based on R6RS"
+HOMEPAGE="https://cisco.github.io/ChezScheme/
+ https://github.com/cisco/ChezScheme/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/cisco/ChezScheme"
+else
+ SRC_URI="https://github.com/cisco/ChezScheme/releases/download/v${PV}/csv${PV//a}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/csv${PV//a}"
+
+ KEYWORDS="~amd64 ~arm ~x86"
+fi
+
+# Chez Scheme itself is Apache 2.0, but it vendors Nanopass and stex
+# which are both MIT licensed.
+LICENSE="Apache-2.0 MIT"
+SLOT="0/${PV}"
+IUSE="X +ncurses +threads"
+
+# "some output differs from expected", needs in-depth investigation.
+# You may wish to investigate "make.out" test logfiles.
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/lz4:=
+ sys-apps/util-linux
+ virtual/zlib:=
+ X? (
+ x11-libs/libX11
+ )
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ tc-export AR CC CXX LD RANLIB
+
+ default
+
+ if use ncurses ; then
+ local nclibs="\"$($(tc-getPKG_CONFIG) --libs ncurses)\""
+
+ sed -i "s|ncursesLib=-lncurses|ncursesLib=${nclibs}|g" configure || die
+ fi
+}
+
+src_configure() {
+ # See official docs for translation guide.
+ # https://cisco.github.io/ChezScheme/release_notes/v10.0/release_notes.html
+ # "t" for threading + arch_map + "le" for Linux
+ local -A arch_map=(
+ [x86]=i3
+ [amd64]=a6
+ [arm64]=arm64
+ [arm]=arm32
+ [riscv]=rv64
+ [loong]=la64
+ [ppc]=ppc32
+ )
+ local machine="$(usex threads 't' '')${arch_map[${ARCH}]}le"
+
+ lto-guarantee-fat
+
+ local -a myconfargs=(
+ --machine="${machine}"
+ --libkernel
+ --nogzip-man-pages
+
+ --installprefix="/usr"
+ --installbin="/usr/bin"
+ --installlib="/usr/$(get_libdir)"
+ --installman="/usr/share/man"
+ --installschemename="chezscheme"
+ --installpetitename="chezscheme-petite"
+ --installscriptname="chezscheme-script"
+
+ $(usex threads '--threads' '')
+ $(usex ncurses '' '--disable-curses')
+ $(usex X '' '--disable-x11')
+
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ LD="$(tc-getLD)"
+ RANLIB="$(tc-getRANLIB)"
+ STRIP="$(tc-getSTRIP)"
+
+ CFLAGS+="${CFLAGS}"
+ CPPFLAGS+="${CPPFLAGS}"
+ LDFLAGS+="${LDFLAGS}"
+
+ LZ4="$($(tc-getPKG_CONFIG) --libs liblz4)"
+ ZLIB="$($(tc-getPKG_CONFIG) --libs zlib)"
+ )
+ edo sh ./configure "${myconfargs[@]}"
+}
+
+src_install() {
+ # TempRoot == DESTDIR
+ sed -e "s|TempRoot=.*|TempRoot=${ED}|g" -i ./*/Mf-* || die
+
+ emake install
+ strip-lto-bytecode
+ einstalldocs
+}
diff --git a/dev-scheme/chez/chez-10.4.1.ebuild b/dev-scheme/chez/chez-10.4.1.ebuild
new file mode 100644
index 000000000000..4be2f1a206b1
--- /dev/null
+++ b/dev-scheme/chez/chez-10.4.1.ebuild
@@ -0,0 +1,121 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit dot-a edo toolchain-funcs
+
+DESCRIPTION="A programming language based on R6RS"
+HOMEPAGE="https://cisco.github.io/ChezScheme/
+ https://github.com/cisco/ChezScheme/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/cisco/ChezScheme"
+else
+ SRC_URI="https://github.com/cisco/ChezScheme/releases/download/v${PV}/csv${PV//a}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/csv${PV//a}"
+
+ KEYWORDS="~amd64 ~arm ~x86"
+fi
+
+# Chez Scheme itself is Apache 2.0, but it vendors Nanopass and stex
+# which are both MIT licensed.
+LICENSE="Apache-2.0 MIT"
+SLOT="0/${PV}"
+IUSE="X +ncurses +threads"
+
+# "some output differs from expected", needs in-depth investigation.
+# You may wish to investigate "make.out" test logfiles.
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/lz4:=
+ sys-apps/util-linux
+ virtual/zlib:=
+ X? (
+ x11-libs/libX11
+ )
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ tc-export AR CC CXX LD RANLIB
+
+ default
+
+ if use ncurses ; then
+ local nclibs="\"$($(tc-getPKG_CONFIG) --libs ncurses)\""
+
+ sed -i "s|ncursesLib=-lncurses|ncursesLib=${nclibs}|g" configure || die
+ fi
+}
+
+src_configure() {
+ # See official docs for translation guide.
+ # https://cisco.github.io/ChezScheme/release_notes/v10.0/release_notes.html
+ # "t" for threading + arch_map + "le" for Linux
+ local -A arch_map=(
+ [x86]=i3
+ [amd64]=a6
+ [arm64]=arm64
+ [arm]=arm32
+ [riscv]=rv64
+ [loong]=la64
+ [ppc]=ppc32
+ )
+ local machine="$(usex threads 't' '')${arch_map[${ARCH}]}le"
+
+ lto-guarantee-fat
+
+ local -a myconfargs=(
+ --machine="${machine}"
+ --libkernel
+ --nogzip-man-pages
+
+ --installprefix="/usr"
+ --installbin="/usr/bin"
+ --installlib="/usr/$(get_libdir)"
+ --installman="/usr/share/man"
+ --installschemename="chezscheme"
+ --installpetitename="chezscheme-petite"
+ --installscriptname="chezscheme-script"
+
+ $(usex threads '--threads' '')
+ $(usex ncurses '' '--disable-curses')
+ $(usex X '' '--disable-x11')
+
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ LD="$(tc-getLD)"
+ RANLIB="$(tc-getRANLIB)"
+ STRIP="$(tc-getSTRIP)"
+
+ CFLAGS+="${CFLAGS}"
+ CPPFLAGS+="${CPPFLAGS}"
+ LDFLAGS+="${LDFLAGS}"
+
+ LZ4="$($(tc-getPKG_CONFIG) --libs liblz4)"
+ ZLIB="$($(tc-getPKG_CONFIG) --libs zlib)"
+ )
+ edo sh ./configure "${myconfargs[@]}"
+}
+
+src_install() {
+ # TempRoot == DESTDIR
+ sed -e "s|TempRoot=.*|TempRoot=${ED}|g" -i ./*/Mf-* || die
+
+ emake install
+ strip-lto-bytecode
+ einstalldocs
+}
diff --git a/dev-scheme/chez/metadata.xml b/dev-scheme/chez/metadata.xml
new file mode 100644
index 000000000000..18c78abe6e65
--- /dev/null
+++ b/dev-scheme/chez/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Chez Scheme is both a programming language and an implementation
+ of that language, with supporting tools and documentation.
+
+ As a superset of the language described in the Revised6 Report on
+ the Algorithmic Language Scheme (R6RS), Chez Scheme supports all
+ standard features of Scheme, including first-class procedures,
+ proper treatment of tail calls, continuations, user-defined
+ records, libraries, exceptions, and hygienic macro expansion.
+
+ Chez Scheme also includes extensive support for interfacing with C
+ and other languages, support for multiple threads possibly running
+ on multiple cores, non-blocking I/O, and many other features.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/cisco/ChezScheme/issues</bugs-to>
+ <remote-id type="github">cisco/ChezScheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/chibi/Manifest b/dev-scheme/chibi/Manifest
new file mode 100644
index 000000000000..6ac80d40c1fe
--- /dev/null
+++ b/dev-scheme/chibi/Manifest
@@ -0,0 +1,3 @@
+DIST chibi-0.10.0.tar.gz 1148573 BLAKE2B 1435d5734bfc44b6d6ddafdb339eea659345eea0db0e9b227830d7a6b6b14d3655af10906e43b6f8abd7eb2b90596fcb5dcc024abd2cba123a184f66ffcd0961 SHA512 348c20468e3b3b084ed25d38860f1afdecfb06ad9ff9ceb178c36930c14aa66a78f48b881a8eda28a30498662e7c722938212ea77b1cea89834d1a4377f0f648
+DIST chibi-0.11.0.tar.gz 1228817 BLAKE2B aac54db3a323078323284e4d3e08f49637f4932d895801871a0d62e18b975bf7855c5db86985dfaf806696cd432160cae3dcde19fa63387c50842c73edf27b38 SHA512 00b56266398212a97603527ad1e4e56ac2a80ecdf0c13c5c41fe495a7af601bba3f00b7d36016284e76ab3d18e2c51bdb19a84523a158f50cec232ca950ac25d
+DIST chibi-0.12.gh.tar.gz 1247167 BLAKE2B 98035e95ffafe6d1a63feeafdd151b21f66b0b1582f4ce72e4e072651c4622d1c5b69591879d3f590a31b2a23b6292790da5f1ec76fc1d7603dfbc20e28428f4 SHA512 eb02585c585df13abf442e30f3a06e8c1f9b7e603fb023614a73d96c7e6fdaa326bfde9ff03e6866aba57f1ae3a9b217b8df387050a335e5a165b401259fba53
diff --git a/dev-scheme/chibi/chibi-0.10.0.ebuild b/dev-scheme/chibi/chibi-0.10.0.ebuild
new file mode 100644
index 000000000000..1a8b1cb4f3fe
--- /dev/null
+++ b/dev-scheme/chibi/chibi-0.10.0.ebuild
@@ -0,0 +1,43 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PN=${PN}-scheme
+MY_PV=0.10 # Release "0.10.0" tagged as "0.10"
+MY_P=${MY_PN}-${MY_PV}
+
+inherit toolchain-funcs
+
+DESCRIPTION="Minimal Scheme implementation for use as an extension language"
+HOMEPAGE="http://synthcode.com/scheme/chibi/"
+
+if [[ ${PV} == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ashinn/${MY_PN}.git"
+else
+ SRC_URI="https://github.com/ashinn/${MY_PN}/archive/${MY_PV}.tar.gz
+ -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+ S="${WORKDIR}"/${MY_P}
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+src_configure() {
+ tc-export CC
+
+ export PREFIX="${EPREFIX}/usr"
+ export LIBDIR="${EPREFIX}/usr/$(get_libdir)"
+ export SOLIBDIR="${EPREFIX}/usr/$(get_libdir)"
+
+ # If "ldconfig" exists it is ran, overwrite it with "LDCONFIG" variable.
+ export LDCONFIG="0"
+}
+
+src_install() {
+ default
+
+ dosym ${MY_PN} /usr/bin/${PN}
+}
diff --git a/dev-scheme/chibi/chibi-0.11.0.ebuild b/dev-scheme/chibi/chibi-0.11.0.ebuild
new file mode 100644
index 000000000000..fc7efc2b6524
--- /dev/null
+++ b/dev-scheme/chibi/chibi-0.11.0.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+REAL_PN="${PN}-scheme"
+REAL_PV="$(ver_cut 1-2)"
+REAL_P="${REAL_PN}-${REAL_PV}"
+
+inherit toolchain-funcs
+
+DESCRIPTION="Minimal Scheme implementation for use as an extension language"
+HOMEPAGE="http://synthcode.com/scheme/chibi/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/ashinn/${REAL_PN}.git"
+else
+ SRC_URI="https://github.com/ashinn/${REAL_PN}/archive/${REAL_PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${REAL_P}"
+
+ KEYWORDS="~amd64 ~riscv ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+src_configure() {
+ tc-export CC
+
+ export PREFIX="${EPREFIX}/usr"
+ export LIBDIR="${EPREFIX}/usr/$(get_libdir)"
+ export SOLIBDIR="${EPREFIX}/usr/$(get_libdir)"
+
+ # If "ldconfig" exists it is ran, overwrite it with "LDCONFIG" variable.
+ export LDCONFIG="0"
+}
+
+src_install() {
+ default
+
+ dosym "${REAL_PN}" "/usr/bin/${PN}"
+}
diff --git a/dev-scheme/chibi/chibi-0.12.ebuild b/dev-scheme/chibi/chibi-0.12.ebuild
new file mode 100644
index 000000000000..a4b1ead15985
--- /dev/null
+++ b/dev-scheme/chibi/chibi-0.12.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Minimal Scheme implementation for use as an extension language"
+HOMEPAGE="http://synthcode.com/scheme/chibi/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/ashinn/${PN}-scheme"
+else
+ SRC_URI="https://github.com/ashinn/${PN}-scheme/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz"
+ S="${WORKDIR}/${PN}-scheme-${PV}"
+
+ KEYWORDS="~amd64 ~riscv ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+src_install() {
+ cmake_src_install
+ dosym -r /usr/bin/${PN}{-scheme,}
+}
diff --git a/dev-scheme/chibi/chibi-9999.ebuild b/dev-scheme/chibi/chibi-9999.ebuild
new file mode 100644
index 000000000000..a4b1ead15985
--- /dev/null
+++ b/dev-scheme/chibi/chibi-9999.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Minimal Scheme implementation for use as an extension language"
+HOMEPAGE="http://synthcode.com/scheme/chibi/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/ashinn/${PN}-scheme"
+else
+ SRC_URI="https://github.com/ashinn/${PN}-scheme/archive/${PV}.tar.gz
+ -> ${P}.gh.tar.gz"
+ S="${WORKDIR}/${PN}-scheme-${PV}"
+
+ KEYWORDS="~amd64 ~riscv ~x86"
+fi
+
+LICENSE="BSD"
+SLOT="0"
+
+src_install() {
+ cmake_src_install
+ dosym -r /usr/bin/${PN}{-scheme,}
+}
diff --git a/dev-scheme/chibi/metadata.xml b/dev-scheme/chibi/metadata.xml
new file mode 100644
index 000000000000..07e375919d8c
--- /dev/null
+++ b/dev-scheme/chibi/metadata.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ Chibi-Scheme is a very small library intended for use as an extension
+ and scripting language in C programs. In addition to support for
+ lightweight VM-based threads, each VM itself runs in an isolated heap
+ allowing multiple VMs to run simultaneously in different OS threads.
+ Despite the small size, Chibi-Scheme attempts to do The Right Thing.
+ The default settings include:
+ - a full numeric tower, with rational and complex numbers
+ - full and seamless Unicode support
+ - low-level and high-level hygienic macros
+ - an extensible module system
+ Specifically, the default repl language contains all bindings from R7RS
+ small, available explicitly as the (scheme small) library. The language
+ is built in layers, however - see the manual for instructions on
+ compiling with fewer features or requesting a smaller language
+ on startup.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/ashinn/chibi-scheme/issues</bugs-to>
+ <remote-id type="github">ashinn/chibi-scheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/chicken/Manifest b/dev-scheme/chicken/Manifest
new file mode 100644
index 000000000000..01a563d2274c
--- /dev/null
+++ b/dev-scheme/chicken/Manifest
@@ -0,0 +1,2 @@
+DIST chicken-5.3.0.tar.gz 4069549 BLAKE2B 7e1fb8c844542927eec53df751014f718b8c96fb6cf390d6464d7d55467c7320346be9ed05202b9c5c96548f274243ae52fead488981d7c207bec2c001db7cd7 SHA512 8fcc08a1ba44cde42c95820695a11858a3b7ff39a4b577bc5afb894c53513661aab2dc5b8e608e1d9d26648e314551052041626c4c8e519fcb9f8af324386e02
+DIST chicken-5.4.0.tar.gz 4109135 BLAKE2B 75dda6891992a7eeae8ac7624678c62c9aff61a712c9b8812b008f3369b11297019eaed259c28999a8e4f9aa587583cdef4284b5ada2bc971ef823ffa5508b35 SHA512 21f5dc4abcfce7be2d8eb6728061728a4a695ac88860e94e114c2bf2839a8a47bbdc368330913edc83d5b81b6b2499c608e47e6659fa7651c82d133abb7e4e3c
diff --git a/dev-scheme/chicken/chicken-5.3.0.ebuild b/dev-scheme/chicken/chicken-5.3.0.ebuild
new file mode 100644
index 000000000000..fcf8f6ba681e
--- /dev/null
+++ b/dev-scheme/chicken/chicken-5.3.0.ebuild
@@ -0,0 +1,78 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit toolchain-funcs
+
+DESCRIPTION="Scheme interpreter and native Scheme to C compiler"
+HOMEPAGE="https://www.call-cc.org/"
+SRC_URI="https://code.call-cc.org/releases/${PV}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha amd64 ~mips ppc ppc64 ~riscv x86"
+IUSE="static-libs doc"
+
+RDEPEND=""
+DEPEND=""
+
+src_prepare() {
+ default
+
+ # because chicken's upstream is in the habit of using variables that
+ # portage also uses :( eg. $ARCH and $A
+ sed -i \
+ -e "s/A\([[:space:]]*?=\|)\)/z&/" \
+ -e "s/ARCH/z&/" \
+ -e "/LICENSE /d" \
+ Makefile.* {defaults,rules}.make || die
+ sed -i \
+ -e "s|/lib|/$(get_libdir)|" \
+ -e "s|\$(DATADIR)/doc|\$(SHAREDIR)/doc/${PF}|" \
+ defaults.make || die
+ sed -i \
+ -e "/\$(CHICKEN_DO_PROGRAM)\$(EXE):/,/^$/s/\(\$<\)/\$(LINKER_OPTIONS) \1/" \
+ rules.make || die
+
+ use doc || sed -i "/\$(SEP)manual/d" rules.make || die
+}
+
+src_compile() {
+ emake -j1 \
+ PLATFORM="linux" \
+ PREFIX="${EPREFIX}/usr" \
+ C_COMPILER="$(tc-getCC)" \
+ C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ CXX_COMPILER="$(tc-getCXX)" \
+ HOSTSYSTEM="${CBUILD}" \
+ LINKER_OPTIONS="${LDFLAGS}"
+}
+
+src_test() {
+ cd tests && ./runtests.sh || die
+}
+
+src_install() {
+ emake -j1 \
+ PLATFORM="linux" \
+ PREFIX="${EPREFIX}/usr" \
+ C_COMPILER="$(tc-getCC)" \
+ C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ CXX_COMPILER="$(tc-getCXX)" \
+ HOSTSYSTEM="${CBUILD}" \
+ LINKER_OPTIONS="${LDFLAGS}" \
+ DESTDIR="${D}" \
+ install
+ einstalldocs
+
+ use static-libs || find "${ED}" -name '*.a' -delete || die
+
+ # let portage track this file (created later)
+ touch "${ED}"/usr/$(get_libdir)/${PN}/11/modules.db || die
+}
+
+pkg_postinst() {
+ # create modules.db file in ${ROOT}
+ chicken-install -update-db || die
+}
diff --git a/dev-scheme/chicken/chicken-5.4.0.ebuild b/dev-scheme/chicken/chicken-5.4.0.ebuild
new file mode 100644
index 000000000000..8893792dac78
--- /dev/null
+++ b/dev-scheme/chicken/chicken-5.4.0.ebuild
@@ -0,0 +1,76 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Scheme interpreter and native Scheme to C compiler"
+HOMEPAGE="https://www.call-cc.org/"
+SRC_URI="https://code.call-cc.org/releases/${PV}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~alpha amd64 ~mips ppc ppc64 ~riscv x86"
+IUSE="static-libs doc"
+
+src_prepare() {
+ default
+
+ # because chicken's upstream is in the habit of using variables that
+ # portage also uses :( eg. $ARCH and $A
+ sed -i \
+ -e "s/A\([[:space:]]*?=\|)\)/z&/" \
+ -e "s/ARCH/z&/" \
+ -e "/LICENSE /d" \
+ Makefile.* {defaults,rules}.make || die
+
+ sed -i \
+ -e "s|/lib|/$(get_libdir)|" \
+ -e "s|\$(DATADIR)/doc|\$(SHAREDIR)/doc/${PF}|" \
+ defaults.make || die
+
+ sed -i \
+ -e "/\$(CHICKEN_DO_PROGRAM)\$(EXE):/,/^$/s/\(\$<\)/\$(LINKER_OPTIONS) \1/" \
+ rules.make || die
+
+ use doc || sed -i "/\$(SEP)manual/d" rules.make || die
+}
+
+src_compile() {
+ emake -j1 \
+ PLATFORM="linux" \
+ PREFIX="${EPREFIX}/usr" \
+ C_COMPILER="$(tc-getCC)" \
+ C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ CXX_COMPILER="$(tc-getCXX)" \
+ HOSTSYSTEM="${CBUILD}" \
+ LINKER_OPTIONS="${LDFLAGS}"
+}
+
+src_test() {
+ cd tests && ./runtests.sh || die
+}
+
+src_install() {
+ emake -j1 \
+ PLATFORM="linux" \
+ PREFIX="${EPREFIX}/usr" \
+ C_COMPILER="$(tc-getCC)" \
+ C_COMPILER_OPTIMIZATION_OPTIONS="${CFLAGS}" \
+ CXX_COMPILER="$(tc-getCXX)" \
+ HOSTSYSTEM="${CBUILD}" \
+ LINKER_OPTIONS="${LDFLAGS}" \
+ DESTDIR="${D}" \
+ install
+ einstalldocs
+ use static-libs || find "${ED}" -name '*.a' -delete || die
+
+ # let portage track this file (created later)
+ touch "${ED}"/usr/$(get_libdir)/${PN}/11/modules.db || die
+}
+
+pkg_postinst() {
+ # create modules.db file in ${ROOT}
+ chicken-install -update-db || die
+}
diff --git a/dev-scheme/chicken/metadata.xml b/dev-scheme/chicken/metadata.xml
new file mode 100644
index 000000000000..be95a48c267f
--- /dev/null
+++ b/dev-scheme/chicken/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ CHICKEN is a compiler for the Scheme programming language. CHICKEN
+ produces portable, efficient C, supports almost all of the current
+ Scheme language standard, the Revised^5 Report on the Algorithmic
+ Language Scheme (R5RS), and includes many enhancements and extensions.
+ CHICKEN runs on MacOS X, Windows, and many Unix flavours.
+ </longdescription>
+</pkgmetadata>
diff --git a/dev-scheme/cyclone/Manifest b/dev-scheme/cyclone/Manifest
new file mode 100644
index 000000000000..2773ee76c5dd
--- /dev/null
+++ b/dev-scheme/cyclone/Manifest
@@ -0,0 +1,2 @@
+DIST cyclone-0.35.0.tar.gz 3955837 BLAKE2B 436399bd3d6f2233d9b613e059131195419ca25f0dab80cac19b14accdceffe481af68ba127d2cb4b4cc1d357e102f7548a98cf2e6c055ecd1d9a3248164b94e SHA512 9aabae2bdcccdf6873780947c41a3230b80a3a5e93c9797cdfe278ba971e2b43320edab31349403a7fb14416c92216395d76af2415c33fb28f041ab867f2d716
+DIST cyclone-0.36.0.tar.gz 3967729 BLAKE2B e546023734adfd277699b686d984cd55b4b0053795fbb6fbe90e7e5db65b795ed7a758c8b7b4f6b67ad2e5f7a89bbc87f77e384863f2c4cecd2f4bc860559e52 SHA512 477534602baa4acbae0450e664617ad70302a79c552005741080c4e4d2993805ff1d25703bd2c43c82764a477a4b26fb4b88c8787a82e99fa5a6fc88d9f914f2
diff --git a/dev-scheme/cyclone/cyclone-0.35.0.ebuild b/dev-scheme/cyclone/cyclone-0.35.0.ebuild
new file mode 100644
index 000000000000..23bf9fb347ee
--- /dev/null
+++ b/dev-scheme/cyclone/cyclone-0.35.0.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Cyclone is a self-hosting Scheme to C compiler
+# cyclone-bootstrap is the Cyclone source transpiled by it to C.
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="R7RS Scheme to C compiler"
+HOMEPAGE="http://justinethier.github.io/cyclone/"
+
+if [[ ${PV} == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/justinethier/${PN}-bootstrap.git"
+else
+ SRC_URI="https://github.com/justinethier/${PN}-bootstrap/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+ S="${WORKDIR}"/${PN}-bootstrap-${PV}
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="dev-libs/concurrencykit"
+DEPEND="${RDEPEND}"
+
+src_configure() {
+ export CYC_GCC_OPT_FLAGS="${CFLAGS}"
+ append-cflags -fPIC -Iinclude
+ append-ldflags -L.
+ tc-export AR CC RANLIB
+}
+
+src_compile() {
+ local myopts=(
+ PREFIX="/usr"
+ CYC_GCC_OPT_FLAGS="${CYC_GCC_OPT_FLAGS}"
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ RANLIB="$(tc-getRANLIB)"
+ )
+ emake "${myopts[@]}"
+}
+
+src_test() {
+ emake LDFLAGS="" test
+}
+
+src_install() {
+ emake PREFIX="/usr" DESTDIR="${D}" install
+ einstalldocs
+}
diff --git a/dev-scheme/cyclone/cyclone-0.36.0.ebuild b/dev-scheme/cyclone/cyclone-0.36.0.ebuild
new file mode 100644
index 000000000000..c709f1965f91
--- /dev/null
+++ b/dev-scheme/cyclone/cyclone-0.36.0.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Cyclone is a self-hosting Scheme to C compiler
+# cyclone-bootstrap is the Cyclone source transpiled by it to C.
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="R7RS Scheme to C compiler"
+HOMEPAGE="http://justinethier.github.io/cyclone/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/justinethier/${PN}-bootstrap.git"
+else
+ SRC_URI="https://github.com/justinethier/${PN}-bootstrap/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-bootstrap-${PV}"
+
+ KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="
+ dev-libs/concurrencykit
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_configure() {
+ export CYC_GCC_OPT_FLAGS="${CFLAGS}"
+
+ append-cflags -fPIC -Iinclude
+ append-ldflags -L.
+ tc-export AR CC RANLIB
+}
+
+src_compile() {
+ local -a myopts=(
+ PREFIX="/usr"
+ CYC_GCC_OPT_FLAGS="${CYC_GCC_OPT_FLAGS}"
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ RANLIB="$(tc-getRANLIB)"
+ )
+ emake "${myopts[@]}"
+}
+
+src_test() {
+ emake LDFLAGS="" test
+}
+
+src_install() {
+ emake PREFIX="/usr" DESTDIR="${D}" install
+ einstalldocs
+}
diff --git a/dev-scheme/cyclone/cyclone-9999.ebuild b/dev-scheme/cyclone/cyclone-9999.ebuild
new file mode 100644
index 000000000000..c709f1965f91
--- /dev/null
+++ b/dev-scheme/cyclone/cyclone-9999.ebuild
@@ -0,0 +1,62 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Cyclone is a self-hosting Scheme to C compiler
+# cyclone-bootstrap is the Cyclone source transpiled by it to C.
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="R7RS Scheme to C compiler"
+HOMEPAGE="http://justinethier.github.io/cyclone/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/justinethier/${PN}-bootstrap.git"
+else
+ SRC_URI="https://github.com/justinethier/${PN}-bootstrap/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}-bootstrap-${PV}"
+
+ KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="
+ dev-libs/concurrencykit
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+src_configure() {
+ export CYC_GCC_OPT_FLAGS="${CFLAGS}"
+
+ append-cflags -fPIC -Iinclude
+ append-ldflags -L.
+ tc-export AR CC RANLIB
+}
+
+src_compile() {
+ local -a myopts=(
+ PREFIX="/usr"
+ CYC_GCC_OPT_FLAGS="${CYC_GCC_OPT_FLAGS}"
+ AR="$(tc-getAR)"
+ CC="$(tc-getCC)"
+ RANLIB="$(tc-getRANLIB)"
+ )
+ emake "${myopts[@]}"
+}
+
+src_test() {
+ emake LDFLAGS="" test
+}
+
+src_install() {
+ emake PREFIX="/usr" DESTDIR="${D}" install
+ einstalldocs
+}
diff --git a/dev-scheme/cyclone/metadata.xml b/dev-scheme/cyclone/metadata.xml
new file mode 100644
index 000000000000..c85d72e2ef83
--- /dev/null
+++ b/dev-scheme/cyclone/metadata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Cyclone Scheme is a brand-new compiler that allows real-world
+ application development using the R7RS Scheme Language standard.
+ We provide modern features and a stable system capable of generating
+ fast native binaries.
+ Cheney on the MTA is used by Cyclone's runtime to implement full tail
+ recursion, continuations, and generational garbage collection.
+ In addition, the Cheney on the MTA concept has been extended to allow
+ execution of multiple native threads. An on-the-fly garbage collector
+ is used to manage the second-generation heap and perform major
+ collections without "stopping the world".
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/justinethier/cyclone/issues</bugs-to>
+ <remote-id type="github">justinethier/cyclone-bootstrap</remote-id>
+ <remote-id type="github">justinethier/cyclone</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/elk/Manifest b/dev-scheme/elk/Manifest
new file mode 100644
index 000000000000..ed04a8553ef8
--- /dev/null
+++ b/dev-scheme/elk/Manifest
@@ -0,0 +1 @@
+DIST elk-3.99.8.tar.bz2 701206 BLAKE2B 93105702c2d8796fe0d1f7f4c1d0f4b128f01755d6f4366840978ed2224a2a3c27d261dc0cb6a3f8d0e199e9ba9c2ff1a5a61dbc5d593b122b40585c0fe631d8 SHA512 dd966bf6063b4e04c0947e56381cc9456ea81cf4ec66d04e80cb79485d39414f0b713520278a62fa4630068f245f33b28b08b5fd4a7defd0bcb20bf2eba4ed49
diff --git a/dev-scheme/elk/elk-3.99.8-r2.ebuild b/dev-scheme/elk/elk-3.99.8-r2.ebuild
new file mode 100644
index 000000000000..218b1be74615
--- /dev/null
+++ b/dev-scheme/elk/elk-3.99.8-r2.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Scheme implementation designed to be embeddable extension to C/C++ applications"
+HOMEPAGE="http://sam.zoy.org/elk/"
+SRC_URI="http://sam.zoy.org/elk/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-implicit-int-incompat-ptr.patch
+ "${FILESDIR}"/${P}-implicit-function.patch
+ "${FILESDIR}"/${P}-c99-build-fix.patch
+)
+
+src_configure() {
+ econf --disable-static
+}
+
+src_compile() {
+ # parallel build is broken
+ emake -j1
+}
+
+# tests are run automatically during make and fail with default src_test
+src_test() {
+ echo "Tests already run during compile"
+}
+
+src_install() {
+ # parallel install is broken
+ emake -j1 DESTDIR="${D}" \
+ docsdir="${EPREFIX}"/usr/share/doc/${PF} \
+ examplesdir="${EPREFIX}"/usr/share/doc/${PF}/examples \
+ install
+ einstalldocs
+ docompress -x /usr/share/doc/${PF}
+
+ # no static archives
+ find "${D}" -name '*.la' -delete || die
+}
diff --git a/dev-scheme/elk/elk-3.99.8-r3.ebuild b/dev-scheme/elk/elk-3.99.8-r3.ebuild
new file mode 100644
index 000000000000..49bf62511993
--- /dev/null
+++ b/dev-scheme/elk/elk-3.99.8-r3.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic toolchain-funcs
+
+DESCRIPTION="Scheme implementation designed to be embeddable extension to C/C++ applications"
+HOMEPAGE="http://sam.zoy.org/elk/"
+SRC_URI="http://sam.zoy.org/elk/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-implicit-int-incompat-ptr.patch
+ "${FILESDIR}"/${P}-implicit-function.patch
+ "${FILESDIR}"/${P}-c99-build-fix.patch
+ "${FILESDIR}"/${P}-makefile-ordering.patch
+ "${FILESDIR}"/${P}-fpurge.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ #uses functional polymorphism, can't be ported to C23
+ append-cflags -std=gnu17
+
+ econf --disable-static
+}
+
+src_test() {
+ # gc test is noted flakey and always fails when build with clang
+ if tc-is-gcc; then
+ emake check
+ fi
+}
+
+src_install() {
+ # parallel install is broken
+ emake -j1 DESTDIR="${D}" \
+ docsdir="${EPREFIX}"/usr/share/doc/${PF} \
+ examplesdir="${EPREFIX}"/usr/share/doc/${PF}/examples \
+ install
+ einstalldocs
+ docompress -x /usr/share/doc/${PF}
+
+ # no static archives
+ find "${D}" -name '*.la' -delete || die
+}
diff --git a/dev-scheme/elk/files/elk-3.99.8-c99-build-fix.patch b/dev-scheme/elk/files/elk-3.99.8-c99-build-fix.patch
new file mode 100644
index 000000000000..d29ef92d911f
--- /dev/null
+++ b/dev-scheme/elk/files/elk-3.99.8-c99-build-fix.patch
@@ -0,0 +1,33 @@
+https://bugs.gentoo.org/928675
+--- a/lib/xwidgets/xaw/list.c
++++ b/lib/xwidgets/xaw/list.c
+@@ -2,15 +2,15 @@
+ #include <X11/Xaw/List.h>
+
+
+-static const char **Get_List (Object x) {
++static char **Get_List (Object x) {
+ register int i, n;
+ register char *s;
+- register const char **l;
++ register char **l;
+ Alloca_Begin;
+
+ Check_List (x);
+ n = Fast_Length (x);
+- l = (const char **)XtMalloc ((n+1) * sizeof (char *));
++ l = (char **)XtMalloc ((n+1) * sizeof (char *));
+ for (i = 0; i < n; i++, x = Cdr (x)) {
+ Get_Strsym_Stack (Car (x), s);
+ l[i] = XtNewString (s);
+--- a/include/extern.h
++++ b/include/extern.h
+@@ -442,7 +442,7 @@ extern Object P_String_Fill (Object, Object);
+ extern Object P_Substringp (Object, Object);
+ extern Object P_CI_Substringp (Object, Object);
+ extern int String_Getc (Object);
+-extern void String_Ungetc (Object, register int);
++extern void String_Ungetc (Object, int);
+
+ /* Symbols, variables, frequently used Scheme objects
+ */
diff --git a/dev-scheme/elk/files/elk-3.99.8-fpurge.patch b/dev-scheme/elk/files/elk-3.99.8-fpurge.patch
new file mode 100644
index 000000000000..d621a23d2f42
--- /dev/null
+++ b/dev-scheme/elk/files/elk-3.99.8-fpurge.patch
@@ -0,0 +1,36 @@
+Inspired by https://github.com/gentoo/gentoo/commit/cd306dc1d9273c423759a74166f9805ac8e8b5dd
+Fix fpurge on musl
+https://bugs.gentoo.org/936285
+--- a/configure.ac
++++ b/configure.ac
+@@ -316,7 +316,7 @@
+ # tiocflush use TIOCFLUSH ioctl from <sys/ioctl.h>
+ # tcflsh use TCFLSH ioctl from <termio.h>
+ # Leave the variable(s) empty if flushing is not supported.
+-AC_CHECK_FUNCS(fpurge)
++AC_CHECK_DECLS(fpurge)
+
+ AC_CACHE_CHECK([for BSD-style flushing],
+ [ac_cv_have_bsd_flush],
+--- a/src/print.c
++++ b/src/print.c
+@@ -205,7 +205,7 @@
+ if (PORT(port)->flags & P_STRING)
+ return;
+ f = PORT(port)->file;
+-#if defined(HAVE_FPURGE)
++#if HAVE_DELC_FPURGE
+ (void)fpurge (f);
+ #elif defined(HAVE_BSD_FLUSH)
+ f->_cnt = 0;
+--- a/src/read.c
++++ b/src/read.c
+@@ -144,7 +144,7 @@
+ if (PORT(port)->flags & P_STRING)
+ return;
+ f = PORT(port)->file;
+-#if defined(HAVE_FPURGE)
++#if HAVE_DECL_FPURGE
+ (void)fpurge (f);
+ #elif defined(HAVE_BSD_FLUSH)
+ f->_cnt = 0;
diff --git a/dev-scheme/elk/files/elk-3.99.8-implicit-function.patch b/dev-scheme/elk/files/elk-3.99.8-implicit-function.patch
new file mode 100644
index 000000000000..d08ab77be12f
--- /dev/null
+++ b/dev-scheme/elk/files/elk-3.99.8-implicit-function.patch
@@ -0,0 +1,22 @@
+From 4fef651e27a4ea5bca02edfda4dc42201ab0985d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Van=C4=9Bk?= <arkamar@gentoo.org>
+Date: Sat, 23 Dec 2023 23:30:30 +0100
+Subject: [PATCH] add missing header file
+
+This fixes implicit-function-declaration error with modern compilers.
+
+diff --git a/src/proc.c b/src/proc.c
+index c78134a..fed0978 100644
+--- a/src/proc.c
++++ b/src/proc.c
+@@ -28,6 +28,7 @@
+ *
+ * THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+ */
++#include <string.h>
+
+ #include "config.h"
+
+--
+2.43.0
+
diff --git a/dev-scheme/elk/files/elk-3.99.8-implicit-int-incompat-ptr.patch b/dev-scheme/elk/files/elk-3.99.8-implicit-int-incompat-ptr.patch
new file mode 100644
index 000000000000..24e91d0a5651
--- /dev/null
+++ b/dev-scheme/elk/files/elk-3.99.8-implicit-int-incompat-ptr.patch
@@ -0,0 +1,52 @@
+--- a/lib/misc/gdbm.c 2011-06-18 07:24:06.000000000 -0300
++++ b/lib/misc/gdbm.c 2023-04-22 14:28:35.200400436 -0300
+@@ -103,7 +103,7 @@
+
+ extern gdbm_error gdbm_errno;
+ extern int errno;
+-static char *gdbm_error_message = "";
++static const char *gdbm_error_message = "";
+
+ static SYMDESCR RW_Syms[] = {
+ { "reader", GDBM_READER },
+@@ -144,7 +144,7 @@
+ return TYPE(x) == T_Gdbm_fh ? True : False;
+ }
+
+-static void Fatal_Func (char *s) {
++static void Fatal_Func (const char *s) {
+ gdbm_error_message = s;
+ fprintf (stderr, "gdbm error: %s\n", s);
+ }
+--- a/src/heap-gen.c 2011-06-18 07:24:06.000000000 -0300
++++ b/src/heap-gen.c 2023-04-22 14:14:51.977052826 -0300
+@@ -872,7 +872,7 @@
+ * determines whether the object is immutable.
+ */
+
+-Object Alloc_Object (size, type, konst) {
++Object Alloc_Object (int size, int type, int konst) {
+ Object obj;
+ register addrarith_t s = /* size in words */
+ ((size + sizeof(Object) - 1) / sizeof(Object)) + 1;
+--- a/lib/xwidgets/xaw/list.c 2011-06-18 07:41:13.000000000 -0300
++++ b/lib/xwidgets/xaw/list.c 2023-04-22 14:32:58.923738362 -0300
+@@ -2,14 +2,15 @@
+ #include <X11/Xaw/List.h>
+
+
+-static char **Get_List (Object x) {
++static const char **Get_List (Object x) {
+ register int i, n;
+- register char *s, **l;
++ register char *s;
++ register const char **l;
+ Alloca_Begin;
+
+ Check_List (x);
+ n = Fast_Length (x);
+- l = (char **)XtMalloc ((n+1) * sizeof (char *));
++ l = (const char **)XtMalloc ((n+1) * sizeof (char *));
+ for (i = 0; i < n; i++, x = Cdr (x)) {
+ Get_Strsym_Stack (Car (x), s);
+ l[i] = XtNewString (s);
diff --git a/dev-scheme/elk/files/elk-3.99.8-makefile-ordering.patch b/dev-scheme/elk/files/elk-3.99.8-makefile-ordering.patch
new file mode 100644
index 000000000000..95fa97fb023a
--- /dev/null
+++ b/dev-scheme/elk/files/elk-3.99.8-makefile-ordering.patch
@@ -0,0 +1,23 @@
+Fix ordering problems, allow parallel build.
+https://bugs.gentoo.org/880349
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,6 @@
+ NULL =
+
+-SUBDIRS = include src lib scm doc examples test
++SUBDIRS = . include src lib scm doc examples test
+ DIST_SUBDIRS = $(SUBDIRS)
+
+ EXTRA_DIST = \
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -66,7 +66,7 @@
+ $(NULL)
+
+ bin_PROGRAMS = elk
+-elk_LDADD = $(top_builddir)/src/libelk.la
++elk_LDADD = libelk.la
+ elk_SOURCES = main.c
+
+ install-exec-hook:
diff --git a/dev-scheme/elk/metadata.xml b/dev-scheme/elk/metadata.xml
new file mode 100644
index 000000000000..171bf7543ed3
--- /dev/null
+++ b/dev-scheme/elk/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+Elk is an implementation of the Scheme programming language. In contrast to existing, stand-alone Scheme systems Elk has been designed specifically as an embeddable, reusable extension language subsystem for applications written in C or C++.
+ </longdescription>
+</pkgmetadata>
diff --git a/dev-scheme/escm/Manifest b/dev-scheme/escm/Manifest
new file mode 100644
index 000000000000..3e092238a832
--- /dev/null
+++ b/dev-scheme/escm/Manifest
@@ -0,0 +1 @@
+DIST escm-1.1.tar.gz 22344 BLAKE2B 4b1ee5a2e002cf0908c1cba58d39dc454cfcedcb11ff7f24344824947103d7670108263d210e020b7d0189f3745a002bb4345d8b50a9f334d89850baa30c9ae9 SHA512 7df97d8b9e7c4b46b412e3dd24a2b0b3f4028d45b1940d12b09f0801c93ab1868ef5c239d8f1bfb18d5c86f473aa543d9b735eb1f05b4bb3e4b17177d2ed9102
diff --git a/dev-scheme/escm/escm-1.1-r1.ebuild b/dev-scheme/escm/escm-1.1-r1.ebuild
new file mode 100644
index 000000000000..409ac72ae7bf
--- /dev/null
+++ b/dev-scheme/escm/escm-1.1-r1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="escm - Embedded Scheme Processor"
+HOMEPAGE="https://practical-scheme.net/vault/escm.html"
+SRC_URI="https://practical-scheme.net/vault/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+RDEPEND="|| (
+ dev-scheme/gauche
+ dev-scheme/guile
+ )"
+S="${WORKDIR}/${PN}"
+
+PATCHES=( "${FILESDIR}"/${PN}-headers.patch )
+HTML_DOCS=( ${PN}.html )
+
+src_prepare() {
+ sed -i "6s/scm, snow/scm gosh, gosh/" configure.in
+
+ default
+ mv configure.{in,ac} || die
+ eautoconf
+ tc-export CC
+}
+
+src_install() {
+ dobin ${PN}
+ doman ${PN}.1
+ einstalldocs
+}
diff --git a/dev-scheme/escm/files/escm-headers.patch b/dev-scheme/escm/files/escm-headers.patch
new file mode 100644
index 000000000000..bf23008f801f
--- /dev/null
+++ b/dev-scheme/escm/files/escm-headers.patch
@@ -0,0 +1,10 @@
+--- a/escm.c
++++ b/escm.c
+@@ -28,6 +28,7 @@
+
+ #include <sys/types.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <unistd.h>
+ #include <stdarg.h>
+ #include <errno.h>
diff --git a/dev-scheme/escm/metadata.xml b/dev-scheme/escm/metadata.xml
new file mode 100644
index 000000000000..987ce1bc2ed6
--- /dev/null
+++ b/dev-scheme/escm/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+</pkgmetadata>
diff --git a/dev-scheme/fibers/Manifest b/dev-scheme/fibers/Manifest
new file mode 100644
index 000000000000..92ff7d3ebc3a
--- /dev/null
+++ b/dev-scheme/fibers/Manifest
@@ -0,0 +1 @@
+DIST fibers-1.2.0_p20230522.tar.gz 108368 BLAKE2B 4d7b773d29b235c94a86b55e17d8cbf1544024e803a00681f46221483f9112da954befb612ba2ceaa185ec6992b049a9fb144f32331ab7699436d8e107de8b10 SHA512 1ea2a6a56bbae88244a3f606cef24087949b18aa931af4d98ee1212665a93cb107cc9f8a1d250b45954f76979002656eac002105e6b3b82c0422ddb9006602d9
diff --git a/dev-scheme/fibers/fibers-1.2.0_p20230522-r100.ebuild b/dev-scheme/fibers/fibers-1.2.0_p20230522-r100.ebuild
new file mode 100644
index 000000000000..c27f6e424d58
--- /dev/null
+++ b/dev-scheme/fibers/fibers-1.2.0_p20230522-r100.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+[[ ${PV} == *_p20230522 ]] && COMMIT=83712f630a976e3084329c9917c40bde19fcc7e5
+
+DESCRIPTION="Lightweight concurrency facility for Guile Scheme"
+HOMEPAGE="https://github.com/wingo/fibers/
+ https://github.com/wingo/fibers/wiki/Manual/"
+SRC_URI="https://github.com/wingo/${PN}/archive/${COMMIT}.tar.gz
+ -> ${P}.tar.gz"
+S="${WORKDIR}"/${PN}-${COMMIT}
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_configure() {
+ guile_foreach_impl econf --disable-Werror
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/fibers/metadata.xml b/dev-scheme/fibers/metadata.xml
new file mode 100644
index 000000000000..c95b5f88b1d8
--- /dev/null
+++ b/dev-scheme/fibers/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Fibers is a Guile library that implements a a lightweight concurrency
+ facility, inspired by systems like Concurrent ML, Go, and Erlang. A fiber
+ is like a "goroutine" from the Go language: a lightweight thread-like
+ abstraction. Systems built with Fibers can scale up to millions of
+ concurrent fibers, tens of thousands of concurrent socket connections, and
+ many parallel cores. The Fibers library also provides Concurrent ML-like
+ channels for communication between fibers.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://gitlab.com/wingo/fibers/-/issues/</bugs-to>
+ <remote-id type="github">wingo/fibers</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gambit/Manifest b/dev-scheme/gambit/Manifest
new file mode 100644
index 000000000000..fcddabbd0329
--- /dev/null
+++ b/dev-scheme/gambit/Manifest
@@ -0,0 +1,2 @@
+DIST v4.9.6.tar.gz 16247420 BLAKE2B 7c328da57cd81304964a400895957d8c21cca546ad13bd4c03a13184fd8161199c91457211336643955413e4e1998a994c8ca406eb68f763f2d2e9c228691247 SHA512 25ec73aff81d71edfad16c7cf686b4eeb9e91b3f02dd24abd9772137a9f5d161e44477c95a2969b700e9694c4e5c859f4e866159e0c4d28484c1d6e377ddacf3
+DIST v4.9.7.tar.gz 16211736 BLAKE2B 81c7848dc07bae8b23c97942c581f75abbc40070e7e60453f7d303c4310d93177d03effd2ea68176aab3b75a66489d2a3d3a9f682a44f90b62fb9e8558e9e7b1 SHA512 b15a804a57f57e30ac4f46c19ad203a4c1312ffafb04322f6455e64f3266a4086851b26434e0cfdd0e527a94f013eda019d438fefa5e6e846794ec52bc80320e
diff --git a/dev-scheme/gambit/files/50gambit-gentoo.el b/dev-scheme/gambit/files/50gambit-gentoo.el
new file mode 100644
index 000000000000..2e8e196ba04d
--- /dev/null
+++ b/dev-scheme/gambit/files/50gambit-gentoo.el
@@ -0,0 +1,10 @@
+
+;;; gambit site-lisp configuration
+
+(add-to-list 'load-path "@SITELISP@")
+(autoload 'gambit-inferior-mode "gambit" "Hook Gambit mode into cmuscheme.")
+(autoload 'gambit-mode "gambit" "Hook Gambit mode into scheme.")
+
+;; (add-hook 'inferior-scheme-mode-hook (function gambit-inferior-mode))
+;; (add-hook 'scheme-mode-hook (function gambit-mode))
+;; (setq scheme-program-name "gsi -:t")
diff --git a/dev-scheme/gambit/gambit-4.9.6.ebuild b/dev-scheme/gambit/gambit-4.9.6.ebuild
new file mode 100644
index 000000000000..b8933a0b79f3
--- /dev/null
+++ b/dev-scheme/gambit/gambit-4.9.6.ebuild
@@ -0,0 +1,73 @@
+# Copyright 2022-2025 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit elisp-common
+
+# MY_PV="${PV//./_}"
+# MY_P="${PN}-v${MY_PV}"
+
+DESCRIPTION="Gambit-C is a native Scheme to C compiler and interpreter"
+HOMEPAGE="https://gambitscheme.org/"
+SRC_URI="https://github.com/gambit/gambit/archive/refs/tags/v${PV}.tar.gz"
+LICENSE="|| ( Apache-2.0 LGPL-2.1 )"
+SLOT="0"
+KEYWORDS="amd64 ~ppc64 x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="ssl? (
+ dev-libs/openssl:0=
+
+ )"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ app-text/ghostscript-gpl
+ emacs? ( >=app-editors/emacs-23.1:* )
+"
+
+SITEFILE="50gambit-gentoo.el"
+
+IUSE="emacs ssl static"
+
+# S=${WORKDIR}/${PN}-${PV}
+
+src_configure() {
+ econf \
+ $(use_enable !static shared) \
+ $(use_enable ssl openssl) \
+ --enable-gnu-gcc-specific-options \
+ --enable-gnu-gcc-no-strict-aliasing \
+ --enable-single-host \
+ --disable-absolute-shared-libs \
+ --enable-type-checking
+}
+
+src_compile() {
+ emake bootstrap
+
+ if use emacs; then
+ elisp-compile misc/*.el || die
+ fi
+}
+
+src_test() {
+ cd tests || die
+ emake test{1..10}
+}
+
+src_install() {
+ emake DESTDIR="${D}" install -j1
+ dodoc doc/gambit.{pdf,ps,txt}
+ einstalldocs
+
+ keepdir /usr/share/${PN}
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+}
diff --git a/dev-scheme/gambit/gambit-4.9.7.ebuild b/dev-scheme/gambit/gambit-4.9.7.ebuild
new file mode 100644
index 000000000000..b8933a0b79f3
--- /dev/null
+++ b/dev-scheme/gambit/gambit-4.9.7.ebuild
@@ -0,0 +1,73 @@
+# Copyright 2022-2025 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit elisp-common
+
+# MY_PV="${PV//./_}"
+# MY_P="${PN}-v${MY_PV}"
+
+DESCRIPTION="Gambit-C is a native Scheme to C compiler and interpreter"
+HOMEPAGE="https://gambitscheme.org/"
+SRC_URI="https://github.com/gambit/gambit/archive/refs/tags/v${PV}.tar.gz"
+LICENSE="|| ( Apache-2.0 LGPL-2.1 )"
+SLOT="0"
+KEYWORDS="amd64 ~ppc64 x86 ~amd64-linux ~x86-linux"
+
+RDEPEND="ssl? (
+ dev-libs/openssl:0=
+
+ )"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ app-text/ghostscript-gpl
+ emacs? ( >=app-editors/emacs-23.1:* )
+"
+
+SITEFILE="50gambit-gentoo.el"
+
+IUSE="emacs ssl static"
+
+# S=${WORKDIR}/${PN}-${PV}
+
+src_configure() {
+ econf \
+ $(use_enable !static shared) \
+ $(use_enable ssl openssl) \
+ --enable-gnu-gcc-specific-options \
+ --enable-gnu-gcc-no-strict-aliasing \
+ --enable-single-host \
+ --disable-absolute-shared-libs \
+ --enable-type-checking
+}
+
+src_compile() {
+ emake bootstrap
+
+ if use emacs; then
+ elisp-compile misc/*.el || die
+ fi
+}
+
+src_test() {
+ cd tests || die
+ emake test{1..10}
+}
+
+src_install() {
+ emake DESTDIR="${D}" install -j1
+ dodoc doc/gambit.{pdf,ps,txt}
+ einstalldocs
+
+ keepdir /usr/share/${PN}
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+}
diff --git a/dev-scheme/gambit/metadata.xml b/dev-scheme/gambit/metadata.xml
new file mode 100644
index 000000000000..4d7b59589539
--- /dev/null
+++ b/dev-scheme/gambit/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>dev@liguros.net</email>
+ <name>Development</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+
+ <origin>ports</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/dev-scheme/gauche-cdb/Manifest b/dev-scheme/gauche-cdb/Manifest
new file mode 100644
index 000000000000..298f76195412
--- /dev/null
+++ b/dev-scheme/gauche-cdb/Manifest
@@ -0,0 +1 @@
+DIST Gauche-cdb-0.3.1.tar.gz 72048 BLAKE2B f4363ec9893e3f365c34965414620b46c08edcfdf5ed95a5934aeedd3af6e58f1cdedb7c4df90e95fa5a93ce3f95aeeb08fca0f3a440990d3383cd72bef8aa87 SHA512 c02629de9e96c561da0a928e2817056da27951a5ad988b7d105cc24aedd6d103001bf9dd4ae28c1729d701850d937a3134361c2ad83a4e1e51d565a95e8f1a68
diff --git a/dev-scheme/gauche-cdb/files/gauche-cdb-gauche-package.patch b/dev-scheme/gauche-cdb/files/gauche-cdb-gauche-package.patch
new file mode 100644
index 000000000000..2f09f6c64c73
--- /dev/null
+++ b/dev-scheme/gauche-cdb/files/gauche-cdb-gauche-package.patch
@@ -0,0 +1,133 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -10,76 +10,57 @@
+ VPATH = $(srcdir)
+
+ # These may be overridden by make invocators
+-DESTDIR =
+-OPTFLAGS = @OPTFLAGS@
+-CC = @CC@
+-LIBS = @LIBS@
+-CFLAGS = @CFLAGS@
+-CPPFLAGS = @CPPFLAGS@ # AC_LIB_LINKFLAGS adds to this..
+-LDFLAGS = @LDFLAGS@
+-INSTALL = @INSTALL@
+-INSTALL_TYPE = @INSTALL_TYPE@
+-
+-# Set by configure
+-GOSH = @GOSH@
+-GAUCHE_CONFIG = @GAUCHE_CONFIG@
++DESTDIR =
++CFLAGS = @CFLAGS@
++CPPFLAGS = @CPPFLAGS@ # AC_LIB_LINKFLAGS adds to this..
++LDFLAGS = @LDFLAGS@
++GOSH = "@GOSH@"
++GAUCHE_CONFIG = "@GAUCHE_CONFIG@"
++GAUCHE_PACKAGE = "@GAUCHE_PACKAGE@"
++INSTALL = "@GAUCHE_INSTALL@"
++
++# Other parameters
++SOEXT = @SOEXT@
+ OBJEXT = @OBJEXT@
+-DSOEXT = @SOEXT@
++EXEEXT = @EXEEXT@
+
+-MODULE = cdb
++# Module-specific stuff
++PACKAGE = cdb
+
+-ARCHFILES = $(MODULE).$(DSOEXT)
+-SCMFILES = $(MODULE).scm
++ARCHFILES = $(PACKAGE).$(SOEXT)
++SCMFILES = $(PACKAGE).scm
+ HEADERS =
+
+ TARGET = $(ARCHFILES)
+-OBJS = $(MODULE)_head.$(OBJEXT) \
+- cdb.$(OBJEXT) \
+- $(MODULE)_tail.$(OBJEXT)
+-GENERATED = cdb.c $(MODULE)_head.c $(MODULE)_tail.c
++GENERATED =
+ CONFIG_GENERATED = Makefile config.cache config.log config.status \
+- configure.lineno autom4te*.cache
+-
+-HEADER_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)incdir`
+-SCM_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)libdir`/dbm
+-ARCH_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)archdir`
+-
+-all : $(TARGET)
+-
+-.SUFFIXES: .o .stub
++ configure.lineno autom4te*.cache @PACKAGE_NAME@.gpd
+
+-.c.o:
+- $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
++HEADER_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --siteincdir`"
++SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`"
++ARCH_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitearchdir`"
+
+-.stub.c:
+- $(GOSH) genstub $<
++cdb_SRCS = cdb.stub
++cdb_LIBS = @LIBCDB@
+
+-$(MODULE).$(DSOEXT): $(OBJS)
+- $(CC) -Wl,-rpath -Wl,`gauche-config --sysarchdir` $(LDFLAGS) $(MODULE).$(DSOEXT) $(OBJS) $(LIBS) @LIBCDB@
++all : $(TARGET)
+
+-$(MODULE)_head.c $(MODULE)_tail.c :
+- $(GAUCHE_CONFIG) --fixup-extension $(MODULE)
++$(PACKAGE).$(SOEXT): $(cdb_SRCS)
++ $(GAUCHE_PACKAGE) compile --verbose --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(cdb_LIBS)" $(PACKAGE) $(cdb_SRCS)
+
+ check : all
+ @rm -f test.log
+ $(GOSH) -I. test.scm > test.log
+
+ install : all
+- if test ! -z "$(HEADERS)"; then \
+- $(INSTALL) -d $(HEADER_INSTALL_DIR); \
+- $(INSTALL) -m 444 $(HEADERS) $(HEADER_INSTALL_DIR); \
+- fi
+- if test ! -z "$(SCMFILES)"; then \
+- $(INSTALL) -d $(SCM_INSTALL_DIR); \
+- $(INSTALL) -m 444 $(SCMFILES) $(SCM_INSTALL_DIR); \
+- fi
+- if test ! -z "$(ARCHFILES)"; then \
+- $(INSTALL) -d $(ARCH_INSTALL_DIR); \
+- $(INSTALL) -m 555 $(ARCHFILES) $(ARCH_INSTALL_DIR); \
+- fi
++ $(INSTALL) -m 444 -T $(HEADER_INSTALL_DIR) $(HEADERS)
++ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/dbm $(SCMFILES)
++ $(INSTALL) -m 555 -T $(ARCH_INSTALL_DIR) $(ARCHFILES)
++ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/.packages @PACKAGE_NAME@.gpd
+
+ clean :
+- rm -rf core $(TARGET) $(OBJS) $(GENERATED) *~ test.log so_locations
++ $(GAUCHE_PACKAGE) compile --clean $(PACKAGE) $(cdb_SRCS)
++ rm -rf core $(TARGET) $(GENERATED) *~ test.log so_locations
+
+ distclean : clean
+ rm -rf $(CONFIG_GENERATED)
+--- a/configure.ac
++++ b/configure.ac
+@@ -4,18 +4,11 @@
+ AC_INIT(Gauche-cdb, 0.3.1)
+ AC_CONFIG_SRCDIR(cdb.stub)
+
+-AC_CANONICAL_SYSTEM
+-
+ AC_GAUCHE_INIT_EXT
+-AC_GAUCHE_INSTALL_TYPE(site)
+ AC_GAUCHE_CC
+-AC_GAUCHE_FLAGS
+-
+-AC_PROG_INSTALL
+
+ AC_LIB_LINKFLAGS(cdb)
+
+-AC_GAUCHE_FIX_LIBS
+-
++AC_GAUCHE_MAKE_GPD
+ echo $PACKAGE_VERSION > VERSION
+ AC_OUTPUT(Makefile)
diff --git a/dev-scheme/gauche-cdb/files/gauche-cdb-undefined-reference.patch b/dev-scheme/gauche-cdb/files/gauche-cdb-undefined-reference.patch
new file mode 100644
index 000000000000..6b6619dc26ed
--- /dev/null
+++ b/dev-scheme/gauche-cdb/files/gauche-cdb-undefined-reference.patch
@@ -0,0 +1,22 @@
+--- a/cdb.scm
++++ b/cdb.scm
+@@ -60,7 +60,7 @@
+ (unless (slot-bound? self 'path)
+ (error "path must be set to open cdb database"))
+ (when (cdb-file-of self)
+- (errorf "cdb ~S already opened" cdb))
++ (errorf "cdb ~s already opened" (cdb-file-of self)))
+ (let ((path (slot-ref self 'path))
+ (rwmode (slot-ref self 'rw-mode)))
+ (case rwmode
+--- a/cdb.stub
++++ b/cdb.stub
+@@ -69,7 +69,7 @@
+
+ static void cdb_finalize(ScmObj obj, void *data)
+ {
+- ScmCdb *cdb = SCM_CDB(cdb);
++ ScmCdb *cdb = SCM_CDB(obj);
+ switch (cdb->status) {
+ case OPEN_QUERY:
+ cdb_free(&cdb->cdb); close(cdb_fileno(&cdb->cdb));
diff --git a/dev-scheme/gauche-cdb/gauche-cdb-0.3.1-r1.ebuild b/dev-scheme/gauche-cdb/gauche-cdb-0.3.1-r1.ebuild
new file mode 100644
index 000000000000..9c74be376a13
--- /dev/null
+++ b/dev-scheme/gauche-cdb/gauche-cdb-0.3.1-r1.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+MY_P="${P^g}"
+
+DESCRIPTION="CDB binding for Gauche"
+HOMEPAGE="https://osdn.jp/projects/gauche/"
+SRC_URI="mirror://sourceforge.jp/${PN%-*}/8407/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+RDEPEND="dev-db/tinycdb
+ dev-scheme/gauche:="
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-gauche-package.patch
+ "${FILESDIR}"/${PN}-undefined-reference.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
diff --git a/dev-scheme/gauche-cdb/metadata.xml b/dev-scheme/gauche-cdb/metadata.xml
new file mode 100644
index 000000000000..fcca79e4beb0
--- /dev/null
+++ b/dev-scheme/gauche-cdb/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="osdn">gauche</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche-gl/Manifest b/dev-scheme/gauche-gl/Manifest
new file mode 100644
index 000000000000..37ad78029887
--- /dev/null
+++ b/dev-scheme/gauche-gl/Manifest
@@ -0,0 +1 @@
+DIST Gauche-gl-0.6.tgz 1369790 BLAKE2B b077eeee7a2d64908b36e1d279a1131eef40e98104a983e581856320529207682d17e2c9577ff892c873492f4b78631d86a4c642b1e4f8ecd364acb4ee41482e SHA512 60f763ba832048f9932cabd2e8ce8595ba2a1f0b86f1212b1f6919d6b9b8ba33ed1076f119e53059ceac7f6e46a6ead3ba0e23cce81af3097355cd97b3b4b673
diff --git a/dev-scheme/gauche-gl/files/gauche-gl-0.6-cflags.patch b/dev-scheme/gauche-gl/files/gauche-gl-0.6-cflags.patch
new file mode 100644
index 000000000000..c5c12f97f06f
--- /dev/null
+++ b/dev-scheme/gauche-gl/files/gauche-gl-0.6-cflags.patch
@@ -0,0 +1,11 @@
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -17,7 +17,7 @@
+ # These are set by configure
+ # NB: cc and various flags must match the ones used to compile Gauche,
+ # so the make invocator shouldn't casually override them.
+-CFLAGS = @DEFS@ @X_CFLAGS@ @GLUT_INCDIR@ @GLEW_INCDIR@
++CFLAGS = @DEFS@ @CFLAGS@ @X_CFLAGS@ @GLUT_INCDIR@ @GLEW_INCDIR@
+ LDFLAGS = @LDFLAGS@
+ OBJEXT = @OBJEXT@
+ SOEXT = @SOEXT@
diff --git a/dev-scheme/gauche-gl/files/gauche-gl-0.6-cg.patch b/dev-scheme/gauche-gl/files/gauche-gl-0.6-cg.patch
new file mode 100644
index 000000000000..3c2b6014a804
--- /dev/null
+++ b/dev-scheme/gauche-gl/files/gauche-gl-0.6-cg.patch
@@ -0,0 +1,47 @@
+--- a/cg/Makefile.in
++++ b/cg/Makefile.in
+@@ -17,8 +17,8 @@
+ # These are set by configure
+ # NB: cc and various flags must match the ones used to compile Gauche,
+ # so the make invocator shouldn't casually override them.
+-CFLAGS = @DEFS@ @CFLAGS@ @X_CFLAGS@ @GLUT_INCDIR@ -I../src
+-LDFLAGS = -I../src @LDFLAGS@
++CFLAGS = @DEFS@ @CFLAGS@ @X_CFLAGS@ @GLUT_INCDIR@ @CG_CFLAGS@ -I../src
++LDFLAGS = @LDFLAGS@
+ OBJEXT = @OBJEXT@
+ SOEXT = @SOEXT@
+ OLIBS = @LIBS@
+--- a/cg/cg-lib.stub
++++ b/cg/cg-lib.stub
+@@ -430,7 +430,6 @@
+ ;;
+ ;; Cg/cg_profiles.h
+ ;;
+-(define-enum CG_PROFILE_START)
+ (define-enum CG_PROFILE_UNKNOWN)
+
+ (define-enum CG_PROFILE_VS_1_1)
+@@ -443,8 +442,6 @@
+ (define-enum CG_PROFILE_PS_2_0)
+ (define-enum CG_PROFILE_PS_2_X)
+
+-(define-enum CG_PROFILE_MAX)
+-
+ ;;
+ ;; Cg/cg_errors.h
+ ;;
+--- a/configure.ac
++++ b/configure.ac
+@@ -46,10 +46,11 @@
+ AC_HELP_STRING([--enable-cg], [Enable NVidia's Cg binding.]), [
+ AC_DEFINE(HAVE_CG, 1)
+ ENABLE_CG=1
+- CG_LIBS="-lCgGL -lCg"
++ PKG_CHECK_MODULES([CG], [nvidia-cg-toolkit-gl])
+ CG_SCM="cg/gl/cg.scm";
+ ])
+ AC_SUBST(ENABLE_CG)
++AC_SUBST(CG_CFLAGS)
+ AC_SUBST(CG_LIBS)
+ AC_SUBST(CG_SCM)
+
diff --git a/dev-scheme/gauche-gl/files/gauche-gl-0.6-info.patch b/dev-scheme/gauche-gl/files/gauche-gl-0.6-info.patch
new file mode 100644
index 000000000000..663d6c17982c
--- /dev/null
+++ b/dev-scheme/gauche-gl/files/gauche-gl-0.6-info.patch
@@ -0,0 +1,66 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -118,7 +118,6 @@
+
+ # Check for other programs.
+ AC_CHECK_PROGS(MAKEINFO, makeinfo)
+-AC_CHECK_PROGS(GZIP_PROGRAM, gzip)
+
+ # Check for libraries
+
+--- a/doc/Makefile.in
++++ b/doc/Makefile.in
+@@ -12,7 +12,6 @@
+ GAUCHE_CONFIG = "@GAUCHE_CONFIG@"
+ INSTALL = "@GAUCHE_INSTALL@"
+ MAKEINFO = "@MAKEINFO@"
+-GZIP_PROGRAM = "@GZIP_PROGRAM@"
+
+ # Manual page destination.
+ mandir = "$(DESTDIR)`$(GAUCHE_CONFIG) --mandir`"
+@@ -21,7 +20,7 @@
+ all: info
+
+ install: all
+- if test -f gauche-gl-refe.info.gz -o -f gauche-gl-refj.info.gz; then \
++ if test -f gauche-gl-refe.info -o -f gauche-gl-refj.info; then \
+ for info in *.info*; do \
+ $(INSTALL) -m 444 -T $(infodir) $$info; \
+ done; \
+@@ -46,7 +45,7 @@
+
+ pdf : gauche-gl-refe.pdf
+
+-info : gauche-gl-refe.info.gz gauche-gl-refj.info.gz
++info : gauche-gl-refe.info gauche-gl-refj.info
+
+ gauche-gl-refe.html : gauche-gl-refe.texi
+ texi2html -number gauche-gl-refe.texi
+@@ -63,11 +62,9 @@
+ gauche-gl-refe.texi : gauche-gl-ref.texi extract
+ gosh ./extract -en -o gauche-gl-refe.texi gauche-gl-ref.texi
+
+-gauche-gl-refe.info.gz : gauche-gl-refe.texi
+- if test "X$(MAKEINFO)" != X -a "X$(GZIP_PROGRAM)" != X; then \
++gauche-gl-refe.info : gauche-gl-refe.texi
++ if test "X$(MAKEINFO)" != X; then \
+ $(MAKEINFO) --no-warn gauche-gl-refe.texi; \
+- rm -rf gauche-gl-refe.info*.gz; \
+- $(GZIP_PROGRAM) gauche-gl-refe.info; \
+ fi
+
+ gauche-gl-refj.html : gauche-gl-refj.texi
+@@ -85,11 +82,9 @@
+ gauche-gl-refj.texi : gauche-gl-ref.texi extract
+ gosh ./extract -jp -o gauche-gl-refj.texi gauche-gl-ref.texi
+
+-gauche-gl-refj.info.gz : gauche-gl-refj.texi
+- if test "X$(MAKEINFO)" != X -a "X$(GZIP_PROGRAM)" != X; then \
++gauche-gl-refj.info : gauche-gl-refj.texi
++ if test "X$(MAKEINFO)" != X; then \
+ $(MAKEINFO) --no-warn gauche-gl-refj.texi; \
+- rm -rf gauche-gl-refj.info*.gz; \
+- $(GZIP_PROGRAM) gauche-gl-refj.info ; \
+ fi
+
+ clean:
diff --git a/dev-scheme/gauche-gl/files/gauche-gl-0.6-simple.viewer.patch b/dev-scheme/gauche-gl/files/gauche-gl-0.6-simple.viewer.patch
new file mode 100644
index 000000000000..1f5cf8ecacf2
--- /dev/null
+++ b/dev-scheme/gauche-gl/files/gauche-gl-0.6-simple.viewer.patch
@@ -0,0 +1,25 @@
+From 723309ac3e7aa031e2ebd6c9b059d94e42006de3 Mon Sep 17 00:00:00 2001
+From: Shiro Kawai <shiro@acm.org>
+Date: Sat, 9 Aug 2014 22:19:04 -1000
+Subject: [PATCH] Fix incorrect macro definition
+
+---
+ lib/gl/simple/viewer.scm | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lib/gl/simple/viewer.scm b/lib/gl/simple/viewer.scm
+index 857b8d7..9a464ce 100644
+--- a/lib/gl/simple/viewer.scm
++++ b/lib/gl/simple/viewer.scm
+@@ -381,7 +381,7 @@
+ (match opts
+ [() (set! default3-var proc)]
+ [(':perspective) (set! default3-var proc)]
+- [(':orthographic) (set! default3-var proc)]
++ [(':orthographic) (set! default2-var proc)]
+ [(name)
+ (cond [(name->window name) => (^[win] (ref win'closure) 'key proc)]
+ [else
+--
+2.0.3
+
diff --git a/dev-scheme/gauche-gl/gauche-gl-0.6-r1.ebuild b/dev-scheme/gauche-gl/gauche-gl-0.6-r1.ebuild
new file mode 100644
index 000000000000..9fe0846a7415
--- /dev/null
+++ b/dev-scheme/gauche-gl/gauche-gl-0.6-r1.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+MY_P="${P^g}"
+
+DESCRIPTION="OpenGL binding for Gauche"
+HOMEPAGE="https://practical-scheme.net/gauche/"
+SRC_URI="https://downloads.sourceforge.net/${PN%-*}/${MY_P}.tgz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ~ppc x86"
+IUSE="cg examples"
+
+RDEPEND="dev-scheme/gauche:=
+ media-libs/freeglut
+ virtual/opengl
+ x11-libs/libXmu
+ cg? ( media-gfx/nvidia-cg-toolkit )"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-simple.viewer.patch
+ "${FILESDIR}"/${P}-cflags.patch
+ "${FILESDIR}"/${P}-cg.patch
+ "${FILESDIR}"/${P}-info.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ econf $(usex cg --enable-cg "")
+}
+
+src_install() {
+ default
+
+ if use examples; then
+ docompress -x /usr/share/doc/${PF}/examples
+ docinto examples
+ dodoc examples/*.scm
+ # install simple
+ dodoc -r examples/simple
+ # install glbook
+ dodoc -r examples/glbook
+ dodoc -r examples/images
+ # install slbook
+ dodoc -r examples/slbook
+ # install cg examples
+ use cg && dodoc -r examples/cg
+ fi
+}
diff --git a/dev-scheme/gauche-gl/metadata.xml b/dev-scheme/gauche-gl/metadata.xml
new file mode 100644
index 000000000000..5e16a6b5c552
--- /dev/null
+++ b/dev-scheme/gauche-gl/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <use>
+ <flag name="cg">Enable NVidia Cg binding</flag>
+ </use>
+ <upstream>
+ <remote-id type="github">shirok/Gauche-gl</remote-id>
+ <remote-id type="sourceforge">gauche</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche-gtk/Manifest b/dev-scheme/gauche-gtk/Manifest
new file mode 100644
index 000000000000..74e0710ffa0d
--- /dev/null
+++ b/dev-scheme/gauche-gtk/Manifest
@@ -0,0 +1 @@
+DIST Gauche-gtk2-0.6.2.tgz 420027 BLAKE2B 9447abf3b5630440e1945ae332fcbdca6871985f71fd382bf0c6ca47f7bf3544923a0ebc5ee797e0250e533445dcbe4b2325b1b316ce634489ad8713d8a14a6d SHA512 ba4d91ba0066247040f7d795779f74eb453741240379b8148b9ab62aba53b9730399802b445fc44ec07d8f96d9c840c4cb6df2e5d5c430f394d111597ee82d28
diff --git a/dev-scheme/gauche-gtk/gauche-gtk-0.6.2.ebuild b/dev-scheme/gauche-gtk/gauche-gtk-0.6.2.ebuild
new file mode 100644
index 000000000000..448b6183f46f
--- /dev/null
+++ b/dev-scheme/gauche-gtk/gauche-gtk-0.6.2.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+MY_P="${PN^g}2-${PV}"
+
+DESCRIPTION="GTK2 binding for Gauche"
+HOMEPAGE="https://practical-scheme.net/gauche/"
+SRC_URI="https://github.com/shirok/${PN^g}2/releases/download/release-${PV}/${MY_P}.tgz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ~ppc x86"
+IUSE="examples"
+RESTRICT="test"
+
+RDEPEND="dev-scheme/gauche:=
+ x11-libs/gtk+:2"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+S="${WORKDIR}/${MY_P}"
+
+src_compile() {
+ emake stubs
+ emake
+}
+
+src_install() {
+ default
+
+ if use examples; then
+ docompress -x /usr/share/doc/${PF}/examples
+ docinto examples
+ dodoc examples/*.scm
+ # install gtk-tutorial
+ docinto examples/gtk-tutorial
+ dodoc examples/gtk-tutorial/*
+ fi
+}
diff --git a/dev-scheme/gauche-gtk/metadata.xml b/dev-scheme/gauche-gtk/metadata.xml
new file mode 100644
index 000000000000..ce5e427234cb
--- /dev/null
+++ b/dev-scheme/gauche-gtk/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">shirok/Gauche-gtk2</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche-kakasi/Manifest b/dev-scheme/gauche-kakasi/Manifest
new file mode 100644
index 000000000000..8196304e5f08
--- /dev/null
+++ b/dev-scheme/gauche-kakasi/Manifest
@@ -0,0 +1 @@
+DIST Gauche-kakasi-0.1.tgz 56568 BLAKE2B 965c59918da2005b14c127ea23bf1b7e001809889a1caa9cde5af97b22ea23952dcc269e8860f37354e98264c659f222826cc6e3f7f9db49701c33c3e898246a SHA512 761fb704482f4e6705ca80b894b245391efee92d409e9438e59afae56d0b7d9907ed40ab3a5bcc3ec9f2a8115bdbc622c48eaec3b0ed38c99677bf1f9f0f7bed
diff --git a/dev-scheme/gauche-kakasi/files/gauche-kakasi-gauche-package.patch b/dev-scheme/gauche-kakasi/files/gauche-kakasi-gauche-package.patch
new file mode 100644
index 000000000000..ca2e3fd73da0
--- /dev/null
+++ b/dev-scheme/gauche-kakasi/files/gauche-kakasi-gauche-package.patch
@@ -0,0 +1,156 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -10,58 +10,43 @@
+ VPATH = $(srcdir)
+
+ # These may be overridden by make invocators
+-DESTDIR =
+-OPTFLAGS = @OPTFLAGS@
+-CC = @CC@
+-LIBS = -lkakasi @LIBS@
+-CFLAGS = @CFLAGS@ @KAKASI_INCDIR@ $(OPTFLAGS)
+-LDFLAGS = @LDFLAGS@ @KAKASI_LIBDIR@
+-INSTALL_TYPE = @INSTALL_TYPE@
+-
+-# Set by configure
+-GOSH = @GOSH@
+-GAUCHE_CONFIG = @GAUCHE_CONFIG@
+-OBJEXT = @OBJEXT@
+-DSOEXT = @SOEXT@
++DESTDIR =
++CFLAGS = @CFLAGS@ @KAKASI_INCDIR@
++CPPFLAGS = @CPPFLAGS@
++LDFLAGS = @LDFLAGS@ @KAKASI_LIBDIR@
++GOSH = "@GOSH@"
++GAUCHE_CONFIG = "@GAUCHE_CONFIG@"
++GAUCHE_PACKAGE = "@GAUCHE_PACKAGE@"
++INSTALL = "@GAUCHE_INSTALL@"
+
+-INSTALL = @GAUCHE_INSTALL@
++# Other parameters
++SOEXT = @SOEXT@
++OBJEXT = @OBJEXT@
++EXEEXT = @EXEEXT@
+
+-MODULE = kakasi
++# Module-specific stuff
++PACKAGE = kakasi
+
+-ARCHFILES = $(MODULE).$(DSOEXT)
+-SCMFILES = text/$(MODULE).scm
+-HEADERS =
++ARCHFILES = $(PACKAGE).$(SOEXT)
++SCMFILES = text/$(PACKAGE).scm
++HEADERS =
+
+ TARGET = $(ARCHFILES)
+-OBJS = kakasi_head.$(OBJEXT) \
+- kakasi.$(OBJEXT) \
+- kakasilib.$(OBJEXT) \
+- kakasi_tail.$(OBJEXT)
+-GENERATED = kakasilib.$(OBJEXT) kakasi_head.c kakasi_tail.c
++GENERATED =
+ CONFIG_GENERATED = Makefile config.cache config.log config.status \
+- configure.lineno autom4te*.cache Gauche-kakasi.gpd
+-
+-HEADER_INSTALL_DIR = $(DESTDIR)`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)incdir`
+-SCM_INSTALL_DIR = $(DESTDIR)`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)libdir`
+-ARCH_INSTALL_DIR = $(DESTDIR)`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)archdir`
+-
+-all : $(TARGET)
+-
+-.SUFFIXES: .o .stub
++ configure.lineno autom4te*.cache @PACKAGE_NAME@.gpd
+
+-.c.o:
+- $(CC) $(CFLAGS) -c $< -o $@
++HEADER_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --siteincdir`"
++SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`"
++ARCH_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitearchdir`"
+
+-.stub.c:
+- $(GOSH) genstub $<
++kakasi_SRCS = kakasi.c kakasilib.stub
++kakasi_LIBS = -lkakasi
+
+-kakasilib.c : kakasilib.stub
+-
+-$(MODULE).$(DSOEXT): $(OBJS)
+- $(CC) -Wl,-rpath -Wl,`gauche-config --sysarchdir` $(LDFLAGS) $(MODULE).$(DSOEXT) $(OBJS) $(LIBS)
++all : $(TARGET)
+
+-$(MODULE)_head.c $(MODULE)_tail.c :
+- $(GAUCHE_CONFIG) --fixup-extension $(MODULE)
++$(PACKAGE).$(SOEXT): $(kakasi_SRCS)
++ $(GAUCHE_PACKAGE) compile --verbose --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(kakasi_LIBS)" $(PACKAGE) $(kakasi_SRCS)
+
+ check : all
+ @rm -f test.log
+@@ -71,10 +56,11 @@
+ $(INSTALL) -m 444 -T $(HEADER_INSTALL_DIR) $(HEADERS)
+ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR) $(SCMFILES)
+ $(INSTALL) -m 555 -T $(ARCH_INSTALL_DIR) $(ARCHFILES)
+- $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/.packages Gauche-kakasi.gpd
++ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/.packages @PACKAGE_NAME@.gpd
+
+ clean :
+- rm -rf core $(TARGET) $(OBJS) $(GENERATED) *~ test.log so_locations
++ $(GAUCHE_PACKAGE) compile --clean $(PACKAGE) $(kakasi_SRCS)
++ rm -rf core $(TARGET) $(GENERATED) *~ test.log so_locations
+
+ distclean : clean
+ rm -rf $(CONFIG_GENERATED)
+--- a/configure.in
++++ b/configure.in
+@@ -7,10 +7,6 @@
+
+ AC_PREREQ(2.54)
+ AC_INIT(Gauche-kakasi, 0.1, shiro@acm.org)
+-dnl If you want to use the system name (OS, architecture, etc) in the
+-dnl configure, uncomment the following line. In such a case, you need
+-dnl to copy config.guess and config.sub from automake distribution.
+-AC_CANONICAL_SYSTEM
+
+ dnl Sets several Gauche-specific parameters.
+ AC_GAUCHE_INIT_EXT
+@@ -27,16 +23,10 @@
+ AC_SUBST(KAKASI_INCDIR)
+ AC_SUBST(KAKASI_LIBDIR)
+
+-dnl Sets the default value of INSTALL_TYPE macro.
+-dnl You can set it either 'site' or 'sys'. Usually, user-provided
+-dnl extensions are installed as 'site' category.
+-AC_GAUCHE_INSTALL_TYPE(site)
+-
+ dnl Get compiler parameters which Gauche has been compiled with.
+ dnl Do not use AC_PROG_CC. You need to compile and link with the
+ dnl same programs as gosh.
+ AC_GAUCHE_CC
+-AC_GAUCHE_FLAGS
+
+ dnl Check for other programs.
+ dnl Add your macro calls to check existence of programs, if you have any.
+@@ -44,9 +34,9 @@
+ dnl Check for libraries
+ dnl Add your macro calls to check required libraries, if you have any.
+
+-dnl Set LDFLAGS to generate dlopen-able extension.
+-dnl This should come after all tests, or the tests that does link will fail.
+-AC_GAUCHE_FIX_LIBS
++AC_SUBST(CFLAGS)
++AC_SUBST(CPPFLAGS)
++AC_SUBST(LDFLAGS)
+
+ dnl Output
+ AC_GAUCHE_MAKE_GPD
+--- a/kakasilib.stub
++++ b/kakasilib.stub
+@@ -43,7 +43,7 @@
+ SCM_RETURN(sr);")
+
+ (define-cproc kakasi-close-kanwadict ()
+- (return <fixnum> "kakasi_close_kanwadict"))
++ "SCM_RETURN(SCM_MAKE_INT(kakasi_close_kanwadict()));")
+
+ ;; Local variables:
+ ;; mode: scheme
diff --git a/dev-scheme/gauche-kakasi/gauche-kakasi-0.1-r1.ebuild b/dev-scheme/gauche-kakasi/gauche-kakasi-0.1-r1.ebuild
new file mode 100644
index 000000000000..eb3e30475151
--- /dev/null
+++ b/dev-scheme/gauche-kakasi/gauche-kakasi-0.1-r1.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+MY_P="${P^g}"
+
+DESCRIPTION="Kakasi binding for Gauche"
+HOMEPAGE="https://osdn.jp/projects/gauche/"
+SRC_URI="https://downloads.sourceforge.net/${PN%-*}/${MY_P}.tgz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+RDEPEND=">=app-i18n/kakasi-2.3.4
+ dev-scheme/gauche:="
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=( "${FILESDIR}"/${PN}-gauche-package.patch )
+
+src_prepare() {
+ default
+
+ mv configure.{in,ac} || die
+ eautoreconf
+}
diff --git a/dev-scheme/gauche-kakasi/metadata.xml b/dev-scheme/gauche-kakasi/metadata.xml
new file mode 100644
index 000000000000..ca69013b5ae0
--- /dev/null
+++ b/dev-scheme/gauche-kakasi/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="sourceforge">gauche</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche-mecab/Manifest b/dev-scheme/gauche-mecab/Manifest
new file mode 100644
index 000000000000..0eed344b4395
--- /dev/null
+++ b/dev-scheme/gauche-mecab/Manifest
@@ -0,0 +1 @@
+DIST Gauche-mecab-1.0.2.tar.gz 12724 BLAKE2B 7e18910f5e45750b6fe3a916a0350071be97f0c860bdf27733639599ec2e302305887ae04b7239c9da90e0913bc2ba03626f105a0004bd3c7f087016b66cef63 SHA512 2d000a0c0f795af93e2728249e7ab339c19d388546d3a300d5960079b9bf360a23c7758867edaca4abb871329689372b645e27eb20bed139aeb997e4d7583c43
diff --git a/dev-scheme/gauche-mecab/gauche-mecab-1.0.2-r1.ebuild b/dev-scheme/gauche-mecab/gauche-mecab-1.0.2-r1.ebuild
new file mode 100644
index 000000000000..064d573170a1
--- /dev/null
+++ b/dev-scheme/gauche-mecab/gauche-mecab-1.0.2-r1.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+MY_P="${P^g}"
+
+DESCRIPTION="MeCab binding for Gauche"
+HOMEPAGE="https://github.com/shirok/Gauche-mecab"
+SRC_URI="https://github.com/shirok/${PN^g}/archive/v${PV}.tar.gz -> ${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE=""
+
+RDEPEND="app-text/mecab
+ dev-scheme/gauche:="
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_P}"
diff --git a/dev-scheme/gauche-mecab/metadata.xml b/dev-scheme/gauche-mecab/metadata.xml
new file mode 100644
index 000000000000..4493d30de907
--- /dev/null
+++ b/dev-scheme/gauche-mecab/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">shirok/Gauche-mecab</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche-qdbm/Manifest b/dev-scheme/gauche-qdbm/Manifest
new file mode 100644
index 000000000000..c10fff4fbeee
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/Manifest
@@ -0,0 +1 @@
+DIST Gauche-qdbm-0.2.tar.gz 73311 BLAKE2B d8937147368416ef17ca5e953d91a6e906f16e65b73c87d01515346c0be5e5bb3646e7b26a8847d4b29bcf7abd4e7114fdbfd74a122f5fd1cc6205768e1789eb SHA512 9286d22f1ad32f213c34670ca0a3fef4d43da8d7e0bed019cd5891400eb7337cd3adfb7cc788350e1f1ab535b87af0fa0a6096d33fa73da6049888ce0006e821
diff --git a/dev-scheme/gauche-qdbm/files/gauche-qdbm-gauche-package.patch b/dev-scheme/gauche-qdbm/files/gauche-qdbm-gauche-package.patch
new file mode 100644
index 000000000000..0c74472113a0
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/files/gauche-qdbm-gauche-package.patch
@@ -0,0 +1,147 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -10,79 +10,57 @@
+ VPATH = $(srcdir)
+
+ # These may be overridden by make invocators
+-DESTDIR =
+-OPTFLAGS = @OPTFLAGS@
+-CC = @CC@
+-LIBS = @LIBS@
+-CFLAGS = @CFLAGS@
+-CPPFLAGS = @CPPFLAGS@ # AC_LIB_LINKFLAGS adds to this..
+-LDFLAGS = @LDFLAGS@
+-INSTALL = @INSTALL@
+-INSTALL_TYPE = @INSTALL_TYPE@
+-
+-# Set by configure
+-GOSH = @GOSH@
+-GAUCHE_CONFIG = @GAUCHE_CONFIG@
++DESTDIR =
++CFLAGS = @CFLAGS@
++CPPFLAGS = @CPPFLAGS@ # AC_LIB_LINKFLAGS adds to this..
++LDFLAGS = @LDFLAGS@
++GOSH = "@GOSH@"
++GAUCHE_CONFIG = "@GAUCHE_CONFIG@"
++GAUCHE_PACKAGE = "@GAUCHE_PACKAGE@"
++INSTALL = "@GAUCHE_INSTALL@"
++
++# Other parameters
++SOEXT = @SOEXT@
+ OBJEXT = @OBJEXT@
+-DSOEXT = @SOEXT@
++EXEEXT = @EXEEXT@
+
+-MODULE = qdbm
++# Module-specific stuff
++PACKAGE = qdbm
+
+-ARCHFILES = $(MODULE).$(DSOEXT)
+-SCMFILES = $(MODULE).scm
++ARCHFILES = $(PACKAGE).$(SOEXT)
++SCMFILES = $(PACKAGE).scm
+ HEADERS =
+
+ TARGET = $(ARCHFILES)
+-OBJS = $(MODULE)_head.$(OBJEXT) \
+- qdbm.$(OBJEXT) \
+- depot.$(OBJEXT) \
+- $(MODULE)_tail.$(OBJEXT)
+-GENERATED = depot.c $(MODULE)_head.c $(MODULE)_tail.c
++GENERATED =
+ CONFIG_GENERATED = Makefile config.cache config.log config.status \
+- configure.lineno autom4te*.cache
+-
+-HEADER_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)incdir`
+-SCM_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)libdir`/dbm
+-ARCH_INSTALL_DIR = $(DESTDIR)/`$(GAUCHE_CONFIG) --$(INSTALL_TYPE)archdir`
+-
+-all : $(TARGET)
++ configure.lineno autom4te*.cache @PACKAGE_NAME@.gpd
+
+-.SUFFIXES: .o .stub
++HEADER_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --siteincdir`"
++SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`"
++ARCH_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitearchdir`"
+
+-.c.o:
+- $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
++qdbm_SRCS = qdbm.c depot.stub
++qdbm_LIBS = @LIBQDBM@
+
+-.stub.c:
+- $(GOSH) genstub $<
+-
+-depot.c : depot.stub
+-
+-$(MODULE).$(DSOEXT): $(OBJS)
+- $(CC) -Wl,-rpath -Wl,`gauche-config --sysarchdir` $(LDFLAGS) $(MODULE).$(DSOEXT) $(OBJS) $(LIBS) @LIBQDBM@
++all : $(TARGET)
+
+-$(MODULE)_head.c $(MODULE)_tail.c :
+- $(GAUCHE_CONFIG) --fixup-extension $(MODULE)
++$(PACKAGE).$(SOEXT): $(qdbm_SRCS)
++ $(GAUCHE_PACKAGE) compile --verbose --cppflags="$(CPPFLAGS)" --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(qdbm_LIBS)" $(PACKAGE) $(qdbm_SRCS)
+
+ check : all
+ @rm -f test.log
+ $(GOSH) -I. test.scm > test.log
+
+ install : all
+- if test ! -z "$(HEADERS)"; then \
+- $(INSTALL) -d $(HEADER_INSTALL_DIR); \
+- $(INSTALL) -m 444 $(HEADERS) $(HEADER_INSTALL_DIR); \
+- fi
+- if test ! -z "$(SCMFILES)"; then \
+- $(INSTALL) -d $(SCM_INSTALL_DIR); \
+- $(INSTALL) -m 444 $(SCMFILES) $(SCM_INSTALL_DIR); \
+- fi
+- if test ! -z "$(ARCHFILES)"; then \
+- $(INSTALL) -d $(ARCH_INSTALL_DIR); \
+- $(INSTALL) -m 555 $(ARCHFILES) $(ARCH_INSTALL_DIR); \
+- fi
++ $(INSTALL) -m 444 -T $(HEADER_INSTALL_DIR) $(HEADERS)
++ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/dbm $(SCMFILES)
++ $(INSTALL) -m 555 -T $(ARCH_INSTALL_DIR) $(ARCHFILES)
++ $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/.packages @PACKAGE_NAME@.gpd
+
+ clean :
+- rm -rf core $(TARGET) $(OBJS) $(GENERATED) *~ test.log so_locations
++ $(GAUCHE_PACKAGE) compile --clean $(PACKAGE) $(qdbm_SRCS)
++ rm -rf core $(TARGET) $(GENERATED) *~ test.log so_locations
+
+ distclean : clean
+ rm -rf $(CONFIG_GENERATED)
+--- a/configure.ac
++++ b/configure.ac
+@@ -4,18 +4,11 @@
+ AC_INIT(Gauche-qdbm, 0.2)
+ AC_CONFIG_SRCDIR(qdbm.c)
+
+-AC_CANONICAL_SYSTEM
+-
+ AC_GAUCHE_INIT_EXT
+-AC_GAUCHE_INSTALL_TYPE(site)
+ AC_GAUCHE_CC
+-AC_GAUCHE_FLAGS
+-
+-AC_PROG_INSTALL
+
+ AC_LIB_LINKFLAGS(qdbm)
+
+-AC_GAUCHE_FIX_LIBS
+-
++AC_GAUCHE_MAKE_GPD
+ echo $PACKAGE_VERSION > VERSION
+ AC_OUTPUT(Makefile)
+--- a/depot.stub
++++ b/depot.stub
+@@ -219,7 +219,7 @@
+ SCM_RETURN(SCM_MAKE_INT(r));")
+
+ (define-cproc qdbm-dpprimenum (num::<fixnum>)
+- (return <int> "dpprimenum"))
++ " SCM_RETURN(SCM_MAKE_INT(dpprimenum(num)));")
+
+ (define-enum DP_OREADER)
+ (define-enum DP_OWRITER)
diff --git a/dev-scheme/gauche-qdbm/files/gauche-qdbm-test.patch b/dev-scheme/gauche-qdbm/files/gauche-qdbm-test.patch
new file mode 100644
index 000000000000..2153c8978feb
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/files/gauche-qdbm-test.patch
@@ -0,0 +1,13 @@
+--- a/test.scm
++++ b/test.scm
+@@ -32,8 +32,8 @@
+ (test* "qdbm-dpclosed?" #t (qdbm-dpclosed? qdbm))
+ (test* "qdbm-dpremove" #t (qdbm-dpremove "test.dbm"))
+
+-(test* "qdbm-innerhash" -468784272 (qdbm-dpinnerhash "key"))
+-(test* "qdbm-outerhash" -448645494 (qdbm-dpouterhash "key"))
++(test* "qdbm-innerhash" 604957552 (qdbm-dpinnerhash "key"))
++(test* "qdbm-outerhash" 625096330 (qdbm-dpouterhash "key"))
+ (test* "qdbm-primenum" 10223 (qdbm-dpprimenum 10000))
+
+ ;; The following is taken from ext/dbm/test.scm.
diff --git a/dev-scheme/gauche-qdbm/files/gauche-qdbm-undefined-reference.patch b/dev-scheme/gauche-qdbm/files/gauche-qdbm-undefined-reference.patch
new file mode 100644
index 000000000000..cf80940c97ef
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/files/gauche-qdbm-undefined-reference.patch
@@ -0,0 +1,11 @@
+--- a/qdbm.scm
++++ b/qdbm.scm
+@@ -72,7 +72,7 @@
+ (unless (slot-bound? self 'path)
+ (error "path must be set to open qdbm database"))
+ (when (qdbm-file-of self)
+- (errorf "qdbm ~S already opened" qdbm))
++ (errorf "qdbm ~s already opened" (qdbm-file-of self)))
+ (let* ((path (slot-ref self 'path))
+ (rwmode (slot-ref self 'rw-mode))
+ (omode (case rwmode
diff --git a/dev-scheme/gauche-qdbm/gauche-qdbm-0.2-r1.ebuild b/dev-scheme/gauche-qdbm/gauche-qdbm-0.2-r1.ebuild
new file mode 100644
index 000000000000..87ddea8a0b8d
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/gauche-qdbm-0.2-r1.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools
+
+MY_P="${P^g}"
+
+DESCRIPTION="QDBM binding for Gauche"
+HOMEPAGE="https://osdn.jp/projects/gauche/"
+SRC_URI="mirror://sourceforge.jp/${PN%-*}/6988/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ~sparc x86"
+IUSE=""
+
+RDEPEND="dev-db/qdbm
+ dev-scheme/gauche:="
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-gauche-package.patch
+ "${FILESDIR}"/${PN}-test.patch
+ "${FILESDIR}"/${PN}-undefined-reference.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
diff --git a/dev-scheme/gauche-qdbm/metadata.xml b/dev-scheme/gauche-qdbm/metadata.xml
new file mode 100644
index 000000000000..fcca79e4beb0
--- /dev/null
+++ b/dev-scheme/gauche-qdbm/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="osdn">gauche</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/gauche/Manifest b/dev-scheme/gauche/Manifest
new file mode 100644
index 000000000000..7996744b0f2d
--- /dev/null
+++ b/dev-scheme/gauche/Manifest
@@ -0,0 +1,2 @@
+DIST Gauche-0.9.14.tgz 9352431 BLAKE2B cb747a16037167a95a543e324b53a48e3cb4dd372e9f6cc00603b7072b902c839248fbf3e9926360a2732fcf4bc0caa16a4ea1ad757e84d5d597ef4bdfa2592f SHA512 3dd9dc8627fe1c5e518731a17dd984120485b36d6c2bb2d0d54a8b5f6778f45efd02640abe4699466eec2eb18dd4474d9525848029468128974c13c615087662
+DIST Gauche-0.9.15.tgz 9444756 BLAKE2B 1b4cbc764ea3af78bc736ce9a8ff083318366fbf3197ebc5060222b8df93ed426ca4b3b90402cd604e110bcfa8fb46c0d4c5f35be39899cc89dc82a671372bf9 SHA512 fc246a9ba937eba642621a5707f0e7a02d62191749360b9b15e2563c9ceb13e18f236c736172d05c177df8b7220ff0e973f568aaf9eb92e92643af0823f0f865
diff --git a/dev-scheme/gauche/files/gauche-ext-ldflags.patch b/dev-scheme/gauche/files/gauche-ext-ldflags.patch
new file mode 100644
index 000000000000..a5a21532d1ee
--- /dev/null
+++ b/dev-scheme/gauche/files/gauche-ext-ldflags.patch
@@ -0,0 +1,11 @@
+--- a/ext/Makefile.ext.in
++++ b/ext/Makefile.ext.in
+@@ -22,7 +22,7 @@
+ LIBS = $(XLIBS) @LIBS@
+ CFLAGS = @CFLAGS@ @SHLIB_SO_CFLAGS@ $(XCFLAGS)
+ CPPFLAGS = @CPPFLAGS@ $(XCPPFLAGS)
+-LDFLAGS = $(LOCAL_LFLAGS) $(XLDFLAGS) @SHLIB_SO_LDFLAGS@
++LDFLAGS = $(LOCAL_LFLAGS) $(XLDFLAGS) @LDFLAGS@ @SHLIB_SO_LDFLAGS@
+ BUILD_GOSH_FLAGS =
+
+ # These are set by configure
diff --git a/dev-scheme/gauche/files/gauche-gauche.m4.patch b/dev-scheme/gauche/files/gauche-gauche.m4.patch
new file mode 100644
index 000000000000..a5c5455f1702
--- /dev/null
+++ b/dev-scheme/gauche/files/gauche-gauche.m4.patch
@@ -0,0 +1,27 @@
+--- a/m4/gauche.m4
++++ b/m4/gauche.m4
+@@ -103,13 +103,10 @@
+ AS_CASE(["$target"],
+ [i686-*], [I686OPT="-DUSE_I686_PREFETCH"])
+ AS_CASE(["$CC"],
+- [gcc*], [ dnl some systems may have gcc-2.95, gcc-3, etc.
++ [*gcc*], [ dnl some systems may have gcc-2.95, gcc-3, etc.
+ AS_CASE(["$target"],
+ [*mingw*], [],
+- [GCCOPT="-fomit-frame-pointer"])
+- AS_CASE(["$target"],
+- [i586-*], [GCCOPT="$GCCOPT -march=i586"],
+- [i686-*], [GCCOPT="$GCCOPT -march=i686"])])])
++ [GCCOPT="-fomit-frame-pointer"])])])
+ OPTFLAGS="$GCCOPT $I686OPT"
+ AC_SUBST(OPTFLAGS)
+ ])
+@@ -150,7 +147,7 @@
+ dnl
+ AC_DEFUN([AC_GAUCHE_MAKE_GPD],
+ [
+-GAUCHE_PACKAGE_CONFIGURE_ARGS=`echo "$ac_configure_args" | sed 's/@<:@\\"\`\$@:>@/\\\\&/g'`
++GAUCHE_PACKAGE_CONFIGURE_ARGS=`echo "$ac_configure_args" | sed 's/@<:@\$\\"\`@:>@/\\\\&/g'`
+ AC_MSG_NOTICE([creating ${PACKAGE_NAME}.gpd])
+ $GAUCHE_PACKAGE make-gpd "$PACKAGE_NAME" \
+ -version "$PACKAGE_VERSION" \
diff --git a/dev-scheme/gauche/files/gauche-xz-info.patch b/dev-scheme/gauche/files/gauche-xz-info.patch
new file mode 100644
index 000000000000..5ca77a8d583d
--- /dev/null
+++ b/dev-scheme/gauche/files/gauche-xz-info.patch
@@ -0,0 +1,31 @@
+--- a/lib/gauche/interactive/info.scm
++++ b/lib/gauche/interactive/info.scm
+@@ -113,7 +113,8 @@
+ :paths (get-info-paths)
+ :pred (^p (or (file-is-readable? p)
+ (file-is-readable? #"~|p|.gz")
+- (file-is-readable? #"~|p|.bz2")))))
++ (file-is-readable? #"~|p|.bz2")
++ (file-is-readable? #"~|p|.xz")))))
+
+ (define (handle-ambiguous-name entry-name)
+ (let* ([keys (map x->string (hash-table-keys (~ (get-info)'index)))]
+--- a/lib/text/info.scm
++++ b/lib/text/info.scm
+@@ -67,6 +67,7 @@
+
+ ;; Find bzip2 location
+ (define bzip2 (find-file-in-paths "bzip2"))
++(define xz (find-file-in-paths "xz"))
+
+ (cond-expand
+ [gauche.sys.zlib]
+@@ -90,6 +91,8 @@
+ (with-input-from-process #"~gzip -c -d ~|file|.gz" thunk)])]
+ [(and bzip2 (file-exists? #"~|file|.bz2"))
+ (with-input-from-process #"~bzip2 -c -d ~|file|.bz2" thunk)]
++ [(and xz (file-exists? #"~|file|.xz"))
++ (with-input-from-process #"~xz -c -d ~|file|.xz" thunk)]
+ [else (error "can't find info file" file)]))
+ (with-input-from-info
+ (^[]
diff --git a/dev-scheme/gauche/gauche-0.9.14.ebuild b/dev-scheme/gauche/gauche-0.9.14.ebuild
new file mode 100644
index 000000000000..8ddb10e6996d
--- /dev/null
+++ b/dev-scheme/gauche/gauche-0.9.14.ebuild
@@ -0,0 +1,61 @@
+# Copyright 2021-2024 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit autotools
+
+MY_P="${P^g}"
+MY_P="${MY_P/_p/-p}"
+
+DESCRIPTION="A Unix system friendly Scheme Interpreter"
+HOMEPAGE="https://practical-scheme.net/gauche/"
+SRC_URI="https://github.com/shirok/${PN^g}/releases/download/release${PV//./_}/${MY_P}.tgz"
+
+LICENSE="BSD"
+SLOT="0/$(ver_cut 1-2)8"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux"
+IUSE="ipv6 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-libs/libatomic_ops
+ sys-libs/gdbm
+ virtual/libcrypt:=
+ net-libs/mbedtls:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-ext-ldflags.patch
+ "${FILESDIR}"/${PN}-gauche.m4.patch
+ "${FILESDIR}"/${PN}-xz-info.patch
+)
+DOCS=( AUTHORS ChangeLog HACKING.adoc README.adoc )
+
+src_prepare() {
+ default
+ use ipv6 && sed -i "s/ -4//" ext/tls/ssltest-mod.scm
+
+ eautoconf
+}
+
+src_configure() {
+ econf \
+ $(use_enable ipv6) \
+ --with-ca-bundle="${EPREFIX}"/etc/ssl/certs/ca-certificates.crt \
+ --with-libatomic-ops=yes \
+ --with-slib="${EPREFIX}"/usr/share/slib \
+ --with-tls=mbedtls
+}
+
+src_test() {
+ emake -j1 -s check
+}
+
+src_install() {
+ emake DESTDIR="${D}" install-pkg install-doc
+ einstalldocs
+}
diff --git a/dev-scheme/gauche/gauche-0.9.15.ebuild b/dev-scheme/gauche/gauche-0.9.15.ebuild
new file mode 100644
index 000000000000..8ddb10e6996d
--- /dev/null
+++ b/dev-scheme/gauche/gauche-0.9.15.ebuild
@@ -0,0 +1,61 @@
+# Copyright 2021-2024 Liguros Authors
+# Distributed under the terms of the GNU General Public License v2
+EAPI=8
+
+inherit autotools
+
+MY_P="${P^g}"
+MY_P="${MY_P/_p/-p}"
+
+DESCRIPTION="A Unix system friendly Scheme Interpreter"
+HOMEPAGE="https://practical-scheme.net/gauche/"
+SRC_URI="https://github.com/shirok/${PN^g}/releases/download/release${PV//./_}/${MY_P}.tgz"
+
+LICENSE="BSD"
+SLOT="0/$(ver_cut 1-2)8"
+KEYWORDS="~alpha ~amd64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~amd64-linux ~x86-linux"
+IUSE="ipv6 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ dev-libs/libatomic_ops
+ sys-libs/gdbm
+ virtual/libcrypt:=
+ net-libs/mbedtls:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-ext-ldflags.patch
+ "${FILESDIR}"/${PN}-gauche.m4.patch
+ "${FILESDIR}"/${PN}-xz-info.patch
+)
+DOCS=( AUTHORS ChangeLog HACKING.adoc README.adoc )
+
+src_prepare() {
+ default
+ use ipv6 && sed -i "s/ -4//" ext/tls/ssltest-mod.scm
+
+ eautoconf
+}
+
+src_configure() {
+ econf \
+ $(use_enable ipv6) \
+ --with-ca-bundle="${EPREFIX}"/etc/ssl/certs/ca-certificates.crt \
+ --with-libatomic-ops=yes \
+ --with-slib="${EPREFIX}"/usr/share/slib \
+ --with-tls=mbedtls
+}
+
+src_test() {
+ emake -j1 -s check
+}
+
+src_install() {
+ emake DESTDIR="${D}" install-pkg install-doc
+ einstalldocs
+}
diff --git a/dev-scheme/gauche/metadata.xml b/dev-scheme/gauche/metadata.xml
new file mode 100644
index 000000000000..e975680264a2
--- /dev/null
+++ b/dev-scheme/gauche/metadata.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://liguros.gitlab.io/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>dev@liguros.net</email>
+ <name>Development</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>hattya@gentoo.org</email>
+ <name>Akinori Hattori</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Gauche is an R5RS Scheme implementation developed to be a handy script
+ interpreter, which allows programmers and system administrators to write
+ small to large scripts for their daily chores. Quick startup, built-in
+ system interface, native multilingual support are some of my goals.
+
+ Gauche runs on several Unix-like platforms.
+ </longdescription>
+
+ <use>
+ <flag name="mbedtls">Enable support for <pkg>net-libs/mbedtls</pkg></flag>
+ </use>
+ <origin>ports</origin>
+</pkgmetadata> \ No newline at end of file
diff --git a/dev-scheme/goosh/Manifest b/dev-scheme/goosh/Manifest
new file mode 100644
index 000000000000..91dde8e3f67d
--- /dev/null
+++ b/dev-scheme/goosh/Manifest
@@ -0,0 +1 @@
+DIST goosh-1.3.tar.gz 43503 BLAKE2B 7bc3c907638320889ef2c871acd2e4e9fbd0fdb8e1a3655cb42cc92eea9fe28f01533ecff8e3efa4488dd5f0d2c9cdc6aa5ba7e333a9acb1d430633479c6cc80 SHA512 55fc3b83b5e711453886d6fd47e7e16df329ac7f294c704e3676f7266383fda6ad5e53c3f8a707a7746dd0ccd33647cc5137a73f516396079702df47919ede81
diff --git a/dev-scheme/goosh/goosh-1.3-r100.ebuild b/dev-scheme/goosh/goosh-1.3-r100.ebuild
new file mode 100644
index 000000000000..26255f855987
--- /dev/null
+++ b/dev-scheme/goosh/goosh-1.3-r100.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="Small process-control library for Guile"
+HOMEPAGE="http://arglist.com/guile/"
+SRC_URI="http://arglist.com/guile/${P}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~riscv x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+BDEPEND="${RDEPEND}"
diff --git a/dev-scheme/goosh/metadata.xml b/dev-scheme/goosh/metadata.xml
new file mode 100644
index 000000000000..b71795dbfba5
--- /dev/null
+++ b/dev-scheme/goosh/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<maintainer type="project">
+ <email>sci-chemistry@gentoo.org</email>
+ <name>Gentoo Chemistry Project</name>
+</maintainer>
+</pkgmetadata>
diff --git a/dev-scheme/guile-colorized/Manifest b/dev-scheme/guile-colorized/Manifest
new file mode 100644
index 000000000000..6f434c2fa894
--- /dev/null
+++ b/dev-scheme/guile-colorized/Manifest
@@ -0,0 +1 @@
+DIST guile-colorized-0.1_p20191205.tar.bz2 15496 BLAKE2B a85fc44c3b6b8433362197a4f1da216ea99793673ee4592e6ea32178d2952d0f43f5a4e79304185d0c67b6dee668bf52d53970df97954a37650cd8b7770e7abd SHA512 4cd9833c70debf0086ba69252e1fb8b9fc33707ec1f3bb6dfb144d5a35db6f38e3af585cbc889936c8ebb38dea0f8808f483bd51ed1722c9b9df857d31a7cec7
diff --git a/dev-scheme/guile-colorized/guile-colorized-0.1_p20191205-r100.ebuild b/dev-scheme/guile-colorized/guile-colorized-0.1_p20191205-r100.ebuild
new file mode 100644
index 000000000000..d8f4c69f42d0
--- /dev/null
+++ b/dev-scheme/guile-colorized/guile-colorized-0.1_p20191205-r100.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="Colorized REPL for GNU Guile"
+HOMEPAGE="https://gitlab.com/NalaGinrut/guile-colorized/"
+
+if [[ "${PV}" == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/NalaGinrut/${PN}.git"
+else
+ # Latest release (before this commit from 2019) was in 2015
+ COMMIT_SHA="1625a79f0e31849ebd537e2a58793fb45678c58f"
+ SRC_URI="https://gitlab.com/NalaGinrut/${PN}/-/archive/${COMMIT_SHA}.tar.bz2 -> ${P}.tar.bz2"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/${PN}-${COMMIT_SHA}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_install() {
+ my_install() {
+ local loadpath=$(${GUILE} -c '(display (string-append (car %load-path) "/ice-9"))')
+ mkdir -p "${SLOTTED_D}${loadpath}" || die
+ emake -C "${S}" TARGET="${SLOTTED_D}${loadpath}" install
+ }
+ guile_foreach_impl my_install
+ guile_merge_roots
+ guile_unstrip_ccache
+
+ einstalldocs
+}
diff --git a/dev-scheme/guile-colorized/guile-colorized-9999.ebuild b/dev-scheme/guile-colorized/guile-colorized-9999.ebuild
new file mode 100644
index 000000000000..d8f4c69f42d0
--- /dev/null
+++ b/dev-scheme/guile-colorized/guile-colorized-9999.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="Colorized REPL for GNU Guile"
+HOMEPAGE="https://gitlab.com/NalaGinrut/guile-colorized/"
+
+if [[ "${PV}" == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/NalaGinrut/${PN}.git"
+else
+ # Latest release (before this commit from 2019) was in 2015
+ COMMIT_SHA="1625a79f0e31849ebd537e2a58793fb45678c58f"
+ SRC_URI="https://gitlab.com/NalaGinrut/${PN}/-/archive/${COMMIT_SHA}.tar.bz2 -> ${P}.tar.bz2"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/${PN}-${COMMIT_SHA}"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_install() {
+ my_install() {
+ local loadpath=$(${GUILE} -c '(display (string-append (car %load-path) "/ice-9"))')
+ mkdir -p "${SLOTTED_D}${loadpath}" || die
+ emake -C "${S}" TARGET="${SLOTTED_D}${loadpath}" install
+ }
+ guile_foreach_impl my_install
+ guile_merge_roots
+ guile_unstrip_ccache
+
+ einstalldocs
+}
diff --git a/dev-scheme/guile-colorized/metadata.xml b/dev-scheme/guile-colorized/metadata.xml
new file mode 100644
index 000000000000..c68c99f4254d
--- /dev/null
+++ b/dev-scheme/guile-colorized/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://gitlab.com/NalaGinrut/guile-colorized/-/issues</bugs-to>
+ <remote-id type="gitlab">NalaGinrut/guile-colorized</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-commonmark/Manifest b/dev-scheme/guile-commonmark/Manifest
new file mode 100644
index 000000000000..f7934235bcda
--- /dev/null
+++ b/dev-scheme/guile-commonmark/Manifest
@@ -0,0 +1 @@
+DIST guile-commonmark-0.1.2_pre20240803.tar.gz 81148 BLAKE2B 0468e49cb58da59bb2e4ea7d372abcc7d9cbc09d05156d9b276057f42b84cbeb7fbcd61b6f406e4e532f2e834682b943a7365de87a901b385daa582d6fa6c11d SHA512 3c89495f201421b9326b8fbb54b92e554136429f6e2817be5ed99a465ced36f63b2446b46760e4eb303bc03d5d630410492994e1cb593b9c803686d7811c4e3d
diff --git a/dev-scheme/guile-commonmark/guile-commonmark-0.1.2_pre20240803.ebuild b/dev-scheme/guile-commonmark/guile-commonmark-0.1.2_pre20240803.ebuild
new file mode 100644
index 000000000000..dc73ecc8f843
--- /dev/null
+++ b/dev-scheme/guile-commonmark/guile-commonmark-0.1.2_pre20240803.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile autotools
+
+MY_COMMIT=538ffea25ca69d9f3ee17033534ba03cc27ba468
+
+DESCRIPTION="Implementation of CommonMark for Guile"
+HOMEPAGE="https://github.com/OrangeShark/guile-commonmark"
+SRC_URI="https://github.com/OrangeShark/${PN}/archive/${MY_COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${MY_COMMIT}"
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ default
+
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/guile-commonmark/metadata.xml b/dev-scheme/guile-commonmark/metadata.xml
new file mode 100644
index 000000000000..aee3208b367f
--- /dev/null
+++ b/dev-scheme/guile-commonmark/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>arsen@gentoo.org</email>
+ <name>Arsen Arsenović</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <description>Gentoo Scheme Project</description>
+ </maintainer>
+ <upstream>
+ <remote-id type="github">OrangeShark/guile-commonmark</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-config/Manifest b/dev-scheme/guile-config/Manifest
new file mode 100644
index 000000000000..3eed67e46419
--- /dev/null
+++ b/dev-scheme/guile-config/Manifest
@@ -0,0 +1 @@
+DIST guile-config-0.5.1.tar.bz2 54872 BLAKE2B 79c5995410d2af1b4f542eca925a8130cbbfe6c6d58606cdb58e4f3863714f1f7803b253f367b30da1614cc2f86a038760764043e72c50972fb74ad71b8f9f21 SHA512 5f7bc95a4c010e14b28f72f980c003caa0b08cca3b5e927dfeb0ad8e6a0751fc51c22e21dee5c0aa1531bc5c40ee26f95960d342647f23db3d54de12518a431a
diff --git a/dev-scheme/guile-config/guile-config-0.5.1-r100.ebuild b/dev-scheme/guile-config/guile-config-0.5.1-r100.ebuild
new file mode 100644
index 000000000000..3b2f6ea9a42a
--- /dev/null
+++ b/dev-scheme/guile-config/guile-config-0.5.1-r100.ebuild
@@ -0,0 +1,25 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile application configuration parsing library"
+HOMEPAGE="https://gitlab.com/a-sassmannshausen/guile-config/"
+SRC_URI="https://gitlab.com/a-sassmannshausen/${PN}/-/archive/${PV}/${P}.tar.bz2"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/guile-config/metadata.xml b/dev-scheme/guile-config/metadata.xml
new file mode 100644
index 000000000000..b8ab9e66b6af
--- /dev/null
+++ b/dev-scheme/guile-config/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Guile Config is a library providing a declarative approach to application
+ configuration specification. The library provides clean configuration
+ declaration forms, and processors that take care of: configuration file
+ creation; configuration file parsing; command-line parameter parsing using
+ getopt-long; basic GNU command-line parameter generation (--help, --usage,
+ --version); automatic output generation for the above command-line
+ parameters.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://gitlab.com/a-sassmannshausen/guile-config/-/issues/</bugs-to>
+ <remote-id type="gitlab">a-sassmannshausen/guile-config</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-dbd-postgresql/Manifest b/dev-scheme/guile-dbd-postgresql/Manifest
new file mode 100644
index 000000000000..9dc862140b2f
--- /dev/null
+++ b/dev-scheme/guile-dbd-postgresql/Manifest
@@ -0,0 +1 @@
+DIST guile-dbi-2.1.9.tar.gz 90514 BLAKE2B f4adeb33636972c33f5bdb40c906713b35bec4b1d3afc9fbcd55d74d1d5a957b524bbefeb04e9e5ff1cd17e6a40e218d84220f8eaeeaee09bf67604fa1e87e18 SHA512 2f6ec4c792b487b2552eda06b3ee3e470ae0e603e30abafacfb597281a44c53838d7b16d447cf1ee35f9b994c5b0ed1bbf3497eb1e64e783017898e30d82d427
diff --git a/dev-scheme/guile-dbd-postgresql/guile-dbd-postgresql-2.1.9-r1.ebuild b/dev-scheme/guile-dbd-postgresql/guile-dbd-postgresql-2.1.9-r1.ebuild
new file mode 100644
index 000000000000..988554fcb187
--- /dev/null
+++ b/dev-scheme/guile-dbd-postgresql/guile-dbd-postgresql-2.1.9-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile DBI driver for PostgreSQL"
+HOMEPAGE="https://github.com/opencog/guile-dbi/"
+SRC_URI="https://github.com/opencog/guile-dbi/archive/guile-dbi-${PV}.tar.gz"
+S="${WORKDIR}"/guile-dbi-guile-dbi-${PV}/${PN}
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-db/postgresql:*
+ >=dev-scheme/guile-dbi-2.1.9[${GUILE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-dbd-postgresql/metadata.xml b/dev-scheme/guile-dbd-postgresql/metadata.xml
new file mode 100644
index 000000000000..8e3419f7b601
--- /dev/null
+++ b/dev-scheme/guile-dbd-postgresql/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/opencog/guile-dbi/issues/</bugs-to>
+ <remote-id type="github">opencog/guile-dbi</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-dbd-sqlite3/Manifest b/dev-scheme/guile-dbd-sqlite3/Manifest
new file mode 100644
index 000000000000..9dc862140b2f
--- /dev/null
+++ b/dev-scheme/guile-dbd-sqlite3/Manifest
@@ -0,0 +1 @@
+DIST guile-dbi-2.1.9.tar.gz 90514 BLAKE2B f4adeb33636972c33f5bdb40c906713b35bec4b1d3afc9fbcd55d74d1d5a957b524bbefeb04e9e5ff1cd17e6a40e218d84220f8eaeeaee09bf67604fa1e87e18 SHA512 2f6ec4c792b487b2552eda06b3ee3e470ae0e603e30abafacfb597281a44c53838d7b16d447cf1ee35f9b994c5b0ed1bbf3497eb1e64e783017898e30d82d427
diff --git a/dev-scheme/guile-dbd-sqlite3/guile-dbd-sqlite3-2.1.9-r1.ebuild b/dev-scheme/guile-dbd-sqlite3/guile-dbd-sqlite3-2.1.9-r1.ebuild
new file mode 100644
index 000000000000..adb018799aa3
--- /dev/null
+++ b/dev-scheme/guile-dbd-sqlite3/guile-dbd-sqlite3-2.1.9-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile DBI driver for SQLite"
+HOMEPAGE="https://github.com/opencog/guile-dbi/"
+SRC_URI="https://github.com/opencog/guile-dbi/archive/guile-dbi-${PV}.tar.gz"
+S="${WORKDIR}"/guile-dbi-guile-dbi-${PV}/${PN}
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-db/sqlite:3=
+ >=dev-scheme/guile-dbi-2.1.9[${GUILE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-dbd-sqlite3/metadata.xml b/dev-scheme/guile-dbd-sqlite3/metadata.xml
new file mode 100644
index 000000000000..8e3419f7b601
--- /dev/null
+++ b/dev-scheme/guile-dbd-sqlite3/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/opencog/guile-dbi/issues/</bugs-to>
+ <remote-id type="github">opencog/guile-dbi</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-dbi/Manifest b/dev-scheme/guile-dbi/Manifest
new file mode 100644
index 000000000000..9dc862140b2f
--- /dev/null
+++ b/dev-scheme/guile-dbi/Manifest
@@ -0,0 +1 @@
+DIST guile-dbi-2.1.9.tar.gz 90514 BLAKE2B f4adeb33636972c33f5bdb40c906713b35bec4b1d3afc9fbcd55d74d1d5a957b524bbefeb04e9e5ff1cd17e6a40e218d84220f8eaeeaee09bf67604fa1e87e18 SHA512 2f6ec4c792b487b2552eda06b3ee3e470ae0e603e30abafacfb597281a44c53838d7b16d447cf1ee35f9b994c5b0ed1bbf3497eb1e64e783017898e30d82d427
diff --git a/dev-scheme/guile-dbi/files/guile-dbi-2.1.9-find-correct-site-dir.patch b/dev-scheme/guile-dbi/files/guile-dbi-2.1.9-find-correct-site-dir.patch
new file mode 100644
index 000000000000..c188465575b3
--- /dev/null
+++ b/dev-scheme/guile-dbi/files/guile-dbi-2.1.9-find-correct-site-dir.patch
@@ -0,0 +1,32 @@
+https://github.com/opencog/guile-dbi/commit/56e12dcab139c373dafccdd72fa2a140d82f3910
+https://github.com/opencog/guile-dbi/issues/6
+https://github.com/opencog/guile-dbi/issues/7
+
+From 56e12dcab139c373dafccdd72fa2a140d82f3910 Mon Sep 17 00:00:00 2001
+From: Linas Vepstas <linas@linas.org>
+Date: Mon, 17 Jul 2023 19:42:45 +0300
+Subject: [PATCH] Bug-fix for issues #6 and #7
+
+Seems to work for me...
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,13 +53,13 @@ LTDL_INIT
+
+ # Checks for libraries.
+ PKG_CHECK_MODULES([GUILE], [guile-3.0])
+-#GUILE_PKG([3.0])
+-#GUILE_FLAGS
+-#GUILE_SITE_DIR
++GUILE_PKG([3.0])
++GUILE_FLAGS
++GUILE_SITE_DIR
+ #--
+-#CFLAGS="${CFLAGS} ${LTDLINCL} `$GUILECONFIG compile`"
+-#LIBS="$LIBLTDL `$GUILECONFIG link`"
+-#GUILE_SITE=`$GUILECONFIG info sitedir`
++CFLAGS="${CFLAGS} ${LTDLINCL} `$GUILE_CONFIG compile`"
++LIBS="$LIBLTDL `$GUILE_CONFIG link`"
++GUILE_SITE=`$GUILE_CONFIG info sitedir`
+
+ # Check for makeinfo; avoid ugliness if not installed.
+ AC_CHECK_PROG(have_makeinfo,makeinfo,yes,no)
diff --git a/dev-scheme/guile-dbi/guile-dbi-2.1.9.ebuild b/dev-scheme/guile-dbi/guile-dbi-2.1.9.ebuild
new file mode 100644
index 000000000000..0356148ea666
--- /dev/null
+++ b/dev-scheme/guile-dbi/guile-dbi-2.1.9.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+inherit autotools guile
+
+DESCRIPTION="An SQL database interface for Guile"
+HOMEPAGE="https://github.com/opencog/guile-dbi/"
+SRC_URI="https://github.com/opencog/${PN}/archive/${P}.tar.gz"
+S="${WORKDIR}"/${PN}-${P}/${PN}
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/libltdl
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/guile-dbi-2.1.9-find-correct-site-dir.patch
+)
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-dbi/metadata.xml b/dev-scheme/guile-dbi/metadata.xml
new file mode 100644
index 000000000000..687430a3781d
--- /dev/null
+++ b/dev-scheme/guile-dbi/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ guile-dbi is a library for Guile that provides a convenient interface to
+ SQL databases. Database programming with guile-dbi is generic in that the
+ same programming interface is presented regardless of which database system
+ is used.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/opencog/guile-dbi/issues/</bugs-to>
+ <remote-id type="github">opencog/guile-dbi</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-gcrypt/Manifest b/dev-scheme/guile-gcrypt/Manifest
new file mode 100644
index 000000000000..8f752af6b134
--- /dev/null
+++ b/dev-scheme/guile-gcrypt/Manifest
@@ -0,0 +1 @@
+DIST guile-gcrypt-0.4.0.tar.gz 56915 BLAKE2B 0b1ca0b23531f1dd28422798f235d15898ec67dd77fa08b52f9ccbfc9b9c1ed55abd1ec7cd15c9a129444e9d7411e24ef5b73ebc8547ca9e0408e7e5a552a200 SHA512 5dbb5ca9f00a607200c600d438f5d96db271a5e889f4e92d361793073ef618b1f731c3bc31dc39c7b939c2e9111da7905ed68845f55fe7fd24b064496e9d2677
diff --git a/dev-scheme/guile-gcrypt/guile-gcrypt-0.4.0-r100.ebuild b/dev-scheme/guile-gcrypt/guile-gcrypt-0.4.0-r100.ebuild
new file mode 100644
index 000000000000..bfe2d620c882
--- /dev/null
+++ b/dev-scheme/guile-gcrypt/guile-gcrypt-0.4.0-r100.ebuild
@@ -0,0 +1,43 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile bindings of libgcrypt"
+HOMEPAGE="https://notabug.org/cwebber/guile-gcrypt"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://notabug.org/cwebber/${PN}.git"
+else
+ SRC_URI="https://notabug.org/cwebber/guile-gcrypt/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/libgcrypt:0=
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/guile-gcrypt/metadata.xml b/dev-scheme/guile-gcrypt/metadata.xml
new file mode 100644
index 000000000000..ad23cad35e47
--- /dev/null
+++ b/dev-scheme/guile-gcrypt/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://notabug.org/cwebber/guile-gcrypt</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-gi/Manifest b/dev-scheme/guile-gi/Manifest
new file mode 100644
index 000000000000..58ec9ee423fc
--- /dev/null
+++ b/dev-scheme/guile-gi/Manifest
@@ -0,0 +1 @@
+DIST guile-gi-0.3.2.tar.gz 350346 BLAKE2B 8680891e3a0854b2741a26847ad0f75262d83ba240caa6afc38765445477cd3d9b4abfecf0c2dc68b05c61efe6cdbde633c16d98cbb6db49e2727adfb83004c3 SHA512 88a58ac8c97a2bb0c9304183423b77831365706aafb9a98185a555b19783247aaf7bf80963a3b75090a9774a8360b3767583e8cdd8416fdad0d3c23973fb37c6
diff --git a/dev-scheme/guile-gi/files/guile-gi-0.3.2-function-cast.patch b/dev-scheme/guile-gi/files/guile-gi-0.3.2-function-cast.patch
new file mode 100644
index 000000000000..74d325bf7c20
--- /dev/null
+++ b/dev-scheme/guile-gi/files/guile-gi-0.3.2-function-cast.patch
@@ -0,0 +1,89 @@
+https://bugs.gentoo.org/880955
+
+Based on https://github.com/spk121/guile-gi/commit/94144d0beffa96bf62c03bc71b498b94dafacc46
+
+--- a/src/gig_callback.c
++++ b/src/gig_callback.c
+@@ -296,6 +296,12 @@ callback_binding_inner(struct callback_binding_args *args)
+ return (void *)1;
+ }
+
++inline static void *
++callback_binding_inner_v(void *args)
++{
++ return callback_binding_inner(args);
++}
++
+ void
+ callback_binding(ffi_cif *cif, gpointer ret, gpointer *ffi_args, gpointer user_data)
+ {
+@@ -314,7 +320,7 @@ callback_binding(ffi_cif *cif, gpointer ret, gpointer *ffi_args, gpointer user_d
+ if (scm_is_true(scm_fluid_ref(gig_callback_thread_fluid)))
+ callback_binding_inner(&args);
+ else {
+- if (NULL == scm_with_guile(callback_binding_inner, &args))
++ if (NULL == scm_with_guile(callback_binding_inner_v, &args))
+ scm_c_eval_string("(quit EXIT_FAILURE)");
+ }
+ }
+@@ -365,6 +371,12 @@ c_callback_binding_inner(struct callback_binding_args *args)
+ return (void *)1;
+ }
+
++inline static void *
++c_callback_binding_inner_v(void *args)
++{
++ return c_callback_binding_inner(args);
++}
++
+ void
+ c_callback_binding(ffi_cif *cif, gpointer ret, gpointer *ffi_args, gpointer user_data)
+ {
+@@ -383,7 +395,7 @@ c_callback_binding(ffi_cif *cif, gpointer ret, gpointer *ffi_args, gpointer user
+ if (scm_is_true(scm_fluid_ref(gig_callback_thread_fluid)))
+ c_callback_binding_inner(&args);
+ else {
+- if (NULL == scm_with_guile(c_callback_binding_inner, &args))
++ if (NULL == scm_with_guile(c_callback_binding_inner_v, &args))
+ scm_c_eval_string("(quit EXIT_FAILURE)");
+ }
+ }
+@@ -692,10 +704,16 @@ callback_free(GigCallback *gcb)
+ g_free(gcb);
+ }
+
++inline static void
++callback_free_v(void *gcb)
++{
++ callback_free(gcb);
++}
++
+ static void
+ gig_fini_callback(void)
+ {
+ g_debug("Freeing callbacks");
+- g_slist_free_full(callback_list, (GDestroyNotify)callback_free);
++ g_slist_free_full(callback_list, (GDestroyNotify)callback_free_v);
+ callback_list = NULL;
+ }
+--- a/src/gig_type_private.c
++++ b/src/gig_type_private.c
+@@ -59,8 +59,14 @@ _boxed_funcs_free(GigBoxedFuncs *funcs)
+ g_free(funcs);
+ }
+
++inline static void
++_boxed_funcs_free_v(void *funcs)
++{
++ _boxed_funcs_free(funcs);
++}
++
+ void
+ _free_boxed_funcs()
+ {
+- g_slist_free_full(_boxed_funcs, (GDestroyNotify)_boxed_funcs_free);
++ g_slist_free_full(_boxed_funcs, (GDestroyNotify)_boxed_funcs_free_v);
+ }
+--
+2.46.0
+
diff --git a/dev-scheme/guile-gi/guile-gi-0.3.2-r100.ebuild b/dev-scheme/guile-gi/guile-gi-0.3.2-r100.ebuild
new file mode 100644
index 000000000000..cbf905fc142b
--- /dev/null
+++ b/dev-scheme/guile-gi/guile-gi-0.3.2-r100.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit virtualx autotools guile
+
+DESCRIPTION="Bindings for GObject Introspection and libgirepository for Guile"
+HOMEPAGE="https://spk121.github.io/guile-gi/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/spk121/${PN}.git"
+else
+ SRC_URI="https://github.com/spk121/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+REQUIRED_USED="${GUILE_REQUIRED_USE}"
+
+DEPEND="
+ ${GUILE_DEPS}
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ x11-libs/gtk+:3[introspection]
+"
+RDEPEND="${DEPEND}"
+BDEPEND="sys-apps/texinfo"
+
+PATCHES=(
+ "${FILESDIR}"/guile-gi-0.3.2-function-cast.patch
+)
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_configure() {
+ guile_foreach_impl econf --enable-introspection=yes
+}
+
+src_compile() {
+ my_compile() {
+ mkdir test || die
+ default
+ }
+ guile_foreach_impl my_compile
+}
+
+src_test() {
+ guile_foreach_impl virtx default
+}
+
+src_install() {
+ guile_src_install
+
+ mv "${ED}"/usr/share/doc/${PN} "${ED}"/usr/share/doc/${PF} || die
+ find "${ED}" -type f -name '*.la' -delete || die
+}
diff --git a/dev-scheme/guile-gi/guile-gi-9999.ebuild b/dev-scheme/guile-gi/guile-gi-9999.ebuild
new file mode 100644
index 000000000000..cbf905fc142b
--- /dev/null
+++ b/dev-scheme/guile-gi/guile-gi-9999.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit virtualx autotools guile
+
+DESCRIPTION="Bindings for GObject Introspection and libgirepository for Guile"
+HOMEPAGE="https://spk121.github.io/guile-gi/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/spk121/${PN}.git"
+else
+ SRC_URI="https://github.com/spk121/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+
+REQUIRED_USED="${GUILE_REQUIRED_USE}"
+
+DEPEND="
+ ${GUILE_DEPS}
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ x11-libs/gtk+:3[introspection]
+"
+RDEPEND="${DEPEND}"
+BDEPEND="sys-apps/texinfo"
+
+PATCHES=(
+ "${FILESDIR}"/guile-gi-0.3.2-function-cast.patch
+)
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
+
+src_configure() {
+ guile_foreach_impl econf --enable-introspection=yes
+}
+
+src_compile() {
+ my_compile() {
+ mkdir test || die
+ default
+ }
+ guile_foreach_impl my_compile
+}
+
+src_test() {
+ guile_foreach_impl virtx default
+}
+
+src_install() {
+ guile_src_install
+
+ mv "${ED}"/usr/share/doc/${PN} "${ED}"/usr/share/doc/${PF} || die
+ find "${ED}" -type f -name '*.la' -delete || die
+}
diff --git a/dev-scheme/guile-gi/metadata.xml b/dev-scheme/guile-gi/metadata.xml
new file mode 100644
index 000000000000..a40d5a3a466e
--- /dev/null
+++ b/dev-scheme/guile-gi/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ This is a library for GNU Guile to create language bindings via GObject
+ Introspection.
+ Guile GI has two primary components:
+ - The gi scheme modules: guile modules that provide functionality to
+ dynamically generate Scheme API from GObject typelib files.
+ - libguile-gi.so or libguile-gi.dll: a compiled module that contains glue
+ code to interface with GObject.
+ To create bindings, use the use-typelibs syntax found in the (gi) library.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/spk121/guile-gi/issues/</bugs-to>
+ <remote-id type="github">spk121/guile-gi</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-git/Manifest b/dev-scheme/guile-git/Manifest
new file mode 100644
index 000000000000..8b319a5028fe
--- /dev/null
+++ b/dev-scheme/guile-git/Manifest
@@ -0,0 +1,3 @@
+DIST guile-git-v0.11.0.tar.bz2 110689 BLAKE2B 69b18276128de58bfe67f82380a9501acdee173c9db4ba3c38a559fc8d61f2219eb1ac26b37e0f4a8d64d9b4ed53370f69bb4234d340a48ae900f228f0a4401f SHA512 aa56bcdf6a631cd27983f2073a33830deb65c9141c724d79533e84a8d28dd6df087c14400e9250e9ef6e5dea06f2c4542991e2aa1b5283e9fe7e50d5a7555141
+DIST guile-git-v0.8.0.tar.bz2 100931 BLAKE2B 1f36be666eeca6d2e826582ea780eb7d7bad8b212b4848a8814aae5e21547657f5d46e163758beb21fb30e5fba2ba66f3fb96cc94f701e9f740cb78398d0a7b2 SHA512 cad6777a26f94d26b7967ff1a2619d19b773ace6332dda7c4ff3c355762d2d1f7740be3fdf34dc1fc91a2b2ad202f51865b3e4dd6574cd91a4f149d5c51c6b47
+DIST guile-git-v0.9.0.tar.bz2 103368 BLAKE2B e3ed7a9f1da66590443034f128f1ac73f84eb28d64b998bdecec5afd8abeb70f5b0529676f051e58ca844231708fb651b68653380ebd35f098a35055ca512f91 SHA512 42fbdbbf637b5b14cf4d8aa56e1b96dcc6e454f7d077fa2304ed44dc2485fe4c90557e2fb33220e3e8145a1fcb6ccd68cd4f40ff325386099c3232d9e373fc0b
diff --git a/dev-scheme/guile-git/guile-git-0.11.0.ebuild b/dev-scheme/guile-git/guile-git-0.11.0.ebuild
new file mode 100644
index 000000000000..4d31c7714db5
--- /dev/null
+++ b/dev-scheme/guile-git/guile-git-0.11.0.ebuild
@@ -0,0 +1,51 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+
+inherit autotools guile
+
+DESCRIPTION="Guile bindings of git"
+HOMEPAGE="https://gitlab.com/guile-git/guile-git/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://gitlab.com/${PN}/${PN}"
+else
+ SRC_URI="https://gitlab.com/${PN}/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+ S="${WORKDIR}/${PN}-v${PV}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-3+"
+SLOT="0"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=dev-libs/libgit2-1.8.0:=
+ >=dev-scheme/bytestructures-2.0.2-r100[${GUILE_USEDEP}]
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ guile_src_prepare
+
+ # network sandbox + ssh configuration
+ sed -i -e '/tests\/clone.scm/d' Makefile.am || die
+
+ eautoreconf
+}
+
+src_test() {
+ guile_foreach_impl emake VERBOSE="1" check
+}
diff --git a/dev-scheme/guile-git/guile-git-0.8.0-r1.ebuild b/dev-scheme/guile-git/guile-git-0.8.0-r1.ebuild
new file mode 100644
index 000000000000..f7abd52f6920
--- /dev/null
+++ b/dev-scheme/guile-git/guile-git-0.8.0-r1.ebuild
@@ -0,0 +1,51 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+
+inherit autotools guile
+
+DESCRIPTION="Guile bindings of git"
+HOMEPAGE="https://gitlab.com/guile-git/guile-git/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://gitlab.com/${PN}/${PN}.git"
+else
+ SRC_URI="https://gitlab.com/${PN}/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+ S="${WORKDIR}/${PN}-v${PV}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-3+"
+SLOT="0"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=dev-libs/libgit2-1.8.0:=
+ >=dev-scheme/bytestructures-2.0.2-r100[${GUILE_USEDEP}]
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ guile_src_prepare
+
+ # network sandbox + ssh configuration
+ sed -i -e '/tests\/clone.scm/d' Makefile.am || die
+
+ eautoreconf
+}
+
+src_test() {
+ guile_foreach_impl emake VERBOSE="1" check
+}
diff --git a/dev-scheme/guile-git/guile-git-0.9.0-r1.ebuild b/dev-scheme/guile-git/guile-git-0.9.0-r1.ebuild
new file mode 100644
index 000000000000..f7abd52f6920
--- /dev/null
+++ b/dev-scheme/guile-git/guile-git-0.9.0-r1.ebuild
@@ -0,0 +1,51 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+
+inherit autotools guile
+
+DESCRIPTION="Guile bindings of git"
+HOMEPAGE="https://gitlab.com/guile-git/guile-git/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://gitlab.com/${PN}/${PN}.git"
+else
+ SRC_URI="https://gitlab.com/${PN}/${PN}/-/archive/v${PV}/${PN}-v${PV}.tar.bz2"
+ S="${WORKDIR}/${PN}-v${PV}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-3+"
+SLOT="0"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=dev-libs/libgit2-1.8.0:=
+ >=dev-scheme/bytestructures-2.0.2-r100[${GUILE_USEDEP}]
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ guile_src_prepare
+
+ # network sandbox + ssh configuration
+ sed -i -e '/tests\/clone.scm/d' Makefile.am || die
+
+ eautoreconf
+}
+
+src_test() {
+ guile_foreach_impl emake VERBOSE="1" check
+}
diff --git a/dev-scheme/guile-git/metadata.xml b/dev-scheme/guile-git/metadata.xml
new file mode 100644
index 000000000000..d48f281c6f54
--- /dev/null
+++ b/dev-scheme/guile-git/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://gitlab.com/guile-git/guile-git</bugs-to>
+ <remote-id type="gitlab">guile-git/guile-git</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-gnutls/Manifest b/dev-scheme/guile-gnutls/Manifest
new file mode 100644
index 000000000000..c0823b087013
--- /dev/null
+++ b/dev-scheme/guile-gnutls/Manifest
@@ -0,0 +1 @@
+DIST guile-gnutls-4.0.1.tar.bz2 179830 BLAKE2B 34acf2c9550fc2bde239d4ec1a3be3b4875b5e9c281e148dfc879786667316e876071e1988727b0777919a8308160c54bee4f66a76eca0cd1941a85c646995d9 SHA512 d86501a3c3c55513f4da68c9b63bf2316a922f1bfcaf5830b0312d52ba6da09e3c3847ac37dff5236737c4ac06b157b6aaa1dabd837fb0f6b836f76f239d066f
diff --git a/dev-scheme/guile-gnutls/guile-gnutls-4.0.1.ebuild b/dev-scheme/guile-gnutls/guile-gnutls-4.0.1.ebuild
new file mode 100644
index 000000000000..760216855e33
--- /dev/null
+++ b/dev-scheme/guile-gnutls/guile-gnutls-4.0.1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile-GnuTLS provides Guile bindings for the GnuTLS library"
+HOMEPAGE="https://gnutls.gitlab.io/guile/manual/
+ https://gitlab.com/gnutls/guile/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://gitlab.com/gnutls/guile.git"
+else
+ SRC_URI="https://gitlab.com/gnutls/guile/-/archive/v${PV}/guile-v${PV}.tar.bz2
+ -> ${P}.tar.bz2"
+ S="${WORKDIR}/guile-v${PV}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ net-libs/gnutls:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
+
+src_configure() {
+ my_configure() {
+ # --disable-srp-authentication: bug #894050
+ econf --disable-srp-authentication guile_snarf=${GUILESNARF}
+ }
+ guile_foreach_impl my_configure
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-gnutls/metadata.xml b/dev-scheme/guile-gnutls/metadata.xml
new file mode 100644
index 000000000000..27e88176a131
--- /dev/null
+++ b/dev-scheme/guile-gnutls/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <doc>https://gnutls.gitlab.io/guile/manual/</doc>
+ <bugs-to>https://gitlab.com/gnutls/guile/-/issues/</bugs-to>
+ <remote-id type="gitlab">gnutls/guile</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-hall/Manifest b/dev-scheme/guile-hall/Manifest
new file mode 100644
index 000000000000..1218810edb91
--- /dev/null
+++ b/dev-scheme/guile-hall/Manifest
@@ -0,0 +1 @@
+DIST guile-hall-0.4.1.tar.bz2 52701 BLAKE2B 0e6e8f680d1b6e76116c44bd2322d2f2e1e167bae857277d528cffa13079aff6a4dc796fce52c3f46baa737824f711e827b6940d7a30e4c21890154c032db24e SHA512 a7c150cab6df7e181a9eabe8ace8b32c3e70529ee4b2fcd63f34fa193ce64695e6da7a25aafe5bb0c068696e2d5dd0698ad9d62ac559ec350dca7eda5444d10d
diff --git a/dev-scheme/guile-hall/guile-hall-0.4.1-r101.ebuild b/dev-scheme/guile-hall/guile-hall-0.4.1-r101.ebuild
new file mode 100644
index 000000000000..902464a9003f
--- /dev/null
+++ b/dev-scheme/guile-hall/guile-hall-0.4.1-r101.ebuild
@@ -0,0 +1,31 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile tooling to create and publish projects"
+HOMEPAGE="https://gitlab.com/a-sassmannshausen/guile-hall/"
+SRC_URI="https://gitlab.com/a-sassmannshausen/${PN}/-/archive/${PV}/${P}.tar.bz2"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=dev-scheme/guile-config-0.5.1-r100[${GUILE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ sed -i -e "s|@verbatiminclude |@verbatiminclude ${S}/|" doc/hall.texi || die
+
+ eautoreconf
+}
diff --git a/dev-scheme/guile-hall/metadata.xml b/dev-scheme/guile-hall/metadata.xml
new file mode 100644
index 000000000000..8e2e942bff64
--- /dev/null
+++ b/dev-scheme/guile-hall/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Hall is a command-line application and a set of Guile libraries that allow
+ you to quickly create and publish Guile projects. It allows you to
+ transparently support the GNU build system, manage a project hierarchy and
+ provides tight coupling to Guix.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://gitlab.com/a-sassmannshausen/guile-hall/-/issues/</bugs-to>
+ <remote-id type="gitlab">a-sassmannshausen/guile-hall</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-json/Manifest b/dev-scheme/guile-json/Manifest
new file mode 100644
index 000000000000..1c3d5a1bded1
--- /dev/null
+++ b/dev-scheme/guile-json/Manifest
@@ -0,0 +1 @@
+DIST guile-json-4.7.3.tar.gz 164453 BLAKE2B 4cc85677eaab3753f6e2a3b7aa93a6e98bfd11e4b54886b7ddd37f4ff9006bc2f62a36228ca2989a77fab2363e60cd44b1d3985eb884139e6e1a6e1eb1469d60 SHA512 d2d22cd3962e7379c2cbe0b9220ddeaa1989c22cd757577302490b269aa52e2d9e3174f1c9ed22ad68bc0c5a1bb82d2fee354b2888d84372eed613e15b9803d1
diff --git a/dev-scheme/guile-json/guile-json-4.7.3-r100.ebuild b/dev-scheme/guile-json/guile-json-4.7.3-r100.ebuild
new file mode 100644
index 000000000000..545f1819973f
--- /dev/null
+++ b/dev-scheme/guile-json/guile-json-4.7.3-r100.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="JSON module for Guile"
+HOMEPAGE="https://savannah.nongnu.org/projects/guile-json/"
+SRC_URI="http://download.savannah.nongnu.org/releases/guile-json/${P}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
diff --git a/dev-scheme/guile-json/metadata.xml b/dev-scheme/guile-json/metadata.xml
new file mode 100644
index 000000000000..a50f4150f4e5
--- /dev/null
+++ b/dev-scheme/guile-json/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="savannah-nongnu">guile-json</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-lib/Manifest b/dev-scheme/guile-lib/Manifest
new file mode 100644
index 000000000000..e8eeffb05288
--- /dev/null
+++ b/dev-scheme/guile-lib/Manifest
@@ -0,0 +1,2 @@
+DIST guile-lib-0.2.7.tar.gz 451202 BLAKE2B d8420a718697611443a40af089aad6e1d48390e5bef764f84955beeec8d6346066547d73c30898b96e727d4f470df6a032438067240bba8b25058bc65b85d9fa SHA512 d27d1398f81172e4488c5ac5c2d076baeeeaa12fa19d83a87faf0767c255b79f8eb24438950da3865e797299be90f7dc1dcc964076d53df9cab5925a61ad0d1f
+DIST guile-lib-0.2.8.1.tar.gz 461345 BLAKE2B 10fe6a3c93ffd09fd92ad43b7cdd5cf949e3f9f11ce2aebd3c28b5227345041ee4a15c8bf1bb26c5a12423fbde65e950707bd0f43ee5787e4fe2853c6c56f4f9 SHA512 655c559c19beb008016fb3f313184c0da83f6dad53987045648cdb84bbca05f839b1a31c3cd12727510f51511c7d248d16438d87113cf8e99134925a2ad64312
diff --git a/dev-scheme/guile-lib/files/guile-lib-0.2.8.1-guile3-primes.patch b/dev-scheme/guile-lib/files/guile-lib-0.2.8.1-guile3-primes.patch
new file mode 100644
index 000000000000..bca9dd1e80ca
--- /dev/null
+++ b/dev-scheme/guile-lib/files/guile-lib-0.2.8.1-guile3-primes.patch
@@ -0,0 +1,26 @@
+# Note that this patch requires >=guile-3, so we apply it conditionally.
+# https://lists.gnu.org/archive/html/guile-devel/2024-05/msg00012.html
+#
+# Fix compile and test failures due to bitvector API change.
+# https://bugs.gentoo.org/877785
+--- a/src/math/primes.scm 2024-05-23 19:26:16.757865343 -0400
++++ b/src/math/primes.scm 2024-05-23 19:28:20.797358650 -0400
+@@ -114,7 +114,7 @@
+ (set! prime:prime-sqr (* nexp nexp))
+ (set! prime:sieve (make-bitvector nexp #f))
+ (for-each (lambda (prime)
+- (bitvector-set! prime:sieve prime #t))
++ (bitvector-set-bit! prime:sieve prime))
+ primes)
+ (set! prime:products (reverse (cons comp comps))))
+ (else
+@@ -132,7 +132,7 @@
+ There is a slight chance, @code{(expt 2 (- prime:trials))}, that a
+ composite will return @code{#t}."
+ (set! n (abs n))
+- (cond ((< n (bitvector-length prime:sieve)) (bitvector-ref prime:sieve n))
++ (cond ((< n (bitvector-length prime:sieve)) (bitvector-bit-set? prime:sieve n))
+ ((even? n) #f)
+ ((primes-gcd? n prime:products) #f)
+ ((< n prime:prime-sqr) #t)
+
diff --git a/dev-scheme/guile-lib/guile-lib-0.2.7-r100.ebuild b/dev-scheme/guile-lib/guile-lib-0.2.7-r100.ebuild
new file mode 100644
index 000000000000..ad310a603dfe
--- /dev/null
+++ b/dev-scheme/guile-lib/guile-lib-0.2.7-r100.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="An accumulation place for pure-scheme Guile modules"
+HOMEPAGE="http://www.nongnu.org/guile-lib/"
+SRC_URI="mirror://nongnu/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRES_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ sed -i -e 's/"guile"/(getenv "GUILE")/' unit-tests/os.process.scm || die
+}
+
+src_configure() {
+ guile_foreach_impl econf --with-guile-site=yes
+}
diff --git a/dev-scheme/guile-lib/guile-lib-0.2.8.1.ebuild b/dev-scheme/guile-lib/guile-lib-0.2.8.1.ebuild
new file mode 100644
index 000000000000..faa78a97f1a3
--- /dev/null
+++ b/dev-scheme/guile-lib/guile-lib-0.2.8.1.ebuild
@@ -0,0 +1,75 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# 2-2 could be made to work but a few tests fail and nobody seems
+# to care about it (patches had no reply on ML).
+GUILE_COMPAT=( 3-0 )
+inherit guile
+
+DESCRIPTION="An accumulation place for pure-scheme Guile modules"
+HOMEPAGE="http://www.nongnu.org/guile-lib/"
+SRC_URI="mirror://nongnu/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRES_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+ sed -i -e 's/"guile"/(getenv "GUILE")/' unit-tests/os.process.scm || die
+ guile_copy_sources
+
+ # Only apply this patch for 3.0 (bug #877785)
+ if use guile_targets_3-0 ; then
+ cd "${WORKDIR}"/${P}-3.0 || die
+ eapply "${FILESDIR}"/${PN}-0.2.8.1-guile3-primes.patch
+ fi
+}
+
+src_configure() {
+ _guile_configure() {
+ cd "${WORKDIR}"/${P}-${GUILE_CURRENT_VERSION} || die
+ ECONF_SOURCE="${WORKDIR}"/${P}-${GUILE_CURRENT_VERSION}
+ econf --with-guile-site=yes
+ }
+
+ guile_foreach_impl _guile_configure
+}
+
+src_compile() {
+ _guile_compile() {
+ cd "${WORKDIR}"/${P}-${GUILE_CURRENT_VERSION} || die
+ sed -i -e "s:exec guile:exec ${GUILE}:" doc/make-texinfo.scm || die
+ emake
+ }
+
+ guile_foreach_impl _guile_compile
+}
+
+src_test() {
+ _guile_test() {
+ cd "${WORKDIR}"/${P}-${GUILE_CURRENT_VERSION} || die
+ emake check
+ }
+
+ guile_foreach_impl _guile_test
+}
+
+src_install() {
+ _guile_install() {
+ cd "${WORKDIR}"/${P}-${GUILE_CURRENT_VERSION} || die
+ emake DESTDIR="${SLOTTED_D}" install
+ }
+
+ einstalldocs
+ guile_foreach_impl _guile_install
+ guile_merge_roots
+ guile_unstrip_ccache
+}
diff --git a/dev-scheme/guile-lib/metadata.xml b/dev-scheme/guile-lib/metadata.xml
new file mode 100644
index 000000000000..1baf3419e74b
--- /dev/null
+++ b/dev-scheme/guile-lib/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Guile-Lib is intended as an accumulation place for pure-scheme Guile
+ modules, allowing for people to cooperate integrating their generic Guile
+ modules into a coherent library. Think "a down-scaled, limited-scope CPAN
+ for Guile".
+ </longdescription>
+ <upstream>
+ <remote-id type="savannah-nongnu">guile-lib</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-libyaml/Manifest b/dev-scheme/guile-libyaml/Manifest
new file mode 100644
index 000000000000..b8e2f7deeefe
--- /dev/null
+++ b/dev-scheme/guile-libyaml/Manifest
@@ -0,0 +1 @@
+DIST guile-libyaml-20211124.tar.gz 6221 BLAKE2B 12e35af8495543f90289bd437d27177901f01090c66ba113d128258c7bd448513332698659b48438a92b75d78dcd686b7ffad66e7c7adb2374f504b1e29485ad SHA512 17e6eef46e412db7be877bf54dc59f4ddb3f2235bb54a33f79aa0e938ad65f5fd68fc4247e055ecde3de37d8d872ccda5f0205d5f546d97458890b0b97764d0d
diff --git a/dev-scheme/guile-libyaml/guile-libyaml-20211124-r100.ebuild b/dev-scheme/guile-libyaml/guile-libyaml-20211124-r100.ebuild
new file mode 100644
index 000000000000..8b6169d5bf4f
--- /dev/null
+++ b/dev-scheme/guile-libyaml/guile-libyaml-20211124-r100.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit edo guile
+
+[[ ${PV} == 20211124 ]] && COMMIT=2bdacb72a65ab63264b2edc9dac9692df7ec9b3e
+
+DESCRIPTION="Simple yaml module for Guile using the ffi-helper from nyacc"
+HOMEPAGE="https://github.com/mwette/guile-libyaml/"
+SRC_URI="https://github.com/mwette/${PN}/archive/${COMMIT}.tar.gz
+ -> ${P}.tar.gz"
+S="${WORKDIR}"/${PN}-${COMMIT}
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/libyaml
+"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-scheme/guile-nyacc"
+
+src_compile() {
+ my_compile() {
+ guild() {
+ GUILE_LOAD_COMPILED_PATH="${BUILD_DIR}" GUILE_LOAD_PATH="${S}" edo "${GUILD}" "${@}" || die
+ }
+ # Generate bindings using NYACC
+ guild compile-ffi --no-exec "${S}"/yaml/libyaml.ffi
+
+ # Compile modules
+ mkdir -p "${BUILD_DIR}"/ccache || die
+ guild compile -o "${BUILD_DIR}"/ccache/libyaml.go "${S}"/yaml/libyaml.scm
+ guild compile -o "${BUILD_DIR}"/ccache/yaml.go "${S}"/yaml.scm
+ }
+
+ guile_foreach_impl my_compile
+}
+
+src_install() {
+ my_install() {
+ local site_dir="$(${GUILE} -c '(display (%site-dir))')"
+ mkdir -p "${SLOTTED_D}/${site_dir}/yaml" || die
+ cp "${S}/yaml/libyaml.scm" "${SLOTTED_D}/${site_dir}/yaml/" || die
+ cp "${S}/yaml.scm" "${SLOTTED_D}/${site_dir}/" || die
+
+ local site_ccache_dir="$(${GUILE} -c '(display (%site-ccache-dir))')"
+ mkdir -p "${SLOTTED_D}/${site_ccache_dir}/yaml" || die
+ cp "${BUILD_DIR}/ccache/libyaml.go" "${SLOTTED_D}/${site_ccache_dir}/yaml/" || die
+ cp "${BUILD_DIR}/ccache/yaml.go" "${SLOTTED_D}/${site_ccache_dir}/" || die
+ }
+
+ guile_foreach_impl my_install
+ guile_merge_roots
+ guile_unstrip_ccache
+
+ einstalldocs
+}
diff --git a/dev-scheme/guile-libyaml/metadata.xml b/dev-scheme/guile-libyaml/metadata.xml
new file mode 100644
index 000000000000..3f151f03aaf3
--- /dev/null
+++ b/dev-scheme/guile-libyaml/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/mwette/guile-libyaml/issues</bugs-to>
+ <remote-id type="github">mwette/guile-libyaml</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-lzlib/Manifest b/dev-scheme/guile-lzlib/Manifest
new file mode 100644
index 000000000000..39138247edb5
--- /dev/null
+++ b/dev-scheme/guile-lzlib/Manifest
@@ -0,0 +1 @@
+DIST guile-lzlib-0.0.2.tar.gz 13291 BLAKE2B 0f43292a4616cfb218e3a2cbc7ba5ebccc0825d8df9a0874a55764a0a0d2961c581689be1142d586ac6926d32fc9023b27905f52ed131057fac15ba69d7d0b41 SHA512 1cede0d0194b2a8839979600ce680850e6cc2405912dcc84265b1f920c4069e94a85e79de3d61e5e7ccabc8ad8719d3759e28b45c16e70cc7c696af40e09cf1a
diff --git a/dev-scheme/guile-lzlib/guile-lzlib-0.0.2-r100.ebuild b/dev-scheme/guile-lzlib/guile-lzlib-0.0.2-r100.ebuild
new file mode 100644
index 000000000000..8d4f27a9c2c6
--- /dev/null
+++ b/dev-scheme/guile-lzlib/guile-lzlib-0.0.2-r100.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="GNU Guile library providing bindings to lzlib"
+HOMEPAGE="https://notabug.org/guile-lzlib/guile-lzlib/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://notabug.org/${PN}/${PN}.git"
+else
+ SRC_URI="https://notabug.org/${PN}/${PN}/archive/${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ app-arch/lzlib
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+DOCS=( AUTHORS ChangeLog HACKING NEWS README.org )
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/guile-lzlib/metadata.xml b/dev-scheme/guile-lzlib/metadata.xml
new file mode 100644
index 000000000000..086fd3b4559f
--- /dev/null
+++ b/dev-scheme/guile-lzlib/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://notabug.org/guile-lzlib/guile-lzlib/issues/</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-ncurses/Manifest b/dev-scheme/guile-ncurses/Manifest
new file mode 100644
index 000000000000..eb270fdf7a1d
--- /dev/null
+++ b/dev-scheme/guile-ncurses/Manifest
@@ -0,0 +1 @@
+DIST guile-ncurses-3.1.tar.gz 921257 BLAKE2B 26ee97ac62ae7877ecf4cce9d798f7afadc98cbba914da1c802321bf83572e5bfe9775e6e3739bbe849cde9843998aca001b6753bde9d5fbb48c4d70133740f9 SHA512 c43264cfb0cc9fe658f7ddd53bb3dfc6c7636ecaf9b8f3f416d449e6463e38061faf419b43d91775dd9642a904055122e7992c16dea1532de6229fcfa68e292f
diff --git a/dev-scheme/guile-ncurses/files/guile-ncurses-3.0-slibtool.patch b/dev-scheme/guile-ncurses/files/guile-ncurses-3.0-slibtool.patch
new file mode 100644
index 000000000000..5c102fca6011
--- /dev/null
+++ b/dev-scheme/guile-ncurses/files/guile-ncurses-3.0-slibtool.patch
@@ -0,0 +1,38 @@
+commit 8c8327c8518508380bd68f52db19432b776833e5
+Author: orbea <orbea@riseup.net>
+Date: Mon May 9 09:06:04 2022 -0700
+
+ build: Link with -ltinfow/-ltinfow to fix undefined references
+
+diff --git a/configure.ac b/configure.ac
+index f194166..954d9b2 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -200,6 +200,13 @@ AS_IF([test "$with_ncursesw" = check],
+ with_ncursesw=yes],
+ [AC_MSG_FAILURE([--with-ncursesw was given, but, test for ncursesw failed])])])
+
++AS_IF([test "$with_ncursesw" = yes],
++ [AC_SEARCH_LIBS([LINES], [tinfow],
++ [AC_DEFINE([HAVE_TINFOW],
++ [1],
++ [Define if you have libtinfow])],
++ [AC_MSG_FAILURE([--with-ncursesw was given, but, test for tinfow failed])])])
++
+ AS_IF([test "$with_ncursesw" = no],
+ [AC_SEARCH_LIBS([initscr], [ncurses],
+ [AC_DEFINE([HAVE_NCURSES],
+@@ -207,6 +214,13 @@ AS_IF([test "$with_ncursesw" = no],
+ [Define if you have libncurses])],
+ [AC_MSG_FAILURE([the ncurses library was not found])])])
+
++AS_IF([test "$with_ncursesw" = no],
++ [AC_SEARCH_LIBS([LINES], [tinfo],
++ [AC_DEFINE([HAVE_TINFO],
++ [1],
++ [Define if you have libntinfo])],
++ [AC_MSG_FAILURE([the tinfo library was not found])])])
++
+ AM_CONDITIONAL([WIDE], [test "$with_ncursesw" = yes])
+
+ AC_MSG_NOTICE([checking for term.h])
diff --git a/dev-scheme/guile-ncurses/guile-ncurses-3.1-r100.ebuild b/dev-scheme/guile-ncurses/guile-ncurses-3.1-r100.ebuild
new file mode 100644
index 000000000000..fb877bf6f978
--- /dev/null
+++ b/dev-scheme/guile-ncurses/guile-ncurses-3.1-r100.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile FFI to ncurses library for text-based console UI"
+HOMEPAGE="https://www.gnu.org/software/guile-ncurses/"
+SRC_URI="mirror://gnu/guile-ncurses/${P}.tar.gz"
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/boehm-gc
+ dev-libs/libatomic_ops
+ dev-libs/libunistring
+ sys-libs/ncurses:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="sys-apps/texinfo"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.0-slibtool.patch # bug #843416
+)
+
+src_prepare() {
+ guile_src_prepare
+
+ # Remove bad tests
+ # > In procedure list-ref: Wrong type argument in position 1: #f
+ local -a bad_tests=(
+ curs_attr_attr_off_underline
+ curs_attr_attr_on_blink
+ curs_attr_attr_on_bold
+ curs_attr_attr_on_dim
+ curs_attr_attr_on_invis
+ curs_attr_attr_on_protect
+ curs_attr_attr_on_reverse
+ curs_attr_attr_on_standout
+ curs_attr_attr_on_underline
+ curs_attr_attr_set
+ curs_attr_attr_set_normal
+ curs_attr_standend
+ curs_attr_standout
+ curs_bkgd_bkgd
+ curs_bkgd_bkgdset
+ termios_speed
+ )
+ local bad_test
+ for bad_test in "${bad_tests[@]}" ; do
+ echo "#t" > test/${bad_test}.scm || die
+ done
+
+ eautoreconf # 843560
+}
+
+src_test() {
+ guile_foreach_impl emake check
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name '*.la' -delete || die
+}
diff --git a/dev-scheme/guile-ncurses/metadata.xml b/dev-scheme/guile-ncurses/metadata.xml
new file mode 100644
index 000000000000..4b46b92b4643
--- /dev/null
+++ b/dev-scheme/guile-ncurses/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ GNU Guile-Ncurses is a library for the Guile Scheme interpreter that
+ provides functions for creating text user interfaces. The text user
+ interface functionality is built on the ncurses libraries: curses, form,
+ panel, and menu.
+ </longdescription>
+ <upstream>
+ <remote-id type="savannah">guile-ncurses</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-nyacc/Manifest b/dev-scheme/guile-nyacc/Manifest
new file mode 100644
index 000000000000..15c0095e0139
--- /dev/null
+++ b/dev-scheme/guile-nyacc/Manifest
@@ -0,0 +1 @@
+DIST nyacc-1.06.7.tar.gz 1270540 BLAKE2B dfd5a961881126fbc285de0cb67cdfdadd14d1cb30c112da633ff776cd6d776658a2834c87c347a4020f9114516c4770247f54d71aada1731ca353a1c6210e1b SHA512 8e0c80a529a55742a7bd342deba8b450a8fef9201cf109f3416cead89ded8db53768a049ba3c9196f455e036645deb2e1b763889cb293068e486e6362c44aad5
diff --git a/dev-scheme/guile-nyacc/guile-nyacc-1.06.7-r101.ebuild b/dev-scheme/guile-nyacc/guile-nyacc-1.06.7-r101.ebuild
new file mode 100644
index 000000000000..d336ca7979db
--- /dev/null
+++ b/dev-scheme/guile-nyacc/guile-nyacc-1.06.7-r101.ebuild
@@ -0,0 +1,29 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+DESCRIPTION="Guile modules for generating parsers and lexical analyzers"
+HOMEPAGE="http://www.nongnu.org/nyacc/"
+SRC_URI="mirror://nongnu/nyacc/nyacc-${PV}.tar.gz"
+S="${WORKDIR}/nyacc-${PV}"
+
+LICENSE="LGPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=dev-scheme/bytestructures-2.0.2-r100[${GUILE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+
+src_install() {
+ guile_src_install
+
+ # Fix docs location
+ mv "${ED}"/usr/share/doc/nyacc "${ED}"/usr/share/doc/${PF} || die
+}
diff --git a/dev-scheme/guile-nyacc/metadata.xml b/dev-scheme/guile-nyacc/metadata.xml
new file mode 100644
index 000000000000..235f03fb4487
--- /dev/null
+++ b/dev-scheme/guile-nyacc/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ NYACC, for Not Yet Another Compiler Compiler, is set of guile modules for
+ generating parsers and lexical analyzers. It also provides sample parsers
+ and pretty-printers using SXML trees as an intermediate representation.
+ It provides a decent C parser and a `FFI Helper' tool to help create Guile
+ Scheme bindings for C-based libraries.
+ It provides (partially implemented) compilers based on above mentioned
+ parsers to allow execution with Guile as extension languages.
+ </longdescription>
+</pkgmetadata>
diff --git a/dev-scheme/guile-reader/Manifest b/dev-scheme/guile-reader/Manifest
new file mode 100644
index 000000000000..adf02596b0ac
--- /dev/null
+++ b/dev-scheme/guile-reader/Manifest
@@ -0,0 +1 @@
+DIST guile-reader-0.6.3.tar.gz 691612 BLAKE2B 504152d3a194705435efa4e2d2b51fd1bc22a998161b09ef0157c13bf46ef593be0101d6b72e197818a8ba18406db0de518423a168d36f54616dfcd4e807f3b9 SHA512 0f9f47ee5f24ebb79894863ac96d63b0c7d2801020a212c59d11c7685ff4006a646be988a696a9b623dc0e0605f46d4a9a8680bfabd299878e41eab92e75efd5
diff --git a/dev-scheme/guile-reader/files/guile-reader-0.6.3-implicit-fn-decl.patch b/dev-scheme/guile-reader/files/guile-reader-0.6.3-implicit-fn-decl.patch
new file mode 100644
index 000000000000..f09f3055c0a6
--- /dev/null
+++ b/dev-scheme/guile-reader/files/guile-reader-0.6.3-implicit-fn-decl.patch
@@ -0,0 +1,25 @@
+From d4ff9b9e4c64f7e60c95676ec74c49b12b20ad3b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@gentoo.org>
+Date: Sat, 3 Aug 2024 18:28:51 +0200
+Subject: [PATCH 1/2] add missing include
+
+fixes an implicit function declaration
+---
+ src/compat.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/compat.c b/src/compat.c
+index 943c7f9..9b15b31 100644
+--- a/src/compat.c
++++ b/src/compat.c
+@@ -21,6 +21,7 @@
+ #endif
+
+ #include <libguile.h>
++#include <libguile/deprecation.h>
+ #include <compat.h>
+ #include <string.h>
+ #include <stdio.h>
+--
+2.45.2
+
diff --git a/dev-scheme/guile-reader/files/guile-reader-0.6.3-slot.patch b/dev-scheme/guile-reader/files/guile-reader-0.6.3-slot.patch
new file mode 100644
index 000000000000..79df5bebb546
--- /dev/null
+++ b/dev-scheme/guile-reader/files/guile-reader-0.6.3-slot.patch
@@ -0,0 +1,66 @@
+From d75f6155c5ff58ac2b3fee311f7056e01b1b6981 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me>
+Date: Sat, 3 Aug 2024 18:29:21 +0200
+Subject: [PATCH 2/2] use the guile extension directory for libguile-reader.so
+
+this directory is slotted, and so, allows parallel installation.
+---
+ configure.ac | 2 ++
+ modules/Makefile.am | 3 ++-
+ modules/system/reader.in | 2 +-
+ src/Makefile.am | 2 +-
+ 4 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index c34e4dd..2ddd308 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -114,6 +114,8 @@ fi
+ AC_PATH_PROGS([GUILD], [guild guile-tools])
+ GUILE_SITE_DIR
+
++AC_SUBST([guileextdir], ["${GUILE_EXTENSION}"])
++
+ clean_LIBS="$LIBS"
+ clean_CFLAGS="$CFLAGS"
+ LIBS="$LIBS $GUILE_LIBS"
+diff --git a/modules/Makefile.am b/modules/Makefile.am
+index 25f2499..b0d4fd4 100644
+--- a/modules/Makefile.am
++++ b/modules/Makefile.am
+@@ -13,7 +13,8 @@ nobase_nodist_guilemodule_DATA = \
+
+ .in.scm:
+ $(AM_V_GEN)$(MKDIR_P) `dirname "$@"` ; \
+- $(SED) -e 's|[@]libdir[@]|$(libdir)|g' < "$<" > "$@.tmp" ; \
++ $(SED) -e 's|[@]guileextdir[@]|$(guileextdir)|g' \
++ < "$<" > "$@.tmp" ; \
+ mv "$@.tmp" "$@"
+
+ if HAVE_GUILE2
+diff --git a/modules/system/reader.in b/modules/system/reader.in
+index fbef2ac..cd23ba7 100644
+--- a/modules/system/reader.in
++++ b/modules/system/reader.in
+@@ -58,7 +58,7 @@
+
+ (define %libguile-reader
+ (string-append (or (getenv "GUILE_READER_LIBDIR")
+- "@libdir@")
++ "@guileextdir@")
+ "/libguile-reader"))
+
+ (load-extension %libguile-reader "scm_reader_init_bindings")
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e029bac..71294c2 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,4 +1,4 @@
+-lib_LTLIBRARIES = libguile-reader.la
++guileext_LTLIBRARIES = libguile-reader.la
+ libguile_reader_la_SOURCES = reader.c token-readers.c reader-lib.c compat.c
+ libguile_reader_la_LDFLAGS = -module -version-info 1:0:0 $(GUILE_LDFLAGS)
+
+--
+2.45.2
+
diff --git a/dev-scheme/guile-reader/guile-reader-0.6.3-r100.ebuild b/dev-scheme/guile-reader/guile-reader-0.6.3-r100.ebuild
new file mode 100644
index 000000000000..34586edea1bc
--- /dev/null
+++ b/dev-scheme/guile-reader/guile-reader-0.6.3-r100.ebuild
@@ -0,0 +1,60 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile autotools
+
+DESCRIPTION="Simple framework for building readers for GNU Guile"
+HOMEPAGE="https://www.nongnu.org/guile-reader/"
+SRC_URI="mirror://nongnu/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-util/gperf"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.6.3-implicit-fn-decl.patch"
+ "${FILESDIR}/${PN}-0.6.3-slot.patch"
+)
+
+src_prepare() {
+ default
+
+ eautoreconf
+
+ guile_bump_sources
+}
+
+configure_one_src() {
+ local -x guile_snarf="${GUILESNARF}"
+ # We don't have lightning packaged and, naturally, guile-reader has
+ # no --with-... for it. Suppress the automagic.
+ econf \
+ ac_cv_header_lightning_h=no
+}
+
+src_configure() {
+ guile_foreach_impl configure_one_src
+}
+
+compile_one_src() {
+ # Makefile appears to be missing seemingly all dependencies.
+ emake -j1 --shuffle=none
+}
+
+src_compile() {
+ guile_foreach_impl compile_one_src
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -type f -name '*.la' -delete || die
+}
diff --git a/dev-scheme/guile-reader/metadata.xml b/dev-scheme/guile-reader/metadata.xml
new file mode 100644
index 000000000000..118c6ab5a22f
--- /dev/null
+++ b/dev-scheme/guile-reader/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Guile-Reader is a simple framework for building readers for GNU Guile.
+ The idea is to make it easy to build procedures that extend Guile's read
+ procedure. Readers supporting various syntax variants can easily be
+ written, possibly by re-using existing "token readers" of a standard Scheme
+ readers. For example, it is used to implement Skribilo's R5RS-derived
+ document syntax.
+ Guile-Reader's approach is similar to Common Lisp's "read table", but
+ hopefully more powerful and flexible (for instance, one may instantiate as
+ many readers as needed).
+ </longdescription>
+ <upstream>
+ <remote-id type="savannah-nongnu">guile-reader</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-sqlite3/Manifest b/dev-scheme/guile-sqlite3/Manifest
new file mode 100644
index 000000000000..58b3ed762e39
--- /dev/null
+++ b/dev-scheme/guile-sqlite3/Manifest
@@ -0,0 +1 @@
+DIST guile-sqlite3-0.1.3.tar.gz 25017 BLAKE2B 74d78592a7d87a66fe74bab49a5fbbabe66bc1f7967ef1323992a04cb4996f78759d2aa05827cad24298a9349fe0a24c94a0cfea54a9f09aeaef01c7dcc19d61 SHA512 1abc6646c775b4bf61d7f9f8a75d8ba4da2e67c9d85cd6a29c432acdb0ed68fcb6e7073693d06787d83c3ceb84bd512e71f53d18afeb0063e1cfc296b6873f79
diff --git a/dev-scheme/guile-sqlite3/guile-sqlite3-0.1.3-r100.ebuild b/dev-scheme/guile-sqlite3/guile-sqlite3-0.1.3-r100.ebuild
new file mode 100644
index 000000000000..1346542b5b64
--- /dev/null
+++ b/dev-scheme/guile-sqlite3/guile-sqlite3-0.1.3-r100.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Guile bindings of sqlite3"
+HOMEPAGE="https://notabug.org/guile-sqlite3/guile-sqlite3"
+SRC_URI="https://notabug.org/guile-sqlite3/guile-sqlite3/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}"
+
+LICENSE="LGPL-3+ GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-db/sqlite:3=
+"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile_src_prepare
+
+ # upstream tag on top of source tree. has no autogenerated files
+ eautoreconf
+}
diff --git a/dev-scheme/guile-sqlite3/metadata.xml b/dev-scheme/guile-sqlite3/metadata.xml
new file mode 100644
index 000000000000..f1731075833a
--- /dev/null
+++ b/dev-scheme/guile-sqlite3/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://notabug.org/guile-sqlite3/guile-sqlite3</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-ssh/Manifest b/dev-scheme/guile-ssh/Manifest
new file mode 100644
index 000000000000..0836c3f77fb9
--- /dev/null
+++ b/dev-scheme/guile-ssh/Manifest
@@ -0,0 +1,2 @@
+DIST guile-ssh-0.16.4.tar.gz 532702 BLAKE2B 47dd2fde37aa2047d836f464d567736208bfed8afee668bf76d35910a866b1c3e869f346b89b4fce7b747d5806a004933cd673851015f8d76afc61c06a398ad2 SHA512 1c70d4885a6f821c3018650d2537316de981ad5f76eadc51ed2c5dd51225e39e67ad1b979769b1b81a0f061ddeecd11d878b3844d9f8e78fdd0915e2f1a28838
+DIST guile-ssh-0.18.0.tar.gz 600133 BLAKE2B 5983c47e5fae7a8c5a9da64b196e0ef0ba5e1a42b32e290ab73cdbb784fadcc5a91e4c2aa3b408981cd5dd12ef1722f409d0788905b2d5e37bfd64d7da998479 SHA512 9e3758c9288e36fbaa8eb69f8f3e3536f5972c8ab8fe1c32b7e4c79d37b31d3a452b05e4849201d39d49e615ef054bfe4b6cee091de90c1c68952c8ebe2c8bc1
diff --git a/dev-scheme/guile-ssh/files/guile-ssh-0.16.2-tests.patch b/dev-scheme/guile-ssh/files/guile-ssh-0.16.2-tests.patch
new file mode 100644
index 000000000000..071ef5add279
--- /dev/null
+++ b/dev-scheme/guile-ssh/files/guile-ssh-0.16.2-tests.patch
@@ -0,0 +1,18 @@
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -23,15 +23,12 @@ if !CROSS_COMPILING
+
+ SCM_TESTS = \
+ log.scm \
+- version.scm \
+- server.scm \
+ session.scm \
+ client-server.scm \
+ popen.scm \
+ shell.scm \
+ server-client.scm \
+ sssh-ssshd.scm \
+- key.scm \
+ tunnel.scm \
+ dist.scm
+
diff --git a/dev-scheme/guile-ssh/files/guile-ssh-0.16.4-c23.patch b/dev-scheme/guile-ssh/files/guile-ssh-0.16.4-c23.patch
new file mode 100644
index 000000000000..1e7502060b89
--- /dev/null
+++ b/dev-scheme/guile-ssh/files/guile-ssh-0.16.4-c23.patch
@@ -0,0 +1,33 @@
+https://bugs.gentoo.org/942958
+https://github.com/artyom-poptsov/guile-ssh/pull/43
+
+From 30fc103c67f3bf6cd30b17379ba966b260cfa534 Mon Sep 17 00:00:00 2001
+From: Peter Tillemans <pti@snamellit.com>
+Date: Wed, 18 Sep 2024 15:52:46 +0200
+Subject: [PATCH] fix compile error caused by bool identifier
+
+confusion of variable name with typename is now an error.
+---
+ libguile-ssh/session-func.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libguile-ssh/session-func.c b/libguile-ssh/session-func.c
+index 7006b62..836cd27 100644
+--- a/libguile-ssh/session-func.c
++++ b/libguile-ssh/session-func.c
+@@ -234,12 +234,12 @@ set_int32_opt (ssh_session session, int type, SCM value)
+ static inline int
+ set_bool_opt (ssh_session session, int type, SCM value)
+ {
+- int32_t bool;
++ int32_t bool_value;
+
+ SCM_ASSERT (scm_is_bool (value), value, SCM_ARG3, "session-set!");
+
+- bool = scm_to_bool (value);
+- return ssh_options_set (session, type, &bool);
++ bool_value = scm_to_bool (value);
++ return ssh_options_set (session, type, &bool_value);
+ }
+
+ /* Convert VALUE to a socket file descriptor and pass it to
diff --git a/dev-scheme/guile-ssh/guile-ssh-0.16.4-r100.ebuild b/dev-scheme/guile-ssh/guile-ssh-0.16.4-r100.ebuild
new file mode 100644
index 000000000000..3202fdb834b5
--- /dev/null
+++ b/dev-scheme/guile-ssh/guile-ssh-0.16.4-r100.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Library providing access to the SSH protocol for GNU Guile"
+HOMEPAGE="https://memory-heap.org/~avp/projects/guile-ssh/
+ https://github.com/artyom-poptsov/guile-ssh/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/artyom-poptsov/${PN}.git"
+else
+ SRC_URI="https://github.com/artyom-poptsov/${PN}/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/boehm-gc
+ dev-libs/libatomic_ops
+ net-libs/libssh:0=[server,sftp]
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.16.2-tests.patch"
+ "${FILESDIR}/${PN}-0.16.4-c23.patch"
+)
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
+
+src_configure() {
+ my_configure() {
+ econf guile_snarf=${GUILESNARF}
+ }
+ guile_foreach_impl my_configure
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-ssh/guile-ssh-0.18.0.ebuild b/dev-scheme/guile-ssh/guile-ssh-0.18.0.ebuild
new file mode 100644
index 000000000000..6946294843a7
--- /dev/null
+++ b/dev-scheme/guile-ssh/guile-ssh-0.18.0.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="Library providing access to the SSH protocol for GNU Guile"
+HOMEPAGE="https://memory-heap.org/~avp/projects/guile-ssh/
+ https://github.com/artyom-poptsov/guile-ssh/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://github.com/artyom-poptsov/${PN}.git"
+else
+ SRC_URI="https://github.com/artyom-poptsov/${PN}/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ dev-libs/boehm-gc
+ dev-libs/libatomic_ops
+ net-libs/libssh:0=[server,sftp]
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.16.2-tests.patch"
+)
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
+
+src_configure() {
+ my_configure() {
+ econf guile_snarf=${GUILESNARF}
+ }
+ guile_foreach_impl my_configure
+}
+
+src_install() {
+ guile_src_install
+
+ find "${ED}" -name "*.la" -delete || die
+}
diff --git a/dev-scheme/guile-ssh/metadata.xml b/dev-scheme/guile-ssh/metadata.xml
new file mode 100644
index 000000000000..66dcc502864b
--- /dev/null
+++ b/dev-scheme/guile-ssh/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://github.com/artyom-poptsov/guile-ssh/issues/</bugs-to>
+ <remote-id type="github">artyom-poptsov/guile-ssh</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-zlib/Manifest b/dev-scheme/guile-zlib/Manifest
new file mode 100644
index 000000000000..b45debe18ed0
--- /dev/null
+++ b/dev-scheme/guile-zlib/Manifest
@@ -0,0 +1 @@
+DIST guile-zlib-0.1.0.tar.gz 14652 BLAKE2B 10f0c4d312b07415f3846927a3a1d59aa62106bf0e4a4446ba6764486104053da544fc994491af6611154edb459bba7c55e79095695b90c28ce4237e24e3b98b SHA512 bf9201c7c01324a44ae86a673f4d1b92fd6f346d0be9d5a6390cc8be11d79d00a1cdee88c28ceb7fc5b99215198cf3ac368884381933e40babc85a21cbd300e3
diff --git a/dev-scheme/guile-zlib/files/guile-zlib-0.1.0-gentoo.patch b/dev-scheme/guile-zlib/files/guile-zlib-0.1.0-gentoo.patch
new file mode 100644
index 000000000000..9d63512f8499
--- /dev/null
+++ b/dev-scheme/guile-zlib/files/guile-zlib-0.1.0-gentoo.patch
@@ -0,0 +1,13 @@
+Not upstreamable hack. Gentoo installs /usr/${libdir}/libz.so
+linker script that redirects to /${libdir}/libz.so.1
+
+Let's use ELF file directly. It also requires guile to support
+direct loading and enforces >=guile-3.
+--- a/zlib/config.scm.in
++++ b/zlib/config.scm.in
+@@ -20,4 +20,4 @@
+ #:export (%libz))
+
+ (define %libz
+- "@LIBZ_LIBDIR@/libz")
++ "@LIBZ_LIBDIR@/libz.so.1")
diff --git a/dev-scheme/guile-zlib/guile-zlib-0.1.0-r100.ebuild b/dev-scheme/guile-zlib/guile-zlib-0.1.0-r100.ebuild
new file mode 100644
index 000000000000..faa0bbb5ef25
--- /dev/null
+++ b/dev-scheme/guile-zlib/guile-zlib-0.1.0-r100.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 3-0 )
+inherit autotools guile
+
+DESCRIPTION="GNU Guile library providing bindings to zlib"
+HOMEPAGE="https://notabug.org/guile-zlib/guile-zlib/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://notabug.org/${PN}/${PN}.git"
+else
+ SRC_URI="https://notabug.org/${PN}/${PN}/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ >=virtual/zlib-1.3-r4:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+DOCS=( AUTHORS ChangeLog HACKING NEWS README.org )
+
+PATCHES=( "${FILESDIR}/${PN}-0.1.0-gentoo.patch" )
+
+src_prepare() {
+ guile_src_prepare
+
+ eautoreconf
+}
diff --git a/dev-scheme/guile-zlib/metadata.xml b/dev-scheme/guile-zlib/metadata.xml
new file mode 100644
index 000000000000..fdc4b2dc1015
--- /dev/null
+++ b/dev-scheme/guile-zlib/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://notabug.org/guile-zlib/guile-zlib/</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile-zstd/Manifest b/dev-scheme/guile-zstd/Manifest
new file mode 100644
index 000000000000..7a74cbe08c3a
--- /dev/null
+++ b/dev-scheme/guile-zstd/Manifest
@@ -0,0 +1 @@
+DIST guile-zstd-0.1.1.tar.gz 21402 BLAKE2B 995034f977649b31308690a5a53372cb80274b6457b6b0344bc31f4451d00e61cc33b6ef890e8b7a75cb6a656e8db506a2390bc2c5d29552af7c68788a6388ee SHA512 23bd4b201a427eb02ae32bcd81d05adefcac3b4446dcb8a91d8ad2bed389d4ea92ffd81dfb6b3e7427b891fd25b7466ca53a97b1a943e390f13de977986fcad0
diff --git a/dev-scheme/guile-zstd/guile-zstd-0.1.1-r100.ebuild b/dev-scheme/guile-zstd/guile-zstd-0.1.1-r100.ebuild
new file mode 100644
index 000000000000..093c50da4eda
--- /dev/null
+++ b/dev-scheme/guile-zstd/guile-zstd-0.1.1-r100.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit autotools guile
+
+DESCRIPTION="GNU Guile bindings to the zstd compression library"
+HOMEPAGE="https://notabug.org/guile-zstd/guile-zstd/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://notabug.org/${PN}/${PN}.git"
+else
+ SRC_URI="https://notabug.org/${PN}/${PN}/archive/v${PV}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/${PN}"
+
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+
+REQUIRED_USED="${GUILE_REQUIRED_USE}"
+
+# In zstd-1.5.5-r1 library was moved back from "/lib" to "/usr/lib".
+RDEPEND="
+ ${GUILE_DEPS}
+ >=app-arch/zstd-1.5.5-r1
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ virtual/pkgconfig
+"
+
+DOCS=( AUTHORS ChangeLog NEWS README )
+
+src_prepare() {
+ guile_src_prepare
+ eautoreconf
+}
diff --git a/dev-scheme/guile-zstd/metadata.xml b/dev-scheme/guile-zstd/metadata.xml
new file mode 100644
index 000000000000..6ea5fe42c7a9
--- /dev/null
+++ b/dev-scheme/guile-zstd/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <upstream>
+ <bugs-to>https://notabug.org/guile-zstd/guile-zstd/</bugs-to>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/guile/Manifest b/dev-scheme/guile/Manifest
new file mode 100644
index 000000000000..f7eaa705405a
--- /dev/null
+++ b/dev-scheme/guile/Manifest
@@ -0,0 +1,4 @@
+DIST guile-1.8.8.tar.gz 3956654 BLAKE2B 4820d635ac2c57526c0c03f3e0e6e4ac4276533ea8db15e6d1b759c33edec094a1a4bdc3e09ccae61f1b271d63565063746feea242a90c18cd575775444a42ef SHA512 ede6feb90cd419d8763feb8c5169275490a653919573c4dfced025b74cf591072b3a10ffb9a3f6ee3fe7b0a0956ffcf434e0859b421455c8349cea56bf427db0
+DIST guile-2.2.7.tar.xz 10881984 BLAKE2B e2b1fe7cb010371beaaf32f8f173397c90fd291ed7d5835b9d976f37fd133254841b4179bd1e1cd02e604c7befcab6c25f85d20ba0850f96978f7c32ca1fe6d8 SHA512 6f60b3489e26f5ff32b55c89316cdcdbf3ec1f4344726006e445f24098c922c50becdc748f1b66d2b271dc002e409ee6210bf85da779cee1f68c9111b3b5c543
+DIST guile-3.0.10.tar.xz 5802280 BLAKE2B 2b41f1afb282eb4672f5aca5b044f47a12509745f5580fc4a621e7555c8b884f92dc76bc78fbdf8a64d59cf1de65b230ce03b0a34bbcb77307a7c9453a277ac6 SHA512 8b58e6c70cd48af85a0b346fcdf488fd5ac8d8678181c9c469895bf6ddab909c415e471776fdcda3c234e00fae80bdd4518c17ff16cf8107a36d2990a4face1d
+DIST guile-3.0.11.tar.xz 5874764 BLAKE2B 1212676f2a71f35e1faaa53db77a63b88be1734a3ec3944cbc7f906b7707881ed4e1a0cf4d64d5928cc10e7aa0f7fe7d5c127b856eab1069f4311c1a5210e8a3 SHA512 46066f627d1d98f32b8d30a9b95874da95c8a33f1f7a4a02d30b11b295dd58c9c0a9d3ab1a450f761c9637bb684d100ed3193055c3537f53ab59e4cb872a07a0
diff --git a/dev-scheme/guile/files/guile-1.8.8-fix_guile-config.patch b/dev-scheme/guile/files/guile-1.8.8-fix_guile-config.patch
new file mode 100644
index 000000000000..2b04426ebd96
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-fix_guile-config.patch
@@ -0,0 +1,14 @@
+diff -ruN 1/configure.in 2/configure.in
+--- 1/configure.in 2010-12-13 17:24:39.000000000 +0000
++++ 2/configure.in 2011-04-29 11:53:39.000000000 +0000
+@@ -1522,8 +1522,8 @@
+ #######################################################################
+
+ dnl Tell guile-config what flags guile users should compile and link with.
+-GUILE_LIBS="$LDFLAGS $LIBS"
+-GUILE_CFLAGS="$CPPFLAGS $PTHREAD_CFLAGS"
++GUILE_LIBS="$LIBS"
++GUILE_CFLAGS="$PTHREAD_CFLAGS"
+ AC_SUBST(GUILE_LIBS)
+ AC_SUBST(GUILE_CFLAGS)
+
diff --git a/dev-scheme/guile/files/guile-1.8.8-gcc46.patch b/dev-scheme/guile/files/guile-1.8.8-gcc46.patch
new file mode 100644
index 000000000000..b06a0e59eb14
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-gcc46.patch
@@ -0,0 +1,39 @@
+Backported upstream patch to fix SIGSEGV with gcc-4.6
+
+http://git.savannah.gnu.org/cgit/guile.git/commit/?h=branch_release-1-8&id=62bc1072c19e81bb0f9e42a5034e7ab8c27d3b94
+https://bugs.gentoo.org/show_bug.cgi?id=424475
+--- a/configure.in
++++ b/configure.in
+@@ -1199,23 +1199,20 @@
+ AC_RUN_IFELSE([AC_LANG_SOURCE(
+ [AC_INCLUDES_DEFAULT
+ int
+-find_stack_direction ()
++find_stack_direction (int *addr, int depth)
+ {
+- static char *addr = 0;
+- auto char dummy;
+- if (addr == 0)
+- {
+- addr = &dummy;
+- return find_stack_direction ();
+- }
+- else
+- return (&dummy > addr) ? 1 : -1;
++ int dir, dummy = 0;
++ if (! addr)
++ addr = &dummy;
++ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
++ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
++ return dir + dummy;
+ }
+
+ int
+-main ()
++main (int argc, char **argv)
+ {
+- return find_stack_direction () < 0;
++ return find_stack_direction (0, argc + !argv + 20) < 0;
+ }])],
+ [SCM_I_GSC_STACK_GROWS_UP=1],
+ [],
diff --git a/dev-scheme/guile/files/guile-1.8.8-gcc5.patch b/dev-scheme/guile/files/guile-1.8.8-gcc5.patch
new file mode 100644
index 000000000000..742ea0ba9de2
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-gcc5.patch
@@ -0,0 +1,15 @@
+Preprocessor changes in GCC 5 cause guile-snarf to output garbage.
+
+https://bugs.gentoo.org/560736
+
+--- a/libguile/guile-snarf.in
++++ b/libguile/guile-snarf.in
+@@ -50,7 +50,7 @@
+ ## Apparently, AIX's preprocessor is unhappy if you try to #include an
+ ## empty file.
+ echo "/* cpp arguments: $@ */" ;
+- ${cpp} -DSCM_MAGIC_SNARF_INITS -DSCM_MAGIC_SNARFER "$@" > ${temp} && cpp_ok_p=true
++ ${cpp} -P -DSCM_MAGIC_SNARF_INITS -DSCM_MAGIC_SNARFER "$@" > ${temp} && cpp_ok_p=true
+ grep "^ *\^ *\^" ${temp} | sed -e "s/^ *\^ *\^//" -e "s/\^\ *:\ *\^.*/;/"
+ }
+
diff --git a/dev-scheme/guile/files/guile-1.8.8-gtexinfo-5.patch b/dev-scheme/guile/files/guile-1.8.8-gtexinfo-5.patch
new file mode 100644
index 000000000000..703e1fab9a48
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-gtexinfo-5.patch
@@ -0,0 +1,15 @@
+$NetBSD: patch-doc_tutorial_guile-tut.texi,v 1.1 2013/11/30 07:06:25 dsainty Exp $
+
+Compatibility with gtexinfo 5.2
+
+--- a/doc/tutorial/guile-tut.texi 2010-12-14 06:24:39.000000000 +1300
++++ b/doc/tutorial/guile-tut.texi 2013-11-30 19:44:28.304575529 +1300
+@@ -446,7 +446,7 @@
+ Schemer} from that list.}
+
+
+-@subsection Hello World
++@section Hello World
+ @cindex hello world
+
+ Our first program is the typical Scheme "hello world" program. Put the \ No newline at end of file
diff --git a/dev-scheme/guile/files/guile-1.8.8-makeinfo-5.patch b/dev-scheme/guile/files/guile-1.8.8-makeinfo-5.patch
new file mode 100644
index 000000000000..9f3a02c18c65
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-makeinfo-5.patch
@@ -0,0 +1,71 @@
+From 937da0f2604ea208ec56517c5a41e582f316a246 Mon Sep 17 00:00:00 2001
+From: Cyprien Nicolas <cyp@fulax.fr>
+Date: Thu, 18 Apr 2013 23:45:23 +0200
+Subject: [PATCH] Fix texinfo files for makeinfo-5.1
+
+---
+ doc/ref/api-options.texi | 2 +-
+ doc/ref/api-utility.texi | 2 +-
+ doc/ref/fdl.texi | 2 +-
+ doc/ref/gh.texi | 4 ++--
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/doc/ref/api-options.texi b/doc/ref/api-options.texi
+index 7b7a6e0..6ce7291 100644
+--- a/doc/ref/api-options.texi
++++ b/doc/ref/api-options.texi
+@@ -377,9 +377,9 @@ configure @emph{reading}, @emph{printing}, @emph{debugging} or
+ * User level options interfaces::
+ * Reader options::
+ * Printing options::
+-* Debugger options::
+ * Evaluator options::
+ * Evaluator trap options::
++* Debugger options::
+ * Examples of option use::
+ @end menu
+
+diff --git a/doc/ref/api-utility.texi b/doc/ref/api-utility.texi
+index 4a90212..9a4f3cc 100644
+--- a/doc/ref/api-utility.texi
++++ b/doc/ref/api-utility.texi
+@@ -657,7 +657,7 @@ Return 1 if @var{x} is a Scheme-level hook, 0 otherwise.
+ @end deftypefn
+
+
+-@subsubsection Handling Scheme-level hooks from C code
++@subsubheading Handling Scheme-level hooks from C code
+
+ Here is an example of how to handle Scheme-level hooks from C code using
+ the above functions.
+diff --git a/doc/ref/fdl.texi b/doc/ref/fdl.texi
+index 17fe148..4866055 100644
+--- a/doc/ref/fdl.texi
++++ b/doc/ref/fdl.texi
+@@ -408,7 +408,7 @@ as a draft) by the Free Software Foundation.
+ @end enumerate
+
+ @page
+-@appendixsubsec ADDENDUM: How to use this License for your documents
++@appendixsec ADDENDUM: How to use this License for your documents
+
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+diff --git a/doc/ref/gh.texi b/doc/ref/gh.texi
+index 95dfd92..bbd3af1 100644
+--- a/doc/ref/gh.texi
++++ b/doc/ref/gh.texi
+@@ -995,8 +995,8 @@ These correspond to the Scheme @code{(cons a b)} and @code{(list l0 l1
+
+ @deftypefun SCM gh_car (SCM @var{obj})
+ @deftypefunx SCM gh_cdr (SCM @var{obj})
+-@dots{}
+-
++@deftypefunx SCM gh_c[ad][ad]r (SCM @var{obj})
++@deftypefunx SCM gh_c[ad][ad][ad]r (SCM @var{obj})
+ @deftypefunx SCM gh_c[ad][ad][ad][ad]r (SCM @var{obj})
+ These correspond to the Scheme @code{(caadar ls)} procedures etc @dots{}
+ @end deftypefun
+--
+1.8.2.1
+
diff --git a/dev-scheme/guile/files/guile-1.8.8-mkdir-mask.patch b/dev-scheme/guile/files/guile-1.8.8-mkdir-mask.patch
new file mode 100644
index 000000000000..7d1c703835f1
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-mkdir-mask.patch
@@ -0,0 +1,35 @@
+--- a/libguile/filesys.c 2016-11-05 15:03:52.131894648 +0100
++++ b/libguile/filesys.c 2016-11-05 15:07:13.275894481 +0100
+@@ -791,24 +791,18 @@
+ SCM_DEFINE (scm_mkdir, "mkdir", 1, 1, 0,
+ (SCM path, SCM mode),
+ "Create a new directory named by @var{path}. If @var{mode} is omitted\n"
+- "then the permissions of the directory file are set using the current\n"
+- "umask. Otherwise they are set to the decimal value specified with\n"
+- "@var{mode}. The return value is unspecified.")
++ "then the permissions of the directory are set to @code{#o777}\n"
++ "masked with the current umask (@pxref{Processes, @code{umask}}).\n"
++ "Otherwise they are set to the value specified with @var{mode}.\n"
++ "The return value is unspecified.")
+ #define FUNC_NAME s_scm_mkdir
+ {
+ int rv;
+- mode_t mask;
++ mode_t c_mode;
+
+- if (SCM_UNBNDP (mode))
+- {
+- mask = umask (0);
+- umask (mask);
+- STRING_SYSCALL (path, c_path, rv = mkdir (c_path, 0777 ^ mask));
+- }
+- else
+- {
+- STRING_SYSCALL (path, c_path, rv = mkdir (c_path, scm_to_uint (mode)));
+- }
++ c_mode = SCM_UNBNDP (mode) ? 0777 : scm_to_uint (mode);
++
++ STRING_SYSCALL (path, c_path, rv = mkdir (c_path, c_mode));
+ if (rv != 0)
+ SCM_SYSERROR;
+ return SCM_UNSPECIFIED;
diff --git a/dev-scheme/guile/files/guile-1.8.8-readline.patch b/dev-scheme/guile/files/guile-1.8.8-readline.patch
new file mode 100644
index 000000000000..68f64c528a4b
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-readline.patch
@@ -0,0 +1,34 @@
+Make guile-readline optional
+
+https://bugs.gentoo.org/392553
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -24,7 +24,7 @@
+ #
+ AUTOMAKE_OPTIONS = 1.10
+
+-SUBDIRS = oop libguile ice-9 guile-config guile-readline emacs \
++SUBDIRS = oop libguile ice-9 guile-config @GUILE_READLINE@ emacs \
+ scripts srfi doc examples test-suite benchmark-suite lang am
+
+ bin_SCRIPTS = guile-tools
+--- a/configure.in
++++ b/configure.in
+@@ -57,7 +57,15 @@ AH_TOP(/*GUILE_CONFIGURE_COPYRIGHT*/)
+ #
+ #--------------------------------------------------------------------
+
+-AC_CONFIG_SUBDIRS(guile-readline)
++GUILE_READLINE=
++AC_ARG_ENABLE([readline],
++ [AS_HELP_STRING([--disable-readline],
++ [disable building guile-readline])],
++ if test "x$enable_readline" != xno; then
++ AC_CONFIG_SUBDIRS([guile-readline])
++ GUILE_READLINE="guile-readline"
++ fi)
++AC_SUBST([GUILE_READLINE])
+
+ #--------------------------------------------------------------------
+
diff --git a/dev-scheme/guile/files/guile-1.8.8-sandbox.patch b/dev-scheme/guile/files/guile-1.8.8-sandbox.patch
new file mode 100644
index 000000000000..70d752fdae97
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-sandbox.patch
@@ -0,0 +1,15 @@
+Prevent sandbox violation when installing
+
+https://bugs.gentoo.org/521546
+
+--- a/guile-config/Makefile.am
++++ b/guile-config/Makefile.am
+@@ -39,8 +39,3 @@ guile-config: guile-config.in ${top_builddir}/libguile/libpath.h
+ -e s:@-GUILE_VERSION-@:${GUILE_VERSION}:
+ chmod +x guile-config.tmp
+ mv guile-config.tmp guile-config
+-
+-## Get rid of any copies of the configuration script under the old
+-## name, so people don't end up running ancient copies of it.
+-install-exec-local:
+- rm -f ${bindir}/build-guile
diff --git a/dev-scheme/guile/files/guile-1.8.8-texinfo-6.7.patch b/dev-scheme/guile/files/guile-1.8.8-texinfo-6.7.patch
new file mode 100644
index 000000000000..6be52017a8d2
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-texinfo-6.7.patch
@@ -0,0 +1,22 @@
+--- a/doc/ref/api-compound.texi.orig 2020-08-08 22:23:07.000000000 -0400
++++ b/doc/ref/api-compound.texi 2020-08-08 22:23:33.000000000 -0400
+@@ -905,7 +905,7 @@
+ @end deftypefn
+
+ @deftypefn {C Function} {const SCM *} scm_vector_elements (SCM vec, scm_t_array_handle *handle, size_t *lenp, ssize_t *incp)
+-Acquire a handle for the vector @var{vec} and return a pointer to the
++Acquire a handle for the vector @var{vec} and return a pointer to the
+ elements of it. This pointer can only be used to read the elements of
+ @var{vec}. When @var{vec} is not a vector, an error is signaled. The
+ handle mustr eventually be released with
+--- a/doc/ref/guile.info-2.orig 2020-08-08 22:22:59.000000000 -0400
++++ b/doc/ref/guile.info-2 2020-08-08 22:25:21.000000000 -0400
+@@ -4192,7 +4192,7 @@
+
+ -- C Function: const SCM * scm_vector_elements (SCM vec,
+ scm_t_array_handle *handle, size_t *lenp, ssize_t *incp)
+- Acquire a handle for the vector VEC and return a pointer to the
++ Acquire a handle for the vector VEC and return a pointer to the
+ elements of it. This pointer can only be used to read the
+ elements of VEC. When VEC is not a vector, an error is signaled.
+ The handle mustr eventually be released with
diff --git a/dev-scheme/guile/files/guile-1.8.8-tinfo.patch b/dev-scheme/guile/files/guile-1.8.8-tinfo.patch
new file mode 100644
index 000000000000..6c4d0116246e
--- /dev/null
+++ b/dev-scheme/guile/files/guile-1.8.8-tinfo.patch
@@ -0,0 +1,15 @@
+With ncurses[tinfo] tgoto will be in libtinfo
+
+https://bugs.gentoo.org/539316
+
+--- a/guile-readline/configure.in
++++ b/guile-readline/configure.in
+@@ -33,7 +33,7 @@ if test "$MINGW32" = "yes" ; then
+ fi
+ AC_SUBST(EXTRA_DEFS)
+
+-for termlib in ncurses curses termcap terminfo termlib ; do
++for termlib in ncurses curses termcap terminfo termlib tinfo ; do
+ AC_CHECK_LIB(${termlib}, tgoto,
+ [LIBS="-l${termlib} $LIBS"; break])
+ done
diff --git a/dev-scheme/guile/files/guile-2.2.3-gentoo-sandbox.patch b/dev-scheme/guile/files/guile-2.2.3-gentoo-sandbox.patch
new file mode 100644
index 000000000000..1cded2d2c924
--- /dev/null
+++ b/dev-scheme/guile/files/guile-2.2.3-gentoo-sandbox.patch
@@ -0,0 +1,10 @@
+diff --git a/test-suite/standalone/test-out-of-memory b/test-suite/standalone/test-out-of-memory
+index 2216512..0ed6079 100755
+--- a/test-suite/standalone/test-out-of-memory
++++ b/test-suite/standalone/test-out-of-memory
+@@ -5,2 +5,5 @@ exec guile -q -s "$0" "$@"
+
++; Gentoo's sandbox does not handle OOM gracefully
++(exit 77)
++
+ (unless (defined? 'setrlimit)
diff --git a/dev-scheme/guile/files/guile-2.2.7-stack-up.patch b/dev-scheme/guile/files/guile-2.2.7-stack-up.patch
new file mode 100644
index 000000000000..de291421c0be
--- /dev/null
+++ b/dev-scheme/guile/files/guile-2.2.7-stack-up.patch
@@ -0,0 +1,17 @@
+This patch (dropping an obsolete extra parameter to grow_stack) landed post
+2.2.7 and we're not likely to ever see a 2.2.8, as development has moved
+on to 3.x now.
+
+https://bugs.gentoo.org/747049
+https://www.mail-archive.com/guile-devel@gnu.org/msg15502.html
+--- a/libguile/continuations.c
++++ b/libguile/continuations.c
+@@ -302,7 +302,7 @@
+
+ #if SCM_STACK_GROWS_UP
+ if (dst + continuation->num_stack_items >= &stack_top_element)
+- grow_stack (cont, mra);
++ grow_stack (cont);
+ #else
+ dst -= continuation->num_stack_items;
+ if (dst <= &stack_top_element)
diff --git a/dev-scheme/guile/files/guile-3.0-fix-32bit-BE.patch b/dev-scheme/guile/files/guile-3.0-fix-32bit-BE.patch
new file mode 100644
index 000000000000..a4e575691293
--- /dev/null
+++ b/dev-scheme/guile/files/guile-3.0-fix-32bit-BE.patch
@@ -0,0 +1,30 @@
+https://bugs.gentoo.org/940650#c4
+https://bugs.debian.org/977223
+https://sources.debian.org/patches/guile-3.0/3.0.8-2/0009-Fix-32-bit-big-endian-builds-via-Oresolve-primitives.patch/
+--- a/configure.ac
++++ b/configure.ac
+@@ -374,6 +374,8 @@ esac
+ AC_MSG_RESULT($SCM_PREBUILT_BINARIES)
+ AC_SUBST([SCM_PREBUILT_BINARIES])
+
++AM_CONDITIONAL([GUILE_32_BIT_BIG_ENDIAN], [test "$SCM_PREBUILT_BINARIES" = 32-bit-big-endian])
++
+ AC_HEADER_SYS_WAIT
+ AC_HEADER_DIRENT
+
+--- a/stage0/Makefile.am
++++ b/stage0/Makefile.am
+@@ -22,7 +22,12 @@
+
+
+ GUILE_WARNINGS = -W0
+-GUILE_OPTIMIZATIONS = -O1
++if GUILE_32_BIT_BIG_ENDIAN
++GUILE_OPTIMIZATIONS = -O1 -Oresolve-primitives -Ocps
++else
++GUILE_OPTIMIZATIONS = -O1
++endif
++
+ GUILE_BOOTSTRAP_STAGE = stage0
+
+ include $(top_srcdir)/am/bootstrap.am
diff --git a/dev-scheme/guile/files/guile-3.0.10-backport-issue72913.patch b/dev-scheme/guile/files/guile-3.0.10-backport-issue72913.patch
new file mode 100644
index 000000000000..0a4d84cfea31
--- /dev/null
+++ b/dev-scheme/guile/files/guile-3.0.10-backport-issue72913.patch
@@ -0,0 +1,394 @@
+https://bugs.gentoo.org/940650#c12
+https://issues.guix.gnu.org/72913
+https://git.savannah.gnu.org/cgit/guile.git/commit/?id=aff9ac968840e9c86719fb613bd2ed3c39b9905c
+
+From 605440d8021061a4ef8c18370783ef39f62c59b2 Mon Sep 17 00:00:00 2001
+From: Andy Wingo <wingo@pobox.com>
+Date: Wed, 25 Sep 2024 17:23:06 +0200
+Subject: [PATCH 1/4] Fix fixpoint needed-bits computation in
+ specialize-numbers
+
+* module/language/cps/specialize-numbers.scm (next-power-of-two): Use
+integer-length. No change.
+(compute-significant-bits): Fix the fixpoint computation, which was
+failing to complete in some cases with loops.
+---
+ module/language/cps/specialize-numbers.scm | 27 ++++++++--------------
+ 1 file changed, 10 insertions(+), 17 deletions(-)
+
+diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm
+index 4ec88871c..12963cd71 100644
+--- a/module/language/cps/specialize-numbers.scm
++++ b/module/language/cps/specialize-numbers.scm
+@@ -265,10 +265,7 @@
+ (sigbits-intersect a (sigbits-intersect b c)))
+
+ (define (next-power-of-two n)
+- (let lp ((out 1))
+- (if (< n out)
+- out
+- (lp (ash out 1)))))
++ (ash 1 (integer-length n)))
+
+ (define (range->sigbits min max)
+ (cond
+@@ -310,18 +307,16 @@
+ BITS indicating the significant bits needed for a variable. BITS may be
+ #f to indicate all bits, or a non-negative integer indicating a bitmask."
+ (let ((preds (invert-graph (compute-successors cps kfun))))
+- (let lp ((worklist (intmap-keys preds)) (visited empty-intset)
+- (out empty-intmap))
++ (let lp ((worklist (intmap-keys preds)) (out empty-intmap))
+ (match (intset-prev worklist)
+ (#f out)
+ (label
+- (let ((worklist (intset-remove worklist label))
+- (visited* (intset-add visited label)))
++ (let ((worklist (intset-remove worklist label)))
+ (define (continue out*)
+- (if (and (eq? out out*) (eq? visited visited*))
+- (lp worklist visited out)
++ (if (eq? out out*)
++ (lp worklist out)
+ (lp (intset-union worklist (intmap-ref preds label))
+- visited* out*)))
++ out*)))
+ (define (add-def out var)
+ (intmap-add out var 0 sigbits-union))
+ (define (add-defs out vars)
+@@ -352,12 +347,10 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (($ $values args)
+ (match (intmap-ref cps k)
+ (($ $kargs _ vars)
+- (if (intset-ref visited k)
+- (fold (lambda (arg var out)
+- (intmap-add out arg (intmap-ref out var)
+- sigbits-union))
+- out args vars)
+- out))
++ (fold (lambda (arg var out)
++ (intmap-add out arg (intmap-ref out var (lambda (_) 0))
++ sigbits-union))
++ out args vars))
+ (($ $ktail)
+ (add-unknown-uses out args))))
+ (($ $call proc args)
+--
+2.47.0
+
+
+From 6953fcb8d9b7d9d36bf36e83e80e24153d37e2a4 Mon Sep 17 00:00:00 2001
+From: Andy Wingo <wingo@pobox.com>
+Date: Wed, 25 Sep 2024 17:24:51 +0200
+Subject: [PATCH 2/4] Fix boxing of non-fixnum negative u64 values
+
+* module/language/cps/specialize-numbers.scm (u64->fixnum/truncate): New
+helper.
+(specialize-operations): Fix specialized boxing of u64 values to
+truncate possibly-negative values, to avoid confusing CSE. Fixes
+https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71891.
+---
+ module/language/cps/specialize-numbers.scm | 21 ++++++++++++++++++++-
+ 1 file changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm
+index 12963cd71..e9761f0cb 100644
+--- a/module/language/cps/specialize-numbers.scm
++++ b/module/language/cps/specialize-numbers.scm
+@@ -115,6 +115,13 @@
+ (letk ks64 ($kargs ('s64) (s64) ,tag-body))
+ (build-term
+ ($continue ks64 src ($primcall 'u64->s64 #f (u64))))))
++(define (u64->fixnum/truncate cps k src u64 bits)
++ (with-cps cps
++ (letv truncated)
++ (let$ tag-body (u64->fixnum k src truncated))
++ (letk ku64 ($kargs ('truncated) (truncated) ,tag-body))
++ (build-term
++ ($continue ku64 src ($primcall 'ulogand/immediate bits (u64))))))
+ (define-simple-primcall scm->u64)
+ (define-simple-primcall scm->u64/truncate)
+ (define-simple-primcall u64->scm)
+@@ -473,7 +480,19 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (define (box-s64 result)
+ (if (fixnum-result? result) tag-fixnum s64->scm))
+ (define (box-u64 result)
+- (if (fixnum-result? result) u64->fixnum u64->scm))
++ (call-with-values
++ (lambda ()
++ (lookup-post-type types label result 0))
++ (lambda (type min max)
++ (cond
++ ((and (type<=? type &exact-integer)
++ (<= 0 min max (target-most-positive-fixnum)))
++ u64->fixnum)
++ ((only-fixnum-bits-used? result)
++ (lambda (cps k src u64)
++ (u64->fixnum/truncate cps k src u64 (intmap-ref sigbits result))))
++ (else
++ u64->scm)))))
+ (define (box-f64 result)
+ f64->scm)
+
+--
+2.47.0
+
+
+From b0559dbe88eb54e2bba4a82dd1f7e7c5b6de2f55 Mon Sep 17 00:00:00 2001
+From: Andy Wingo <wingo@pobox.com>
+Date: Mon, 23 Sep 2024 15:57:23 +0200
+Subject: [PATCH 3/4] Narrow parameter of logand/immediate if no bits used
+
+* module/language/cps/specialize-numbers.scm (specialize-operations):
+Narrow ulogand/immediate param according to used bits.
+---
+ module/language/cps/specialize-numbers.scm | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm
+index e9761f0cb..262dee484 100644
+--- a/module/language/cps/specialize-numbers.scm
++++ b/module/language/cps/specialize-numbers.scm
+@@ -1,6 +1,6 @@
+ ;;; Continuation-passing style (CPS) intermediate language (IL)
+
+-;; Copyright (C) 2015-2021, 2023 Free Software Foundation, Inc.
++;; Copyright (C) 2015-2021,2023-2024 Free Software Foundation, Inc.
+
+ ;;;; This library is free software; you can redistribute it and/or
+ ;;;; modify it under the terms of the GNU Lesser General Public
+@@ -573,9 +573,11 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (specialize-unop cps k src op param a
+ (unbox-u64 a) (box-u64 result))))
+
+- (('logand/immediate (? u64-result? ) param (? u64-operand? a))
++ (('logand/immediate (? u64-result?) param (? u64-operand? a))
+ (specialize-unop cps k src 'ulogand/immediate
+- (logand param (1- (ash 1 64)))
++ (logand param
++ (or (intmap-ref sigbits result) -1)
++ (1- (ash 1 64)))
+ a
+ (unbox-u64 a) (box-u64 result)))
+
+--
+2.47.0
+
+
+From 51db308ec2107f9fb32a06004e7a0a3da6418ff6 Mon Sep 17 00:00:00 2001
+From: Andy Wingo <wingo@pobox.com>
+Date: Thu, 26 Sep 2024 11:14:52 +0200
+Subject: [PATCH 4/4] Run sigbits fixpoint based on use/def graph, not cfg
+
+* module/language/cps/specialize-numbers.scm (sigbits-ref): New helper.
+(invert-graph*): New helper.
+(compute-significant-bits): When visiting a term changes computed
+needed-bits for one of its definitions, we need to revisit the variables
+that contributed to its result (the uses), because they might need more
+bits as well. Previously we were doing this by enqueueing predecessors
+to the term, which worked if the uses were defined in predecessors, or
+if all defining terms were already in the worklist, which is the case
+without loops. But with loops, when revisiting a term, you could see
+that it causes sigbits to change, enqueue its predecessors, but then the
+predecessors don't change anything and the fixpoint stops before
+reaching the definitions of the variables we need. So instead we
+compute the use-def graph and enqueue defs directly.
+---
+ module/language/cps/specialize-numbers.scm | 120 ++++++++++-----------
+ 1 file changed, 54 insertions(+), 66 deletions(-)
+
+diff --git a/module/language/cps/specialize-numbers.scm b/module/language/cps/specialize-numbers.scm
+index 262dee484..ac63c8194 100644
+--- a/module/language/cps/specialize-numbers.scm
++++ b/module/language/cps/specialize-numbers.scm
+@@ -286,6 +286,9 @@
+ (and (type<=? type (logior &exact-integer &u64 &s64))
+ (range->sigbits min max)))))
+
++(define (sigbits-ref sigbits var)
++ (intmap-ref sigbits var (lambda (_) 0)))
++
+ (define significant-bits-handlers (make-hash-table))
+ (define-syntax-rule (define-significant-bits-handler
+ ((primop label types out def ...) param arg ...)
+@@ -297,24 +300,42 @@
+ (define-significant-bits-handler ((logand label types out res) param a b)
+ (let ((sigbits (sigbits-intersect3 (inferred-sigbits types label a)
+ (inferred-sigbits types label b)
+- (intmap-ref out res (lambda (_) 0)))))
++ (sigbits-ref out res))))
+ (intmap-add (intmap-add out a sigbits sigbits-union)
+ b sigbits sigbits-union)))
+ (define-significant-bits-handler ((logand/immediate label types out res) param a)
+ (let ((sigbits (sigbits-intersect3 (inferred-sigbits types label a)
+ param
+- (intmap-ref out res (lambda (_) 0)))))
++ (sigbits-ref out res))))
+ (intmap-add out a sigbits sigbits-union)))
+
+ (define (significant-bits-handler primop)
+ (hashq-ref significant-bits-handlers primop))
+
++(define (invert-graph* defs)
++ "Given a graph LABEL->VAR..., return a graph VAR->LABEL.... Like the one
++in (language cps graphs), but different because it doesn't assume that
++the domain will be the same before and after."
++ (persistent-intmap
++ (intmap-fold (lambda (label vars out)
++ (intset-fold
++ (lambda (var out)
++ (intmap-add! out var (intset label) intset-union))
++ vars
++ out))
++ defs
++ empty-intmap)))
++
+ (define (compute-significant-bits cps types kfun)
+ "Given the locally inferred types @var{types}, compute a map of VAR ->
+ BITS indicating the significant bits needed for a variable. BITS may be
+ #f to indicate all bits, or a non-negative integer indicating a bitmask."
+- (let ((preds (invert-graph (compute-successors cps kfun))))
+- (let lp ((worklist (intmap-keys preds)) (out empty-intmap))
++ (let ((cps (intmap-select cps (compute-function-body cps kfun))))
++ ;; Label -> Var...
++ (define-values (defs uses) (compute-defs-and-uses cps))
++ ;; Var -> Label...
++ (define defs-by-var (invert-graph* defs))
++ (let lp ((worklist (intmap-keys cps)) (out empty-intmap))
+ (match (intset-prev worklist)
+ (#f out)
+ (label
+@@ -322,69 +343,36 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (define (continue out*)
+ (if (eq? out out*)
+ (lp worklist out)
+- (lp (intset-union worklist (intmap-ref preds label))
++ (lp (intset-fold
++ (lambda (use worklist)
++ (intset-union worklist (intmap-ref defs-by-var use)))
++ (intmap-ref uses label)
++ worklist)
+ out*)))
+- (define (add-def out var)
+- (intmap-add out var 0 sigbits-union))
+- (define (add-defs out vars)
+- (match vars
+- (() out)
+- ((var . vars) (add-defs (add-def out var) vars))))
+- (define (add-unknown-use out var)
++ (define (add-unknown-use var out)
+ (intmap-add out var (inferred-sigbits types label var)
+ sigbits-union))
+- (define (add-unknown-uses out vars)
+- (match vars
+- (() out)
+- ((var . vars)
+- (add-unknown-uses (add-unknown-use out var) vars))))
++ (define (default)
++ (intset-fold add-unknown-use (intmap-ref uses label) out))
+ (continue
+ (match (intmap-ref cps label)
+- (($ $kfun src meta self)
+- (if self (add-def out self) out))
+- (($ $kargs names vars term)
+- (let ((out (add-defs out vars)))
+- (match term
+- (($ $continue k src exp)
+- (match exp
+- ((or ($ $const) ($ $prim) ($ $fun) ($ $const-fun)
+- ($ $code) ($ $rec))
+- ;; No uses, so no info added to sigbits.
+- out)
+- (($ $values args)
+- (match (intmap-ref cps k)
+- (($ $kargs _ vars)
+- (fold (lambda (arg var out)
+- (intmap-add out arg (intmap-ref out var (lambda (_) 0))
+- sigbits-union))
+- out args vars))
+- (($ $ktail)
+- (add-unknown-uses out args))))
+- (($ $call proc args)
+- (add-unknown-use (add-unknown-uses out args) proc))
+- (($ $callk label proc args)
+- (let ((out (add-unknown-uses out args)))
+- (if proc
+- (add-unknown-use out proc)
+- out)))
+- (($ $calli args callee)
+- (add-unknown-uses (add-unknown-use out callee) args))
+- (($ $primcall name param args)
+- (let ((h (significant-bits-handler name)))
+- (if h
+- (match (intmap-ref cps k)
+- (($ $kargs _ defs)
+- (h label types out param args defs)))
+- (add-unknown-uses out args))))))
+- (($ $branch kf kt src op param args)
+- (add-unknown-uses out args))
+- (($ $switch kf kt src arg)
+- (add-unknown-use out arg))
+- (($ $prompt k kh src escape? tag)
+- (add-unknown-use out tag))
+- (($ $throw src op param args)
+- (add-unknown-uses out args)))))
+- (_ out)))))))))
++ (($ $kargs _ _ ($ $continue k _ ($ $primcall op param args)))
++ (match (significant-bits-handler op)
++ (#f (default))
++ (h
++ (match (intmap-ref cps k)
++ (($ $kargs _ defs)
++ (h label types out param args defs))))))
++ (($ $kargs _ _ ($ $continue k _ ($ $values args)))
++ (match (intmap-ref cps k)
++ (($ $kargs _ vars)
++ (fold (lambda (arg var out)
++ (intmap-add out arg (sigbits-ref out var)
++ sigbits-union))
++ out args vars))
++ (($ $ktail)
++ (default))))
++ (_ (default))))))))))
+
+ (define (specialize-operations cps)
+ (define (u6-parameter? param)
+@@ -416,7 +404,7 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (define (all-u64-bits-set? var)
+ (operand-in-range? var &exact-integer (1- (ash 1 64)) (1- (ash 1 64))))
+ (define (only-fixnum-bits-used? var)
+- (let ((bits (intmap-ref sigbits var)))
++ (let ((bits (sigbits-ref sigbits var)))
+ (and bits (= bits (logand bits (target-most-positive-fixnum))))))
+ (define (fixnum-result? result)
+ (or (only-fixnum-bits-used? result)
+@@ -429,7 +417,7 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ min max
+ (target-most-positive-fixnum)))))))
+ (define (only-u64-bits-used? var)
+- (let ((bits (intmap-ref sigbits var)))
++ (let ((bits (sigbits-ref sigbits var)))
+ (and bits (= bits (logand bits (1- (ash 1 64)))))))
+ (define (u64-result? result)
+ (or (only-u64-bits-used? result)
+@@ -490,7 +478,7 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ u64->fixnum)
+ ((only-fixnum-bits-used? result)
+ (lambda (cps k src u64)
+- (u64->fixnum/truncate cps k src u64 (intmap-ref sigbits result))))
++ (u64->fixnum/truncate cps k src u64 (sigbits-ref sigbits result))))
+ (else
+ u64->scm)))))
+ (define (box-f64 result)
+@@ -576,7 +564,7 @@ BITS indicating the significant bits needed for a variable. BITS may be
+ (('logand/immediate (? u64-result?) param (? u64-operand? a))
+ (specialize-unop cps k src 'ulogand/immediate
+ (logand param
+- (or (intmap-ref sigbits result) -1)
++ (or (sigbits-ref sigbits a) -1)
+ (1- (ash 1 64)))
+ a
+ (unbox-u64 a) (box-u64 result)))
+--
+2.47.0
+
diff --git a/dev-scheme/guile/files/guile-3.0.10-c23.patch b/dev-scheme/guile/files/guile-3.0.10-c23.patch
new file mode 100644
index 000000000000..058a8bf35106
--- /dev/null
+++ b/dev-scheme/guile/files/guile-3.0.10-c23.patch
@@ -0,0 +1,32 @@
+https://bugs.gentoo.org/943712
+https://git.savannah.gnu.org/cgit/guile.git/commit/?id=c2e7d834c26dca39e0a2dc6784fc47814969817a
+
+From c2e7d834c26dca39e0a2dc6784fc47814969817a Mon Sep 17 00:00:00 2001
+From: Andy Wingo <wingo@pobox.com>
+Date: Tue, 25 Jun 2024 09:30:21 +0200
+Subject: Fix compilation with C23
+
+* libguile/jit.c (is_unreachable): Rename from "unreachable", which is
+apparently a new reserved word in C23.
+--- a/libguile/jit.c
++++ b/libguile/jit.c
+@@ -370,7 +370,7 @@ set_register_state (scm_jit_state *j, uint32_t state)
+ }
+
+ static uint32_t
+-unreachable (scm_jit_state *j)
++is_unreachable (scm_jit_state *j)
+ {
+ return j->register_state & UNREACHABLE;
+ }
+@@ -382,7 +382,7 @@ has_register_state (scm_jit_state *j, uint32_t state)
+ }
+
+ #define ASSERT_HAS_REGISTER_STATE(state) \
+- ASSERT (unreachable (j) || has_register_state (j, state));
++ ASSERT (is_unreachable (j) || has_register_state (j, state));
+
+ static void
+ record_gpr_clobber (scm_jit_state *j, jit_gpr_t r)
+--
+cgit v1.2.3-70-g09d2
diff --git a/dev-scheme/guile/guile-1.8.8-r103.ebuild b/dev-scheme/guile/guile-1.8.8-r103.ebuild
new file mode 100644
index 000000000000..a80d5cfacd6c
--- /dev/null
+++ b/dev-scheme/guile/guile-1.8.8-r103.ebuild
@@ -0,0 +1,186 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic elisp-common
+
+DESCRIPTION="GNU Ubiquitous Intelligent Language for Extensions"
+HOMEPAGE="https://www.gnu.org/software/guile/"
+SRC_URI="mirror://gnu/guile/${P}.tar.gz"
+
+LICENSE="LGPL-2.1"
+SLOT="$(ver_cut 1-2)"
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos"
+IUSE="debug debug-freelist debug-malloc +deprecated discouraged emacs networking nls readline +regex +threads"
+RESTRICT="!regex? ( test )"
+
+RDEPEND="
+ >=dev-libs/gmp-4.1:0=
+ dev-libs/libltdl:0=
+ sys-devel/gettext
+ sys-libs/ncurses:0=
+ virtual/libcrypt:=
+ readline? ( sys-libs/readline:0= )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ sys-apps/texinfo
+ dev-build/libtool
+ emacs? ( >=app-editors/emacs-23.1:* )
+"
+IDEPEND="
+ app-eselect/eselect-guile
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-fix_guile-config.patch
+ "${FILESDIR}"/${P}-gcc46.patch
+ "${FILESDIR}"/${P}-gcc5.patch
+ "${FILESDIR}"/${P}-makeinfo-5.patch
+ "${FILESDIR}"/${P}-gtexinfo-5.patch
+ "${FILESDIR}"/${P}-readline.patch
+ "${FILESDIR}"/${P}-tinfo.patch
+ "${FILESDIR}"/${P}-sandbox.patch
+ "${FILESDIR}"/${P}-mkdir-mask.patch
+ "${FILESDIR}"/${PN}-1.8.8-texinfo-6.7.patch
+)
+
+DOCS=( AUTHORS ChangeLog GUILE-VERSION HACKING NEWS README THANKS )
+
+# Where to install data files.
+GUILE_DATA="${EPREFIX}/usr/share/guile-data/${SLOT}"
+GUILE_PCDIR="${EPREFIX}/usr/share/guile-data/${SLOT}/pkgconfig"
+GUILE_INFODIR="${EPREFIX}"/usr/share/guile-data/"${SLOT}"/info
+
+src_prepare() {
+ default
+
+ sed \
+ -e "s/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/g" \
+ -e "/AM_PROG_CC_STDC/d" \
+ -i guile-readline/configure.in || die
+
+ mv "${S}"/configure.{in,ac} || die
+ mv "${S}"/guile-readline/configure.{in,ac} || die
+
+ eautoreconf
+}
+
+src_configure() {
+ # See bug #178499. filter-flags no longer works since the compiler
+ # will vectorize by default when optimizing.
+ append-flags -fno-tree-vectorize -fno-strict-aliasing
+
+ #will fail for me if posix is disabled or without modules -- hkBst
+ myconf=(
+ --program-suffix="-${SLOT}"
+ --infodir="${GUILE_INFODIR}"
+ --includedir="${EPREFIX}/usr/include/guile/${SLOT}"
+
+ --disable-error-on-warning
+ --disable-static
+ --enable-posix
+ $(use_enable networking)
+ $(use_enable readline)
+ $(use_enable regex)
+ $(use deprecated || use_enable discouraged)
+ $(use_enable deprecated)
+ $(use_enable emacs elisp)
+ $(use_enable nls)
+ --disable-rpath
+ $(use_enable debug-freelist)
+ $(use_enable debug-malloc)
+ $(use_enable debug guile-debug)
+ $(use_with threads)
+ --with-modules
+ )
+ econf "${myconf[@]}" EMACS=no
+}
+
+src_compile() {
+ emake
+
+ # Above we have disabled the build system's Emacs support;
+ # for USE=emacs we compile (and install) the files manually
+ if use emacs; then
+ cd emacs || die
+ elisp-compile *.el || die
+ fi
+}
+
+# Akin to (and taken from) toolchain-autoconfs eclass
+guile_slot_info() {
+ rm -f dir || die
+
+ pushd "${D}/${GUILE_INFODIR}" >/dev/null || die
+ for f in *.info*; do
+ # Install convenience aliases for versioned Guile pages.
+ ln -s "$f" "${f/./-${SLOT}.}" || die
+ done
+ popd >/dev/null || die
+
+ docompress "${GUILE_INFODIR}"
+}
+
+src_install() {
+ default
+
+ dodir "${GUILE_PCDIR}"
+ sed -e "/libdir/i bindir=${ESYSROOT}/usr/bin" \
+ -e "/libguileinterface/a guile=\${bindir}/guile-${SLOT}" \
+ -i "${ED}"/usr/$(get_libdir)/pkgconfig/guile-1.8.pc || die
+ mv "${ED}"/usr/$(get_libdir)/pkgconfig/guile-1.8.pc "${D}/${GUILE_PCDIR}"/guile-1.8.pc || die
+
+ sed -i "1s/guile/guile-1.8/" "${ED}"/usr/bin/guile-config-1.8 || die
+
+ for script in PROGRAM autofrisk doc-snarf generate-autoload punify \
+ read-scheme-source scan-api snarf-guile-m4-docs use2dot \
+ api-diff display-commentary frisk lint read-rfc822 \
+ read-text-outline snarf-check-and-output-texi summarize-guile-TODO; do
+ sed "s/GUILE-guile/GUILE-guile-1.8/" \
+ -i "${ED}"/usr/share/guile/1.8/scripts/${script}-1.8 || die
+ mv "${ED}"/usr/share/guile/1.8/scripts/${script}{-1.8,} || die
+ done
+
+ mv "${ED}"/usr/share/aclocal/guile{,-"${SLOT}"}.m4 || die
+ find "${ED}" -name '*.la' -delete || die
+
+ guile_slot_info
+
+ local major="$(ver_cut 1 "${SLOT}")"
+ local minor="$(ver_cut 2 "${SLOT}")"
+ local idx="$((99999-(major*1000+minor)))"
+ newenvd - "50guile${idx}" <<-EOF
+ PKG_CONFIG_PATH="${GUILE_PCDIR}"
+ INFOPATH="${GUILE_INFODIR}"
+ EOF
+
+ # necessary for registering slib, see bug 206896
+ keepdir /usr/share/guile/site
+
+ if use emacs; then
+ elisp-install ${PN}-${SLOT} emacs/*.{el,elc}
+ elisp-make-site-file "50${PN}-${SLOT}-gentoo.el"
+ fi
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+
+ if has_version app-eselect/eselect-guile; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+
+ # A pkg_postinst for the replacing package will be called after.
+ if has_version app-eselect/eselect-guile \
+ && ! [[ "${REPLACED_BY_VERSION}" ]]; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
diff --git a/dev-scheme/guile/guile-2.2.7-r103.ebuild b/dev-scheme/guile/guile-2.2.7-r103.ebuild
new file mode 100644
index 000000000000..b31baf77370d
--- /dev/null
+++ b/dev-scheme/guile/guile-2.2.7-r103.ebuild
@@ -0,0 +1,136 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="GNU Ubiquitous Intelligent Language for Extensions"
+HOMEPAGE="https://www.gnu.org/software/guile/"
+SRC_URI="mirror://gnu/guile/${P}.tar.xz"
+
+LICENSE="LGPL-3+"
+SLOT="$(ver_cut 1-2)" # See (guile)Parallel Installations.
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos"
+IUSE="debug debug-malloc +deprecated +networking +nls +regex +threads" # upstream recommended +networking +nls
+REQUIRED_USE="regex" # workaround for bug 596322
+RESTRICT="strip"
+
+RDEPEND="
+ >=dev-libs/boehm-gc-7.0:=[threads?]
+ dev-libs/gmp:=
+ dev-libs/libffi:=
+ dev-libs/libltdl:=
+ dev-libs/libunistring:0=
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ virtual/libcrypt:=
+ !dev-scheme/guile:12
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ dev-build/libtool
+ sys-devel/gettext
+"
+IDEPEND="
+ app-eselect/eselect-guile
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-2.2.3-gentoo-sandbox.patch"
+ "${FILESDIR}/${PN}-2.2.7-stack-up.patch"
+)
+
+# guile generates ELF files without use of C or machine code
+# It's a portage's false positive. bug #677600
+QA_PREBUILT='*[.]go'
+
+GUILE_INFODIR="${EPREFIX}"/usr/share/guile-data/"${SLOT}"/info
+
+DOCS=( GUILE-VERSION HACKING README )
+
+src_configure() {
+ # see bug #676468
+ mv prebuilt/32-bit-big-endian{,.broken} || die
+
+ econf \
+ --infodir="${GUILE_INFODIR}" \
+ --program-suffix="-${SLOT}" \
+ --disable-error-on-warning \
+ --disable-rpath \
+ --disable-static \
+ --enable-posix \
+ --without-libgmp-prefix \
+ --without-libiconv-prefix \
+ --without-libintl-prefix \
+ --without-libltdl-prefix \
+ --without-libreadline-prefix \
+ --without-libunistring-prefix \
+ $(use_enable debug guile-debug) \
+ $(use_enable debug-malloc) \
+ $(use_enable deprecated) \
+ $(use_enable networking) \
+ $(use_enable nls) \
+ $(use_enable regex) \
+ $(use_with threads)
+}
+
+# Akin to (and taken from) toolchain-autoconfs eclass
+guile_slot_info() {
+ rm -f dir || die
+
+ pushd "${D}/${GUILE_INFODIR}" >/dev/null || die
+ for f in *.info*; do
+ # Install convenience aliases for versioned Guile pages.
+ ln -s "$f" "${f/./-${SLOT}.}" || die
+ done
+ popd >/dev/null || die
+
+ docompress "${GUILE_INFODIR}"
+}
+
+src_install() {
+ default
+
+ # From Novell
+ # https://bugzilla.novell.com/show_bug.cgi?id=874028#c0
+ dodir /usr/share/gdb/auto-load/$(get_libdir)
+ mv "${ED}"/usr/$(get_libdir)/libguile-*-gdb.scm "${ED}"/usr/share/gdb/auto-load/$(get_libdir) || die
+
+ find "${D}" -name '*.la' -delete || die
+
+ # Move the pkg-config files to guile-data. In future versions, this
+ # should be handled by --with-pkgconfigdir (patch waiting on
+ # upstream).
+ local datadir=/usr/share/guile-data/"${SLOT}"
+ local pcdir="${EPREFIX}${datadir}"/pkgconfig
+ mkdir -p "${ED}${datadir}" || die
+ mv "${ED}"/usr/share/aclocal/guile{,-"${SLOT}"}.m4 || die
+ mv "${ED}"/usr/$(get_libdir)/pkgconfig/ \
+ "${ED}/${pcdir}" || die
+
+ guile_slot_info
+
+ local major="$(ver_cut 1 "${SLOT}")"
+ local minor="$(ver_cut 2 "${SLOT}")"
+ local idx="$((99999-(major*1000+minor)))"
+ newenvd - "50guile${idx}" <<-EOF
+ PKG_CONFIG_PATH="${pcdir}"
+ INFOPATH="${GUILE_INFODIR}"
+ EOF
+}
+
+pkg_postinst() {
+ if has_version app-eselect/eselect-guile; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
+
+pkg_postrm() {
+ # A pkg_postinst for the replacing package will be called after.
+ if has_version app-eselect/eselect-guile \
+ && ! [[ "${REPLACED_BY_VERSION}" ]]; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
diff --git a/dev-scheme/guile/guile-3.0.10-r103.ebuild b/dev-scheme/guile/guile-3.0.10-r103.ebuild
new file mode 100644
index 000000000000..60118d036259
--- /dev/null
+++ b/dev-scheme/guile/guile-3.0.10-r103.ebuild
@@ -0,0 +1,149 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic
+
+DESCRIPTION="GNU Ubiquitous Intelligent Language for Extensions"
+HOMEPAGE="https://www.gnu.org/software/guile/"
+SRC_URI="mirror://gnu/guile/${P}.tar.xz"
+
+LICENSE="LGPL-3+"
+SLOT="$(ver_cut 1-2)" # See (guile)Parallel Installations.
+KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos"
+
+IUSE="debug debug-malloc +deprecated +jit +networking +nls +regex +threads" # upstream recommended +networking +nls
+REQUIRED_USE="regex" # workaround for bug #596322
+RESTRICT="strip"
+
+RDEPEND="
+ >=dev-libs/boehm-gc-7.0[threads?]
+ dev-libs/gmp:=
+ dev-libs/libffi:=
+ dev-libs/libatomic_ops
+ dev-libs/libunistring:=
+ sys-libs/ncurses:=
+ sys-libs/readline:=
+ virtual/libcrypt:=
+ !dev-scheme/guile:12
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ dev-build/libtool
+ sys-devel/gettext
+"
+IDEPEND="
+ app-eselect/eselect-guile
+"
+
+# guile generates ELF files without use of C or machine code
+# It's false positive. bug #677600
+QA_PREBUILT='*[.]go'
+
+DOCS=( ABOUT-NLS AUTHORS ChangeLog GUILE-VERSION HACKING NEWS README THANKS )
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.2.3-gentoo-sandbox.patch
+ "${FILESDIR}/${PN}-3.0-fix-32bit-BE.patch"
+ "${FILESDIR}/${PN}-3.0.10-backport-issue72913.patch"
+ "${FILESDIR}/${PN}-3.0.10-c23.patch"
+)
+
+# Where to install data files.
+GUILE_DATA="${EPREFIX}/usr/share/guile-data/${SLOT}"
+GUILE_PCDIR="${EPREFIX}/usr/share/guile-data/${SLOT}/pkgconfig"
+GUILE_INFODIR="${GUILE_DATA}"/info
+
+src_prepare() {
+ default
+
+ # Needed for fix-32bit-BE.patch
+ eautoreconf
+}
+
+src_configure() {
+ # See bug #676468 (may be able to drop this if we adapt fix-32bit-BE.patch)?
+ mv prebuilt/32-bit-big-endian{,.broken} || die
+
+ # bug #944029
+ append-cflags -std=gnu17
+
+ local -a myconf=(
+ --program-suffix="-${SLOT}"
+ --infodir="${GUILE_INFODIR}"
+ --with-pkgconfigdir="${GUILE_PCDIR}"
+
+ --disable-error-on-warning
+ --disable-rpath
+ --disable-lto
+ --enable-posix
+ --without-libgmp-prefix
+ --without-libiconv-prefix
+ --without-libintl-prefix
+ --without-libreadline-prefix
+ --without-libunistring-prefix
+ $(use_enable debug guile-debug)
+ $(use_enable debug-malloc)
+ $(use_enable deprecated)
+ $(use_enable jit)
+ $(use_enable networking)
+ $(use_enable nls)
+ $(use_enable regex)
+ $(use_with threads)
+ )
+
+ econf "${myconf[@]}"
+}
+
+# Akin to (and taken from) toolchain-autoconfs eclass
+guile_slot_info() {
+ rm -f dir || die
+
+ pushd "${D}/${GUILE_INFODIR}" >/dev/null || die
+ for f in *.info*; do
+ # Install convenience aliases for versioned Guile pages.
+ ln -s "$f" "${f/./-${SLOT}.}" || die
+ done
+ popd >/dev/null || die
+
+ docompress "${GUILE_INFODIR}"
+}
+
+src_install() {
+ default
+
+ # From Novell https://bugzilla.novell.com/show_bug.cgi?id=874028#c0
+ dodir /usr/share/gdb/auto-load/$(get_libdir)
+ mv "${ED}"/usr/$(get_libdir)/libguile-*-gdb.scm "${ED}"/usr/share/gdb/auto-load/$(get_libdir) || die
+
+ mv "${ED}"/usr/share/aclocal/guile{,-"${SLOT}"}.m4 || die
+ find "${ED}" -name '*.la' -delete || die
+
+ guile_slot_info
+
+ local major="$(ver_cut 1 "${SLOT}")"
+ local minor="$(ver_cut 2 "${SLOT}")"
+ local idx="$((99999-(major*1000+minor)))"
+ newenvd - "50guile${idx}" <<-EOF
+ PKG_CONFIG_PATH="${GUILE_PCDIR}"
+ INFOPATH="${GUILE_INFODIR}"
+ EOF
+}
+
+pkg_postinst() {
+ if has_version app-eselect/eselect-guile; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
+
+pkg_postrm() {
+ # A pkg_postinst for the replacing package will be called after.
+ if has_version app-eselect/eselect-guile \
+ && ! [[ "${REPLACED_BY_VERSION}" ]]; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
diff --git a/dev-scheme/guile/guile-3.0.11.ebuild b/dev-scheme/guile/guile-3.0.11.ebuild
new file mode 100644
index 000000000000..9590f17c8b9f
--- /dev/null
+++ b/dev-scheme/guile/guile-3.0.11.ebuild
@@ -0,0 +1,147 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=9
+
+inherit autotools flag-o-matic
+
+DESCRIPTION="GNU Ubiquitous Intelligent Language for Extensions"
+HOMEPAGE="https://www.gnu.org/software/guile/"
+SRC_URI="mirror://gnu/guile/${P}.tar.xz"
+
+LICENSE="LGPL-3+"
+SLOT="$(ver_cut 1-2)" # See (guile)Parallel Installations.
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos"
+
+IUSE="debug debug-malloc +deprecated +jit +networking +nls +regex +threads" # upstream recommended +networking +nls
+REQUIRED_USE="regex" # workaround for bug #596322
+RESTRICT="strip"
+
+RDEPEND="
+ >=dev-libs/boehm-gc-7.0[threads?]
+ dev-libs/gmp:=
+ dev-libs/libffi:=
+ dev-libs/libatomic_ops
+ dev-libs/libunistring:=
+ sys-libs/ncurses:=
+ sys-libs/readline:=
+ virtual/libcrypt:=
+ !dev-scheme/guile:12
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/pkgconfig
+ dev-build/libtool
+ sys-devel/gettext
+"
+IDEPEND="
+ app-eselect/eselect-guile
+"
+
+# guile generates ELF files without use of C or machine code
+# It's false positive. bug #677600
+QA_PREBUILT='*[.]go'
+
+DOCS=( ABOUT-NLS AUTHORS ChangeLog GUILE-VERSION HACKING NEWS README THANKS )
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.2.3-gentoo-sandbox.patch
+ "${FILESDIR}/${PN}-3.0-fix-32bit-BE.patch"
+)
+
+# Where to install data files.
+GUILE_DATA="${EPREFIX}/usr/share/guile-data/${SLOT}"
+GUILE_PCDIR="${EPREFIX}/usr/share/guile-data/${SLOT}/pkgconfig"
+GUILE_INFODIR="${GUILE_DATA}"/info
+
+src_prepare() {
+ default
+
+ # Needed for fix-32bit-BE.patch
+ eautoreconf
+}
+
+src_configure() {
+ # See bug #676468 (may be able to drop this if we adapt fix-32bit-BE.patch)?
+ mv prebuilt/32-bit-big-endian{,.broken} || die
+
+ # bug #944029
+ append-cflags -std=gnu17
+
+ local -a myconf=(
+ --program-suffix="-${SLOT}"
+ --infodir="${GUILE_INFODIR}"
+ --with-pkgconfigdir="${GUILE_PCDIR}"
+
+ --disable-error-on-warning
+ --disable-rpath
+ --disable-lto
+ --enable-posix
+ --without-libgmp-prefix
+ --without-libiconv-prefix
+ --without-libintl-prefix
+ --without-libreadline-prefix
+ --without-libunistring-prefix
+ $(use_enable debug guile-debug)
+ $(use_enable debug-malloc)
+ $(use_enable deprecated)
+ $(use_enable jit)
+ $(use_enable networking)
+ $(use_enable nls)
+ $(use_enable regex)
+ $(use_with threads)
+ )
+
+ econf "${myconf[@]}"
+}
+
+# Akin to (and taken from) toolchain-autoconfs eclass
+guile_slot_info() {
+ rm -f dir || die
+
+ pushd "${D}/${GUILE_INFODIR}" >/dev/null || die
+ for f in *.info*; do
+ # Install convenience aliases for versioned Guile pages.
+ ln -s "$f" "${f/./-${SLOT}.}" || die
+ done
+ popd >/dev/null || die
+
+ docompress "${GUILE_INFODIR}"
+}
+
+src_install() {
+ default
+
+ # From Novell https://bugzilla.novell.com/show_bug.cgi?id=874028#c0
+ dodir /usr/share/gdb/auto-load/$(get_libdir)
+ mv "${ED}"/usr/$(get_libdir)/libguile-*-gdb.scm "${ED}"/usr/share/gdb/auto-load/$(get_libdir) || die
+
+ mv "${ED}"/usr/share/aclocal/guile{,-"${SLOT}"}.m4 || die
+ find "${ED}" -name '*.la' -delete || die
+
+ guile_slot_info
+
+ local major="$(ver_cut 1 "${SLOT}")"
+ local minor="$(ver_cut 2 "${SLOT}")"
+ local idx="$((99999-(major*1000+minor)))"
+ newenvd - "50guile${idx}" <<-EOF
+ PKG_CONFIG_PATH="${GUILE_PCDIR}"
+ INFOPATH="${GUILE_INFODIR}"
+ EOF
+}
+
+pkg_postinst() {
+ if has_version app-eselect/eselect-guile; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
+
+pkg_postrm() {
+ # A pkg_postinst for the replacing package will be called after.
+ if has_version app-eselect/eselect-guile \
+ && ! [[ "${REPLACED_BY_VERSION}" ]]; then
+ eselect guile update # Nonfatal
+ fi
+ return 0
+}
diff --git a/dev-scheme/guile/metadata.xml b/dev-scheme/guile/metadata.xml
new file mode 100644
index 000000000000..2001c35d590c
--- /dev/null
+++ b/dev-scheme/guile/metadata.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+Guile is a library designed to help programmers create flexible applications. Using Guile in an application allows programmers to write plug-ins, or modules (there are many names, but the concept is essentially the same) and users to use them to have an application fit their needs.
+ </longdescription>
+ <use>
+ <flag name="debug-freelist">Include garbage collector freelist debugging code</flag>
+ <flag name="debug-malloc">Include malloc debugging code</flag>
+ <flag name="deprecated">Enable deprecated features</flag>
+ <flag name="discouraged"> (implied by deprecated) enable merely discouraged features</flag>
+ <flag name="networking">Include networking interfaces</flag>
+ <flag name="regex"> Include regular expression interfaces</flag>
+ </use>
+ <upstream>
+ <doc>https://www.gnu.org/software/guile/manual/html_node/index.html</doc>
+ <remote-id type="codeberg">guile/guile</remote-id>
+ <remote-id type="savannah">guile</remote-id>
+ </upstream>
+ <slots>
+ <!-- See (guile)Parallel Installations. -->
+ <slot name="3.0">
+ Guile effective version 3.0.
+ </slot>
+ <slot name="2.2">
+ Guile effective version 2.2.
+ </slot>
+ </slots>
+</pkgmetadata>
diff --git a/dev-scheme/jscheme/Manifest b/dev-scheme/jscheme/Manifest
new file mode 100644
index 000000000000..c745a871a15d
--- /dev/null
+++ b/dev-scheme/jscheme/Manifest
@@ -0,0 +1 @@
+DIST jscheme-7.2.tgz 2507622 BLAKE2B a468b040c414cd570b2e6331a2aaaa73983da2abd570525532562ca9a4caaa4c1027f5f46abaa40d117bd04b584e6183162e3195bc559cceea30c3ea0bae2872 SHA512 48aa1ce806e2dd9bd6797dce6e6569787ad9072f728a39a37310ec5604afdb3fda4ad56a721336d0be9e3c985333ff9dd31cdb809c095d503f54a0f477adc3c7
diff --git a/dev-scheme/jscheme/jscheme-7.2-r2.ebuild b/dev-scheme/jscheme/jscheme-7.2-r2.ebuild
new file mode 100644
index 000000000000..ef59f2a98e06
--- /dev/null
+++ b/dev-scheme/jscheme/jscheme-7.2-r2.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit java-pkg-2
+
+DESCRIPTION="A Scheme dialect with a simple Java interface called Javadot notation"
+HOMEPAGE="https://jscheme.sourceforge.net/jscheme/main.html"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tgz"
+
+LICENSE="Apache-1.1"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="doc"
+
+DEPEND=">=virtual/jdk-1.6:*"
+RDEPEND=">=virtual/jre-1.6
+ ${DEPEND}"
+
+src_compile() {
+ sh bin/make || die "make failed"
+}
+
+src_install() {
+ java-pkg_dojar lib/*.jar
+ java-pkg_dolauncher ${PN} --main jscheme.REPL
+ use doc && dodoc -r doc
+}
diff --git a/dev-scheme/jscheme/metadata.xml b/dev-scheme/jscheme/metadata.xml
new file mode 100644
index 000000000000..099c2b7c3090
--- /dev/null
+++ b/dev-scheme/jscheme/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ JScheme is a dialect of Scheme with a very simple interface to Java, called
+ the Javadot notation . This notation provides a transparent access to all
+ Java classes, constructors, methods, and fields on the classpath.
+ </longdescription>
+ <upstream>
+ <remote-id type="sourceforge">jscheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/kawa/Manifest b/dev-scheme/kawa/Manifest
new file mode 100644
index 000000000000..b63b50b53002
--- /dev/null
+++ b/dev-scheme/kawa/Manifest
@@ -0,0 +1 @@
+DIST Kawa-3.1.1.tar.gz 3216501 BLAKE2B abaea589c33ec01c49df9b376b43330a1246832428d64da2eded9899b06fb32ac5875112749f94e55b1d75ad628535b71dc41b8d7e0edf62ea7baabd20b8b182 SHA512 557fe8cc2eb7bea1e18dcbb0e4df6d82ed17e02724d55889591141b8db02245378bb0cd27acfc73e452cfbc0d6d1cbc50dd27b325fa437778eca5ce8db4211be
diff --git a/dev-scheme/kawa/files/kawa-3.1.1-configure.ac-single_AM_INIT_AUTOMAKE.patch b/dev-scheme/kawa/files/kawa-3.1.1-configure.ac-single_AM_INIT_AUTOMAKE.patch
new file mode 100644
index 000000000000..d7ecb85434f1
--- /dev/null
+++ b/dev-scheme/kawa/files/kawa-3.1.1-configure.ac-single_AM_INIT_AUTOMAKE.patch
@@ -0,0 +1,17 @@
+Repeated calls to AM_INIT_AUTOMAKE made fatal in 1.16.5:
+https://git.savannah.gnu.org/cgit/automake.git/commit/?id=f4a3a70f69e1dbccb6578f39ef47835098a04624.
+
+https://bugs.gentoo.org/818094
+https://bugs.gentoo.org/827973
+
+--- a/bin/configure.ac
++++ b/bin/configure.ac
+@@ -4,8 +4,6 @@ AM_INIT_AUTOMAKE([foreign])
+ AM_MAINTAINER_MODE
+ AC_CANONICAL_HOST
+
+-AM_INIT_AUTOMAKE
+-
+ AC_EXEEXT
+ AC_OBJEXT
+
diff --git a/dev-scheme/kawa/kawa-3.1.1-r3.ebuild b/dev-scheme/kawa/kawa-3.1.1-r3.ebuild
new file mode 100644
index 000000000000..d664cf5cdb4d
--- /dev/null
+++ b/dev-scheme/kawa/kawa-3.1.1-r3.ebuild
@@ -0,0 +1,92 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+JAVA_PKG_IUSE="source"
+
+inherit autotools java-pkg-2
+
+DESCRIPTION="Java-based Scheme system & Language Framework"
+HOMEPAGE="https://www.gnu.org/software/kawa/
+ https://gitlab.com/kashell/Kawa/"
+SRC_URI="https://gitlab.com/kashell/${PN^}/-/archive/${PV}/${PN^}-${PV}.tar.gz"
+S="${WORKDIR}"/${PN^}-${PV}
+
+LICENSE="MIT public-domain jemacs? ( GPL-2 ) krl? ( GPL-2 )"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="+awt +frontend jemacs krl +sax servlets +swing +xml"
+RESTRICT="test" # fails
+
+COMMON_DEPEND="
+ frontend? ( sys-libs/readline:0 )
+ sax? ( dev-java/sax:0 )
+ servlets? ( dev-java/javax-servlet-api:3.0 )
+"
+DEPEND="
+ ${COMMON_DEPEND}
+ || ( virtual/jdk:11 virtual/jdk:1.8 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ >=virtual/jre-1.8
+"
+
+PATCHES=( "${FILESDIR}"/${PN}-${PV}-configure.ac-single_AM_INIT_AUTOMAKE.patch )
+
+src_prepare() {
+ default
+
+ java-pkg-2_src_prepare
+ eautoreconf
+}
+
+src_configure() {
+ local -a myconf=(
+ $(use_enable frontend kawa-frontend)
+ $(use_enable jemacs)
+ $(use_enable krl brl)
+ $(use_enable xml)
+ $(use_with awt)
+ $(use_with sax sax2)
+ --with-java-source="$(java-pkg_get-source)"
+ )
+
+ if use jemacs && ! use swing; then
+ einfo "Although the swing USE flag is disabled you chose to enable jemacs,"
+ einfo "so swing is enabled anyway."
+ myconf+=( "--with-swing" )
+ else
+ myconf+=( "$(use_with swing)" )
+ fi
+ if use servlets; then
+ myconf+=(
+ "--with-servlet=$(java-pkg_getjar javax-servlet-api-3.0 javax-servlet-api.jar)"
+ )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ emake -j1
+}
+
+src_install() {
+ use source && java-pkg_dosrc ./kawa/* ./gnu/*
+ java-pkg_newjar ./lib/kawa.jar
+
+ java-pkg_dolauncher "kawa" --main kawa.repl
+ java-pkg_dolauncher "qexo" --main kawa.repl --pkg_args \ "--xquery"
+ use servlets &&
+ java-pkg_dolauncher "kawa-cgi-servlet" --main gnu.kawa.servlet.CGIServletWrapper
+ use jemacs &&
+ java-pkg_dolauncher "jemacs" --main gnu.jemacs.lang.ELisp
+
+ einstalldocs
+ doinfo doc/kawa.info*
+ cp doc/kawa.man doc/kawa.1 || die
+ cp doc/qexo.man doc/qexo.1 || die
+ doman doc/*.1
+}
diff --git a/dev-scheme/kawa/metadata.xml b/dev-scheme/kawa/metadata.xml
new file mode 100644
index 000000000000..32770bd52d12
--- /dev/null
+++ b/dev-scheme/kawa/metadata.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ Kawa is a full Scheme implementation. It implements almost all of R5RS,
+ plus some extensions. By default, symbols are case sensitive. It is
+ completely written in Java. Scheme functions and files are automatically
+ compiled into Java byte-codes. Kawa does some optimizations, and the
+ compiled code runs at reasonable speed.
+ </longdescription>
+ <use>
+ <flag name="awt">Assume AWT is available</flag>
+ <flag name="frontend">Build "kawa" front-end program using
+ <pkg>sys-libs/readline</pkg></flag>
+ <flag name="jemacs">Build JEmacs</flag>
+ <flag name="krl">Build BRL emulation and KRL</flag>
+ <flag name="sax">Assume SAX2 is available with <pkg>dev-java/sax</pkg></flag>
+ <flag name="servlets">Build support for generating servlets with
+ Java servletapi</flag>
+ <flag name="swing">Assume Swing is available</flag>
+ </use>
+ <upstream>
+ <remote-id type="gitlab">kashell/Kawa</remote-id>
+ <remote-id type="savannah">kawa</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/metadata.xml b/dev-scheme/metadata.xml
new file mode 100644
index 000000000000..56199b3a5bb7
--- /dev/null
+++ b/dev-scheme/metadata.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE catmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<catmetadata>
+ <longdescription lang="en">
+ The dev-scheme category contains libraries and utilities relevant to the
+ Scheme programming language.
+ </longdescription>
+ <longdescription lang="de">
+ Die Kategorie dev-scheme enthält Bibliotheken und Werkzeuge für die
+ Programmiersprache Scheme.
+ </longdescription>
+ <longdescription lang="es">
+ La categoría dev-scheme contiene librerías y utilidades referentes al
+ lenguaje de programación Scheme.
+ </longdescription>
+ <longdescription lang="ja">
+ dev-schemeカテゴリーã«ã¯Schemeプログラミング言語ã«é–¢é€£ã—ãŸãƒ©ã‚¤ãƒ–ラリーã¨
+ ユーティリティãŒå«ã¾ã‚Œã¾ã™ã€‚
+ </longdescription>
+ <longdescription lang="nl">
+ De dev-scheme categorie bevat bibliotheken en hulpmiddelen voor het gebruik
+ van de programmeertaal Scheme.
+ </longdescription>
+ <longdescription lang="vi">
+ Nhóm dev-scheme chứa các thư viện và tiện ích liên quan
+ đến ngôn ngữ lập trình Scheme.
+ </longdescription>
+ <longdescription lang="it">
+ La categoria dev-scheme contiene librerie e utilità per il linguaggio di
+ programmazione Scheme.
+ </longdescription>
+ <longdescription lang="pt">
+ A categoria dev-scheme contém bibliotecas e utilitários
+ referentes à linguagem de programação Scheme.
+ </longdescription>
+ <longdescription lang="pl">
+ Kategoria dev-scheme zawiera biblioteki i narzędzia związane z językiem
+ programowania Scheme.
+ </longdescription>
+</catmetadata>
diff --git a/dev-scheme/mit-scheme/Manifest b/dev-scheme/mit-scheme/Manifest
new file mode 100644
index 000000000000..7bfa01d36351
--- /dev/null
+++ b/dev-scheme/mit-scheme/Manifest
@@ -0,0 +1 @@
+DIST mit-scheme-12.1-svm1-64le.tar.gz 88542947 BLAKE2B 07278da41c250924ff833933b7015e865a4dc8feea11a4e1b1647818cacf03fc25878cbe0aca3a8cf08adad5487c0f7aa5e5beb111ed46d09e8473ee01490eca SHA512 07e49b0f3919ad4ed85696766697615dc1720b4278c61d4aa6c3a1a92966d1e6fc7c9c7ca7db395d4e4279c5464639c80503bf4f6a8e51d2e951edc85a453dc9
diff --git a/dev-scheme/mit-scheme/files/mit-scheme-11.2-implicit-int.patch b/dev-scheme/mit-scheme/files/mit-scheme-11.2-implicit-int.patch
new file mode 100644
index 000000000000..545ec49494f2
--- /dev/null
+++ b/dev-scheme/mit-scheme/files/mit-scheme-11.2-implicit-int.patch
@@ -0,0 +1,19 @@
+--- a/lib/include/termcap.c
++++ b/lib/include/termcap.c
+@@ -144,7 +144,7 @@ int bufsize = 128;
+ # define NULL 0
+ #endif
+
+-static
++static void
+ memory_out ()
+ {
+ write (2, "Virtual memory exhausted\n", 25);
+@@ -328,6 +328,7 @@ tgetst1 (ptr, area)
+
+ char PC;
+
++void
+ tputs (string, nlines, outfun)
+ char *string;
+ int nlines;
diff --git a/dev-scheme/mit-scheme/files/mit-scheme-11.2-no-Werror.patch b/dev-scheme/mit-scheme/files/mit-scheme-11.2-no-Werror.patch
new file mode 100644
index 000000000000..5b156ddc7a15
--- /dev/null
+++ b/dev-scheme/mit-scheme/files/mit-scheme-11.2-no-Werror.patch
@@ -0,0 +1,21 @@
+index a9c3e6f..04f90b5 100755
+--- a/microcode/configure
++++ b/microcode/configure
+@@ -5482,7 +5482,7 @@ if test x"${GCC}" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler $flag" >&5
+ $as_echo_n "checking for compiler $flag... " >&6; }
+ SAVED_CFLAGS=${CFLAGS}
+- CFLAGS="${SAVED_CFLAGS} ${flag} -Werror"
++ CFLAGS="${SAVED_CFLAGS} ${flag}"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
+
+@@ -10751,7 +10751,7 @@ for base in ${OPTIONAL_BASES}; do
+ OPTIONAL_OBJECTS="${OPTIONAL_OBJECTS} ${base}.o"
+ done
+
+-CFLAGS="${CFLAGS} ${CFLAGS_WERROR}"
++CFLAGS="${CFLAGS}"
+ LIARC_CFLAGS="${LIARC_CFLAGS} ${CFLAGS_WNOERROR}"
+
+
diff --git a/dev-scheme/mit-scheme/metadata.xml b/dev-scheme/mit-scheme/metadata.xml
new file mode 100644
index 000000000000..eb1d673ea3c3
--- /dev/null
+++ b/dev-scheme/mit-scheme/metadata.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ MIT/GNU Scheme is an implementation of the Scheme programming language,
+ providing an interpreter, compiler, source-code debugger, integrated
+ Emacs-like editor, and a large runtime library. MIT/GNU Scheme is best
+ suited to programming large applications with a rapid development cycle.
+ </longdescription>
+ <use>
+ <flag name="blowfish">Compile with blowfish encryption support</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://savannah.gnu.org/bugs/?group=mit-scheme</bugs-to>
+ <remote-id type="savannah">mit-scheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/mit-scheme/mit-scheme-12.1-r1.ebuild b/dev-scheme/mit-scheme/mit-scheme-12.1-r1.ebuild
new file mode 100644
index 000000000000..785388a9f324
--- /dev/null
+++ b/dev-scheme/mit-scheme/mit-scheme-12.1-r1.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs wrapper
+
+DESCRIPTION="Scheme interpreter, compiler, debugger and runtime library"
+HOMEPAGE="https://www.gnu.org/software/mit-scheme/
+ https://savannah.gnu.org/projects/mit-scheme/"
+SRC_URI="https://ftp.gnu.org/gnu/${PN}/stable.pkg/${PV}/${P}-svm1-64le.tar.gz"
+S="${S}"/src
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64" # Additionally arm64 is officially supported.
+IUSE="blowfish gdbm gui postgres"
+
+BDEPEND="
+ virtual/pkgconfig
+"
+# Use ncurses to avoid ancient emulated termcap from 1980's, bug #871507
+RDEPEND="
+ sys-libs/ncurses
+ blowfish? ( dev-libs/openssl:= )
+ gdbm? ( sys-libs/gdbm:= )
+ gui? ( x11-libs/libX11 )
+ postgres? ( dev-db/postgresql:* )
+"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.2-no-Werror.patch
+ "${FILESDIR}"/${PN}-11.2-implicit-int.patch
+)
+
+src_configure() {
+ local termcap
+
+ # ncurses provides termcap via terminfo which is found in "tinfo" when
+ # installed as ncurses[tinfo] and in "ncurses" when installed as
+ # ncurses[-tinfo].
+ if "$(tc-getPKG_CONFIG)" --exists tinfo ; then
+ termcap=tinfo
+ else
+ termcap=ncurses
+ fi
+
+ local -a myconf=(
+ --disable-mcrypt
+ --with-termcap=${termcap}
+ $(use_enable blowfish)
+ $(use_enable gdbm)
+ $(use_enable gui edwin)
+ $(use_enable gui imail)
+ $(use_enable gui x11)
+ $(use_enable postgres pgsql)
+ $(use_with gui x)
+ )
+ econf ${myconf[@]}
+}
+
+src_compile() {
+ # Compile the "microcode" first, bug #879901
+ emake -C microcode
+
+ # Fails with multiple make-jobs, at least it compiles relatively fast.
+ emake -j1
+}
+
+# Tests that theoretically fail (still passes):
+# microcode/test-flonum-except
+# runtime/test-arith
+# runtime/test-flonum
+# runtime/test-flonum.bin
+# runtime/test-flonum.com
+
+src_test() {
+ FAST=y emake check -j1
+}
+
+src_install() {
+ default
+
+ # Create the edwin launcher.
+ use gui && make_wrapper mit-scheme-edwin "mit-scheme --edit"
+
+ # Remove "scheme" symlink to not "discriminate" any other implementations.
+ rm "${ED}"/usr/bin/scheme || die
+
+ # Remove libtool files.
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/dev-scheme/owl-lisp/Manifest b/dev-scheme/owl-lisp/Manifest
new file mode 100644
index 000000000000..4834c67e0890
--- /dev/null
+++ b/dev-scheme/owl-lisp/Manifest
@@ -0,0 +1,2 @@
+DIST owl-v0.2.1.tar.bz2 456751 BLAKE2B 15447cc71b633a97f48086a986c8015f1bc5664b993faa7f4537878fefb805d824c49174ef5a225e4cc870bb4c5b8d256cb887c83eba58d67c64bf5db6d2d7f9 SHA512 b69296e9be60ea4e8103c8100de9d02d00fc50e13624c87c1c4a78852b58aea403459f8b4a2f88826630e7204d58d522b58df489ce194c04e9424186309f5c8e
+DIST owl-v0.2.2.tar.bz2 457461 BLAKE2B 5817899d013d2a073fe914380ca64fbaa4a264c707199a41db79452878c3437c8b99c40fe1f0346968c09aad90955eacca255a09a8f9c41e7c495e67187a1cf7 SHA512 decb8b70603b8abeb37168f9f55434a5496248f6f7f7018ce3ca802d5a3f0736a05e74defb93cb8652513e76b15dac2494c401a7ce26e2024743ae333194825c
diff --git a/dev-scheme/owl-lisp/files/owl-lisp-0.2.1-make-no-test.patch b/dev-scheme/owl-lisp/files/owl-lisp-0.2.1-make-no-test.patch
new file mode 100644
index 000000000000..34a4b8ab2288
--- /dev/null
+++ b/dev-scheme/owl-lisp/files/owl-lisp-0.2.1-make-no-test.patch
@@ -0,0 +1,10 @@
+--- a/Makefile
++++ b/Makefile
+@@ -49,7 +49,6 @@ c/ol.c: fasl/ol.fasl
+ bin/ol: c/ol.c
+ # compile the real owl repl binary
+ $(CC) $(CFLAGS) $(LDFLAGS) -o bin/olp $?
+- CC="$(CC)" LDFLAGS="$(LDFLAGS)" CFLAGS="$(CFLAGS)" sh tests/run all bin/olp
+ test '!' -f $@ || mv $@ bin/ol-old
+ mv bin/olp $@
+
diff --git a/dev-scheme/owl-lisp/metadata.xml b/dev-scheme/owl-lisp/metadata.xml
new file mode 100644
index 000000000000..d11399931bf9
--- /dev/null
+++ b/dev-scheme/owl-lisp/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ Owl Lisp is a simple programming language. The main motivation for
+ writing it was to get a portable system for writing standalone
+ programs in a subjectively pleasant dialect of LISP, which in this
+ case means a minimal core language and runtime, purely functional
+ operation and support for asynchronous evaluation.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://gitlab.com/owl-lisp/owl/-/issues</bugs-to>
+ <remote-id type="gitlab">owl-lisp/owl</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/owl-lisp/owl-lisp-0.2.1.ebuild b/dev-scheme/owl-lisp/owl-lisp-0.2.1.ebuild
new file mode 100644
index 000000000000..569d3b931745
--- /dev/null
+++ b/dev-scheme/owl-lisp/owl-lisp-0.2.1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Purely functional dialect of Scheme"
+HOMEPAGE="https://haltp.org/posts/owl.html
+ https://gitlab.com/owl-lisp/owl/"
+
+if [[ "${PV}" == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/owl-lisp/owl.git"
+else
+ SRC_URI="https://gitlab.com/owl-lisp/owl/-/archive/v${PV}/owl-v${PV}.tar.bz2"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/owl-v${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+PATCHES=( "${FILESDIR}"/${PN}-0.2.1-make-no-test.patch )
+
+src_prepare() {
+ default
+
+ sed -i 's|make bin/vm|$(MAKE) bin/vm|g' "${S}"/Makefile || die
+
+ # Skip "tests/char-ready.sh", "does not work in background subshell".
+ rm tests/char-ready.sh || die
+}
+
+src_compile(){
+ emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" owl
+}
+
+src_install() {
+ exeinto /usr/bin
+ doexe "${S}"/bin/ol
+ newexe "${S}"/bin/vm ovm
+
+ doman "${S}"/doc/*.1
+
+ einstalldocs
+}
diff --git a/dev-scheme/owl-lisp/owl-lisp-0.2.2.ebuild b/dev-scheme/owl-lisp/owl-lisp-0.2.2.ebuild
new file mode 100644
index 000000000000..2d6148517bdf
--- /dev/null
+++ b/dev-scheme/owl-lisp/owl-lisp-0.2.2.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Purely functional dialect of Scheme"
+HOMEPAGE="https://haltp.org/posts/owl.html
+ https://gitlab.com/owl-lisp/owl/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://gitlab.com/owl-lisp/owl.git"
+else
+ SRC_URI="https://gitlab.com/owl-lisp/owl/-/archive/v${PV}/owl-v${PV}.tar.bz2"
+ S="${WORKDIR}/owl-v${PV}"
+
+ KEYWORDS="~amd64"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+PATCHES=( "${FILESDIR}/${PN}-0.2.1-make-no-test.patch" )
+
+src_prepare() {
+ default
+
+ sed -i 's|make bin/vm|$(MAKE) bin/vm|g' "${S}"/Makefile || die
+
+ # Skip "tests/char-ready.sh", "does not work in background subshell".
+ rm tests/char-ready.sh || die
+}
+
+src_compile(){
+ emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" owl
+}
+
+src_install() {
+ exeinto /usr/bin
+ doexe bin/ol
+ newexe bin/vm ovm
+
+ doman doc/*.1
+
+ einstalldocs
+}
diff --git a/dev-scheme/owl-lisp/owl-lisp-9999.ebuild b/dev-scheme/owl-lisp/owl-lisp-9999.ebuild
new file mode 100644
index 000000000000..b1789ff9873e
--- /dev/null
+++ b/dev-scheme/owl-lisp/owl-lisp-9999.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="Purely functional dialect of Scheme"
+HOMEPAGE="https://haltp.org/posts/owl.html
+ https://gitlab.com/owl-lisp/owl/"
+
+if [[ "${PV}" == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/owl-lisp/owl.git"
+else
+ SRC_URI="https://gitlab.com/owl-lisp/owl/-/archive/v${PV}/owl-v${PV}.tar.bz2"
+ KEYWORDS="~amd64"
+ S="${WORKDIR}/owl-v${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+PATCHES=( "${FILESDIR}"/${PN}-0.2.1-make-no-test.patch )
+
+src_prepare() {
+ default
+
+ # Skip "tests/char-ready.sh", "does not work in background subshell".
+ rm tests/char-ready.sh || die
+}
+
+src_compile(){
+ emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" owl
+}
+
+src_install() {
+ exeinto /usr/bin
+ doexe "${S}"/bin/ol
+ newexe "${S}"/bin/vm ovm
+
+ doman "${S}"/doc/*.1
+
+ einstalldocs
+}
diff --git a/dev-scheme/racket/Manifest b/dev-scheme/racket/Manifest
new file mode 100644
index 000000000000..e9af57293d42
--- /dev/null
+++ b/dev-scheme/racket/Manifest
@@ -0,0 +1,8 @@
+DIST racket-8.16-src-builtpkgs.tgz 157879458 BLAKE2B a357c311d3a2ebf80e59ba53de74bca43fe0d6862fb02dbb20ff920cfe8608209cf0c37dd6692b83ee41cfb4f9ffce41aad6d5cb84e7f93d67a86e4f390a8fbf SHA512 dea12ce93312f9ff9b4da2071a7e4b386b2364d8512efe09c092750d72d89deedb432f14e7c03d1328b2d0555715773d095dfdd6cf5ee04e0cf558dc4e6a0fa4
+DIST racket-8.17-src-builtpkgs.tgz 158087574 BLAKE2B 6bc57ad530cb6b203ee1efef8de7357a3963d8529ab7605e28cf3312cdfe3c709294fbe9e594737998f332943f03d13864fe6f036f1e1f23d465f47c72a01371 SHA512 1fa4bf40e38b2e40cd2b83ed0972f88f74de7e4d108cdfa205c5e29cf59cb0ea54cb59d736b87216a2ab1509fc36ab9fa66e9f37d401015523abce00c1f412d8
+DIST racket-9.1-src-builtpkgs.tgz 161575256 BLAKE2B 7bc65200446b65b5801eb1c3ec0f11d4f4b4a3164588e4836405f7931d0131f74a3c966c88eeed581a2270fb9d6863aa96245e29236f2f87e3f497cc1f02e47c SHA512 6cbce471327fa3adac8bdac7ff3f7529205e0175bac367605e6c8ba55fd7f87bdfe52d633797a6868132daed37cb02470216d4c3e22c9ecef6fa9219531451fc
+DIST racket-9.2-src-builtpkgs.tgz 163124367 BLAKE2B 3edb03782184856add67bddb5620743db8a93f0991aa4f3a02a271858558d094e26d3492828defe0ded0e778ee2a72e2cef10cf2b1b4112dddb5160378bebb08 SHA512 4765f6b69aad2ded29012fcc8c2ac05a4c7f1a04320119436b2101d39646f2f8facac3f502cc68d48643cd3f78bfca359725a76d3875fc1d80812f1069229a04
+DIST racket-minimal-8.16-src-builtpkgs.tgz 23517703 BLAKE2B 623c7d879e9d7300fe14926bc2302e635ea03a33b2f9125d0abec7c96eeae46836d9191677fef9843273a6cf3298eff8bf93a6a6519ef1a62eaa14ef1cdf6ebd SHA512 c3852cda6ad2edbb53a9a14841f4d2f2b6eaea54f12805e01758bc38e277406c9f2eb831a1a6d8f76782541031a25d70d4157a6eb9e14847d40ea34b46dc2cb8
+DIST racket-minimal-8.17-src-builtpkgs.tgz 23555413 BLAKE2B dcc71f5e45829b6a0c847241e073b97bb71c8658e5b454448d856d118f22279698645cb0a942119b2de336d0bfff76f8f6b71b2491a9e5f723bf02941e85c74a SHA512 f426d6bdc6fbb8aec96156e003d5d95a1e032468673aca0914be60e1f215417e7fb4e240762b93db74ffd928c4330ecd4467fd1b5f6f40abb12615ce94be8bb9
+DIST racket-minimal-9.1-src-builtpkgs.tgz 23823956 BLAKE2B b930d90fa484c8c2b2c569fa58a2c58b059f00f7c1b3041a0dad435aa817be6444c1693ddf39ca6239a72545fe29e5451b42335206e330123635fb0252b62ffd SHA512 50e0f5ed9f74b9667caa67be7cdd4e85d302886f91617773e4531d6f0f0553a5ffda4583514e5a2a19843ce649e84436d15d1c4f01aec526dfca359909ae48cd
+DIST racket-minimal-9.2-src-builtpkgs.tgz 24142926 BLAKE2B 53a055f0024e9c9765c7474642ad353e0a3d32e9784b48f8a375cf6bb09a218f5b3e112ebd389385f2c60d7431bc788782f552d115595ac29ae1a3b79306c50b SHA512 d38b9e665db19f69173e2cf5403a7d87f8003eaf86581fafa9ed977293a16ffb7e6955f589ea21deb56a11f79f90b4f9a189be434364e2be35a7fb6d215bc358
diff --git a/dev-scheme/racket/files/racket-8.15-gcc15.patch b/dev-scheme/racket/files/racket-8.15-gcc15.patch
new file mode 100644
index 000000000000..4e9ae88c22ea
--- /dev/null
+++ b/dev-scheme/racket/files/racket-8.15-gcc15.patch
@@ -0,0 +1,21 @@
+https://bugs.gentoo.org/944149
+https://github.com/racket/racket/issues/5183
+https://github.com/racket/racket/commit/72b83f784ad1c6fb6ee3fb7b31df165bebfb21ed
+
+From 72b83f784ad1c6fb6ee3fb7b31df165bebfb21ed Mon Sep 17 00:00:00 2001
+From: Matthew Flatt <mflatt@racket-lang.org>
+Date: Sun, 19 Jan 2025 11:03:31 -0700
+Subject: [PATCH] rktio: add missing signal-handler argument
+
+Closes #5183
+--- a/rktio/rktio_process.c
++++ b/rktio/rktio_process.c
+@@ -390,7 +390,7 @@ void centralized_done_with_process_id(int pid, int in_group)
+ pthread_mutex_unlock(&child_wait_lock);
+ }
+
+-static void got_sigchld()
++static void got_sigchld(int ignored)
+ {
+ /* handle doesn't need to to anything, since sigwait()
+ in a thread does the work. */
diff --git a/dev-scheme/racket/metadata.xml b/dev-scheme/racket/metadata.xml
new file mode 100644
index 000000000000..ae43cd717d1c
--- /dev/null
+++ b/dev-scheme/racket/metadata.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Grow your Program - Racket's interactive mode encourages
+ experimentation, and quick scripts easily compose into larger
+ systems. Small scripts and large systems both benefit from native-code
+ JIT compilation. When a system gets too big to keep in your head, you
+ can add static types. Grow your Language - extend Racket whenever you
+ need to. Mold it to better suit your tasks without sacrificing
+ interoperability with existing libraries and without having to modify
+ the tool chain. When less is more, you can remove parts of a language or
+ start over and build a new one. Grow your Skills - whether you're just
+ starting out, want to know more about programming language applications
+ or models, looking to expand your horizons, or ready to dive into
+ research, Racket can help you become a better programmer and system
+ builder.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/racket/racket/issues/</bugs-to>
+ <remote-id type="github">racket/racket</remote-id>
+ </upstream>
+ <use>
+ <flag name="chez">
+ Build Racket on Chez (Racket CS)
+ </flag>
+ <flag name="futures">
+ Enable racket/future library for fine-grained hardware parallelism
+ </flag>
+ <flag name="ncurses">
+ Add ncurses support for expeditor (REPL expression editor)
+ </flag>
+ <flag name="places">
+ Enable racket/place library for share-nothing parallelism and
+ message-passing communication. Compared to futures, places are
+ heavyweight, but they have a simpler performance model.
+ </flag>
+ <flag name="threads">
+ Enable support for green threads
+ </flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-scheme/racket/racket-8.16.ebuild b/dev-scheme/racket/racket-8.16.ebuild
new file mode 100644
index 000000000000..028f894f454c
--- /dev/null
+++ b/dev-scheme/racket/racket-8.16.ebuild
@@ -0,0 +1,209 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs desktop optfeature toolchain-funcs readme.gentoo-r1
+
+DESCRIPTION="General purpose, multi-paradigm Lisp-Scheme programming language"
+HOMEPAGE="https://racket-lang.org/
+ https://github.com/racket/racket/"
+
+SRC_URI="
+ minimal? ( https://download.racket-lang.org/installers/${PV}/${PN}-minimal-${PV}-src-builtpkgs.tgz )
+ !minimal? ( https://download.racket-lang.org/installers/${PV}/${P}-src-builtpkgs.tgz )
+"
+S="${WORKDIR}/${P}/src"
+
+# See https://blog.racket-lang.org/2019/11/completing-racket-s-relicensing-effort.html
+LICENSE="|| ( MIT Apache-2.0 ) chez? ( Apache-2.0 ) !chez? ( LGPL-3 )"
+
+# Bytecode generated by Racket is not compatible between versions.
+# The bytecode version should be denoted by SLOT, in most cases
+# PV == SLOT but this has to be checked carefully and in cases
+# where we use _p, _pre, etc it will have to be set manually.
+SLOT="0/${PV}"
+
+KEYWORDS="amd64 ~arm ~ppc ppc64 x86"
+IUSE="+chez +doc +futures iconv +jit minimal ncurses +places +threads"
+# * "chez" - see bug #809785 re chez/threads
+# * "iconv" - required for "doc"
+REQUIRED_USE="
+ chez? ( futures places ) futures? ( jit threads ) places? ( threads )
+ doc? ( iconv )
+"
+
+RDEPEND="
+ dev-db/sqlite:3
+ dev-libs/libffi:=
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ doc? (
+ >=media-libs/libjpeg-turbo-3.0.3
+ dev-libs/glib:2
+ media-libs/fontconfig
+ x11-libs/cairo
+ x11-libs/pango
+ )
+"
+
+CHECKREQS_DISK_BUILD="1700M"
+# "mred" and "mzscheme" are binaries generated by Racket, not CC
+QA_FLAGS_IGNORED="usr/bin/mred usr/bin/mzscheme"
+
+DOC_CONTENTS="
+If you wish to use sys-libs/readline instead of dev-libs/libedit
+for readline-like features in the Racket's REPL you can install
+the package 'readline-gpl' using raco, Racket's package manager
+https://pkgs.racket-lang.org/package/readline-gpl
+"
+
+# Package database files (for pkg_preinst & pkg_config)
+PKGDB=(
+ /usr/share/racket/info-cache.rktd
+ /usr/share/racket/links.rktd
+ /usr/share/racket/pkgs/pkgs.rktd
+)
+
+PATCHES=( "${FILESDIR}/racket-8.15-gcc15.patch" )
+
+src_prepare() {
+ # Prepare the environment.
+ unset PLTADDONDIR PLTCOLLECTS PLTCONFIGDIR PLTUSERHOME
+
+ default
+
+ # Remove bundled libffi.
+ rm -r "${S}/bc/foreign/libffi" \
+ || die "failed to remove bundled libffi"
+}
+
+src_configure() {
+ # Compilation of Zuo does not respect the autoconf configuration.
+ tc-export CC
+
+ einfo "Configuring Zuo in ${S}/zuo"
+ pushd "${S}/zuo" >/dev/null || die
+ econf
+ popd >/dev/null || die
+
+ einfo "Configuring Racket in ${S}"
+ # Libtool:
+ # According to vapier, we should use the bundled libtool
+ # such that we don't preclude cross-compile.
+ # Thus don't use --enable-lt=/usr/bin/libtool
+ # Backend:
+ # --enable-bc builds Racket w/o chez backend
+ # C Libraries:
+ # --enable-libs & --disable-shared is the way to build
+ # .a files that are needed to embed Racket into programs
+ # https://docs.racket-lang.org/inside/cs-embedding.html
+ local -a myconf=(
+ --disable-shared
+ --disable-strip
+ --docdir="${EPREFIX}/usr/share/doc/${PF}"
+ --enable-libs
+ $(usex chez "--enable-cs --enable-csonly" "--enable-bc --enable-bconly")
+ $(use_enable doc docs)
+ $(use_enable iconv)
+ $(use_enable ncurses curses)
+ )
+
+ # Some options are togglable only for the BC version (are forced in CS)
+ if ! use chez ; then
+ myconf+=(
+ --enable-float
+ --enable-foreign
+ --enable-gracket
+ --enable-libffi
+ $(use_enable futures)
+ $(use_enable jit)
+ $(use_enable places)
+ $(use_enable threads pthread)
+ )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ # Compile Racket.
+ CC_FOR_BUILD="$(tc-getCC)" default
+
+ # Recompile Zuo with optimizations.
+ emake -C zuo
+}
+
+src_install() {
+ # Install Racket.
+ default
+
+ # Install Zuo.
+ emake -C zuo DESTDIR="${ED}" install
+
+ # raco needs decompressed files for packages doc installation, bug #662424
+ if use doc ; then
+ docompress -x "/usr/share/doc/${PF}"
+ fi
+
+ # Create missing desktop files and icon.
+ if ! use minimal ; then
+ newicon "${ED}/usr/share/racket/drracket-exe-icon.png" racket.png
+
+ make_desktop_entry "gracket" "GRacket" "racket" "Development;Education;"
+ make_desktop_entry "plt-games" "PLT Games" "racket" "Education;Game;"
+ fi
+
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ # If we are merging the same SLOT check if package
+ # database files exist and do not overwrite them
+ if has_version "${CATEGORY}/${PN}:${SLOT}" ; then
+ echo "We are installing the same SLOT: ${SLOT}"
+
+ local rktd
+ for rktd in "${PKGDB[@]}" ; do
+ if [[ -f "${EROOT}/${rktd}" ]] && [[ -f "${ED}/${rktd}" ]] ; then
+ einfo "Keeping old file: ${rktd}"
+
+ mv "${ED}/${rktd}" "${ED}/${rktd}.bak" \
+ || die "failed to create a backup of ${rktd}"
+
+ cp "${EROOT}/${rktd}" "${ED}/${rktd}" \
+ || die "failed to create a copy of ${rktd}"
+ fi
+ done
+ fi
+}
+
+get_outsiders() {
+ racket -l raco -- pkg show -i | grep 'link' | sed 's|link.*||g'
+}
+
+pkg_postinst() {
+ # If we have any pkgs not included in Racket main distribution (outsiders),
+ # then we have to re-setup them or during installation other pkgs will want
+ # to recompile parts of "outsider" pkgs they depend upon (and fail).
+ local -a outsiders=( $(get_outsiders) )
+
+ if [[ -n "${outsiders[@]}" ]] ; then
+ ebegin "Running \"raco setup\" for outsider packages"
+ echo "Outsiders: ${outsiders[@]}"
+
+ raco setup --all-users --force --no-docs --no-user --pkgs "${outsiders[@]}"
+ eend 0 # do not fail
+ fi
+
+ optfeature "readline editing features in REPL" dev-libs/libedit
+ optfeature "generating PDF files using Scribble" dev-texlive/texlive-fontsextra
+
+ readme.gentoo_print_elog
+}
diff --git a/dev-scheme/racket/racket-8.17.ebuild b/dev-scheme/racket/racket-8.17.ebuild
new file mode 100644
index 000000000000..336c4bf9e357
--- /dev/null
+++ b/dev-scheme/racket/racket-8.17.ebuild
@@ -0,0 +1,211 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs desktop dot-a optfeature toolchain-funcs readme.gentoo-r1
+
+DESCRIPTION="General purpose, multi-paradigm Lisp-Scheme programming language"
+HOMEPAGE="https://racket-lang.org/
+ https://github.com/racket/racket/"
+
+SRC_URI="
+ minimal? ( https://download.racket-lang.org/installers/${PV}/${PN}-minimal-${PV}-src-builtpkgs.tgz )
+ !minimal? ( https://download.racket-lang.org/installers/${PV}/${P}-src-builtpkgs.tgz )
+"
+S="${WORKDIR}/${P}/src"
+
+# See https://blog.racket-lang.org/2019/11/completing-racket-s-relicensing-effort.html
+LICENSE="|| ( MIT Apache-2.0 ) chez? ( Apache-2.0 ) !chez? ( LGPL-3 )"
+
+# Bytecode generated by Racket is not compatible between versions.
+# The bytecode version should be denoted by SLOT, in most cases
+# PV == SLOT but this has to be checked carefully and in cases
+# where we use _p, _pre, etc it will have to be set manually.
+SLOT="0/${PV}"
+
+KEYWORDS="amd64 ~arm ~ppc ~ppc64 x86"
+IUSE="+chez +doc +futures iconv +jit minimal ncurses +places +threads"
+# * "chez" - see bug #809785 re chez/threads
+# * "iconv" - required for "doc"
+REQUIRED_USE="
+ chez? ( futures places ) futures? ( jit threads ) places? ( threads )
+ doc? ( iconv )
+"
+
+RDEPEND="
+ dev-db/sqlite:3
+ dev-libs/libffi:=
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ doc? (
+ >=media-libs/libjpeg-turbo-3.0.3
+ dev-libs/glib:2
+ media-libs/fontconfig
+ x11-libs/cairo
+ x11-libs/pango
+ )
+"
+
+CHECKREQS_DISK_BUILD="1700M"
+
+# "mred" and "mzscheme" are binaries generated by Racket, not CC
+QA_FLAGS_IGNORED="usr/bin/mred usr/bin/mzscheme"
+
+DOC_CONTENTS="
+If you wish to use sys-libs/readline instead of dev-libs/libedit
+for readline-like features in the Racket's REPL you can install
+the package 'readline-gpl' using raco, Racket's package manager
+https://pkgs.racket-lang.org/package/readline-gpl
+"
+
+# Package database files (for pkg_preinst & pkg_config)
+PKGDB=(
+ /usr/share/racket/info-cache.rktd
+ /usr/share/racket/links.rktd
+ /usr/share/racket/pkgs/pkgs.rktd
+)
+
+src_prepare() {
+ # Prepare the environment.
+ unset PLTADDONDIR PLTCOLLECTS PLTCONFIGDIR PLTUSERHOME
+
+ default
+
+ # Remove bundled libffi.
+ rm -r "${S}/bc/foreign/libffi" \
+ || die "failed to remove bundled libffi"
+}
+
+src_configure() {
+ # Compilation of Zuo does not respect the autoconf configuration.
+ tc-export CC
+
+ einfo "Configuring Zuo in ${S}/zuo"
+ pushd "${S}/zuo" >/dev/null || die
+ econf
+ popd >/dev/null || die
+
+ einfo "Configuring Racket in ${S}"
+ # Libtool:
+ # According to vapier, we should use the bundled libtool
+ # such that we don't preclude cross-compile.
+ # Thus don't use --enable-lt=/usr/bin/libtool
+ # Backend:
+ # --enable-bc builds Racket w/o chez backend
+ # C Libraries:
+ # --enable-libs & --disable-shared is the way to build
+ # .a files that are needed to embed Racket into programs
+ # https://docs.racket-lang.org/inside/cs-embedding.html
+ lto-guarantee-fat
+ local -a myconf=(
+ --disable-shared
+ --disable-strip
+ --docdir="${EPREFIX}/usr/share/doc/${PF}"
+ --enable-libs
+ $(usex chez "--enable-cs --enable-csonly" "--enable-bc --enable-bconly")
+ $(use_enable doc docs)
+ $(use_enable iconv)
+ $(use_enable ncurses curses)
+ )
+
+ # Some options are togglable only for the BC version (are forced in CS)
+ if ! use chez ; then
+ myconf+=(
+ --enable-float
+ --enable-foreign
+ --enable-gracket
+ --enable-libffi
+ $(use_enable futures)
+ $(use_enable jit)
+ $(use_enable places)
+ $(use_enable threads pthread)
+ )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ # Compile Racket.
+ CC_FOR_BUILD="$(tc-getCC)" default
+
+ # Recompile Zuo with optimizations.
+ emake -C zuo
+}
+
+src_install() {
+ # Install Racket.
+ default
+
+ # Install Zuo.
+ emake -C zuo DESTDIR="${ED}" install
+
+ strip-lto-bytecode
+
+ # raco needs decompressed files for packages doc installation, bug #662424
+ if use doc ; then
+ docompress -x "/usr/share/doc/${PF}"
+ fi
+
+ # Create missing desktop files and icon.
+ if ! use minimal ; then
+ newicon "${ED}/usr/share/racket/drracket-exe-icon.png" racket.png
+
+ make_desktop_entry "gracket" "GRacket" "racket" "Development;Education;"
+ make_desktop_entry "plt-games" "PLT Games" "racket" "Education;Game;"
+ fi
+
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ # If we are merging the same SLOT check if package
+ # database files exist and do not overwrite them
+ if has_version "${CATEGORY}/${PN}:${SLOT}" ; then
+ echo "We are installing the same SLOT: ${SLOT}"
+
+ local rktd=""
+ for rktd in "${PKGDB[@]}" ; do
+ if [[ -f "${EROOT}/${rktd}" ]] && [[ -f "${ED}/${rktd}" ]] ; then
+ einfo "Keeping old file: ${rktd}"
+
+ mv "${ED}/${rktd}" "${ED}/${rktd}.bak" \
+ || die "failed to create a backup of ${rktd}"
+
+ cp "${EROOT}/${rktd}" "${ED}/${rktd}" \
+ || die "failed to create a copy of ${rktd}"
+ fi
+ done
+ fi
+}
+
+get_outsiders() {
+ racket -l raco -- pkg show -i | grep 'link' | sed 's|link.*||g'
+}
+
+pkg_postinst() {
+ # If we have any pkgs not included in Racket main distribution (outsiders),
+ # then we have to re-setup them or during installation other pkgs will want
+ # to recompile parts of "outsider" pkgs they depend upon (and fail).
+ local -a outsiders=( $(get_outsiders) )
+
+ if [[ -n "${outsiders[@]}" ]] ; then
+ ebegin "Running \"raco setup\" for outsider packages"
+ echo "Outsiders: ${outsiders[@]}"
+
+ raco setup --all-users --force --no-docs --no-user --pkgs "${outsiders[@]}"
+ eend 0 # do not fail
+ fi
+
+ optfeature "readline editing features in REPL" dev-libs/libedit
+ optfeature "generating PDF files using Scribble" dev-texlive/texlive-fontsextra
+
+ readme.gentoo_print_elog
+}
diff --git a/dev-scheme/racket/racket-9.1.ebuild b/dev-scheme/racket/racket-9.1.ebuild
new file mode 100644
index 000000000000..a8b42616beb8
--- /dev/null
+++ b/dev-scheme/racket/racket-9.1.ebuild
@@ -0,0 +1,207 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs desktop dot-a optfeature toolchain-funcs readme.gentoo-r1
+
+DESCRIPTION="General purpose, multi-paradigm Lisp-Scheme programming language"
+HOMEPAGE="https://racket-lang.org/
+ https://github.com/racket/racket/"
+
+SRC_URI="
+ minimal? ( https://download.racket-lang.org/installers/${PV}/${PN}-minimal-${PV}-src-builtpkgs.tgz )
+ !minimal? ( https://download.racket-lang.org/installers/${PV}/${P}-src-builtpkgs.tgz )
+"
+S="${WORKDIR}/${P}/src"
+
+# See https://blog.racket-lang.org/2019/11/completing-racket-s-relicensing-effort.html
+LICENSE="|| ( MIT Apache-2.0 ) chez? ( Apache-2.0 ) !chez? ( LGPL-3 )"
+
+# Bytecode generated by Racket is not compatible between versions.
+# The bytecode version should be denoted by SLOT, in most cases
+# PV == SLOT but this has to be checked carefully and in cases
+# where we use _p, _pre, etc it will have to be set manually.
+SLOT="0/${PV}"
+
+KEYWORDS="amd64 ~arm ~ppc ~ppc64 ~x86"
+IUSE="+chez +doc +futures iconv +jit minimal ncurses +places +threads"
+
+# * "chez" - see bug #809785 re chez/threads
+# * "iconv" - required for "doc"
+REQUIRED_USE="
+ chez? ( futures places ) futures? ( jit threads ) places? ( threads )
+ doc? ( iconv )
+"
+
+RDEPEND="
+ dev-db/sqlite:3
+ dev-libs/libffi:=
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ doc? (
+ >=media-libs/libjpeg-turbo-3.0.3
+ dev-libs/glib:2
+ media-libs/fontconfig
+ x11-libs/cairo
+ x11-libs/pango
+ )
+"
+
+CHECKREQS_DISK_BUILD="1700M"
+
+# "mred" and "mzscheme" are binaries generated by Racket, not CC
+QA_FLAGS_IGNORED="usr/bin/mred usr/bin/mzscheme"
+
+DOC_CONTENTS="If you wish to use sys-libs/readline instead of dev-libs/libedit
+for readline-like features in the Racket's REPL you can install
+the package 'readline-gpl' using raco, Racket's package manager
+https://pkgs.racket-lang.org/package/readline-gpl"
+
+# Package database files (for pkg_preinst & pkg_config)
+PKGDB=(
+ /usr/share/racket/info-cache.rktd
+ /usr/share/racket/links.rktd
+ /usr/share/racket/pkgs/pkgs.rktd
+)
+
+src_prepare() {
+ # Prepare the environment.
+ unset PLTADDONDIR PLTCOLLECTS PLTCONFIGDIR PLTUSERHOME
+ # Remove bundled libffi.
+ rm -r "${S}/bc/foreign/libffi" || die "failed to remove bundled libffi"
+
+ default
+}
+
+src_configure() {
+ # Compilation of Zuo does not respect the autoconf configuration.
+ tc-export CC
+
+ lto-guarantee-fat
+
+ einfo "Configuring Zuo in ${S}/zuo"
+ pushd "${S}/zuo" >/dev/null || die
+ econf
+ popd >/dev/null || die
+
+ einfo "Configuring Racket in ${S}"
+ # Libtool:
+ # According to vapier, we should use the bundled libtool
+ # such that we don't preclude cross-compile.
+ # Thus don't use --enable-lt=/usr/bin/libtool
+ # Backend:
+ # --enable-bc builds Racket w/o chez backend
+ # C Libraries:
+ # --enable-libs & --disable-shared is the way to build
+ # .a files that are needed to embed Racket into programs
+ # https://docs.racket-lang.org/inside/cs-embedding.html
+ local -a myconf=(
+ --disable-shared
+ --disable-strip
+ --docdir="${EPREFIX}/usr/share/doc/${PF}"
+ --enable-libs
+ $(usex chez "--enable-cs --enable-csonly" "--enable-bc --enable-bconly")
+ $(use_enable doc docs)
+ $(use_enable iconv)
+ $(use_enable ncurses curses)
+ )
+ # Some options are togglable only for the BC version (are forced in CS)
+ if ! use chez ; then
+ myconf+=(
+ --enable-float
+ --enable-foreign
+ --enable-gracket
+ --enable-libffi
+ $(use_enable futures)
+ $(use_enable jit)
+ $(use_enable places)
+ $(use_enable threads pthread)
+ )
+ fi
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ # Compile Racket.
+ CC_FOR_BUILD="$(tc-getCC)" default
+
+ # Recompile Zuo with optimizations.
+ emake -C zuo
+}
+
+src_install() {
+ # Install Racket.
+ default
+
+ # Install Zuo.
+ emake -C zuo DESTDIR="${ED}" install
+
+ strip-lto-bytecode
+
+ # raco needs decompressed files for packages doc installation, bug #662424
+ if use doc ; then
+ docompress -x "/usr/share/doc/${PF}"
+ fi
+
+ # Create missing desktop files and icon.
+ if ! use minimal ; then
+ newicon "${ED}/usr/share/racket/drracket-exe-icon.png" racket.png
+
+ make_desktop_entry "gracket" "GRacket" "racket" "Development;Education;"
+ make_desktop_entry "plt-games" "PLT Games" "racket" "Education;Game;"
+ fi
+
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ # If we are merging the same SLOT check if the package database files
+ # (see "PKGDB" var) exist and do not overwrite them.
+ if has_version "${CATEGORY}/${PN}:${SLOT}" ; then
+ echo "We are installing the same SLOT: ${SLOT}"
+
+ local rktd=""
+ for rktd in "${PKGDB[@]}" ; do
+ if [[ -f "${EROOT}/${rktd}" ]] && [[ -f "${ED}/${rktd}" ]] ; then
+ einfo "Keeping old file: ${rktd}"
+
+ mv "${ED}/${rktd}" "${ED}/${rktd}.bak" \
+ || die "failed to create a backup of ${rktd}"
+
+ cp "${EROOT}/${rktd}" "${ED}/${rktd}" \
+ || die "failed to create a copy of ${rktd}"
+ fi
+ done
+ fi
+}
+
+get_outsiders() {
+ racket -l raco -- pkg show -i | grep 'link' | sed 's|link.*||g'
+}
+
+pkg_postinst() {
+ # If we have any pkgs not included in Racket main distribution (outsiders),
+ # then we have to re-setup them or during installation other pkgs will want
+ # to recompile parts of "outsider" pkgs they depend upon (and fail).
+ local -a outsiders=( $(get_outsiders) )
+
+ if [[ -n "${outsiders[@]}" ]] ; then
+ ebegin "Running \"raco setup\" for outsider packages"
+ echo "Outsiders: ${outsiders[@]}"
+
+ raco setup --all-users --force --no-docs --no-user --pkgs "${outsiders[@]}"
+ eend 0 # do not fail
+ fi
+
+ optfeature "readline editing features in REPL" dev-libs/libedit
+ optfeature "generating PDF files using Scribble" dev-texlive/texlive-fontsextra
+
+ readme.gentoo_print_elog
+}
diff --git a/dev-scheme/racket/racket-9.2.ebuild b/dev-scheme/racket/racket-9.2.ebuild
new file mode 100644
index 000000000000..f0d1f8b3f8b9
--- /dev/null
+++ b/dev-scheme/racket/racket-9.2.ebuild
@@ -0,0 +1,207 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit check-reqs desktop dot-a optfeature toolchain-funcs readme.gentoo-r1
+
+DESCRIPTION="General purpose, multi-paradigm Lisp-Scheme programming language"
+HOMEPAGE="https://racket-lang.org/
+ https://github.com/racket/racket/"
+
+SRC_URI="
+ minimal? ( https://download.racket-lang.org/installers/${PV}/${PN}-minimal-${PV}-src-builtpkgs.tgz )
+ !minimal? ( https://download.racket-lang.org/installers/${PV}/${P}-src-builtpkgs.tgz )
+"
+S="${WORKDIR}/${P}/src"
+
+# See https://blog.racket-lang.org/2019/11/completing-racket-s-relicensing-effort.html
+LICENSE="|| ( MIT Apache-2.0 ) chez? ( Apache-2.0 ) !chez? ( LGPL-3 )"
+
+# Bytecode generated by Racket is not compatible between versions.
+# The bytecode version should be denoted by SLOT, in most cases
+# PV == SLOT but this has to be checked carefully and in cases
+# where we use _p, _pre, etc it will have to be set manually.
+SLOT="0/${PV}"
+
+KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86"
+IUSE="+chez +doc +futures iconv +jit minimal ncurses +places +threads"
+
+# * "chez" - see bug #809785 re chez/threads
+# * "iconv" - required for "doc"
+REQUIRED_USE="
+ chez? ( futures places ) futures? ( jit threads ) places? ( threads )
+ doc? ( iconv )
+"
+
+RDEPEND="
+ dev-db/sqlite:3
+ dev-libs/libffi:=
+ ncurses? (
+ sys-libs/ncurses:=
+ )
+"
+DEPEND="
+ ${RDEPEND}
+"
+BDEPEND="
+ doc? (
+ >=media-libs/libjpeg-turbo-3.0.3
+ dev-libs/glib:2
+ media-libs/fontconfig
+ x11-libs/cairo
+ x11-libs/pango
+ )
+"
+
+CHECKREQS_DISK_BUILD="1700M"
+
+# "mred" and "mzscheme" are binaries generated by Racket, not CC
+QA_FLAGS_IGNORED="usr/bin/mred usr/bin/mzscheme"
+
+DOC_CONTENTS="If you wish to use sys-libs/readline instead of dev-libs/libedit
+for readline-like features in the Racket's REPL you can install
+the package 'readline-gpl' using raco, Racket's package manager
+https://pkgs.racket-lang.org/package/readline-gpl"
+
+# Package database files (for pkg_preinst & pkg_config)
+PKGDB=(
+ /usr/share/racket/info-cache.rktd
+ /usr/share/racket/links.rktd
+ /usr/share/racket/pkgs/pkgs.rktd
+)
+
+src_prepare() {
+ # Prepare the environment.
+ unset PLTADDONDIR PLTCOLLECTS PLTCONFIGDIR PLTUSERHOME
+ # Remove bundled libffi.
+ rm -r "${S}/bc/foreign/libffi" || die "failed to remove bundled libffi"
+
+ default
+}
+
+src_configure() {
+ # Compilation of Zuo does not respect the autoconf configuration.
+ tc-export CC
+
+ lto-guarantee-fat
+
+ einfo "Configuring Zuo in ${S}/zuo"
+ pushd "${S}/zuo" >/dev/null || die
+ econf
+ popd >/dev/null || die
+
+ einfo "Configuring Racket in ${S}"
+ # Libtool:
+ # According to vapier, we should use the bundled libtool
+ # such that we don't preclude cross-compile.
+ # Thus don't use --enable-lt=/usr/bin/libtool
+ # Backend:
+ # --enable-bc builds Racket w/o chez backend
+ # C Libraries:
+ # --enable-libs & --disable-shared is the way to build
+ # .a files that are needed to embed Racket into programs
+ # https://docs.racket-lang.org/inside/cs-embedding.html
+ local -a myconf=(
+ --disable-shared
+ --disable-strip
+ --docdir="${EPREFIX}/usr/share/doc/${PF}"
+ --enable-libs
+ $(usex chez "--enable-cs --enable-csonly" "--enable-bc --enable-bconly")
+ $(use_enable doc docs)
+ $(use_enable iconv)
+ $(use_enable ncurses curses)
+ )
+ # Some options are togglable only for the BC version (are forced in CS)
+ if ! use chez ; then
+ myconf+=(
+ --enable-float
+ --enable-foreign
+ --enable-gracket
+ --enable-libffi
+ $(use_enable futures)
+ $(use_enable jit)
+ $(use_enable places)
+ $(use_enable threads pthread)
+ )
+ fi
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ # Compile Racket.
+ CC_FOR_BUILD="$(tc-getCC)" default
+
+ # Recompile Zuo with optimizations.
+ emake -C zuo
+}
+
+src_install() {
+ # Install Racket.
+ default
+
+ # Install Zuo.
+ emake -C zuo DESTDIR="${ED}" install
+
+ strip-lto-bytecode
+
+ # raco needs decompressed files for packages doc installation, bug #662424
+ if use doc ; then
+ docompress -x "/usr/share/doc/${PF}"
+ fi
+
+ # Create missing desktop files and icon.
+ if ! use minimal ; then
+ newicon "${ED}/usr/share/racket/drracket-exe-icon.png" racket.png
+
+ make_desktop_entry "gracket" "GRacket" "racket" "Development;Education;"
+ make_desktop_entry "plt-games" "PLT Games" "racket" "Education;Game;"
+ fi
+
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ # If we are merging the same SLOT check if the package database files
+ # (see "PKGDB" var) exist and do not overwrite them.
+ if has_version "${CATEGORY}/${PN}:${SLOT}" ; then
+ echo "We are installing the same SLOT: ${SLOT}"
+
+ local rktd=""
+ for rktd in "${PKGDB[@]}" ; do
+ if [[ -f "${EROOT}/${rktd}" ]] && [[ -f "${ED}/${rktd}" ]] ; then
+ einfo "Keeping old file: ${rktd}"
+
+ mv "${ED}/${rktd}" "${ED}/${rktd}.bak" \
+ || die "failed to create a backup of ${rktd}"
+
+ cp "${EROOT}/${rktd}" "${ED}/${rktd}" \
+ || die "failed to create a copy of ${rktd}"
+ fi
+ done
+ fi
+}
+
+get_outsiders() {
+ racket -l raco -- pkg show -i | grep 'link' | sed 's|link.*||g'
+}
+
+pkg_postinst() {
+ # If we have any pkgs not included in Racket main distribution (outsiders),
+ # then we have to re-setup them or during installation other pkgs will want
+ # to recompile parts of "outsider" pkgs they depend upon (and fail).
+ local -a outsiders=( $(get_outsiders) )
+
+ if [[ -n "${outsiders[@]}" ]] ; then
+ ebegin "Running \"raco setup\" for outsider packages"
+ echo "Outsiders: ${outsiders[@]}"
+
+ raco setup --all-users --force --no-docs --no-user --pkgs "${outsiders[@]}"
+ eend 0 # do not fail
+ fi
+
+ optfeature "readline editing features in REPL" dev-libs/libedit
+ optfeature "generating PDF files using Scribble" dev-texlive/texlive-fontsextra
+
+ readme.gentoo_print_elog
+}
diff --git a/dev-scheme/sagittarius/Manifest b/dev-scheme/sagittarius/Manifest
new file mode 100644
index 000000000000..f03bb01f673e
--- /dev/null
+++ b/dev-scheme/sagittarius/Manifest
@@ -0,0 +1 @@
+DIST sagittarius-0.9.14.tar.gz 14906617 BLAKE2B a5e605e2c1676911ffbb9bb9b5c9a5b490cfea3c4790c46791c8c137de695ec924d9087f96e4f2b71c00da4acf79ef50367819b9ff294a5b1d70419276d85224 SHA512 5638f06c25a3a682a04504ee837d7b2707422474697de342d53c5f219d0996aee6ad7a1f0fc57d3934a1daddf46ac2963f38e714a41fd391cf5ddbb9e34be5c5
diff --git a/dev-scheme/sagittarius/files/sagittarius-0.9.14-compiler-flags.patch b/dev-scheme/sagittarius/files/sagittarius-0.9.14-compiler-flags.patch
new file mode 100644
index 000000000000..3c4d7869d1aa
--- /dev/null
+++ b/dev-scheme/sagittarius/files/sagittarius-0.9.14-compiler-flags.patch
@@ -0,0 +1,17 @@
+--- a/cmake/FixupCompilerFlags.cmake
++++ b/cmake/FixupCompilerFlags.cmake
+@@ -45,14 +45,6 @@
+ SET(CMAKE_CXX_FLAGS "-Wall ${CMAKE_CXX_FLAGS}")
+ #SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wshorten-64-to-32")
+
+- SET(CMAKE_C_FLAGS_DEBUG "-Og -fstack-protector-strong -fno-omit-frame-pointer ${CMAKE_C_FLAGS_DEBUG}")
+- SET(CMAKE_CXX_FLAGS_DEBUG "-Og -fstack-protector-strong -fno-omit-frame-pointer ${CMAKE_CXX_FLAGS_DEBUG}")
+- SET(CMAKE_C_FLAGS_RELEASE "-g ${CMAKE_C_FLAGS_RELEASE}")
+- SET(CMAKE_CXX_FLAGS_RELEASE "-g ${CMAKE_CXX_FLAGS_RELEASE}")
+- # left to right match, so append -O3
+- SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3")
+- SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3")
+-
+ # for some reason static library doesn't have this
+ # on x86_64 and is required.
+ # Solaris GCC (32 bit) doesn't have this either. so
diff --git a/dev-scheme/sagittarius/metadata.xml b/dev-scheme/sagittarius/metadata.xml
new file mode 100644
index 000000000000..229ca81ec144
--- /dev/null
+++ b/dev-scheme/sagittarius/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <!-- maintainer-needed -->
+ <upstream>
+ <remote-id type="github">ktakashi/sagittarius-scheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/sagittarius/sagittarius-0.9.14.ebuild b/dev-scheme/sagittarius/sagittarius-0.9.14.ebuild
new file mode 100644
index 000000000000..e77ea3538621
--- /dev/null
+++ b/dev-scheme/sagittarius/sagittarius-0.9.14.ebuild
@@ -0,0 +1,36 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake edo
+
+DESCRIPTION="R6RS/R7RS Scheme system."
+HOMEPAGE="https://github.com/ktakashi/sagittarius-scheme"
+SRC_URI="https://github.com/ktakashi/sagittarius-scheme/releases/download/v${PV}/${P}.tar.gz"
+PATCHES=( "${FILESDIR}/${PN}-0.9.14-compiler-flags.patch" )
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+DEPEND="
+ dev-libs/boehm-gc
+ dev-libs/libffi
+ dev-libs/openssl
+ virtual/zlib:=
+"
+RDEPEND="${DEPEND}"
+
+src_unpack() {
+ default
+
+ # avoid running ldconfig
+ edo truncate -s0 "${S}"/cmake/CMakeLists.txt
+
+ edo cd "${S}"/test/tests
+ # following tests always fail in sandbox
+ edo rm net/http-client.scm net/socket.scm rfc/websocket.scm
+ # following tests randomly(?!) fail
+ edo rm net/server.scm rfc/oauth2.scm rsa/pkcs/%3a12.scm security/keystore.scm
+}
diff --git a/dev-scheme/scm/Manifest b/dev-scheme/scm/Manifest
new file mode 100644
index 000000000000..2f2bd4ca7f14
--- /dev/null
+++ b/dev-scheme/scm/Manifest
@@ -0,0 +1,2 @@
+DIST scm-5e6.zip 912968 BLAKE2B c059b49364abd25bb2335ad11f82791b96ac95aa9529b914396d08592e46e5aa5cba178b791fc96e3ea3066670c48bdd728609463bea398300b81d979fb304cb SHA512 897370f043401a7961eb1c2e22c951e2144505a1670e328e2c3eab33d52da83f195b873fb7cf8486f412ae52316cfc437c9f2da1432ade70f82eb0da12c2f852
+DIST scm-5f4.zip 938331 BLAKE2B d703ee9269aa1c536fab2bdc84adc862f184014a31d27700f688fd518b714fe8ec4b597cdd33a51ecdb0a7bd5998184a2c4af5f17c4347939d6c66086f1684e6 SHA512 519b75acb886ef5843068b5b5c6abd1520deac684ac5f96920e6321c6ecc2ca824071f6c23f26746a7922f816a8aabac38ad9126c0dbee903258442482ac83f0
diff --git a/dev-scheme/scm/files/scm-5.5.6-multiplefixes.patch b/dev-scheme/scm/files/scm-5.5.6-multiplefixes.patch
new file mode 100644
index 000000000000..8636c47c7185
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.5.6-multiplefixes.patch
@@ -0,0 +1,81 @@
+diff -Naur scm.old//build.scm scm//build.scm
+--- scm.old//build.scm 2009-08-03 15:35:57.000000000 -0300
++++ scm//build.scm 2010-04-16 15:52:25.000000000 -0300
+@@ -540,7 +540,7 @@
+ (graphics *unknown* "-I/usr/X11/include -DX11" "-lX11"
+ "/usr/X11/lib/libX11.sa" () ())
+ (editline *unknown* "" "-lreadline" "/usr/lib/libreadline.a" () ())
+- (termcap *unknown* "" "-ltermcap" "/usr/lib/libtermcap.a" () ())
++ (termcap *unknown* "" "-lncurses" "/usr/lib/libncurses.a" () ())
+ (debug *unknown* "-g" "-g" #f () ())
+ (socket *unknown* "" "" #f () ())
+ (lib *unknown* "" "" #f () ("scmmain.c"))
+diff -Naur scm.old//Makefile scm//Makefile
+--- scm.old//Makefile 2009-08-03 15:38:21.000000000 -0300
++++ scm//Makefile 2010-04-16 15:51:11.000000000 -0300
+@@ -178,18 +178,9 @@
+ $(BUILD) -f udscm4.opt -o udscm4 -s $(IMPLPATH)
+ -rm $(ofiles) scmmain.o
+ dscm4: udscm4 $(ifiles) require.scm
+- if [ -f /proc/sys/kernel/randomize_va_space -a\
+- "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+- cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\
+- echo 0 > /proc/sys/kernel/randomize_va_space;\
+- } fi
+ -rm -f slibcat implcat scm~
+ -mv scm scm~
+ echo "(quit)" | $(SETARCH) ./udscm4 -no-init-file -o scm
+- if [ -f randomize_va_space.tmp ]; then {\
+- cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\
+- rm randomize_va_space.tmp;\
+- } fi
+
+ # dumpable R5RS interpreter
+ udscm5.opt:
+@@ -199,20 +190,10 @@
+ udscm5: $(cfiles) $(ufiles) $(hfiles) build.scm build udscm5.opt
+ $(BUILD) -f udscm5.opt -o udscm5 -s $(IMPLPATH)
+ -rm $(ofiles) scmmain.o
+- strip udscm5
+ dscm5: udscm5 $(ifiles) require.scm
+- if [ -f /proc/sys/kernel/randomize_va_space -a\
+- "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+- cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\
+- echo 0 > /proc/sys/kernel/randomize_va_space;\
+- } fi
+ -rm -f slibcat implcat scm~
+ -mv scm scm~
+ echo "(quit)" | $(SETARCH) ./udscm5 -no-init-file -r5 -o scm
+- if [ -f randomize_va_space.tmp ]; then {\
+- cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\
+- rm randomize_va_space.tmp;\
+- } fi
+ $(MAKE) check
+ $(MAKE) checkmacro
+
+@@ -394,7 +375,7 @@
+ PREVDOCS = prevdocs/
+ html: $(htmldir)scm_toc.html $(htmldir)Xlibscm_toc.html $(htmldir)hobbit_toc.html
+
+-TEXI2HTML = /usr/local/bin/texi2html -split -verbose
++TEXI2HTML = /usr/bin/texi2html -split -verbose
+
+ $(htmldir)scm_toc.html: Makefile $(texifiles)
+ ${TEXI2HTML} scm.texi
+@@ -431,7 +412,7 @@
+
+ rpm_prefix=$(HOME)/rpmbuild/
+
+-prefix = /usr/local/
++prefix = /usr/
+ exec_prefix = $(prefix)
+ # directory where `make install' will put executable.
+ bindir = $(exec_prefix)bin/
+@@ -498,7 +479,6 @@
+ mkdir -p $(DESTDIR)$(bindir)
+ mkdir -p $(DESTDIR)$(man1dir)
+ -cp scm scmlit $(DESTDIR)$(bindir)
+- -strip $(DESTDIR)$(bindir)scmlit
+ -cp scm.1 $(DESTDIR)$(man1dir)
+ mkdir -p $(DESTDIR)$(libscmdir)
+ test -f $(DESTDIR)$(libscmdir)require.scm || \
diff --git a/dev-scheme/scm/files/scm-5.5.6-ncurses.patch b/dev-scheme/scm/files/scm-5.5.6-ncurses.patch
new file mode 100644
index 000000000000..59b353ebd88e
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.5.6-ncurses.patch
@@ -0,0 +1,11 @@
+--- a/build.scm
++++ b/build.scm
+@@ -565,7 +565,7 @@
+ (regex linux "" "" #f () ())
+ (graphics linux "-I/usr/include/X11 -DX11" "-L/usr/X11R6/lib -lX11"
+ "/usr/X11R6/lib/libX11.so" () ())
+- (curses linux "" "-lcurses" "/lib/libncurses.so" () ())
++ (curses linux "" "-lncurses" "/lib/libncurses.so" () ())
+ (nostart linux "" "" #f () ())
+ (dump linux "" "" #f ("unexelf.c" "gmalloc.c") ())
+
diff --git a/dev-scheme/scm/files/scm-5.5.6-respect-ldflags.patch b/dev-scheme/scm/files/scm-5.5.6-respect-ldflags.patch
new file mode 100644
index 000000000000..a78e7ddb5d75
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.5.6-respect-ldflags.patch
@@ -0,0 +1,12 @@
+diff -ur b/Makefile a/Makefile
+--- b/Makefile 2018-06-21 14:02:53.439716620 -0500
++++ a/Makefile 2018-06-21 14:03:33.900568504 -0500
+@@ -111,7 +111,7 @@
+
+ # SCMLIT -- try making this first!
+ scmlit: $(ofiles) scmmain.o require.scm Makefile
+- $(LD) -o scmlit $(ofiles) scmmain.o $(LIBS)
++ $(LD) $(LDFLAGS) -o scmlit $(ofiles) scmmain.o $(LIBS)
+ $(MAKE) checklit
+ scmflags.h: scmflags
+ scmflags: \ No newline at end of file
diff --git a/dev-scheme/scm/files/scm-5.6.4-QA.patch b/dev-scheme/scm/files/scm-5.6.4-QA.patch
new file mode 100644
index 000000000000..8a1adae5bd14
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.6.4-QA.patch
@@ -0,0 +1,34 @@
+Removes stripping, prevents installation of compressed info files
+https://bugs.gentoo.org/557322
+--- a/Makefile
++++ b/Makefile
+@@ -376,7 +376,6 @@
+ udscm4: $(cfiles) $(hfiles) build.scm build udscm4.opt
+ $(BUILD) -f udscm4.opt -o udscm4 -s $(IMPLPATH)
+ -rm $(ofiles) scmmain.o
+- strip udscm4
+ dscm4: udscm4 $(ifiles) require.scm
+ if [ -f /proc/sys/kernel/randomize_va_space -a\
+ "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+@@ -399,7 +398,6 @@
+ udscm5: $(cfiles) $(ufiles) $(hfiles) build.scm build udscm5.opt
+ $(BUILD) -f udscm5.opt -o udscm5 -s $(IMPLPATH)
+ -rm $(ofiles) scmmain.o
+- strip udscm5
+ dscm5: udscm5 $(ifiles) require.scm
+ if [ -f /proc/sys/kernel/randomize_va_space -a\
+ "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+@@ -576,12 +574,10 @@
+
+ install-for-rpm: install-man install-lib install-infoz installdirs
+ $(INSTALL_PROGRAM) scm scmlit $(DESTDIR)$(bindir)
+- -strip $(DESTDIR)$(bindir)scmlit
+ $(INSTALL_DATA) scm.h scmfig.h scmflags.h $(DESTDIR)$(includedir)
+
+-install: install-man install-lib install-infoz installdirs
++install: install-man install-lib install-info installdirs
+ $(INSTALL_PROGRAM) scm scmlit $(DESTDIR)$(bindir)
+- -strip $(DESTDIR)$(bindir)scmlit
+ $(INSTALL_DATA) scm.h scmfig.h scmflags.h $(DESTDIR)$(includedir)
+ $(DESTDIR)$(bindir)scm -br new-catalog
+
diff --git a/dev-scheme/scm/files/scm-5.6.4-arrays.patch b/dev-scheme/scm/files/scm-5.6.4-arrays.patch
new file mode 100644
index 000000000000..68bb6ef9a506
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.6.4-arrays.patch
@@ -0,0 +1,12 @@
+diff '--color=auto' -Naur scm.old/scl.c scm/scl.c
+--- scm.old/scl.c 2026-04-18 21:41:05.718448466 +0300
++++ scm/scl.c 2026-04-18 21:41:28.657818441 +0300
+@@ -953,7 +953,7 @@
+ /* at this point, we have a legitimate floating point result */
+ if (lead_sgn==-1) res = -res;
+ if (i==len)
+-# ifdef SINGLES
++# if defined SINGLES && defined ARRAYS
+ return shrtp ? makflo(res) : makdbl(res, 0.0);
+ # else
+ return makdbl(res, 0.0);
diff --git a/dev-scheme/scm/files/scm-5.6.4-c99.patch b/dev-scheme/scm/files/scm-5.6.4-c99.patch
new file mode 100644
index 000000000000..49ae3057dade
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.6.4-c99.patch
@@ -0,0 +1,107 @@
+Fixes up to -std=gnu17
+Fixes to signal handler, wrong function types, access to opaque
+structs, passing char** to function expecting const char* const*
+redeclaration of library functions with wrong signatures
+https://bugs.gentoo.org/946129
+https://bugs.gentoo.org/946361
+--- a/scm.c
++++ b/scm.c
+@@ -533,7 +533,7 @@
+ static void init_sig1(scm_err, signo, handler)
+ int scm_err;
+ int signo;
+- SIGRETTYPE (*handler)();
++ SIGRETTYPE (*handler)(int);
+ {
+ int i = scm_err - SIGNAL_BASE;
+ ASRTER(i < NUM_SIGNALS, MAKINUM(i), OUTOFRANGE, "init_sig1");
+@@ -932,7 +932,6 @@
+ extern char **environ; /* The Linux man page says this
+ declaration is necessary. */
+ char s_getenv[] = "getenv";
+-char *getenv();
+ SCM scm_getenv(nam)
+ SCM nam;
+ {
+lendwin returns int, it's ignored in the callee of add_final
+--- a/crs.c
++++ b/crs.c
+@@ -387,5 +387,5 @@
+ make_subr(s_mvwin, tc7_subr_3, lmvwin);
+ make_subr(s_box, tc7_subr_3, lbox);
+ add_feature("curses");
+- add_final(lendwin);
++ add_final((void (*)(void))lendwin);
+ }
+--- a/scmmain.c
++++ b/scmmain.c
+@@ -86,7 +86,8 @@
+ const char **argv;
+ {
+ char *script_arg = 0; /* location of SCSH style script file or 0. */
+- char *implpath = 0, **nargv;
++ char *implpath = 0;
++ const char **nargv;
+ int nargc, iverbose = 0, buf0stdin;
+ SCM retval;
+ /* added by Dai Inukai 2001-03-21 */
+@@ -115,7 +116,7 @@
+ fpspec = fpsetprec(FP_PE); /* IEEE 64 bit FP mantissa*/
+ #endif
+ execpath = 0; /* even when dumped */
+- if ((nargv = script_process_argv(argc, argv))) { /* SCSH style scripts */
++ if ((nargv = (const char **)script_process_argv(argc, argv))) { /* SCSH style scripts */
+ script_arg = argv[2]; /* Save for scm_find_execpath() call */
+ nargc = script_count_argv(nargv);
+ }
+--- a/crs.c
++++ b/crs.c
+@@ -250,7 +250,7 @@
+ if (UNBNDP(arg)) arg = cur_outp;
+ ASRTER(NIMP(arg) && OPOUTPORTP(arg), arg, ARG1, s_owidth);
+ if (NIMP(*loc_stdscr)) {
+- if (WINP(arg)) return MAKINUM(WIN(arg)->_maxx+1);
++ if (WINP(arg)) return MAKINUM(getmaxx(WIN(arg))+1);
+ else return MAKINUM(COLS);
+ }
+ return MAKINUM(80);
+@@ -261,7 +261,7 @@
+ if (UNBNDP(arg)) arg = cur_outp;
+ ASRTER(NIMP(arg) && OPOUTPORTP(arg), arg, ARG1, s_owidth);
+ if (NIMP(*loc_stdscr))
+- if (WINP(arg)) return MAKINUM(WIN(arg)->_maxy+1);
++ if (WINP(arg)) return MAKINUM(getmaxy(WIN(arg))+1);
+ else return MAKINUM(LINES);
+ return MAKINUM(24);
+ }
+--- a/scm.c
++++ b/scm.c
+@@ -154,7 +154,7 @@
+ /* PROF_SIGNAL appears below because it is the last signal
+ defined in scm.h and in errmsgs in repl.c */
+ static struct {
+- int signo; SIGRETTYPE (*osig)(); SIGRETTYPE (*nsig)();
++ int signo; SIGRETTYPE (*osig)(int); SIGRETTYPE (*nsig)(int);
+ } sigdesc[PROF_SIGNAL - SIGNAL_BASE + 1];
+
+ #define NUM_SIGNALS (sizeof(sigdesc)/sizeof(sigdesc[0]))
+@@ -478,7 +478,7 @@
+ #endif
+
+ #ifdef SIGPIPE
+-static SIGRETTYPE (*oldpipe) ();
++static SIGRETTYPE (*oldpipe) (int);
+ #endif
+
+ int case_sensitize_symbols = 0; /* set to 8 to read case-sensitive symbols */
+--- a/posix.c
++++ b/posix.c
+@@ -191,7 +191,7 @@
+ ve[ 0] = makfrom0str(entry->gr_name);
+ ve[ 1] = makfrom0str(entry->gr_passwd);
+ ve[ 2] = ulong2num((unsigned long)entry->gr_gid);
+- ve[ 3] = makfromstrs(-1, entry->gr_mem);
++ ve[ 3] = makfromstrs(-1, (const char * const *)entry->gr_mem);
+ return ans;
+ }
+ SCM l_setgr(arg)
diff --git a/dev-scheme/scm/files/scm-5.6.4-ncurses.patch b/dev-scheme/scm/files/scm-5.6.4-ncurses.patch
new file mode 100644
index 000000000000..7d9ec878d268
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.6.4-ncurses.patch
@@ -0,0 +1,16 @@
+https://bugs.gentoo.org/557322
+This is only way to make this compile with C99 and up:
+Force cast one opaque pointer type to another.
+--- a/crs.c
++++ b/crs.c
+@@ -69,8 +69,8 @@
+ bwaddch,
+ bwaddstr,
+ bwwrite,
+- wrefresh,
+- wgetch,
++ (int (*)(FILE *))wrefresh,
++ (int (*)(FILE *))wgetch,
+ freewindow};
+
+ SCM mkwindow(win)
diff --git a/dev-scheme/scm/files/scm-5.6.4-ported-fixes.patch b/dev-scheme/scm/files/scm-5.6.4-ported-fixes.patch
new file mode 100644
index 000000000000..2351e0b6c198
--- /dev/null
+++ b/dev-scheme/scm/files/scm-5.6.4-ported-fixes.patch
@@ -0,0 +1,116 @@
+Ported standard previous build fixes to new version.
+Previous fixes remove stripping and add correct paths to gentoo
+programs, made build system respect LDFLAGS.
+And weird disablement of va randomization in kernel is also removed
+Newly introduced fix to correct ordering of generated include file
+https://bugs.gentoo.org/557322
+https://bugs.gentoo.org/883129
+--- a/build.scm
++++ b/build.scm
+@@ -550,7 +550,7 @@
+ (graphics *unknown* "-I/usr/X11/include -DX11" "-lX11"
+ "/usr/X11/lib/libX11.sa" () ())
+ (editline *unknown* "" "-lreadline" "/usr/lib/libreadline.a" () ())
+- (termcap *unknown* "" "-ltermcap" "/usr/lib/libtermcap.a" () ())
++ (termcap *unknown* "" "-lncurses" "/usr/lib/libncurses.a" () ())
+ (debug *unknown* "-g" "-g" #f () ())
+ (socket *unknown* "" "" #f () ())
+ (lib *unknown* "" "" #f () ("scmmain.c"))
+@@ -576,7 +576,7 @@
+ (regex linux "" "" #f () ())
+ (graphics linux "-I/usr/include/X11 -DX11" "-L/usr/X11R6/lib -lX11"
+ "/usr/X11R6/lib/libX11.so" () ())
+- (curses linux "" "-lcurses" "/lib/libncurses.so" () ())
++ (curses linux "" "-lncurses" "/lib/libncurses.so" () ())
+ (nostart linux "" "" #f () ())
+ (dump linux "" "" #f ("unexelf.c" "gmalloc.c") ())
+
+--- a/Makefile
++++ b/Makefile
+@@ -34,7 +34,7 @@
+ SCMEXE = ./scm$(EXE)
+ BUILD = ./build$(BAT) -hsystem
+
+-TEXI2HTML = /usr/local/bin/texi2html -split -verbose
++TEXI2HTML = /usr/bin/texi2html -split -verbose
+ TEXI2PDF = texi2pdf
+ VIEWPDF = evince
+ MAKEDEV = $(MAKE) -f $(HOME)/makefile.dev
+@@ -305,7 +305,7 @@
+
+ # SCMLIT -- Make this first!
+ $(SCMLIT): $(ofiles) scmmain.o require.scm Makefile
+- $(LD) -o scmlit $(ofiles) scmmain.o $(LIBS)
++ $(LD) $(LDFLAGS) -o scmlit $(ofiles) scmmain.o $(LIBS)
+ $(MAKE) checklit
+ scmflags.h: scmflags
+ scmflags:
+Generate header before everything else.
+@@ -316,7 +316,8 @@
+ echo "#define CAUTIOUS" >> newflags.h
+ -if (cmp -s newflags.h scmflags.h) then rm newflags.h; \
+ else mv newflags.h scmflags.h; fi
++$(cfiles): $(hfiles) scmflags.h
+ .c.o:
+ $(CC) -c $(CFLAGS) $< -o $@
+ scm.o: scm.c scm.h scmfig.h scmflags.h patchlvl.h
+ scmmain.o: scmmain.c scm.h scmfig.h scmflags.h patchlvl.h
+@@ -378,18 +378,9 @@
+ -rm $(ofiles) scmmain.o
+ strip udscm4
+ dscm4: udscm4 $(ifiles) require.scm
+- if [ -f /proc/sys/kernel/randomize_va_space -a\
+- "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+- cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\
+- echo 0 > /proc/sys/kernel/randomize_va_space;\
+- } fi
+ -rm -f slibcat implcat scm~
+ -mv scm scm~
+ echo "(quit)" | $(SETARCH) ./udscm4 -no-init-file -o scm
+- if [ -f randomize_va_space.tmp ]; then {\
+- cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\
+- rm randomize_va_space.tmp;\
+- } fi
+
+ # dumpable R5RS interpreter
+ udscm5.opt:
+@@ -401,18 +392,9 @@
+ -rm $(ofiles) scmmain.o
+ strip udscm5
+ dscm5: udscm5 $(ifiles) require.scm
+- if [ -f /proc/sys/kernel/randomize_va_space -a\
+- "`cat /proc/sys/kernel/randomize_va_space`" != "0" ]; then {\
+- cat /proc/sys/kernel/randomize_va_space > randomize_va_space.tmp;\
+- echo 0 > /proc/sys/kernel/randomize_va_space;\
+- } fi
+ -rm -f slibcat implcat scm~
+ -mv scm scm~
+ echo "(quit)" | $(SETARCH) ./udscm5 -no-init-file -r5 -o scm
+- if [ -f randomize_va_space.tmp ]; then {\
+- cat randomize_va_space.tmp > /proc/sys/kernel/randomize_va_space;\
+- rm randomize_va_space.tmp;\
+- } fi
+ $(MAKE) checkmacro
+
+ # R5RS interpreter for debugging with GDB.
+@@ -447,7 +429,7 @@
+ libscm.a: libscm.opt scm.h scmfig.h
+ $(BUILD) -t lib -f libscm.opt
+ libtest: libscm.a libtest.c
+- $(LD) -o libtest libtest.c libscm.a -ldl -lm -lc
++ $(LD) $(LDFLAGS) -o libtest libtest.c libscm.a -ldl -lm -lc
+ ./libtest
+
+ # DLLs for dynamic linking
+@@ -558,12 +558,10 @@
+
+ install-for-rpm: install-man install-lib install-infoz installdirs
+ $(INSTALL_PROGRAM) scm scmlit $(DESTDIR)$(bindir)
+- -strip $(DESTDIR)$(bindir)scmlit
+ $(INSTALL_DATA) scm.h scmfig.h scmflags.h $(DESTDIR)$(includedir)
+
+ install: install-man install-lib install-infoz installdirs
+ $(INSTALL_PROGRAM) scm scmlit $(DESTDIR)$(bindir)
+- -strip $(DESTDIR)$(bindir)scmlit
+ $(INSTALL_DATA) scm.h scmfig.h scmflags.h $(DESTDIR)$(includedir)
+
diff --git a/dev-scheme/scm/metadata.xml b/dev-scheme/scm/metadata.xml
new file mode 100644
index 000000000000..eb9b3e9f4da4
--- /dev/null
+++ b/dev-scheme/scm/metadata.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+SCM is a Scheme implementation conforming to Revised5 Report on the Algorithmic Language Scheme and the IEEE P1178 specification.
+ </longdescription>
+ <use>
+ <flag name="arrays">Support for arrays, uniform-arrays and
+ uniform-vectors.</flag>
+ <flag name="bignums">Support for large precision integers.</flag>
+ <flag name="cautious">SCM will always check the number of arguments to
+ interpreted closures.</flag>
+ <flag name="dynamic-linking">Be able to load compiled files while
+ running.</flag>
+ <flag name="engineering-notation">Floats to display in engineering
+ notation (exponents always multiples of 3) instead of scientific
+ notation.</flag>
+ <flag name="gsubr">generalized c arguments: for arbitrary
+ (more then 11) arguments to C functions.</flag>
+ <flag name="inexact">Support for floating point numbers.</flag>
+ <flag name="ioext">Commonly available I/O extensions: line I/O, file
+ positioning, file delete and rename, and directory functions.</flag>
+ <flag name="libscm">Build and install libscm.a and related headers</flag>
+ <flag name="macro">C level support for hygienic and referentially
+ transparent macros (syntax-rules macros).</flag>
+ <flag name="regex">String regular expression matching.</flag>
+ <flag name="unix">Support for: nice, acct, lstat, readlink, symlink,
+ mknod and sync.</flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-scheme/scm/scm-5.5.6-r4.ebuild b/dev-scheme/scm/scm-5.5.6-r4.ebuild
new file mode 100644
index 000000000000..9f7449e28565
--- /dev/null
+++ b/dev-scheme/scm/scm-5.5.6-r4.ebuild
@@ -0,0 +1,184 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Version magic thanks to masterdriverz and UberLord using bash array instead of tr
+trarr="0abcdefghi"
+MY_PV="$(ver_cut 1)${trarr:$(ver_cut 2):1}$(ver_cut 3)"
+MY_P=${PN}-${MY_PV}
+
+inherit toolchain-funcs
+
+DESCRIPTION="SCM is a Scheme implementation from the author of slib"
+HOMEPAGE="https://people.csail.mit.edu/jaffer/SCM.html"
+SRC_URI="http://groups.csail.mit.edu/mac/ftpdir/scm/${MY_P}.zip"
+S=${WORKDIR}/${PN}
+
+SLOT="0"
+LICENSE="LGPL-3"
+KEYWORDS="amd64 x86"
+IUSE="arrays bignums cautious dynamic-linking engineering-notation gsubr inexact ioext libscm macro ncurses posix readline regex sockets unix"
+
+BDEPEND="app-arch/unzip"
+DEPEND=">=dev-scheme/slib-3.1.5
+ dev-util/cproto
+ ncurses? ( sys-libs/ncurses:0= )
+ readline? ( sys-libs/libtermcap-compat )"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-multiplefixes.patch
+ "${FILESDIR}"/${P}-ncurses.patch
+ "${FILESDIR}"/${P}-respect-ldflags.patch
+)
+
+src_prepare() {
+ default
+
+ sed \
+ -e "s|\"gcc\"|\"$(tc-getCC)\"|g" \
+ -e "s|\"ld\"|\"$(tc-getLD)\"|g" \
+ -e "s|\"-shared\"|\"-shared ${LDFLAGS}\"|g" \
+ -i ./build.scm || die
+}
+
+src_compile() {
+ # SLIB is required to build SCM.
+ local slibpath="${EPREFIX}/usr/share/slib/"
+ if [ -n "$SCHEME_LIBRARY_PATH" ]; then
+ einfo "using SLIB $SCHEME_LIBRARY_PATH"
+ elif [ -d ${slibpath} ]; then
+ export SCHEME_LIBRARY_PATH=${slibpath}
+ fi
+
+ einfo "Making scmlit"
+ emake -j1 CC=$(tc-getCC) scmlit clean
+
+ einfo "Building scm"
+ local features=""
+ use arrays && features+="arrays"
+ use bignums && features+=" bignums"
+ use cautious && features+=" cautious"
+ use engineering-notation && features+=" engineering-notation"
+ use inexact && features+=" inexact"
+ use macro && features+=" macro"
+
+ ( use readline ||
+ use ncurses ||
+ use regex ||
+ use posix ||
+ use ioext ||
+ use gsubr ||
+ use sockets ||
+ use unix ||
+ use dynamic-linking ) && features+=" dynamic-linking"
+
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS} -L${EPREFIX}/$(get_libdir)" \
+ -s "${EPREFIX}"/usr/$(get_libdir)/scm \
+ -F ${features:="none"} \
+ -h system \
+ -o scm || die
+
+ einfo "Building DLLs"
+ if use readline; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -h system \
+ -F edit-line \
+ -t dll || die
+ fi
+ if use ncurses ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -F curses \
+ -h system \
+ -t dll || die
+ fi
+ if use regex ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c rgx.c \
+ -h system \
+ -t dll || die
+ fi
+ if use gsubr ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c gsubr.c \
+ -h system \
+ -t dll || die
+ fi
+ if use ioext ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c ioext.c \
+ -h system \
+ -t dll || die
+ fi
+ if use posix; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c posix.c \
+ -h system \
+ -t dll || die
+ fi
+ if use sockets ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c socket.c \
+ -h system \
+ -t dll || die
+ fi
+ if use unix ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c unix.c \
+ -h system \
+ -t dll || die
+ fi
+
+ if use libscm ; then
+ emake libscm.a
+ fi
+}
+
+src_test() {
+ emake check
+}
+
+src_install() {
+ emake DESTDIR="${D}" man1dir="${EPREFIX}"/usr/share/man/man1/ \
+ install
+
+ if use libscm; then
+ emake DESTDIR="${D}" libdir="${EPREFIX}"/usr/$(get_libdir)/ \
+ installlib
+ fi
+
+ doinfo scm.info
+ doinfo hobbit.info
+}
+
+regen_catalog() {
+ einfo "Regenerating catalog..."
+ scm -e "(require 'new-catalog)"
+}
+
+pkg_postinst() {
+ [[ -z ${ROOT} ]] && regen_catalog
+}
+
+pkg_config() {
+ regen_catalog
+}
diff --git a/dev-scheme/scm/scm-5.6.4-r1.ebuild b/dev-scheme/scm/scm-5.6.4-r1.ebuild
new file mode 100644
index 000000000000..36ac6f0026bc
--- /dev/null
+++ b/dev-scheme/scm/scm-5.6.4-r1.ebuild
@@ -0,0 +1,194 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Version magic thanks to masterdriverz and UberLord using bash array instead of tr
+trarr="0abcdefghi"
+MY_PV="$(ver_cut 1)${trarr:$(ver_cut 2):1}$(ver_cut 3)"
+MY_P=${PN}-${MY_PV}
+
+inherit toolchain-funcs flag-o-matic
+
+DESCRIPTION="SCM is a Scheme implementation from the author of slib"
+HOMEPAGE="https://people.csail.mit.edu/jaffer/SCM.html"
+SRC_URI="https://groups.csail.mit.edu/mac/ftpdir/scm/${MY_P}.zip"
+S=${WORKDIR}/${PN}
+
+LICENSE="LGPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="arrays bignums cautious dynamic-linking engineering-notation gsubr inexact ioext macro ncurses posix readline regex sockets unix"
+
+REQUIRED_USE="bignums? ( arrays inexact )"
+
+BDEPEND="app-arch/unzip"
+DEPEND=">=dev-scheme/slib-3.1.5
+ dev-util/cproto
+ ncurses? ( sys-libs/ncurses:0= )
+ readline? ( sys-libs/libtermcap-compat )"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-ported-fixes.patch
+ "${FILESDIR}"/${P}-c99.patch
+ "${FILESDIR}"/${P}-QA.patch
+ "${FILESDIR}"/${P}-ncurses.patch
+ "${FILESDIR}"/${P}-arrays.patch
+)
+
+src_prepare() {
+ default
+
+ sed \
+ -e "s|\"gcc\"|\"$(tc-getCC)\"|g" \
+ -e "s|\"ld\"|\"$(tc-getLD)\"|g" \
+ -e "s|\"-shared\"|\"-shared ${LDFLAGS}\"|g" \
+ -i ./build.scm || die
+}
+
+src_configure() {
+ append-cflags -std=gnu17
+ ./configure \
+ --prefix="${EPREFIX}"/usr \
+ --mandir="${EPREFIX}"/usr/share/man \
+ --infodir="${EPREFIX}"/usr/share/info \
+ --datadir="${EPREFIX}"/usr/share \
+ --sysconfdir="${EPREFIX}"/etc \
+ --localstatedir="${EPREFIX}"/var/lib \
+ --libdir="${EPREFIX}"/usr/$(get_libdir) \
+ --docdir="${EPREFIX}"/usr/share/doc/${PF} \
+ --htmldir="${EPREFIX}"/usr/share/doc/${PF}/html \
+ || die
+}
+
+src_compile() {
+ # SLIB is required to build SCM.
+ local slibpath="${EPREFIX}/usr/share/slib/"
+ if [ -n "$SCHEME_LIBRARY_PATH" ]; then
+ einfo "using SLIB $SCHEME_LIBRARY_PATH"
+ elif [ -d ${slibpath} ]; then
+ export SCHEME_LIBRARY_PATH=${slibpath}
+ fi
+
+ einfo "Making scmlit"
+ emake -j1 CC=$(tc-getCC) scmlit clean
+
+ einfo "Building scm"
+ local features=""
+ use arrays && features+="arrays"
+ use bignums && features+=" bignums"
+ use cautious && features+=" cautious"
+ use engineering-notation && features+=" engineering-notation"
+ use inexact && features+=" inexact"
+ use macro && features+=" macro"
+
+ ( use readline ||
+ use ncurses ||
+ use regex ||
+ use posix ||
+ use ioext ||
+ use gsubr ||
+ use sockets ||
+ use unix ||
+ use dynamic-linking ) && features+=" dynamic-linking"
+
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS} -L${EPREFIX}/$(get_libdir)" \
+ -s "${EPREFIX}"/usr/$(get_libdir)/scm \
+ -F ${features:="none"} \
+ -h system \
+ -o scm || die
+
+ einfo "Building DLLs"
+ if use readline; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -h system \
+ -F edit-line \
+ -t dll || die
+ fi
+ if use ncurses ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -F curses \
+ -h system \
+ -t dll || die
+ fi
+ if use regex ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c rgx.c \
+ -h system \
+ -t dll || die
+ fi
+ if use gsubr ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c gsubr.c \
+ -h system \
+ -t dll || die
+ fi
+ if use ioext ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c ioext.c \
+ -h system \
+ -t dll || die
+ fi
+ if use posix; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c posix.c \
+ -h system \
+ -t dll || die
+ fi
+ if use sockets ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c socket.c \
+ -h system \
+ -t dll || die
+ fi
+ if use unix ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c unix.c \
+ -h system \
+ -t dll || die
+ fi
+}
+
+src_test() {
+ emake check
+}
+
+src_install() {
+ emake -j1 DESTDIR="${D}" man1dir="${EPREFIX}"/usr/share/man/man1/ \
+ install
+
+ doinfo scm.info
+ doinfo hobbit.info
+}
+
+regen_catalog() {
+ einfo "Regenerating catalog..."
+ scm -e "(require 'new-catalog)"
+}
+
+pkg_postinst() {
+ [[ -z ${ROOT} ]] && regen_catalog
+}
+
+pkg_config() {
+ regen_catalog
+}
diff --git a/dev-scheme/scm/scm-5.6.4.ebuild b/dev-scheme/scm/scm-5.6.4.ebuild
new file mode 100644
index 000000000000..dabf9040d6f8
--- /dev/null
+++ b/dev-scheme/scm/scm-5.6.4.ebuild
@@ -0,0 +1,191 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Version magic thanks to masterdriverz and UberLord using bash array instead of tr
+trarr="0abcdefghi"
+MY_PV="$(ver_cut 1)${trarr:$(ver_cut 2):1}$(ver_cut 3)"
+MY_P=${PN}-${MY_PV}
+
+inherit toolchain-funcs flag-o-matic
+
+DESCRIPTION="SCM is a Scheme implementation from the author of slib"
+HOMEPAGE="https://people.csail.mit.edu/jaffer/SCM.html"
+SRC_URI="https://groups.csail.mit.edu/mac/ftpdir/scm/${MY_P}.zip"
+S=${WORKDIR}/${PN}
+
+LICENSE="LGPL-3"
+SLOT="0"
+KEYWORDS="amd64 ~x86"
+IUSE="arrays bignums cautious dynamic-linking engineering-notation gsubr inexact ioext macro ncurses posix readline regex sockets unix"
+
+BDEPEND="app-arch/unzip"
+DEPEND=">=dev-scheme/slib-3.1.5
+ dev-util/cproto
+ ncurses? ( sys-libs/ncurses:0= )
+ readline? ( sys-libs/libtermcap-compat )"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-ported-fixes.patch
+ "${FILESDIR}"/${P}-c99.patch
+ "${FILESDIR}"/${P}-QA.patch
+ "${FILESDIR}"/${P}-ncurses.patch
+)
+
+src_prepare() {
+ default
+
+ sed \
+ -e "s|\"gcc\"|\"$(tc-getCC)\"|g" \
+ -e "s|\"ld\"|\"$(tc-getLD)\"|g" \
+ -e "s|\"-shared\"|\"-shared ${LDFLAGS}\"|g" \
+ -i ./build.scm || die
+}
+
+src_configure() {
+ append-cflags -std=gnu17
+ ./configure \
+ --prefix="${EPREFIX}"/usr \
+ --mandir="${EPREFIX}"/usr/share/man \
+ --infodir="${EPREFIX}"/usr/share/info \
+ --datadir="${EPREFIX}"/usr/share \
+ --sysconfdir="${EPREFIX}"/etc \
+ --localstatedir="${EPREFIX}"/var/lib \
+ --libdir="${EPREFIX}"/usr/$(get_libdir) \
+ --docdir="${EPREFIX}"/usr/share/doc/${PF} \
+ --htmldir="${EPREFIX}"/usr/share/doc/${PF}/html \
+ || die
+}
+
+src_compile() {
+ # SLIB is required to build SCM.
+ local slibpath="${EPREFIX}/usr/share/slib/"
+ if [ -n "$SCHEME_LIBRARY_PATH" ]; then
+ einfo "using SLIB $SCHEME_LIBRARY_PATH"
+ elif [ -d ${slibpath} ]; then
+ export SCHEME_LIBRARY_PATH=${slibpath}
+ fi
+
+ einfo "Making scmlit"
+ emake -j1 CC=$(tc-getCC) scmlit clean
+
+ einfo "Building scm"
+ local features=""
+ use arrays && features+="arrays"
+ use bignums && features+=" bignums"
+ use cautious && features+=" cautious"
+ use engineering-notation && features+=" engineering-notation"
+ use inexact && features+=" inexact"
+ use macro && features+=" macro"
+
+ ( use readline ||
+ use ncurses ||
+ use regex ||
+ use posix ||
+ use ioext ||
+ use gsubr ||
+ use sockets ||
+ use unix ||
+ use dynamic-linking ) && features+=" dynamic-linking"
+
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS} -L${EPREFIX}/$(get_libdir)" \
+ -s "${EPREFIX}"/usr/$(get_libdir)/scm \
+ -F ${features:="none"} \
+ -h system \
+ -o scm || die
+
+ einfo "Building DLLs"
+ if use readline; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -h system \
+ -F edit-line \
+ -t dll || die
+ fi
+ if use ncurses ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -F curses \
+ -h system \
+ -t dll || die
+ fi
+ if use regex ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c rgx.c \
+ -h system \
+ -t dll || die
+ fi
+ if use gsubr ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c gsubr.c \
+ -h system \
+ -t dll || die
+ fi
+ if use ioext ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c ioext.c \
+ -h system \
+ -t dll || die
+ fi
+ if use posix; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c posix.c \
+ -h system \
+ -t dll || die
+ fi
+ if use sockets ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c socket.c \
+ -h system \
+ -t dll || die
+ fi
+ if use unix ; then
+ ./build \
+ --compiler-options="${CFLAGS}" \
+ --linker-options="${LDFLAGS}" \
+ -c unix.c \
+ -h system \
+ -t dll || die
+ fi
+}
+
+src_test() {
+ emake check
+}
+
+src_install() {
+ emake -j1 DESTDIR="${D}" man1dir="${EPREFIX}"/usr/share/man/man1/ \
+ install
+
+ doinfo scm.info
+ doinfo hobbit.info
+}
+
+regen_catalog() {
+ einfo "Regenerating catalog..."
+ scm -e "(require 'new-catalog)"
+}
+
+pkg_postinst() {
+ [[ -z ${ROOT} ]] && regen_catalog
+}
+
+pkg_config() {
+ regen_catalog
+}
diff --git a/dev-scheme/skribilo/Manifest b/dev-scheme/skribilo/Manifest
new file mode 100644
index 000000000000..f98098f50dba
--- /dev/null
+++ b/dev-scheme/skribilo/Manifest
@@ -0,0 +1 @@
+DIST skribilo-0.10.0.tar.gz 1535043 BLAKE2B 4bfa666f942150aa3d44bfea4a6d9bebcee1a48b7b5b04e0c13ff6f34150e0b9d633d13df27b2aaa4497d51050cd4ab5b5ac0fb5ffe7c1e3fbd66dc9242e5916 SHA512 97c4a08c83fb47759e9c8b83e53438561a77c41bfc655083938546f65be7e8a647d38bc3bf231996822ed1200915fd0691102c1e0d4c02fef499a9b99b2b844e
diff --git a/dev-scheme/skribilo/files/50skribilo-gentoo.el b/dev-scheme/skribilo/files/50skribilo-gentoo.el
new file mode 100644
index 000000000000..b6dc5061ebfd
--- /dev/null
+++ b/dev-scheme/skribilo/files/50skribilo-gentoo.el
@@ -0,0 +1,3 @@
+(add-to-list 'load-path "@SITELISP@")
+(autoload 'skribe-mode "skribe"
+ "Minor mode for editing Skribe sources." t)
diff --git a/dev-scheme/skribilo/metadata.xml b/dev-scheme/skribilo/metadata.xml
new file mode 100644
index 000000000000..40b5bcb1eb93
--- /dev/null
+++ b/dev-scheme/skribilo/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription>
+ Skribilo is a free document production tool that takes a structured
+ document representation as its input and renders that document in a variety
+ of output formats: HTML and Info for on-line browsing, and Lout and LaTeX
+ for high-quality hard copies.
+ The input document can use Skribilo's markup language to provide
+ information about the document's structure, which is similar to HTML or
+ LaTeX and does not require expertise. Alternatively, it can use a simpler,
+ "markup-less" format that borrows from Emacs' outline mode and from other
+ conventions used in emails, Usenet and text.
+ Lastly, Skribilo provides Guile Scheme APIs.
+ </longdescription>
+ <upstream>
+ <remote-id type="savannah-nongnu">skribilo</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/skribilo/skribilo-0.10.0-r101.ebuild b/dev-scheme/skribilo/skribilo-0.10.0-r101.ebuild
new file mode 100644
index 000000000000..77856f5c8695
--- /dev/null
+++ b/dev-scheme/skribilo/skribilo-0.10.0-r101.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit elisp-common guile
+
+DESCRIPTION="Document production tool written in Guile Scheme"
+HOMEPAGE="https://www.nongnu.org/skribilo/"
+SRC_URI="mirror://nongnu/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="emacs"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ app-text/ghostscript-gpl
+ media-gfx/imagemagick
+
+ ${GUILE_DEPS}
+ >=dev-scheme/guile-lib-0.2.7-r100[${GUILE_USEDEP}]
+ >=dev-scheme/guile-reader-0.6.3-r100[${GUILE_USEDEP}]
+"
+DEPEND="${RDEPEND}"
+BDEPEND="emacs? ( >=app-editors/emacs-23.1:* )"
+
+SITEFILE="50${PN}-gentoo.el"
+
+src_prepare() {
+ default
+
+ # gnustep-base/gnustep-base installs /usr/bin/pl that isnt the unpackaged ploticus.
+ sed -i -e 's/for ac_prog in ploticus pl/for ac_prog in ploticus/' configure || die
+}
+
+src_configure() {
+ if ! use emacs ; then
+ export EMACS="no"
+ export EMACSLOADPATH="/dev/null"
+ fi
+
+ guile_foreach_impl econf
+}
+
+src_compile() {
+ guile_src_compile
+
+ use emacs && elisp-compile ./emacs/*.el
+}
+
+src_install() {
+ guile_src_install
+
+ # Link includes DESTDIR
+ for file in "${ED}"/usr/share/info/*.png; do
+ rm "${file}" || die
+ dosym ../doc/${PF}/html/$(basename ${file}) ${file##${ED}}
+ done
+
+ if use emacs ; then
+ elisp-install ${PN} ./emacs/*.el{,c}
+ elisp-site-file-install "${FILESDIR}/${SITEFILE}"
+ else
+ local emacsd="${D}"/usr/share/emacs
+ if [[ -d "${emacsd}" ]] ; then
+ einfo "Building without Emacs support but ${emacsd} found! Removing."
+ rm -r "${emacsd}" || die
+ fi
+ fi
+}
+
+pkg_postinst() {
+ use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+ use emacs && elisp-site-regen
+}
diff --git a/dev-scheme/slib/Manifest b/dev-scheme/slib/Manifest
new file mode 100644
index 000000000000..88a3ded3dbd4
--- /dev/null
+++ b/dev-scheme/slib/Manifest
@@ -0,0 +1 @@
+DIST slib-3c1.zip 1108203 BLAKE2B 86c38a6ce6936bd1e8b2e3f52fdd3e2e05ba1bb86a611aca7f66a5d65095c81774444459f23f47dd8d01c808ea40c2052d07587c73ffca010f50f5415b2beaf0 SHA512 a6559c3a58ebadfd9efa52391573af375ff142e21e3eface4df346ca7ba7a66a15883596a7a58f6d7f97143729de5022c04d864d90c8a1b3b158b23fbeac8911
diff --git a/dev-scheme/slib/files/50slib b/dev-scheme/slib/files/50slib
new file mode 100644
index 000000000000..072862ed0b83
--- /dev/null
+++ b/dev-scheme/slib/files/50slib
@@ -0,0 +1 @@
+SCHEME_LIBRARY_PATH="/usr/share/slib/"
diff --git a/dev-scheme/slib/files/slib-3.2.5-fix-paths.patch b/dev-scheme/slib/files/slib-3.2.5-fix-paths.patch
new file mode 100644
index 000000000000..9a373c14d733
--- /dev/null
+++ b/dev-scheme/slib/files/slib-3.2.5-fix-paths.patch
@@ -0,0 +1,42 @@
+--- slib-3b5/~RScheme.init 2016-10-10 23:05:39.117046443 +0200
++++ slib-3b5/RScheme.init 2016-10-10 23:06:47.242857550 +0200
+@@ -52,7 +52,7 @@
+ ;; Use this path if your scheme does not support GETENV
+ ;; or if SCHEME_LIBRARY_PATH is not set.
+ (case (software-type)
+- ((unix) "/usr/lib/slib/")
++ ((unix) "/usr/share/slib/")
+ ((vms) "lib$scheme:")
+ ((ms-dos) "C:\\SLIB\\")
+ (else "")))))
+--- slib-3b5/~gambit.init 2016-10-10 23:05:20.939634454 +0200
++++ slib-3b5/gambit.init 2016-10-10 23:07:46.571968697 +0200
+@@ -38,7 +38,7 @@
+ (let ((impl-path
+ (or (getenv "GAMBIT_IMPLEMENTATION_PATH")
+ (case (software-type)
+- ((unix) "/usr/local/share/gambc/")
++ ((unix) "/usr/share/gambc/")
+ ((vms) "scheme$src:")
+ ((ms-dos) "C:\\scheme\\")
+ ((windows) "c:/scheme/")
+@@ -65,7 +65,7 @@
+ ;; Use this path if your scheme does not support GETENV
+ ;; or if SCHEME_LIBRARY_PATH is not set.
+ (case (software-type)
+- ((unix) "/usr/local/lib/slib/")
++ ((unix) "/usr/share/slib/")
+ ((macos) (string-append (implementation-vicinity) "slib:"))
+ ((amiga) "dh0:scm/Library/")
+ ((vms) "lib$scheme:")
+--- slib-3b5/~guile-2.init 2016-10-10 23:05:46.531807087 +0200
++++ slib-3b5/guile-2.init 2016-10-10 23:08:00.154538349 +0200
+@@ -199,7 +199,7 @@
+ (define implementation-vicinity
+ (cond ((getenv "GUILE_IMPLEMENTATION_PATH")
+ => (lambda (path) (lambda () path)))
+- (else %site-dir)))
++ (else %library-dir)))
+
+ ;;; (library-vicinity) should be defined to be the pathname of the
+ ;;; directory where files of Scheme library functions reside.
diff --git a/dev-scheme/slib/metadata.xml b/dev-scheme/slib/metadata.xml
new file mode 100644
index 000000000000..c756786d4cf0
--- /dev/null
+++ b/dev-scheme/slib/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+SLIB is a portable scheme library meant to provide compatibiliy and
+utility functions for all standard scheme implementations.
+ </longdescription>
+ <use>
+ <flag name="scm">Support for scm scheme implementation</flag>
+ <flag name="gambit">Support for gambit scheme implementation</flag>
+ </use>
+</pkgmetadata>
diff --git a/dev-scheme/slib/slib-3.3.1-r100.ebuild b/dev-scheme/slib/slib-3.3.1-r100.ebuild
new file mode 100644
index 000000000000..16095c427b1a
--- /dev/null
+++ b/dev-scheme/slib/slib-3.3.1-r100.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile
+
+#version magic thanks to masterdriverz and UberLord using bash array instead of tr
+trarr="0abcdefghi"
+MY_PV="$(ver_cut 1)${trarr:$(ver_cut 2):1}$(ver_cut 3)"
+
+DESCRIPTION="Portable Scheme library for all standard Scheme implementations"
+HOMEPAGE="http://people.csail.mit.edu/jaffer/SLIB"
+SRC_URI="http://groups.csail.mit.edu/mac/ftpdir/scm/${PN}-${MY_PV}.zip"
+S="${WORKDIR}"/${PN}
+
+LICENSE="public-domain BSD"
+SLOT="0"
+KEYWORDS="~alpha amd64 ppc ~ppc64 ~sparc x86"
+IUSE="gambit scm"
+RESTRICT="mirror"
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="
+ ${GUILE_DEPS}
+ gambit? ( dev-scheme/gambit )
+ scm? ( dev-scheme/scm )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ sys-apps/texinfo
+ app-arch/unzip
+"
+
+DOCS=( ANNOUNCE COPYING FAQ README ChangeLog slib.{txt,html} )
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.2.5-fix-paths.patch
+)
+
+src_configure() {
+ ./configure \
+ --prefix=/usr \
+ --libdir=/usr/share \
+ || die
+}
+
+src_compile() {
+ default
+
+ makeinfo -o slib.txt --plaintext --force slib.texi || die
+ makeinfo -o slib.html --html --no-split --force slib.texi || die
+}
+
+_new_catalog() {
+ if [[ ${1} != @(guile|scm) ]] ; then
+ echo -n "(load \"${ROOT}/usr/share/slib/${1}.init\")" || die
+ fi
+ echo " (require 'new-catalog) (slib:report-version)" || die
+}
+
+guile_generate_catalog() {
+ # FIXME(arsen): we need to also compile the .go files..
+ local gpath
+ gpath="${ED}/$(${GUILE} -c '(display (%library-dir))')" \
+ || die "Could not determine the library directory"
+ local -x GUILE_IMPLEMENTATION_PATH="${gpath}"
+
+ mkdir -p "${gpath}" || die
+ ln -sr "${ED}/usr/share/slib" "${GUILE_IMPLEMENTATION_PATH}/slib" \
+ || die
+ "${GUILE}" --no-auto-compile \
+ -L "${gpath}" \
+ -c "
+ (use-modules (ice-9 slib))
+ (require 'new-catalog)
+ " || die "Failed to generate catalogs for Guile"
+}
+
+src_install() {
+ # core
+ insinto /usr/share/${PN}
+ doins *.{dat,init,ps,scm}
+ exeinto /usr/share/${PN}
+ doexe *.sh
+
+ # bin
+ dodir /usr/bin/
+ dosym -r /usr/share/${PN}/${PN}.sh /usr/bin/${PN}
+
+ # env
+ doenvd "${FILESDIR}"/50slib
+
+ # backwards compatibility
+ dodir /usr/lib/
+ dosym -r /usr/share/${PN}/ /usr/lib/${PN}
+
+ # docs
+ doinfo slib.info
+ doman slib.1
+ einstalldocs
+
+ local -x SCHEME_LIBRARY_PATH="${ED}"/usr/share/slib/
+
+ # catalogs
+ einfo "Updating implementation catalogs.."
+ guile_foreach_impl guile_generate_catalog
+
+ # broken as for now
+ # if use elk ; then
+ # echo "$(_new_catalog elk)" | elk -l -
+ # fi
+
+ if use gambit ; then
+ local -x GAMBIT_IMPLEMENTATION_PATH="${ED}"/usr/share/gambc/
+ mkdir -p "${ED}"/usr/share/gambc || die
+ gsi -e "$(_new_catalog gambit)" || die
+ fi
+
+ if use scm ; then
+ scm -e "$(_new_catalog scm)" || die
+ fi
+}
diff --git a/dev-scheme/stklos/Manifest b/dev-scheme/stklos/Manifest
new file mode 100644
index 000000000000..ef6b944641b6
--- /dev/null
+++ b/dev-scheme/stklos/Manifest
@@ -0,0 +1,2 @@
+DIST stklos-2.10.tar.gz 10280638 BLAKE2B d08b3ca4422e497a4adba1d810c97af6cfa262443214127eb0c82bedb21885bc1dcea5cf8f13387a1bfaf9182a9590d9557368ee2840d5c11d4b15f5e0ffe427 SHA512 41981794bd2a8a600a03b543e87c02d1072c8dd3449704d6bb55586cc45e50c4654d8dd3f2b9ac1efc89cee41da8d3667b895d641ff1817a8d14944b1dcd66cd
+DIST stklos-26.0.tar.gz 11437196 BLAKE2B cbf4e78add5d5d9189f9e0dbba58032b072e67cf3c25c584d1ed003f235d28f067d9747fa4159f2380969c3f30dafea40ee2e11e922a0a75c6d730b687a4912b SHA512 b29039eeec9410e9e3a7d0f0fc547ce0a6609c9fccf129e96cd790f9a4cc7768d58d8326d3e9eac0e0b269e9a98d48b3627b9c66e3ea8d43ff1586ff6cbb8527
diff --git a/dev-scheme/stklos/files/stklos-gentoo.patch b/dev-scheme/stklos/files/stklos-gentoo.patch
new file mode 100644
index 000000000000..f45a44ae4347
--- /dev/null
+++ b/dev-scheme/stklos/files/stklos-gentoo.patch
@@ -0,0 +1,70 @@
+--- a/lib/Lalr.d/Makefile.am
++++ b/lib/Lalr.d/Makefile.am
+@@ -33,7 +33,7 @@
+ all: lalr.ostk calc
+
+ install-sources: install
+- mkdir -p $(schemedir)
++ mkdir -p $(DESTDIR)$(schemedir)
+ cp lalr.stk $(DESTDIR)$(schemedir)
+
+ uninstall-hook:
+--- a/lib/scheme/Makefile.am
++++ b/lib/scheme/Makefile.am
+@@ -208,7 +208,7 @@
+ @for i in $(SUBDIRS) ;do \
+ (cd $$i && $(MAKE) install-sources)\
+ done
+- cp $(scheme_sources) $(schemedir)
++ cp $(scheme_sources) $(DESTDIR)$(schemedir)
+
+ install-data-hook:
+ (cd regex && $(MAKE) install)
+--- a/lib/scheme/vector/Makefile.am
++++ b/lib/scheme/vector/Makefile.am
+@@ -130,8 +130,8 @@
+ #======================================================================
+
+ install-sources:
+- mkdir -p $(srfidir)
+- cp $(srfi_sources) $(srfi_interm) $(srfidir)
++ mkdir -p $(DESTDIR)$(srfidir)
++ cp $(srfi_sources) $(srfi_interm) $(DESTDIR)$(srfidir)
+
+ # we also clean the TAG.stk files -- $(srfi-interm) --, which are NOT
+ # srfi_OBJS (should not be installed with other objects):
+--- a/lib/stklos/Makefile.am
++++ b/lib/stklos/Makefile.am
+@@ -77,7 +77,7 @@
+
+ # ======================================================================
+ install-sources:
+- cp $(scheme_sources) $(schemedir)
++ cp $(scheme_sources) $(DESTDIR)$(schemedir)
+
+ clean:
+ rm -f $(ALL_OBJS) *-incl.c *~
+--- a/lib/streams/Makefile.am
++++ b/lib/streams/Makefile.am
+@@ -75,7 +75,7 @@
+
+ # ======================================================================
+ install-sources:
+- install $(scheme_sources) $(schemedir)
++ install $(scheme_sources) $(DESTDIR)$(schemedir)
+
+ clean:
+ rm -f $(ALL_OBJS) *-incl.c *~
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -108,8 +108,8 @@
+
+
+ install-exec-hook:
+- mv $(bindir)/stklos $(bindir)/stklos-@VERSION@
+- ln -s stklos-@VERSION@ $(bindir)/stklos
++ mv $(DESTDIR)$(bindir)/stklos $(DESTDIR)$(bindir)/stklos-@VERSION@
++ ln -s stklos-@VERSION@ $(DESTDIR)$(bindir)/stklos
+
+
+ doc: $(DOCDB)
diff --git a/dev-scheme/stklos/metadata.xml b/dev-scheme/stklos/metadata.xml
new file mode 100644
index 000000000000..267080d36fd9
--- /dev/null
+++ b/dev-scheme/stklos/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ STklos is a free Scheme system supporting most of the languages
+ features defined in R5RS. The aim of this implementation is to
+ be fast as well as light. The implementation is based on an ad-hoc
+ Virtual Machine. STklos can also be compiled as a library and
+ embedded in an application.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">egallesio/STklos</remote-id>
+ <remote-id type="gitlab">Gallesio/STklos</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/stklos/stklos-2.10.ebuild b/dev-scheme/stklos/stklos-2.10.ebuild
new file mode 100644
index 000000000000..9927d7ecdb4d
--- /dev/null
+++ b/dev-scheme/stklos/stklos-2.10.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="Fast and light Scheme implementation"
+HOMEPAGE="https://stklos.net/"
+SRC_URI="https://${PN}.net/download/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="threads"
+
+RDEPEND="dev-libs/boehm-gc[threads?]
+ dev-libs/gmp:=
+ dev-libs/libffi:=
+ dev-libs/libpcre2:="
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-gentoo.patch )
+DOCS=( AUTHORS ChangeLog NEWS.md PACKAGES-USED {PORTING-NOTES,README}.md SUPPORTED-SRFIS )
+
+src_prepare() {
+ default
+
+ eautoreconf
+ export LD="$(tc-getCC)"
+ export STKLOS_CONFDIR="${T}"/.config/${PN}
+}
+
+src_configure() {
+ econf \
+ --datadir="${EPREFIX}"/usr/share/${PN}/${PV} \
+ --libdir="${EPREFIX}"/usr/$(get_libdir)/${PN}/${PV} \
+ --enable-threads=$(usex threads pthreads none) \
+ --without-provided-bignum \
+ --without-provided-ffi \
+ --without-provided-gc \
+ --without-provided-regexp
+}
+
+src_compile() {
+ emake
+}
+
+src_test() {
+ emake -j1 check
+}
+
+src_install() {
+ default
+ einstalldocs
+}
diff --git a/dev-scheme/stklos/stklos-26.0.ebuild b/dev-scheme/stklos/stklos-26.0.ebuild
new file mode 100644
index 000000000000..1cecdbcbad0e
--- /dev/null
+++ b/dev-scheme/stklos/stklos-26.0.ebuild
@@ -0,0 +1,56 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="Fast and light Scheme implementation"
+HOMEPAGE="https://stklos.net/"
+SRC_URI="https://${PN}.net/download/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~x86"
+IUSE="threads"
+
+RDEPEND="dev-libs/boehm-gc[threads?]
+ dev-libs/gmp:=
+ dev-libs/libffi:=
+ dev-libs/libpcre2:="
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-gentoo.patch )
+DOCS=( AUTHORS ChangeLog NEWS.md PACKAGES-USED {PORTING-NOTES,README}.md SUPPORTED-SRFIS )
+
+src_prepare() {
+ default
+
+ eautoreconf
+ export LD="$(tc-getCC)"
+ export STKLOS_CONFDIR="${T}"/.config/${PN}
+}
+
+src_configure() {
+ econf \
+ --datadir="${EPREFIX}"/usr/share/${PN}/${PV} \
+ --libdir="${EPREFIX}"/usr/$(get_libdir)/${PN}/${PV} \
+ --enable-threads=$(usex threads pthreads none) \
+ --without-provided-bignum \
+ --without-provided-ffi \
+ --without-provided-gc \
+ --without-provided-regexp
+}
+
+src_compile() {
+ emake -j1
+}
+
+src_test() {
+ emake -j1 check
+}
+
+src_install() {
+ default
+ einstalldocs
+}
diff --git a/dev-scheme/tinyscheme/Manifest b/dev-scheme/tinyscheme/Manifest
new file mode 100644
index 000000000000..c46b7446f81e
--- /dev/null
+++ b/dev-scheme/tinyscheme/Manifest
@@ -0,0 +1 @@
+DIST tinyscheme-1.42.tar.gz 62156 BLAKE2B 9ebda4e0d90c37bb5e9b8275e67912daebe3786163bdb0b5ad06ad48bdd98934f9ce8679c0d259276fd4a8595522cb06d384498fe283314b782e29bf723af522 SHA512 54841dddd151042a976343409d5fcd778390bfddad50986d2a19120ec1eede54e2a3150100f5331abcacc222d8d547abde2b65a427c0353c2534b5f52918606c
diff --git a/dev-scheme/tinyscheme/files/tinyscheme-makefile.patch b/dev-scheme/tinyscheme/files/tinyscheme-makefile.patch
new file mode 100644
index 000000000000..b11afccacaa0
--- /dev/null
+++ b/dev-scheme/tinyscheme/files/tinyscheme-makefile.patch
@@ -0,0 +1,49 @@
+--- a/makefile
++++ b/makefile
+@@ -18,8 +18,7 @@
+ #AR= echo
+
+ # Unix, generally
+-CC = gcc -fpic -pedantic
+-DEBUG=-g -Wall -Wno-char-subscripts -O
++#CC = $(CC)
+ Osuf=o
+ SOsuf=so
+ LIBsuf=a
+@@ -27,12 +26,11 @@
+ LIBPREFIX=lib
+ OUT = -o $@
+ RM= -rm -f
+-AR= ar crs
++#AR= $(AR)
++ARFLAGS = crs
+
+ # Linux
+-LD = gcc
+-LDFLAGS = -shared
+-DEBUG=-g -Wno-char-subscripts -O
++#LD = $(CC)
+ SYS_LIBS= -ldl -lm
+ PLATFORM_FEATURES= -DSUN_DL=1
+
+@@ -71,16 +69,16 @@
+ all: $(LIBTARGET) $(STATICLIBTARGET) scheme$(EXE_EXT)
+
+ %.$(Osuf): %.c
+- $(CC) -I. -c $(DEBUG) $(FEATURES) $(DL_FLAGS) $<
++ $(CC) -fpic $(CFLAGS) -I. -c $(FEATURES) $(DL_FLAGS) $<
+
+ $(LIBTARGET): $(OBJS)
+- $(LD) $(LDFLAGS) $(OUT) $(OBJS) $(SYS_LIBS)
++ $(CC) -shared $(LDFLAGS) -Wl,-soname=$@ -o $@ $(OUT) $(OBJS) $(SYS_LIBS)
+
+ scheme$(EXE_EXT): $(OBJS)
+- $(CC) -o $@ $(DEBUG) $(OBJS) $(SYS_LIBS)
++ $(CC) $(LDFLAGS) -o $@ $(OBJS) $(SYS_LIBS)
+
+ $(STATICLIBTARGET): $(OBJS)
+- $(AR) $@ $(OBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+ $(OBJS): scheme.h scheme-private.h opdefines.h
+ dynload.$(Osuf): dynload.h
diff --git a/dev-scheme/tinyscheme/metadata.xml b/dev-scheme/tinyscheme/metadata.xml
new file mode 100644
index 000000000000..71fee92b23b1
--- /dev/null
+++ b/dev-scheme/tinyscheme/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ TinyScheme is a lightweight Scheme interpreter that implements as large
+ a subset of R5RS as was possible without getting very large and
+ complicated. It is meant to be used as an embedded scripting
+ interpreter for other programs. As such, it does not offer IDEs or
+ extensive toolkits although it does sport a small top-level loop,
+ included conditionally. A lot of functionality in TinyScheme is
+ included conditionally, to allow developers freedom in balancing
+ features and footprint.
+ </longdescription>
+ <upstream>
+ <remote-id type="sourceforge">tinyscheme</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/tinyscheme/tinyscheme-1.42.ebuild b/dev-scheme/tinyscheme/tinyscheme-1.42.ebuild
new file mode 100644
index 000000000000..7ce64dc1adf8
--- /dev/null
+++ b/dev-scheme/tinyscheme/tinyscheme-1.42.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit multilib toolchain-funcs
+
+DESCRIPTION="Lightweight scheme interpreter"
+HOMEPAGE="https://tinyscheme.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+IUSE="static-libs"
+
+RDEPEND=""
+DEPEND=""
+
+PATCHES=( "${FILESDIR}"/${PN}-makefile.patch )
+DOCS=( CHANGES {Manual,MiniSCHEMETribute,hack}.txt )
+
+src_compile() {
+ emake \
+ AR="$(tc-getAR)" \
+ CC="$(tc-getCC)" \
+ LDFLAGS="${LDFLAGS}"
+}
+
+src_install() {
+ local tslib=lib${PN}$(get_libname)
+ local tslibx=lib${PN}$(get_libname ${PV})
+
+ newbin scheme ${PN}
+
+ newlib.so ${tslib} ${tslibx}
+ dosym ${tslibx} /usr/$(get_libdir)/${tslib}
+ use static-libs && dolib.a lib${PN}.a
+ einstalldocs
+
+ # bug #328967
+ insinto /usr/include
+ newins scheme.h ${PN}.h
+
+ local INIT_DIR=/usr/share/${PN}
+ insinto ${INIT_DIR}
+ doins init.scm
+ dodir /etc/env.d
+ echo "TINYSCHEMEINIT=\"${EPREFIX}${INIT_DIR}/init.scm\"" >"${ED}"/etc/env.d/50${PN}
+}
diff --git a/dev-scheme/xdgdirs/Manifest b/dev-scheme/xdgdirs/Manifest
new file mode 100644
index 000000000000..2a72b935b83d
--- /dev/null
+++ b/dev-scheme/xdgdirs/Manifest
@@ -0,0 +1 @@
+DIST xdgdirs-2.2.tar.xz 359784 BLAKE2B 437d5a5840957c6e0482e38fcb8fa95c22e8d22001b26dd1c047d9c96e96c85fc47627880c9e92c1f5474c7c3bf61da29f8c9f28a4aa85b32d207ca29cf783dd SHA512 f57cf6e39e3c4ef7faa9034f9e42fb87a8398613f86a7d4f305810c9a845f649e56b754fc5a03fae41b368cd897527e9a8151eb16d1d91c6e4b170ba27bb1b11
diff --git a/dev-scheme/xdgdirs/metadata.xml b/dev-scheme/xdgdirs/metadata.xml
new file mode 100644
index 000000000000..a0de2e9d832e
--- /dev/null
+++ b/dev-scheme/xdgdirs/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>netmon@gentoo.org</email>
+ </maintainer>
+ <upstream>
+ <changelog>https://www.gnuvola.org/software/xdgdirs/NEWS</changelog>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/xdgdirs/xdgdirs-2.2-r100.ebuild b/dev-scheme/xdgdirs/xdgdirs-2.2-r100.ebuild
new file mode 100644
index 000000000000..0dc3e304acd4
--- /dev/null
+++ b/dev-scheme/xdgdirs/xdgdirs-2.2-r100.ebuild
@@ -0,0 +1,34 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+GUILE_COMPAT=( 2-2 3-0 )
+inherit guile-single
+
+DESCRIPTION="Displays names/values of XDG Basedir variables"
+HOMEPAGE="https://www.gnuvola.org/software/xdgdirs/"
+SRC_URI="https://www.gnuvola.org/software/xdgdirs/${P}.tar.xz"
+
+LICENSE="GPL-3+ FDL-1.3"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~x86"
+
+REQUIRED_USE="${GUILE_REQUIRED_USE}"
+
+RDEPEND="${GUILE_DEPS}"
+DEPEND="${RDEPEND}"
+
+src_prepare() {
+ guile-single_src_prepare
+
+ # fix shebang
+ sed -i -e "/exec/ s|guile|${GUILE}|" xdgdirs.in || die
+}
+
+src_test() {
+ # breaks diffs for tests if not disabled
+ local -x GUILE_AUTO_COMPILE=0
+
+ emake check
+}
diff --git a/dev-scheme/ypsilon/Manifest b/dev-scheme/ypsilon/Manifest
new file mode 100644
index 000000000000..e6b0e7a42b1d
--- /dev/null
+++ b/dev-scheme/ypsilon/Manifest
@@ -0,0 +1 @@
+DIST ypsilon-0.9.6.update3.tar.gz 4555843 BLAKE2B 65cdf9d154dbe201967a0eea9b21b90f86eb7a88975bb9f4013f801ed28e6da09eb29a793287f0870f6b27f3e63594a79e7894a6a6780342223a728c229babb0 SHA512 9ea5e3e70481c538bcaf671feb7f764015fb44702bcec4e2873007e065bf48d7d9b0cfc8f9dcc51e0083b0bf5296fd8ac40a1f851d76019a18b21fa7e292ee89
diff --git a/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-asneeded.patch b/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-asneeded.patch
new file mode 100644
index 000000000000..9ea4256de937
--- /dev/null
+++ b/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-asneeded.patch
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -126,7 +126,7 @@
+ @mkdir -p -m755 $(HOME)/.ypsilon
+
+ $(PROG): $(OBJS)
+- $(CXX) $(LDFLAGS) $(LDLIBS) -o $@ $^
++ $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+
+ vm1.s: vm1.cpp
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) \
diff --git a/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-clang-cflags.patch b/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-clang-cflags.patch
new file mode 100644
index 000000000000..8d2ce6ea796a
--- /dev/null
+++ b/dev-scheme/ypsilon/files/ypsilon-0.9.6_p3-clang-cflags.patch
@@ -0,0 +1,23 @@
+https://bugs.gentoo.org/730692
+
+From 8d5318ea079f53149ab87974a4ad9ed9c5c7fcf5 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Fri, 27 Aug 2021 03:58:34 +0100
+Subject: [PATCH] Drop flags Clang doesn't support
+
+In particular, -fno-crossjumping but the rest seem rather unnecessary.
+--- a/Makefile
++++ b/Makefile
+@@ -130,12 +130,10 @@ $(PROG): $(OBJS)
+
+ vm1.s: vm1.cpp
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) \
+- -fno-reorder-blocks -fno-crossjumping -fno-align-labels -fno-align-loops -fno-align-jumps \
+ -fverbose-asm -S src/vm1.cpp
+
+ vm1.o: vm1.cpp
+ $(CXX) $(CXXFLAGS) $(CPPFLAGS) \
+- -fno-reorder-blocks -fno-crossjumping -fno-align-labels -fno-align-loops -fno-align-jumps \
+ -c src/vm1.cpp
+
+ install: all stdlib sitelib
diff --git a/dev-scheme/ypsilon/metadata.xml b/dev-scheme/ypsilon/metadata.xml
new file mode 100644
index 000000000000..ca64a62109a4
--- /dev/null
+++ b/dev-scheme/ypsilon/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>scheme@gentoo.org</email>
+ <name>Gentoo Scheme Project</name>
+ </maintainer>
+ <longdescription lang="en">
+ Ypsilon is the implementation of Scheme Programming Language, which conforms
+ to the latest standard R6RS.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">fujita-y/ypsilon</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/dev-scheme/ypsilon/ypsilon-0.9.6_p3-r2.ebuild b/dev-scheme/ypsilon/ypsilon-0.9.6_p3-r2.ebuild
new file mode 100644
index 000000000000..75550544e519
--- /dev/null
+++ b/dev-scheme/ypsilon/ypsilon-0.9.6_p3-r2.ebuild
@@ -0,0 +1,65 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit flag-o-matic toolchain-funcs
+
+MY_P="${P/_p/.update}"
+
+DESCRIPTION="R6RS-compliant Scheme implementation for real-time applications"
+HOMEPAGE="http://www.littlewingpinball.com/doc/en/ypsilon"
+SRC_URI="https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/${PN}/${MY_P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="examples"
+
+RDEPEND="app-alternatives/cpio"
+DEPEND="${RDEPEND}"
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-asneeded.patch
+ "${FILESDIR}"/${P}-clang-cflags.patch
+)
+
+src_prepare() {
+ default
+
+ append-flags -pthread
+ # fix build with >=sys-devel/gcc-11, bug #787866
+ sed -i "/^CPPFLAGS/s/=/= -DNO_TLS/" Makefile
+
+ # -Werror=strict-aliasing
+ # https://bugs.gentoo.org/858257
+ #
+ # There is an upstream update to 2.0.8 (lotta new versions!) but it changes
+ # way too much to trivially update. The issue may or may not be fixed.
+ # Before multiple other things bombed out, the erroring source file
+ # *seemed* to compile ok.
+ append-flags -fno-strict-aliasing
+ filter-lto
+}
+
+src_compile() {
+ emake \
+ PREFIX="${EPREFIX}/usr" \
+ AS="$(tc-getAS)" \
+ CXX="$(tc-getCXX)" \
+ CXXFLAGS="${CXXFLAGS}" \
+ LDFLAGS="${LDFLAGS}"
+}
+
+src_install() {
+ emake \
+ PREFIX="${EPREFIX}/usr" \
+ DESTDIR="${D}" \
+ install
+
+ if use examples; then
+ docinto examples
+ dodoc example/*
+ fi
+}