summaryrefslogtreecommitdiff
path: root/app-emulation
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-12 19:09:37 -0500
commitb590c8d7572b727d565cc0b8ff660d43569845de (patch)
tree06f7a4102ea4e845df8b66660f252920d52952f9 /app-emulation
parent24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff)
downloadbaldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz
baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip
Adding metadata
Diffstat (limited to 'app-emulation')
-rw-r--r--app-emulation/86Box/86Box-5.3.ebuild101
-rw-r--r--app-emulation/86Box/Manifest1
-rw-r--r--app-emulation/86Box/files/86Box-5.3-fallthrough-define-available-in-C-code.patch45
-rw-r--r--app-emulation/86Box/metadata.xml25
-rw-r--r--app-emulation/aranym/Manifest1
-rw-r--r--app-emulation/aranym/aranym-1.1.0-r1.ebuild116
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-ar.patch24
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-clang-16-register.patch219
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-conditional-installs.patch93
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-configure-bashisms.patch37
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-configure-clang16.patch30
-rw-r--r--app-emulation/aranym/files/aranym-1.1.0-libcwrap.patch24
-rw-r--r--app-emulation/aranym/metadata.xml17
-rw-r--r--app-emulation/bochs/Manifest1
-rw-r--r--app-emulation/bochs/bochs-3.0.ebuild97
-rw-r--r--app-emulation/bochs/bochs-9999.ebuild86
-rw-r--r--app-emulation/bochs/metadata.xml18
-rw-r--r--app-emulation/cloud-init/Manifest2
-rw-r--r--app-emulation/cloud-init/cloud-init-24.4-r4.ebuild124
-rw-r--r--app-emulation/cloud-init/cloud-init-25.1.ebuild119
-rw-r--r--app-emulation/cloud-init/cloud-init-9999.ebuild119
-rw-r--r--app-emulation/cloud-init/files/cloud-init-24.2-systemd.patch152
-rw-r--r--app-emulation/cloud-init/files/cloud-init-24.4-netcat.patch68
-rw-r--r--app-emulation/cloud-init/metadata.xml16
-rw-r--r--app-emulation/coldfire/Manifest1
-rw-r--r--app-emulation/coldfire/coldfire-0.3.1-r1.ebuild39
-rw-r--r--app-emulation/coldfire/files/coldfire-0.3.1-build.patch32
-rw-r--r--app-emulation/coldfire/files/coldfire-0.3.1-headers.patch16
-rw-r--r--app-emulation/coldfire/files/coldfire-0.3.1-implicit-function-declarations.patch12
-rw-r--r--app-emulation/coldfire/files/coldfire-0.3.1-ld.patch11
-rw-r--r--app-emulation/coldfire/files/coldfire-0.3.1-no-common.patch23
-rw-r--r--app-emulation/coldfire/metadata.xml9
-rw-r--r--app-emulation/crossover-bin/Manifest5
-rw-r--r--app-emulation/crossover-bin/crossover-bin-22.1.1.ebuild194
-rw-r--r--app-emulation/crossover-bin/crossover-bin-23.6.0.ebuild184
-rw-r--r--app-emulation/crossover-bin/crossover-bin-24.0.4.ebuild173
-rw-r--r--app-emulation/crossover-bin/crossover-bin-24.0.6.ebuild173
-rw-r--r--app-emulation/crossover-bin/crossover-bin-25.0.0.ebuild172
-rw-r--r--app-emulation/crossover-bin/metadata.xml10
-rw-r--r--app-emulation/dinero/Manifest1
-rw-r--r--app-emulation/dinero/dinero-4.7-r1.ebuild38
-rw-r--r--app-emulation/dinero/metadata.xml5
-rw-r--r--app-emulation/diskimage-builder/Manifest3
-rw-r--r--app-emulation/diskimage-builder/diskimage-builder-3.32.0.ebuild41
-rw-r--r--app-emulation/diskimage-builder/diskimage-builder-3.33.0.ebuild39
-rw-r--r--app-emulation/diskimage-builder/diskimage-builder-3.41.0.ebuild38
-rw-r--r--app-emulation/diskimage-builder/diskimage-builder-9999.ebuild38
-rw-r--r--app-emulation/diskimage-builder/metadata.xml18
-rw-r--r--app-emulation/dosemu/Manifest2
-rw-r--r--app-emulation/dosemu/dosemu-1.4.1_pre20130107-r7.ebuild125
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20091009-dash.patch10
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-as.patch12
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fix-inline.patch14
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-flex-2.6.3.patch15
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fortify.patch48
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc-15.patch26
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc10-const.patch64
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-ia16-ldflags.patch44
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-lto.patch27
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-nm.patch44
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-no-glibc.patch18
-rw-r--r--app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-pcm_write_interleaved-incompatiible-pointer-type.patch11
-rw-r--r--app-emulation/dosemu/metadata.xml8
-rw-r--r--app-emulation/dxvk/Manifest10
-rw-r--r--app-emulation/dxvk/dxvk-2.3.1-r1.ebuild187
-rw-r--r--app-emulation/dxvk/dxvk-2.4.1.ebuild178
-rw-r--r--app-emulation/dxvk/dxvk-2.5.3.ebuild177
-rw-r--r--app-emulation/dxvk/dxvk-2.6.2.ebuild177
-rw-r--r--app-emulation/dxvk/dxvk-2.7.1.ebuild177
-rw-r--r--app-emulation/dxvk/dxvk-9999.ebuild198
-rw-r--r--app-emulation/dxvk/files/dxvk-1.10.3-wow64-setup.patch14
-rw-r--r--app-emulation/dxvk/files/dxvk-2.3.1-gcc14.patch7
-rw-r--r--app-emulation/dxvk/files/dxvk-2.4-d3d8-setup.patch8
-rw-r--r--app-emulation/dxvk/metadata.xml21
-rw-r--r--app-emulation/dynamips/Manifest2
-rw-r--r--app-emulation/dynamips/dynamips-0.2.23.ebuild38
-rw-r--r--app-emulation/dynamips/dynamips-0.2.24.ebuild41
-rw-r--r--app-emulation/dynamips/files/dynamips-0.2.18-docs.patch20
-rw-r--r--app-emulation/dynamips/files/dynamips-0.2.24-cmake-minimum.patch11
-rw-r--r--app-emulation/dynamips/metadata.xml12
-rw-r--r--app-emulation/faudio/Manifest2
-rw-r--r--app-emulation/faudio/faudio-26.04.ebuild41
-rw-r--r--app-emulation/faudio/faudio-26.05.ebuild41
-rw-r--r--app-emulation/faudio/metadata.xml18
-rw-r--r--app-emulation/fex-xtajit/Manifest12
-rw-r--r--app-emulation/fex-xtajit/fex-xtajit-2601.ebuild154
-rw-r--r--app-emulation/fex-xtajit/fex-xtajit-2603.ebuild153
-rw-r--r--app-emulation/fex-xtajit/fex-xtajit-2604.ebuild153
-rw-r--r--app-emulation/fex-xtajit/fex-xtajit-2605.ebuild153
-rw-r--r--app-emulation/fex-xtajit/metadata.xml12
-rw-r--r--app-emulation/firecracker-bin/Manifest4
-rw-r--r--app-emulation/firecracker-bin/firecracker-bin-1.14.4.ebuild87
-rw-r--r--app-emulation/firecracker-bin/firecracker-bin-1.15.1.ebuild87
-rw-r--r--app-emulation/firecracker-bin/metadata.xml16
-rw-r--r--app-emulation/free42/Manifest3
-rw-r--r--app-emulation/free42/files/free42-3.0.14-fix-makefile.patch26
-rw-r--r--app-emulation/free42/files/free42-3.0.16-fix-build-intel-lib.patch64
-rw-r--r--app-emulation/free42/free42-3.1.9.ebuild45
-rw-r--r--app-emulation/free42/free42-3.3.11.ebuild45
-rw-r--r--app-emulation/free42/free42-3.3.12.ebuild45
-rw-r--r--app-emulation/free42/metadata.xml9
-rw-r--r--app-emulation/fs-uae-launcher/Manifest3
-rw-r--r--app-emulation/fs-uae-launcher/files/fs-uae-launcher-3.0.0-ROMs.patch14
-rw-r--r--app-emulation/fs-uae-launcher/fs-uae-launcher-3.1.70-r1.ebuild66
-rw-r--r--app-emulation/fs-uae-launcher/fs-uae-launcher-3.2.35.ebuild64
-rw-r--r--app-emulation/fs-uae-launcher/metadata.xml12
-rw-r--r--app-emulation/fs-uae/Manifest2
-rw-r--r--app-emulation/fs-uae/files/fs-uae-3.0.0-Xatom.h.patch25
-rw-r--r--app-emulation/fs-uae/files/fs-uae-3.0.0-libmpeg2.patch48
-rw-r--r--app-emulation/fs-uae/files/fs-uae-3.1.35-deepbind.patch43
-rw-r--r--app-emulation/fs-uae/files/fs-uae-3.1.66-musl.patch35
-rw-r--r--app-emulation/fs-uae/fs-uae-3.1.66.ebuild121
-rw-r--r--app-emulation/fs-uae/fs-uae-3.2.35.ebuild120
-rw-r--r--app-emulation/fs-uae/fs-uae-9999.ebuild103
-rw-r--r--app-emulation/fs-uae/metadata.xml15
-rw-r--r--app-emulation/fuse-utils/Manifest2
-rw-r--r--app-emulation/fuse-utils/files/remove-local-prefix.patch22
-rw-r--r--app-emulation/fuse-utils/fuse-utils-1.4.3-r3.ebuild44
-rw-r--r--app-emulation/fuse-utils/fuse-utils-1.4.4.ebuild47
-rw-r--r--app-emulation/fuse-utils/metadata.xml9
-rw-r--r--app-emulation/fuse/Manifest2
-rw-r--r--app-emulation/fuse/files/fuse-1.6.0-fix-joystick.patch14
-rw-r--r--app-emulation/fuse/files/remove-local-prefix.patch18
-rw-r--r--app-emulation/fuse/fuse-1.6.0-r5.ebuild129
-rw-r--r--app-emulation/fuse/fuse-1.7.0.ebuild128
-rw-r--r--app-emulation/fuse/metadata.xml12
-rw-r--r--app-emulation/ganeti-os-noop/Manifest1
-rw-r--r--app-emulation/ganeti-os-noop/ganeti-os-noop-0.2.ebuild21
-rw-r--r--app-emulation/ganeti-os-noop/metadata.xml9
-rw-r--r--app-emulation/ganeti-os-simpleimage/Manifest1
-rw-r--r--app-emulation/ganeti-os-simpleimage/ganeti-os-simpleimage-0_p20221113.ebuild39
-rw-r--r--app-emulation/ganeti-os-simpleimage/metadata.xml9
-rw-r--r--app-emulation/genymotion-bin/Manifest1
-rw-r--r--app-emulation/genymotion-bin/genymotion-bin-3.7.1.ebuild145
-rw-r--r--app-emulation/genymotion-bin/metadata.xml13
-rw-r--r--app-emulation/glean/Manifest1
-rw-r--r--app-emulation/glean/files/glean-1.24.0-support-gentoo-install.patch44
-rw-r--r--app-emulation/glean/glean-1.24.0.ebuild44
-rw-r--r--app-emulation/glean/metadata.xml20
-rw-r--r--app-emulation/grub-xen-host/grub-xen-host-1.0-r2.ebuild98
-rw-r--r--app-emulation/grub-xen-host/metadata.xml16
-rw-r--r--app-emulation/guestfs-tools/Manifest3
-rw-r--r--app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-common-libguestfs-1.58-compat.patch13
-rw-r--r--app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-guestfs-bash-completion.m4-more-control.patch64
-rw-r--r--app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-bash-Remove-vestigial-bash-completions.patch47
-rw-r--r--app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-guestfs-bash-completion.m4-more-control.patch78
-rw-r--r--app-emulation/guestfs-tools/files/guestfs-tools-1.55.6-common-support-ocaml-4.14.2.patch158
-rw-r--r--app-emulation/guestfs-tools/guestfs-tools-1.52.3-r1.ebuild154
-rw-r--r--app-emulation/guestfs-tools/guestfs-tools-1.54.0.ebuild154
-rw-r--r--app-emulation/guestfs-tools/guestfs-tools-1.55.6.ebuild154
-rw-r--r--app-emulation/guestfs-tools/metadata.xml20
-rw-r--r--app-emulation/gxemul/Manifest2
-rw-r--r--app-emulation/gxemul/files/gxemul-0.6.0-gcc46.patch16
-rw-r--r--app-emulation/gxemul/files/gxemul-0.6.0-no-doxygen.patch21
-rw-r--r--app-emulation/gxemul/gxemul-0.6.3.1.ebuild49
-rw-r--r--app-emulation/gxemul/gxemul-0.7.0.ebuild45
-rw-r--r--app-emulation/gxemul/metadata.xml14
-rw-r--r--app-emulation/hercules-sdl-crypto/Manifest2
-rw-r--r--app-emulation/hercules-sdl-crypto/files/cmakefix.patch155
-rw-r--r--app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.7.0.ebuild20
-rw-r--r--app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.8.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.1.ebuild30
-rw-r--r--app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-9999.ebuild24
-rw-r--r--app-emulation/hercules-sdl-crypto/metadata.xml16
-rw-r--r--app-emulation/hercules-sdl-decnumber/Manifest2
-rw-r--r--app-emulation/hercules-sdl-decnumber/files/cmakefix.patch159
-rw-r--r--app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.7.0.ebuild20
-rw-r--r--app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.8.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.1.ebuild30
-rw-r--r--app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-9999.ebuild24
-rw-r--r--app-emulation/hercules-sdl-decnumber/metadata.xml16
-rw-r--r--app-emulation/hercules-sdl-softfloat/Manifest2
-rw-r--r--app-emulation/hercules-sdl-softfloat/files/cmakefix.patch159
-rw-r--r--app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.7.0.ebuild20
-rw-r--r--app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.8.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.1.ebuild30
-rw-r--r--app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-9999.ebuild24
-rw-r--r--app-emulation/hercules-sdl-softfloat/metadata.xml16
-rw-r--r--app-emulation/hercules-sdl-telnet/Manifest2
-rw-r--r--app-emulation/hercules-sdl-telnet/files/cmakefix.patch155
-rw-r--r--app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.7.0.ebuild20
-rw-r--r--app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.8.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.0.ebuild30
-rw-r--r--app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.1.ebuild30
-rw-r--r--app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-9999.ebuild24
-rw-r--r--app-emulation/hercules-sdl-telnet/metadata.xml16
-rw-r--r--app-emulation/hercules-sdl/Manifest4
-rw-r--r--app-emulation/hercules-sdl/files/gen_hashes.sh24
-rw-r--r--app-emulation/hercules-sdl/files/hercules-sdl-4.4.1-htmldir.patch29
-rw-r--r--app-emulation/hercules-sdl/files/hercules-sdl-4.7.0-backport-pr658.patch46
-rw-r--r--app-emulation/hercules-sdl/hercules-sdl-4.7.0-r1.ebuild92
-rw-r--r--app-emulation/hercules-sdl/hercules-sdl-4.8.0.ebuild93
-rw-r--r--app-emulation/hercules-sdl/hercules-sdl-4.9.0.ebuild93
-rw-r--r--app-emulation/hercules-sdl/hercules-sdl-4.9.1.ebuild93
-rw-r--r--app-emulation/hercules-sdl/metadata.xml20
-rw-r--r--app-emulation/hercules/Manifest1
-rw-r--r--app-emulation/hercules/files/hercules-3.13-autoconf.patch81
-rw-r--r--app-emulation/hercules/files/hercules-3.13-htmldir.patch25
-rw-r--r--app-emulation/hercules/files/hercules-3.13-posix-test.patch29
-rw-r--r--app-emulation/hercules/files/hercules-3.13-unbundle-libltdl.patch379
-rw-r--r--app-emulation/hercules/files/hercules-3.13-user-install.patch21
-rw-r--r--app-emulation/hercules/hercules-3.13-r1.ebuild70
-rw-r--r--app-emulation/hercules/metadata.xml15
-rw-r--r--app-emulation/libcacard/Manifest1
-rw-r--r--app-emulation/libcacard/libcacard-2.8.1.ebuild40
-rw-r--r--app-emulation/libcacard/metadata.xml16
-rw-r--r--app-emulation/libdsk/Manifest1
-rw-r--r--app-emulation/libdsk/libdsk-1.5.21.ebuild26
-rw-r--r--app-emulation/libdsk/metadata.xml5
-rw-r--r--app-emulation/libguestfs-appliance/Manifest3
-rw-r--r--app-emulation/libguestfs-appliance/files/env.file1
-rw-r--r--app-emulation/libguestfs-appliance/libguestfs-appliance-1.54.0.ebuild50
-rw-r--r--app-emulation/libguestfs-appliance/libguestfs-appliance-1.56.0.ebuild50
-rw-r--r--app-emulation/libguestfs-appliance/libguestfs-appliance-1.58.1.ebuild50
-rw-r--r--app-emulation/libguestfs-appliance/metadata.xml23
-rw-r--r--app-emulation/libguestfs/Manifest3
-rw-r--r--app-emulation/libguestfs/files/libguestfs-1.52.1-disable-obsolete-lvmetad-in-tests.patch12
-rw-r--r--app-emulation/libguestfs/files/libguestfs-1.56.2-bash-Remove-vestigial-bash-completions.patch149
-rw-r--r--app-emulation/libguestfs/files/libguestfs-1.56.2-guestfs-bash-completion.m4-more-control.patch78
-rw-r--r--app-emulation/libguestfs/files/libguestfs-1.56.2-respect-LDFLAGS-in-perl-module.patch13
-rw-r--r--app-emulation/libguestfs/libguestfs-1.54.1-r1.ebuild231
-rw-r--r--app-emulation/libguestfs/libguestfs-1.56.2.ebuild207
-rw-r--r--app-emulation/libguestfs/libguestfs-1.58.1.ebuild207
-rw-r--r--app-emulation/libguestfs/metadata.xml26
-rw-r--r--app-emulation/libspectrum/Manifest2
-rw-r--r--app-emulation/libspectrum/files/remove-local-prefix.patch18
-rw-r--r--app-emulation/libspectrum/libspectrum-1.5.0-r1.ebuild55
-rw-r--r--app-emulation/libspectrum/libspectrum-1.6.0.ebuild55
-rw-r--r--app-emulation/libspectrum/metadata.xml15
-rw-r--r--app-emulation/libvirt-glib/Manifest2
-rw-r--r--app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-Make-xmlError-structs-constant.patch64
-rw-r--r--app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-libvirt-gconfig-Add-more-libxml-includes.patch50
-rw-r--r--app-emulation/libvirt-glib/libvirt-glib-4.0.0-r1.ebuild53
-rw-r--r--app-emulation/libvirt-glib/libvirt-glib-5.0.0-r1.ebuild48
-rw-r--r--app-emulation/libvirt-glib/metadata.xml9
-rw-r--r--app-emulation/libvirt/Manifest8
-rw-r--r--app-emulation/libvirt/files/README.gentoo-r358
-rw-r--r--app-emulation/libvirt/files/libvirt-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch29
-rw-r--r--app-emulation/libvirt/files/libvirt-11.3.0-do-not-use-sysconfig.patch81
-rw-r--r--app-emulation/libvirt/files/libvirt-11.3.0-fix-paths-for-apparmor.patch74
-rw-r--r--app-emulation/libvirt/files/libvirt-12.1.0-do-not-use-sysconfig.patch81
-rw-r--r--app-emulation/libvirt/files/libvirt-12.2.0-do-not-use-sysconfig.patch79
-rw-r--r--app-emulation/libvirt/files/libvirt-guests.confd68
-rw-r--r--app-emulation/libvirt/files/libvirt-guests.init-r4237
-rw-r--r--app-emulation/libvirt/files/libvirtd.confd-r518
-rw-r--r--app-emulation/libvirt/files/libvirtd.init-r1933
-rw-r--r--app-emulation/libvirt/files/libvirtd.tmpfiles.conf2
-rw-r--r--app-emulation/libvirt/files/virtlockd.init-r223
-rw-r--r--app-emulation/libvirt/files/virtlogd.init-r223
-rw-r--r--app-emulation/libvirt/libvirt-11.10.0.ebuild380
-rw-r--r--app-emulation/libvirt/libvirt-12.0.0.ebuild384
-rw-r--r--app-emulation/libvirt/libvirt-12.1.0-r1.ebuild384
-rw-r--r--app-emulation/libvirt/libvirt-12.2.0.ebuild384
-rw-r--r--app-emulation/libvirt/libvirt-9999.ebuild384
-rw-r--r--app-emulation/libvirt/metadata.xml98
-rw-r--r--app-emulation/nemu/Manifest2
-rw-r--r--app-emulation/nemu/files/nemu-3.4.0-remove-workaround.patch31
-rw-r--r--app-emulation/nemu/metadata.xml18
-rw-r--r--app-emulation/nemu/nemu-3.3.0-r1.ebuild80
-rw-r--r--app-emulation/nemu/nemu-3.4.0.ebuild83
-rw-r--r--app-emulation/open-vm-tools/Manifest1
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-Werror.patch24
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-icu.patch26
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch37
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch145
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools.confd2
-rw-r--r--app-emulation/open-vm-tools/files/open-vm-tools.initd59
-rw-r--r--app-emulation/open-vm-tools/files/vgauthd.service14
-rw-r--r--app-emulation/open-vm-tools/files/vmtoolsd.service11
-rw-r--r--app-emulation/open-vm-tools/files/vmtoolsd.vgauth.service14
-rw-r--r--app-emulation/open-vm-tools/metadata.xml28
-rw-r--r--app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild171
-rw-r--r--app-emulation/open-vmdk/Manifest2
-rw-r--r--app-emulation/open-vmdk/metadata.xml13
-rw-r--r--app-emulation/open-vmdk/open-vmdk-0.3.12.ebuild73
-rw-r--r--app-emulation/open-vmdk/open-vmdk-0.3.13.ebuild81
-rw-r--r--app-emulation/pcem/Manifest1
-rw-r--r--app-emulation/pcem/metadata.xml25
-rw-r--r--app-emulation/pcem/pcem-17_p20241210-r2.ebuild82
-rw-r--r--app-emulation/plus42/Manifest2
-rw-r--r--app-emulation/plus42/files/plus42-1.0.12-fix-build-intel-lib.patch64
-rw-r--r--app-emulation/plus42/files/plus42-1.0.9-fix-makefile.patch25
-rw-r--r--app-emulation/plus42/metadata.xml9
-rw-r--r--app-emulation/plus42/plus42-1.3.13.ebuild49
-rw-r--r--app-emulation/plus42/plus42-1.3.15.ebuild49
-rw-r--r--app-emulation/protontricks/Manifest2
-rw-r--r--app-emulation/protontricks/metadata.xml16
-rw-r--r--app-emulation/protontricks/protontricks-1.13.1.ebuild58
-rw-r--r--app-emulation/protontricks/protontricks-1.14.1.ebuild59
-rw-r--r--app-emulation/punes/Manifest1
-rw-r--r--app-emulation/punes/files/punes-0.111-FULLSCREEN_RESFREQ-fix.patch33
-rw-r--r--app-emulation/punes/files/punes-0.111-ffmpeg8.patch141
-rw-r--r--app-emulation/punes/files/punes-0.111-qt6.7_Q_OBJECT.patch17
-rw-r--r--app-emulation/punes/files/punes-0.111-qt6.9-compatibility.patch50
-rw-r--r--app-emulation/punes/metadata.xml16
-rw-r--r--app-emulation/punes/punes-0.111-r2.ebuild61
-rw-r--r--app-emulation/q4wine/Manifest1
-rw-r--r--app-emulation/q4wine/metadata.xml12
-rw-r--r--app-emulation/q4wine/q4wine-1.4.2.ebuild42
-rw-r--r--app-emulation/qemu-guest-agent/Manifest3
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-8.1.0-find-sphinx.patch10
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-ga-systemd.service11
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-ga-systemd.udev2
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-ga.conf-r111
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-ga.init-r211
-rw-r--r--app-emulation/qemu-guest-agent/files/qemu-ga.logrotate9
-rw-r--r--app-emulation/qemu-guest-agent/metadata.xml20
-rw-r--r--app-emulation/qemu-guest-agent/qemu-guest-agent-10.2.2.ebuild114
-rw-r--r--app-emulation/qemu-guest-agent/qemu-guest-agent-8.2.0.ebuild109
-rw-r--r--app-emulation/qemu-guest-agent/qemu-guest-agent-9.2.0.ebuild114
-rw-r--r--app-emulation/qemu-init-scripts/Manifest1
-rw-r--r--app-emulation/qemu-init-scripts/files/openrc-run.patch10
-rw-r--r--app-emulation/qemu-init-scripts/metadata.xml5
-rw-r--r--app-emulation/qemu-init-scripts/qemu-init-scripts-0.3.0-r1.ebuild35
-rw-r--r--app-emulation/qemu/Manifest11
-rw-r--r--app-emulation/qemu/files/65-kvm.rules-r23
-rw-r--r--app-emulation/qemu/files/bridge.conf14
-rw-r--r--app-emulation/qemu/files/qemu-10.1.2-fix_passt.patch18
-rw-r--r--app-emulation/qemu/files/qemu-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch31
-rw-r--r--app-emulation/qemu/files/qemu-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch37
-rw-r--r--app-emulation/qemu/files/qemu-8.1.0-find-sphinx.patch10
-rw-r--r--app-emulation/qemu/files/qemu-8.1.0-skip-tests.patch64
-rw-r--r--app-emulation/qemu/files/qemu-9.0.0-disable-keymap.patch44
-rw-r--r--app-emulation/qemu/files/qemu-9.2.0-capstone-include-path.patch41
-rw-r--r--app-emulation/qemu/files/qemu-binfmt.initd.head64
-rw-r--r--app-emulation/qemu/files/qemu-binfmt.initd.tail14
-rw-r--r--app-emulation/qemu/metadata.xml80
-rw-r--r--app-emulation/qemu/qemu-10.0.7.ebuild1014
-rw-r--r--app-emulation/qemu/qemu-10.1.3-r1.ebuild1026
-rw-r--r--app-emulation/qemu/qemu-10.2.2.ebuild1026
-rw-r--r--app-emulation/qemu/qemu-9.2.4.ebuild1001
-rw-r--r--app-emulation/qemu/qemu-9999.ebuild1026
-rw-r--r--app-emulation/qtrvsim/Manifest3
-rw-r--r--app-emulation/qtrvsim/metadata.xml9
-rw-r--r--app-emulation/qtrvsim/qtrvsim-0.9.8-r1.ebuild39
-rw-r--r--app-emulation/ruffle/Manifest2
-rw-r--r--app-emulation/ruffle/metadata.xml9
-rw-r--r--app-emulation/ruffle/ruffle-0_p20260213.ebuild83
-rw-r--r--app-emulation/simh/Manifest2
-rw-r--r--app-emulation/simh/files/simh-3.11.0-fcommon.patch37
-rw-r--r--app-emulation/simh/files/simh-3.11.0-fix-mkdir-race.patch11
-rw-r--r--app-emulation/simh/files/simh-3.11.0-respect-FLAGS.patch13
-rw-r--r--app-emulation/simh/files/simh-3.12.5-incompatible-pointer-types.patch11
-rw-r--r--app-emulation/simh/files/simh-3.12.5-respect-FLAGS.patch26
-rw-r--r--app-emulation/simh/metadata.xml19
-rw-r--r--app-emulation/simh/simh-3.11.1.ebuild61
-rw-r--r--app-emulation/simh/simh-3.12.5.ebuild59
-rw-r--r--app-emulation/ski/Manifest1
-rw-r--r--app-emulation/ski/files/ski-1.5.0-fix_termio.patch49
-rw-r--r--app-emulation/ski/metadata.xml9
-rw-r--r--app-emulation/ski/ski-1.5.0.ebuild44
-rw-r--r--app-emulation/softgun/Manifest1
-rw-r--r--app-emulation/softgun/files/softgun-0.22-fix-declarations-with-type-mismatches.patch148
-rw-r--r--app-emulation/softgun/files/softgun-0.22-fix-implicit-int.patch33
-rw-r--r--app-emulation/softgun/files/softgun-0.22-make.patch75
-rw-r--r--app-emulation/softgun/metadata.xml9
-rw-r--r--app-emulation/softgun/softgun-0.22-r1.ebuild38
-rw-r--r--app-emulation/spectemu/Manifest1
-rw-r--r--app-emulation/spectemu/files/spectemu-0.99.3-automagic.patch31
-rw-r--r--app-emulation/spectemu/files/spectemu-0.99.3-r2-build.patch34
-rw-r--r--app-emulation/spectemu/metadata.xml5
-rw-r--r--app-emulation/spectemu/spectemu-0.99.3-r2.ebuild57
-rw-r--r--app-emulation/spice-protocol/Manifest2
-rw-r--r--app-emulation/spice-protocol/metadata.xml9
-rw-r--r--app-emulation/spice-protocol/spice-protocol-0.14.4.ebuild20
-rw-r--r--app-emulation/spice-protocol/spice-protocol-0.14.5.ebuild20
-rw-r--r--app-emulation/spice-protocol/spice-protocol-9999-r1.ebuild20
-rw-r--r--app-emulation/spice-vdagent/Manifest1
-rw-r--r--app-emulation/spice-vdagent/files/spice-vdagent.confd-211
-rw-r--r--app-emulation/spice-vdagent/files/spice-vdagent.initd-460
-rw-r--r--app-emulation/spice-vdagent/metadata.xml12
-rw-r--r--app-emulation/spice-vdagent/spice-vdagent-0.22.1.ebuild73
-rw-r--r--app-emulation/spice/Manifest2
-rw-r--r--app-emulation/spice/files/README.gentoo7
-rw-r--r--app-emulation/spice/files/spice-0.16.0-c++20-adjust-designated-init.patch24
-rw-r--r--app-emulation/spice/metadata.xml13
-rw-r--r--app-emulation/spice/spice-0.15.2.ebuild97
-rw-r--r--app-emulation/spice/spice-0.16.0.ebuild102
-rw-r--r--app-emulation/spice/spice-9999-r1.ebuild98
-rw-r--r--app-emulation/uade/Manifest1
-rw-r--r--app-emulation/uade/files/uade-2.13-configure.patch24
-rw-r--r--app-emulation/uade/metadata.xml12
-rw-r--r--app-emulation/uade/uade-2.13-r2.ebuild52
-rw-r--r--app-emulation/uxn/Manifest1
-rw-r--r--app-emulation/uxn/files/uxn-0_p20230609-build.sh.patch20
-rw-r--r--app-emulation/uxn/metadata.xml15
-rw-r--r--app-emulation/uxn/uxn-0_p20250122.ebuild74
-rw-r--r--app-emulation/uxn/uxn-9999.ebuild72
-rw-r--r--app-emulation/vagrant/Manifest3
-rw-r--r--app-emulation/vagrant/files/vagrant.in61
-rw-r--r--app-emulation/vagrant/metadata.xml13
-rw-r--r--app-emulation/vagrant/vagrant-2.4.0-r2.ebuild124
-rw-r--r--app-emulation/vagrant/vagrant-2.4.1-r1.ebuild124
-rw-r--r--app-emulation/vagrant/vagrant-2.4.9-r1.ebuild125
-rw-r--r--app-emulation/vendor-reset/Manifest1
-rw-r--r--app-emulation/vendor-reset/files/modload.conf1
-rw-r--r--app-emulation/vendor-reset/files/vendor-reset-0.1.1-allow-correct-compilation-with-clang.patch23
-rw-r--r--app-emulation/vendor-reset/files/vendor-reset-0.1.1-fix-build-on-kernel-6.8.patch35
-rw-r--r--app-emulation/vendor-reset/metadata.xml9
-rw-r--r--app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r1.ebuild39
-rw-r--r--app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r2.ebuild44
-rw-r--r--app-emulation/vendor-reset/vendor-reset-9999.ebuild37
-rw-r--r--app-emulation/vice/Manifest1
-rw-r--r--app-emulation/vice/files/vice-3.10-mpg123-without-curl.patch169
-rw-r--r--app-emulation/vice/metadata.xml17
-rw-r--r--app-emulation/vice/vice-3.10.ebuild203
-rw-r--r--app-emulation/virt-firmware/Manifest4
-rw-r--r--app-emulation/virt-firmware/files/kernel-bootcfg-boot-successful9
-rw-r--r--app-emulation/virt-firmware/metadata.xml16
-rw-r--r--app-emulation/virt-firmware/virt-firmware-25.10.ebuild55
-rw-r--r--app-emulation/virt-firmware/virt-firmware-25.12.ebuild55
-rw-r--r--app-emulation/virt-firmware/virt-firmware-26.2.ebuild55
-rw-r--r--app-emulation/virt-firmware/virt-firmware-26.5.4.ebuild65
-rw-r--r--app-emulation/virt-manager/Manifest3
-rw-r--r--app-emulation/virt-manager/metadata.xml27
-rw-r--r--app-emulation/virt-manager/virt-manager-5.1.0-r1.ebuild135
-rw-r--r--app-emulation/virt-manager/virt-manager-9999.ebuild121
-rw-r--r--app-emulation/virt-v2v/Manifest2
-rw-r--r--app-emulation/virt-v2v/metadata.xml17
-rw-r--r--app-emulation/virt-v2v/virt-v2v-2.10.0.ebuild72
-rw-r--r--app-emulation/virt-v2v/virt-v2v-2.6.0.ebuild64
-rw-r--r--app-emulation/virt-viewer/Manifest1
-rw-r--r--app-emulation/virt-viewer/files/virt-viewer-10.0_p20210730-meson-0.61.patch36
-rw-r--r--app-emulation/virt-viewer/metadata.xml19
-rw-r--r--app-emulation/virt-viewer/virt-viewer-11.0-r1.ebuild68
-rw-r--r--app-emulation/virt-what/Manifest1
-rw-r--r--app-emulation/virt-what/metadata.xml12
-rw-r--r--app-emulation/virt-what/virt-what-1.25.ebuild24
-rw-r--r--app-emulation/virtio-win/Manifest3
-rw-r--r--app-emulation/virtio-win/files/README.gentoo15
-rw-r--r--app-emulation/virtio-win/metadata.xml13
-rw-r--r--app-emulation/virtio-win/virtio-win-0.1.266.1.ebuild30
-rw-r--r--app-emulation/virtio-win/virtio-win-0.1.271.1.ebuild30
-rw-r--r--app-emulation/virtio-win/virtio-win-0.1.285.1.ebuild32
-rw-r--r--app-emulation/virtiofsd/Manifest120
-rw-r--r--app-emulation/virtiofsd/metadata.xml13
-rw-r--r--app-emulation/virtiofsd/virtiofsd-1.13.1.ebuild183
-rw-r--r--app-emulation/virtiofsd/virtiofsd-1.13.2.ebuild181
-rw-r--r--app-emulation/virtiofsd/virtiofsd-1.13.3.ebuild181
-rw-r--r--app-emulation/virtiofsd/virtiofsd-9999.ebuild181
-rw-r--r--app-emulation/virtualbox-additions/Manifest4
-rw-r--r--app-emulation/virtualbox-additions/metadata.xml12
-rw-r--r--app-emulation/virtualbox-additions/virtualbox-additions-7.0.26.ebuild25
-rw-r--r--app-emulation/virtualbox-additions/virtualbox-additions-7.1.18.ebuild26
-rw-r--r--app-emulation/virtualbox-additions/virtualbox-additions-7.2.6.ebuild26
-rw-r--r--app-emulation/virtualbox-additions/virtualbox-additions-7.2.8.ebuild26
-rw-r--r--app-emulation/virtualbox-extpack-oracle/Manifest4
-rw-r--r--app-emulation/virtualbox-extpack-oracle/metadata.xml12
-rw-r--r--app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.0.26.ebuild33
-rw-r--r--app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.1.18.ebuild33
-rw-r--r--app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.6.ebuild33
-rw-r--r--app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.8.ebuild33
-rw-r--r--app-emulation/virtualbox-guest-additions/Manifest7
-rw-r--r--app-emulation/virtualbox-guest-additions/files/vboxclient.desktop7
-rw-r--r--app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-5-localconfig30
-rw-r--r--app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1-arm64.patch14
-rw-r--r--app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1.6-disable-vboxvideo-module.patch19
-rw-r--r--app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-8.initd-r125
-rw-r--r--app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions.service16
-rw-r--r--app-emulation/virtualbox-guest-additions/metadata.xml12
-rw-r--r--app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.0.26.ebuild249
-rw-r--r--app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.1.18.ebuild256
-rw-r--r--app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.6.ebuild256
-rw-r--r--app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.8.ebuild256
-rw-r--r--app-emulation/virtualbox-guest-modules/Manifest4
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-6.1.36-log-use-c99.patch13
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.1.8-kernel-6.15.patch251
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-1.patch117
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-3.patch40
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-log-use-c99.patch12
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-no-vboxvideo.patch15
-rw-r--r--app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.8-no-vboxvideo.patch22
-rw-r--r--app-emulation/virtualbox-guest-modules/metadata.xml9
-rw-r--r--app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26-r1.ebuild48
-rw-r--r--app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26.ebuild47
-rw-r--r--app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.1.18.ebuild47
-rw-r--r--app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.6-r1.ebuild49
-rw-r--r--app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.8.ebuild48
-rw-r--r--app-emulation/virtualbox-kvm/Manifest6
-rw-r--r--app-emulation/virtualbox-kvm/files/050_virtualbox-5.2.8-nopie.patch147
-rw-r--r--app-emulation/virtualbox-kvm/files/10-virtualbox.rules7
-rw-r--r--app-emulation/virtualbox-kvm/files/test_python.py16
-rw-r--r--app-emulation/virtualbox-kvm/files/vboxwebsrv-confd19
-rw-r--r--app-emulation/virtualbox-kvm/files/vboxwebsrv-initd21
-rw-r--r--app-emulation/virtualbox-kvm/files/virtualbox-4-config1
-rw-r--r--app-emulation/virtualbox-kvm/files/virtualbox-5-localconfig47
-rw-r--r--app-emulation/virtualbox-kvm/files/virtualbox-kvm-7.1.0-disable-rebuild-iPxeBiosBin.patch18
-rw-r--r--app-emulation/virtualbox-kvm/files/virtualbox-ose-6-wrapper119
-rw-r--r--app-emulation/virtualbox-kvm/files/virtualbox-vboxusb_tmpfilesd1
-rw-r--r--app-emulation/virtualbox-kvm/metadata.xml20
-rw-r--r--app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.6_pre20260201-r1.ebuild788
-rw-r--r--app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.8_pre20260201.ebuild789
-rw-r--r--app-emulation/virtualbox-modules/Manifest4
-rw-r--r--app-emulation/virtualbox-modules/files/virtualbox-modules-7.1.8-kernel-6.15.patch116
-rw-r--r--app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch243
-rw-r--r--app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch53
-rw-r--r--app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch40
-rw-r--r--app-emulation/virtualbox-modules/files/virtualbox.conf-r13
-rw-r--r--app-emulation/virtualbox-modules/metadata.xml9
-rw-r--r--app-emulation/virtualbox-modules/virtualbox-modules-7.0.26-r1.ebuild52
-rw-r--r--app-emulation/virtualbox-modules/virtualbox-modules-7.0.26.ebuild48
-rw-r--r--app-emulation/virtualbox-modules/virtualbox-modules-7.1.18.ebuild48
-rw-r--r--app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r2.ebuild53
-rw-r--r--app-emulation/virtualbox-modules/virtualbox-modules-7.2.8.ebuild49
-rw-r--r--app-emulation/virtualbox/Manifest12
-rw-r--r--app-emulation/virtualbox/files/050_virtualbox-5.2.8-nopie.patch147
-rw-r--r--app-emulation/virtualbox/files/10-virtualbox.rules7
-rw-r--r--app-emulation/virtualbox/files/test_python.py16
-rw-r--r--app-emulation/virtualbox/files/vboxwebsrv-confd19
-rw-r--r--app-emulation/virtualbox/files/vboxwebsrv-initd21
-rw-r--r--app-emulation/virtualbox/files/virtualbox-4-config1
-rw-r--r--app-emulation/virtualbox/files/virtualbox-5-localconfig47
-rw-r--r--app-emulation/virtualbox/files/virtualbox-7.0.8-disable-rebuild-iPxeBiosBin.patch18
-rw-r--r--app-emulation/virtualbox/files/virtualbox-7.1.0-disable-rebuild-iPxeBiosBin.patch18
-rw-r--r--app-emulation/virtualbox/files/virtualbox-7.2.2-curl-8.16.patch54
-rw-r--r--app-emulation/virtualbox/files/virtualbox-7.2.8-parallel-make.patch17
-rw-r--r--app-emulation/virtualbox/files/virtualbox-ose-6-wrapper119
-rw-r--r--app-emulation/virtualbox/files/virtualbox-vboxusb_tmpfilesd1
-rw-r--r--app-emulation/virtualbox/metadata.xml18
-rw-r--r--app-emulation/virtualbox/virtualbox-7.0.26-r1.ebuild693
-rw-r--r--app-emulation/virtualbox/virtualbox-7.1.18.ebuild782
-rw-r--r--app-emulation/virtualbox/virtualbox-7.2.6-r1.ebuild777
-rw-r--r--app-emulation/virtualbox/virtualbox-7.2.8.ebuild780
-rw-r--r--app-emulation/virtualbox/virtualbox-9999.ebuild815
-rw-r--r--app-emulation/vkd3d-proton/Manifest18
-rw-r--r--app-emulation/vkd3d-proton/files/vkd3d-proton-2.6-wow64-setup.patch14
-rw-r--r--app-emulation/vkd3d-proton/metadata.xml17
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-2.12.ebuild205
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-2.13.ebuild205
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-2.14.1.ebuild205
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-2.6-r1.ebuild184
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-3.0.1.ebuild157
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-3.0b.ebuild171
-rw-r--r--app-emulation/vkd3d-proton/vkd3d-proton-9999.ebuild157
-rw-r--r--app-emulation/wine-desktop-common/Manifest1
-rw-r--r--app-emulation/wine-desktop-common/metadata.xml10
-rw-r--r--app-emulation/wine-desktop-common/wine-desktop-common-20150204-r2.ebuild36
-rw-r--r--app-emulation/wine-gecko/Manifest8
-rw-r--r--app-emulation/wine-gecko/metadata.xml12
-rw-r--r--app-emulation/wine-gecko/wine-gecko-2.47.3.ebuild42
-rw-r--r--app-emulation/wine-gecko/wine-gecko-2.47.4.ebuild42
-rw-r--r--app-emulation/wine-mono/Manifest18
-rw-r--r--app-emulation/wine-mono/metadata.xml24
-rw-r--r--app-emulation/wine-mono/wine-mono-10.0.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-10.3.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-10.4.1.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-11.0.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-11.1.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-7.4.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-8.1.0.ebuild33
-rw-r--r--app-emulation/wine-mono/wine-mono-9.3.1.ebuild34
-rw-r--r--app-emulation/wine-mono/wine-mono-9.4.0.ebuild33
-rw-r--r--app-emulation/wine-proton/Manifest7
-rw-r--r--app-emulation/wine-proton/files/README.gentoo51
-rw-r--r--app-emulation/wine-proton/files/wine-proton-11.0.1-restore-menubuilder.patch8
-rw-r--r--app-emulation/wine-proton/files/wine-proton-7.0.4-musl.patch17
-rw-r--r--app-emulation/wine-proton/files/wine-proton-7.0.4-noexecstack.patch7
-rw-r--r--app-emulation/wine-proton/files/wine-proton-8.0.1c-unwind.patch36
-rw-r--r--app-emulation/wine-proton/files/wine-proton-8.0.4-restore-menubuilder.patch8
-rw-r--r--app-emulation/wine-proton/files/wine-proton-8.0.5c-vulkan-libm.patch12
-rw-r--r--app-emulation/wine-proton/files/wine-proton-9.0-rpath.patch14
-rw-r--r--app-emulation/wine-proton/files/wine-proton-9.0.4-binutils2.44.patch105
-rw-r--r--app-emulation/wine-proton/metadata.xml45
-rw-r--r--app-emulation/wine-proton/wine-proton-10.0.3.ebuild256
-rw-r--r--app-emulation/wine-proton/wine-proton-10.0.4.ebuild256
-rw-r--r--app-emulation/wine-proton/wine-proton-11.0.1_beta1.ebuild269
-rw-r--r--app-emulation/wine-proton/wine-proton-11.0.1_beta2.ebuild269
-rw-r--r--app-emulation/wine-proton/wine-proton-11.0.1_beta5.ebuild269
-rw-r--r--app-emulation/wine-proton/wine-proton-8.0.5c.ebuild421
-rw-r--r--app-emulation/wine-proton/wine-proton-9.0.4-r2.ebuild235
-rw-r--r--app-emulation/wine-proton/wine-proton-9999.ebuild269
-rw-r--r--app-emulation/wine-staging/Manifest8
-rw-r--r--app-emulation/wine-staging/files/wine-staging-7.17-noexecstack.patch7
-rw-r--r--app-emulation/wine-staging/files/wine-staging-7.20-unwind.patch36
-rw-r--r--app-emulation/wine-staging/files/wine-staging-8.13-rpath.patch15
-rw-r--r--app-emulation/wine-staging/metadata.xml56
-rw-r--r--app-emulation/wine-staging/wine-staging-11.0.ebuild260
-rw-r--r--app-emulation/wine-staging/wine-staging-11.10.ebuild253
-rw-r--r--app-emulation/wine-staging/wine-staging-11.8.ebuild253
-rw-r--r--app-emulation/wine-staging/wine-staging-11.9.ebuild253
-rw-r--r--app-emulation/wine-staging/wine-staging-9999.ebuild253
-rw-r--r--app-emulation/wine-vanilla/Manifest7
-rw-r--r--app-emulation/wine-vanilla/files/wine-vanilla-10.0-binutils2.44.patch105
-rw-r--r--app-emulation/wine-vanilla/files/wine-vanilla-7.0-noexecstack.patch7
-rw-r--r--app-emulation/wine-vanilla/files/wine-vanilla-7.20-unwind.patch36
-rw-r--r--app-emulation/wine-vanilla/files/wine-vanilla-8.13-rpath.patch15
-rw-r--r--app-emulation/wine-vanilla/metadata.xml56
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-10.0-r2.ebuild210
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-11.0.ebuild221
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-11.10.ebuild214
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-11.8.ebuild214
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-11.9.ebuild214
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-8.0.2.ebuild400
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-9.0.1-r1.ebuild202
-rw-r--r--app-emulation/wine-vanilla/wine-vanilla-9999.ebuild214
-rw-r--r--app-emulation/winetricks/Manifest2
-rw-r--r--app-emulation/winetricks/metadata.xml18
-rw-r--r--app-emulation/winetricks/winetricks-20250102-r1.ebuild54
-rw-r--r--app-emulation/winetricks/winetricks-20260125.ebuild54
-rw-r--r--app-emulation/winetricks/winetricks-99999999.ebuild54
-rw-r--r--app-emulation/x48/Manifest1
-rw-r--r--app-emulation/x48/files/x48-0.6.4-configure.patch11
-rw-r--r--app-emulation/x48/files/x48-0.6.4-static.patch12
-rw-r--r--app-emulation/x48/files/x48-0.6.4-void_return.patch24
-rw-r--r--app-emulation/x48/metadata.xml9
-rw-r--r--app-emulation/x48/x48-0.6.4-r3.ebuild72
-rw-r--r--app-emulation/xcpc/Manifest1
-rw-r--r--app-emulation/xcpc/metadata.xml5
-rw-r--r--app-emulation/xcpc/xcpc-0.37.0-r1.ebuild29
-rw-r--r--app-emulation/xe-guest-utilities/Manifest1
-rw-r--r--app-emulation/xe-guest-utilities/files/xe-daemon.initd27
-rw-r--r--app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Guest-Attributes.patch127
-rw-r--r--app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Linux-Distribution.patch77
-rw-r--r--app-emulation/xe-guest-utilities/metadata.xml28
-rw-r--r--app-emulation/xe-guest-utilities/xe-guest-utilities-6.2.0_p1120-r1.ebuild66
-rw-r--r--app-emulation/xen-tools/Manifest22
-rw-r--r--app-emulation/xen-tools/files/README.gentoo16
-rw-r--r--app-emulation/xen-tools/files/edk2-202202-binutils-2.41-textrels.patch21
-rw-r--r--app-emulation/xen-tools/files/ipxe-force-gcc.patch14
-rw-r--r--app-emulation/xen-tools/files/stubs-32.h20
-rw-r--r--app-emulation/xen-tools/files/xen-consoles.logrotate5
-rw-r--r--app-emulation/xen-tools/files/xen-tools-4.19.1-gnu17.patch10
-rw-r--r--app-emulation/xen-tools/files/xen-watchdog.initd6
-rw-r--r--app-emulation/xen-tools/files/xencommons.confd4
-rw-r--r--app-emulation/xen-tools/files/xencommons.initd79
-rw-r--r--app-emulation/xen-tools/files/xenconsoled.confd2
-rw-r--r--app-emulation/xen-tools/files/xenconsoled.initd33
-rw-r--r--app-emulation/xen-tools/files/xendomains-screen.confd25
-rw-r--r--app-emulation/xen-tools/files/xendomains.confd9
-rw-r--r--app-emulation/xen-tools/files/xendomains.initd-r2117
-rw-r--r--app-emulation/xen-tools/files/xenqemudev.confd7
-rw-r--r--app-emulation/xen-tools/files/xenqemudev.initd84
-rw-r--r--app-emulation/xen-tools/files/xenstored.confd2
-rw-r--r--app-emulation/xen-tools/files/xenstored.initd-r142
-rw-r--r--app-emulation/xen-tools/metadata.xml31
-rw-r--r--app-emulation/xen-tools/xen-tools-4.19.3.ebuild552
-rw-r--r--app-emulation/xen-tools/xen-tools-4.20.2.ebuild579
-rw-r--r--app-emulation/xen-tools/xen-tools-4.20.3.ebuild578
-rw-r--r--app-emulation/xen/Manifest5
-rw-r--r--app-emulation/xen/metadata.xml25
-rw-r--r--app-emulation/xen/xen-4.19.3.ebuild179
-rw-r--r--app-emulation/xen/xen-4.20.2.ebuild179
-rw-r--r--app-emulation/xen/xen-4.20.3.ebuild177
-rw-r--r--app-emulation/xtrs/Manifest4
-rw-r--r--app-emulation/xtrs/files/xtrs-4.9d-implicit.patch35
-rw-r--r--app-emulation/xtrs/files/xtrs-4.9d-lcmod.patch68
-rw-r--r--app-emulation/xtrs/metadata.xml24
-rw-r--r--app-emulation/xtrs/xtrs-4.9d-r6.ebuild84
-rw-r--r--app-emulation/xtrs/xtrs-4.9d_p20250819.ebuild100
652 files changed, 48284 insertions, 0 deletions
diff --git a/app-emulation/86Box/86Box-5.3.ebuild b/app-emulation/86Box/86Box-5.3.ebuild
new file mode 100644
index 000000000000..5c9495e0ba93
--- /dev/null
+++ b/app-emulation/86Box/86Box-5.3.ebuild
@@ -0,0 +1,101 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake desktop flag-o-matic xdg-utils
+
+DESCRIPTION="Emulator of x86-based machines based on PCem"
+HOMEPAGE="https://github.com/86Box/86Box"
+SRC_URI="https://github.com/${PN}/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="discord experimental +fluidsynth +munt new-dynarec +openal +qt6 +threads vde vnc"
+
+DEPEND="
+ app-emulation/faudio
+ dev-libs/libevdev
+ dev-libs/libserialport
+ media-libs/freetype:2=
+ media-libs/libpng:=
+ media-libs/libsdl2
+ media-libs/libsndfile
+ media-libs/openal
+ media-libs/rtmidi
+ net-libs/libslirp
+ virtual/zlib:=
+ fluidsynth? ( media-sound/fluidsynth:= )
+ munt? ( media-libs/munt-mt32emu )
+ openal? ( media-libs/openal )
+ qt6? (
+ dev-libs/wayland
+ dev-qt/qtbase:6=[gui,network,opengl,widgets]
+ x11-libs/libX11
+ x11-libs/libXi
+ x11-libs/libxkbcommon
+ )
+ vnc? ( net-libs/libvncserver )
+"
+RDEPEND="${DEPEND}
+ qt6? ( dev-qt/qttranslations:6 )
+ vde? ( net-misc/vde )
+"
+BDEPEND="
+ virtual/pkgconfig
+ qt6? ( kde-frameworks/extra-cmake-modules )
+"
+
+PATCHES=( "${FILESDIR}/${PN}-5.3-fallthrough-define-available-in-C-code.patch" )
+
+src_configure() {
+ # LTO needs to be filtered
+ # See https://bugs.gentoo.org/854507
+ filter-lto
+ append-flags -fno-strict-aliasing
+
+ local mycmakeargs=(
+ -DCPPTHREADS="$(usex threads)"
+ -DDEV_BRANCH="$(usex experimental)"
+ -DDISCORD="$(usex discord)"
+ -DDYNAREC="ON"
+ -DFLUIDSYNTH="$(usex fluidsynth)"
+ -DHAS_VDE="$(usex vde "${EPREFIX}/usr/$(get_libdir)/libvdeplug.so" "HAS_VDE-NOTFOUND")"
+ -DMINITRACE="OFF"
+ -DMUNT="$(usex munt)"
+ -DMUNT_EXTERNAL="$(usex munt)"
+ -DNEW_DYNAREC="$(usex new-dynarec)"
+ -DOPENAL="$(usex openal)"
+ -DPREFER_STATIC="OFF"
+ -DQT="$(usex qt6)"
+ -DRELEASE="ON"
+ -DRTMIDI="ON"
+ $(usex qt6 '-DUSE_QT6=ON' '')
+ -DVNC="$(usex vnc)"
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+
+ domenu src/unix/assets/net.86box.86Box.desktop
+ for iconsize in 48 64 72 96 128 192 256 512; do
+ doicon -s $iconsize src/unix/assets/${iconsize}x${iconsize}/net.86box.86Box.png
+ done
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+
+ elog "In order to use 86Box, you will need some roms for various emulated systems."
+ elog "See https://github.com/86Box/roms for more information."
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+ xdg_icon_cache_update
+}
diff --git a/app-emulation/86Box/Manifest b/app-emulation/86Box/Manifest
new file mode 100644
index 000000000000..70e22d3b6637
--- /dev/null
+++ b/app-emulation/86Box/Manifest
@@ -0,0 +1 @@
+DIST 86Box-5.3.tar.gz 14001417 BLAKE2B a70679787fc7a601afa7ac3b69f4bb58afa2939d7a876048c6b944bdcb3affbc58ac8bfbe1e95088eaa93bf872172068bc0421602465d2a352d9674fcc255c41 SHA512 120fbf7544cc91dd9f7b75027cd6219084aa71e97e8ef2ad105ac8ccc7bea2a9290c2d124461da0192c3000c0459fe65c1fd361342de33b06c80616592f52f84
diff --git a/app-emulation/86Box/files/86Box-5.3-fallthrough-define-available-in-C-code.patch b/app-emulation/86Box/files/86Box-5.3-fallthrough-define-available-in-C-code.patch
new file mode 100644
index 000000000000..c08c02882418
--- /dev/null
+++ b/app-emulation/86Box/files/86Box-5.3-fallthrough-define-available-in-C-code.patch
@@ -0,0 +1,45 @@
+From 0092ce15de3efac108b961882f870a8c05e8c38f Mon Sep 17 00:00:00 2001
+From: OBattler <oubattler@gmail.com>
+Date: Mon, 22 Dec 2025 22:56:10 +0100
+Subject: [PATCH] Only make the fallthrough define available in C code, fixes
+ #6607.
+
+---
+ src/include/86box/plat.h | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/src/include/86box/plat.h b/src/include/86box/plat.h
+index dcf7e4d5306..cbc348709ec 100644
+--- a/src/include/86box/plat.h
++++ b/src/include/86box/plat.h
+@@ -90,16 +90,12 @@ extern int strnicmp(const char *s1, const char *s2, size_t n);
+ # include <atomic>
+ # define atomic_flag_t std::atomic_flag
+ # define atomic_bool_t std::atomic_bool
++
+ extern "C" {
+ #else
+ # include <stdatomic.h>
+ # define atomic_flag_t atomic_flag
+ # define atomic_bool_t atomic_bool
+-#endif
+-
+-#if defined(_MSC_VER)
+-# define ssize_t intptr_t
+-#endif
+
+ #ifdef _MSC_VER
+ # define fallthrough do {} while (0) /* fallthrough */
+@@ -114,6 +110,12 @@ extern "C" {
+ # endif
+ #endif
+
++#endif
++
++#if defined(_MSC_VER)
++# define ssize_t intptr_t
++#endif
++
+ /* Global variables residing in the platform module. */
+ extern int dopause; /* system is paused */
+ extern int mouse_capture; /* mouse is captured in app */
diff --git a/app-emulation/86Box/metadata.xml b/app-emulation/86Box/metadata.xml
new file mode 100644
index 000000000000..c9612a9c696e
--- /dev/null
+++ b/app-emulation/86Box/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ 86Box is a low level x86 emulator that runs older operating systems and software
+ designed for IBM PC systems and compatibles from 1981 through
+ fairly recent system designs based on the PCI bus.
+ </longdescription>
+ <use>
+ <flag name="discord">Enable Discord integration</flag>
+ <flag name="experimental">Enable hardware from devbranch, which may be unstable or unusable.</flag>
+ <flag name="fluidsynth">Enable MIDI support through <pkg>media-sound/fluidsynth</pkg>.</flag>
+ <flag name="munt">Enable MIDI MT-32 support through <pkg>media-libs/munt-mt32emu</pkg>.</flag>
+ <flag name="new-dynarec">Enable new dynamic recompiler from PCem 15, which should provide an even better emulation speed.</flag>
+ <flag name="vde">Enable virtual networking through <pkg>net-misc/vde</pkg>.</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://github.com/86Box/86Box/issues</bugs-to>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/aranym/Manifest b/app-emulation/aranym/Manifest
new file mode 100644
index 000000000000..e50669b9613e
--- /dev/null
+++ b/app-emulation/aranym/Manifest
@@ -0,0 +1 @@
+DIST aranym_1.1.0.orig.tar.gz 3785612 BLAKE2B 52b5fa34c78c67cb94cbe0d94795368cb7007f37571282d67387a0237500143f8078117132c9df392c5fd48b32cdb8c1cf727fe4d22a3d24eac0595215bddf4e SHA512 723b1a7c80532734e1dea288dbffd66746d9c7d1302ccb0259248a26aac5dedc7f66a134929de7064686af6c676d10918d90e2cf58cb010fd445979945177b51
diff --git a/app-emulation/aranym/aranym-1.1.0-r1.ebuild b/app-emulation/aranym/aranym-1.1.0-r1.ebuild
new file mode 100644
index 000000000000..5ba4cc2b6633
--- /dev/null
+++ b/app-emulation/aranym/aranym-1.1.0-r1.ebuild
@@ -0,0 +1,116 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools flag-o-matic multibuild toolchain-funcs xdg
+
+DESCRIPTION="Atari Running on Any Machine, VM running Atari ST/TT/Falcon OS and TOS/GEM apps"
+HOMEPAGE="https://aranym.github.io"
+SRC_URI="https://github.com/${PN}/${PN}/releases/download/${PN^^}_${PV//./_}/${PN}_${PV}.orig.tar.gz"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+clipboard +jit jpeg lilo opengl osmesa pmmu +standard usb"
+REQUIRED_USE="|| ( jit pmmu standard ) lilo? ( pmmu )"
+
+# LILO can be used without zlib but the zlib dependency is automagic so
+# we just require it unconditionally.
+
+RDEPEND="
+ dev-libs/gmp:0=
+ media-libs/libsdl2[video]
+ clipboard? (
+ media-libs/libsdl2[X]
+ x11-libs/libX11
+ )
+ jpeg? ( virtual/jpeg )
+ kernel_linux? ( virtual/libudev )
+ lilo? ( virtual/zlib:= )
+ opengl? ( virtual/opengl )
+ osmesa? ( media-libs/mesa[osmesa] )
+ pmmu? ( dev-libs/mpfr:0= )
+ usb? ( virtual/libusb:1 )
+"
+
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.1.0-conditional-installs.patch
+ "${FILESDIR}"/${PN}-1.1.0-libcwrap.patch
+ "${FILESDIR}"/${PN}-1.1.0-ar.patch
+ "${FILESDIR}"/${PN}-1.1.0-clang-16-register.patch
+ "${FILESDIR}"/${PN}-1.1.0-configure-clang16.patch
+ "${FILESDIR}"/${PN}-1.1.0-configure-bashisms.patch
+)
+
+ECONF_SOURCE="${S}"
+DOCS=()
+
+src_prepare() {
+ xdg_src_prepare
+ eautoreconf
+}
+
+src_configure() {
+ # configure probe fatally errors out since it tries to peek at LTO'ed code using grep
+ # https://bugs.gentoo.org/854510
+ # https://github.com/aranym/aranym/commit/52c56bba30ddea27a0a7179da89cac1c71228de6
+ #
+ # Fixed in git master. Try removing this on the next version bump.
+ filter-lto
+
+ tc-export_build_env
+ export CC_FOR_BUILD=$(tc-getBUILD_CC) CXX_FOR_BUILD=$(tc-getBUILD_CXX)
+
+ # standard must come last otherwise the aranym executable gets
+ # overwritten by the others.
+ MULTIBUILD_VARIANTS=(
+ $(usev jit)
+ $(usev pmmu)
+ $(usev standard)
+ )
+
+ multibuild_foreach_variant run_in_build_dir multibuild_src_configure
+}
+
+multibuild_src_configure() {
+ # jit-fpu doesn't work on some platforms. FPUs were optional in
+ # Ataris anyway so just disable.
+ local myconf=(
+ $(use_enable opengl)
+ $(use_enable usb usbhost)
+ $(use_enable osmesa nfosmesa)
+ $(use_enable jpeg nfjpeg)
+ $(use_enable clipboard nfclipbrd)
+ --disable-jit-fpu
+ )
+
+ if [[ ${MULTIBUILD_VARIANT} == jit ]]; then
+ myconf+=( --enable-jit-compiler )
+ else
+ myconf+=( --disable-jit-compiler )
+ fi
+
+ if [[ ${MULTIBUILD_VARIANT} == pmmu ]]; then
+ myconf+=( --enable-fullmmu $(use_enable lilo) )
+ else
+ myconf+=( --disable-fullmmu --disable-lilo )
+ fi
+
+ # Force use of SDL2 over SDL1.
+ ac_cv_path_SDL_CONFIG=no econf "${myconf[@]}"
+
+ # https://github.com/aranym/aranym/issues/54
+ echo "#define HAVE_X11_XLIB_H 1" >> config.h || die
+}
+
+src_compile() {
+ multibuild_foreach_variant run_in_build_dir default
+}
+
+src_install() {
+ multibuild_foreach_variant run_in_build_dir default
+ rm "${ED}"/usr/share/doc/${PF}/COPYING || die
+}
diff --git a/app-emulation/aranym/files/aranym-1.1.0-ar.patch b/app-emulation/aranym/files/aranym-1.1.0-ar.patch
new file mode 100644
index 000000000000..55026a626334
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-ar.patch
@@ -0,0 +1,24 @@
+From 9d8586fe8b0f210b2a2d3f5e6f710993015945aa Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sat, 16 Apr 2022 21:51:04 +0100
+Subject: [PATCH] Respect the AR environment variable when building
+
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 14eedb5f..8d425dee 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -371,6 +371,7 @@ AC_PROG_MAKE_SET
+ AC_PROG_INSTALL
+ AC_PROG_MKDIR_P
+ AC_PROG_RANLIB
++AM_PROG_AR
+ AC_PATH_PROG(PERL, perl)
+ AC_CHECK_TOOLS(WINDRES, [windres], :)
+ PKG_PROG_PKG_CONFIG
+--
+2.34.1
+
diff --git a/app-emulation/aranym/files/aranym-1.1.0-clang-16-register.patch b/app-emulation/aranym/files/aranym-1.1.0-clang-16-register.patch
new file mode 100644
index 000000000000..2adc5fb3c1fe
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-clang-16-register.patch
@@ -0,0 +1,219 @@
+https://bugs.gentoo.org/894446
+https://github.com/aranym/aranym/commit/e19e21151d5e394dd45d4db08e68245e86e32ab7
+https://github.com/aranym/aranym/commit/64414e43deebc665772481d802b6c1c88d752ac3
+
+From e19e21151d5e394dd45d4db08e68245e86e32ab7 Mon Sep 17 00:00:00 2001
+From: Thorsten Otto <admin@tho-otto.de>
+Date: Tue, 2 Aug 2022 18:12:19 +0200
+Subject: [PATCH] Remove obsolete register keywords
+
+--- a/src/blitter.cpp
++++ b/src/blitter.cpp
+@@ -114,8 +114,8 @@ void BLITTER::SM_UW(memptr addr, UW value) {
+ #define HOP_OPS(_fn_name,_op,_do_source_shift,_get_source_data,_shifted_hopd_data, _do_halftone_inc) \
+ static void _fn_name ( BLITTER& b ) \
+ { \
+- register unsigned int skew = (unsigned int) b.skewreg & 15; \
+- register unsigned int source_buffer=0; \
++ unsigned int skew = b.skewreg & 15; \
++ unsigned int source_buffer=0; \
+ if (b.hop & 1) { \
+ if (b.line_num & 0x20) \
+ b.halftone_curroffset = b.skewreg & 15; \
+@@ -127,7 +127,7 @@ static void _fn_name ( BLITTER& b ) \
+ b.halftone_direction = -1; \
+ } \
+ do \
+- { register UW x,dst_data,opd_data; \
++ { UW x,dst_data,opd_data; \
+ if (b.FXSR) \
+ { _do_source_shift; \
+ _get_source_data; \
+--- a/src/md5.cpp
++++ b/src/md5.cpp
+@@ -168,7 +168,7 @@ MD5::MD5Final(md5byte digest[16])
+ void
+ MD5::MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
+ {
+- register UWORD32 a, b, c, d;
++ UWORD32 a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+
+From 64414e43deebc665772481d802b6c1c88d752ac3 Mon Sep 17 00:00:00 2001
+From: Thorsten Otto <admin@tho-otto.de>
+Date: Tue, 9 Aug 2022 09:17:31 +0200
+Subject: [PATCH] Remove more obsolete register keywords
+
+--- a/src/disasm/disasm-builtin.cpp
++++ b/src/disasm/disasm-builtin.cpp
+@@ -277,7 +277,7 @@ static const char *const bitfieldtable[] =
+
+ static void ps(m68k_disasm_info *info, const char *str)
+ {
+- register char c;
++ char c;
+
+ while ((c = *str++) != '\0')
+ {
+@@ -486,7 +486,7 @@ static void oadi(m68k_disasm_info *info, int regnum)
+
+ static int os(m68k_disasm_info *info, int opcode)
+ {
+- register int size;
++ int size;
+
+ size = insize(opcode);
+ sputc('.');
+@@ -501,7 +501,7 @@ static int os(m68k_disasm_info *info, int opcode)
+
+ static int os2(m68k_disasm_info *info, int opcode)
+ {
+- register int size;
++ int size;
+
+ size = (opcode >> 9) & 3;
+ sputc('.');
+@@ -968,10 +968,10 @@ static void doextended(m68k_disasm_info *info, int opcode2, int srcr)
+
+ static void doea(m68k_disasm_info *info, int opcode, int size)
+ {
+- register int srcr;
+- register int opcode2;
++ int srcr;
++ int opcode2;
+ uae_s32 offset;
+- register uae_s32 adr;
++ uae_s32 adr;
+
+ srcr = srcreg(opcode);
+ switch (srcmod(opcode))
+@@ -1071,7 +1071,7 @@ static void doea(m68k_disasm_info *info, int opcode, int size)
+
+ static void reglist(m68k_disasm_info *info, int regmask)
+ {
+- register int regnum;
++ int regnum;
+ int liststart;
+ int lastreg;
+ int status;
+@@ -1113,8 +1113,8 @@ static void reglist(m68k_disasm_info *info, int regmask)
+
+ static int revbits(int mask, int n)
+ {
+- register int i;
+- register int newmask;
++ int i;
++ int newmask;
+
+ for (newmask = 0, i = n; i > 0; i--)
+ {
+@@ -1390,7 +1390,7 @@ static void group0(m68k_disasm_info *info, int opcode)
+
+ static void group11(m68k_disasm_info *info, int opcode)
+ {
+- register int size;
++ int size;
+
+ if ((opcode & 0x0100) != 0 && insize(opcode) != 3)
+ {
+@@ -1441,7 +1441,7 @@ static void group11(m68k_disasm_info *info, int opcode)
+
+ static void group1(m68k_disasm_info *info, int opcode)
+ {
+- register int size = 0;
++ int size = 0;
+
+ ps(info, "move");
+ if (dstmod(opcode) == 1)
+@@ -1475,7 +1475,7 @@ static void group1(m68k_disasm_info *info, int opcode)
+
+ static void group14(m68k_disasm_info *info, int opcode)
+ {
+- register short size;
++ short size;
+ unsigned int opcode2;
+ unsigned int bf;
+
+@@ -2069,7 +2069,7 @@ static enum fpu_size print_fpsize(m68k_disasm_info *info, int mask)
+ static void print_freglist(m68k_disasm_info *info, int regmask, int mode, bool cntl)
+ {
+ const char *const * regs;
+- register int regnum;
++ int regnum;
+ int liststart;
+ int lastreg;
+ int status;
+@@ -3011,8 +3011,8 @@ static void pspreg(m68k_disasm_info *info, int mask)
+
+ static void group4(m68k_disasm_info *info, int opcode)
+ {
+- register int mask;
+- register int size;
++ int mask;
++ int size;
+
+ if (opcode & 0x0100)
+ {
+@@ -3540,7 +3540,7 @@ static void group4(m68k_disasm_info *info, int opcode)
+
+ static void group5(m68k_disasm_info *info, int opcode)
+ {
+- register uae_s32 adr;
++ uae_s32 adr;
+
+ if (insize(opcode) == 3)
+ {
+@@ -3603,9 +3603,9 @@ static void group5(m68k_disasm_info *info, int opcode)
+
+ static void group6(m68k_disasm_info *info, int opcode)
+ {
+- register uae_s32 adr;
+- register int cond;
+- register signed char dist;
++ uae_s32 adr;
++ int cond;
++ signed char dist;
+
+ /* 0110 cccc dddddddd */
+ switch (cond = (opcode >> 8) & 0x000f)
+@@ -3686,7 +3686,7 @@ static void group7(m68k_disasm_info *info, int opcode)
+
+ static void g812(m68k_disasm_info *info, int opcode, const char *andor, const char *muldiv, const char *as)
+ {
+- register int size;
++ int size;
+
+ info->num_oper = 2;
+ if (dstmod(opcode) == 3)
+@@ -3772,7 +3772,7 @@ static void group8(m68k_disasm_info *info, int opcode)
+
+ static void group12(m68k_disasm_info *info, int opcode)
+ {
+- register int d5;
++ int d5;
+
+ if ((d5 = (opcode >> 3) & 0x003f) == 0x0028)
+ {
+@@ -3813,7 +3813,7 @@ static void group12(m68k_disasm_info *info, int opcode)
+
+ static void g913(m68k_disasm_info *info, int opcode, const char *addsub)
+ {
+- register int size;
++ int size;
+
+ ps(info, addsub);
+ if ((opcode & 0x0100) != 0 && insize(opcode) != 3 && ((opcode >> 4) & 3) == 0)
+@@ -4125,8 +4125,8 @@ static void (*const grphdlrs[])(m68k_disasm_info *, int) = {
+
+ int m68k_disasm_builtin(m68k_disasm_info *info)
+ {
+- register int opcode;
+- register void (*hdlr)(m68k_disasm_info *info, int opcode);
++ int opcode;
++ void (*hdlr)(m68k_disasm_info *info, int opcode);
+ unsigned int insn_size;
+ struct priv_data *priv;
+
+
diff --git a/app-emulation/aranym/files/aranym-1.1.0-conditional-installs.patch b/app-emulation/aranym/files/aranym-1.1.0-conditional-installs.patch
new file mode 100644
index 000000000000..20ba1c1c4a0e
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-conditional-installs.patch
@@ -0,0 +1,93 @@
+From 944ae098635d8bd4320b2acafc5746448e241db6 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Wed, 4 Dec 2019 23:31:04 +0000
+Subject: [PATCH] Reuse icon file and install normal/JIT/MMU files
+ conditionally
+
+---
+ Makefile.am | 19 ++++++++++---------
+ contrib/aranym-jit.desktop | 2 +-
+ contrib/aranym-mmu.desktop | 2 +-
+ doc/Makefile.am | 8 +++++++-
+ 4 files changed, 19 insertions(+), 12 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 9fbc64b6..9dc7b71b 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -79,18 +79,19 @@ install-data-local:
+ for s in 32 48; do \
+ $(mkinstalldirs) "${DESTDIR}${datadir}/icons/hicolor/$${s}x$${s}/apps/"; \
+ $(INSTALL_DATA) $(top_srcdir)/contrib/icon-$${s}.png "${DESTDIR}${datadir}/icons/hicolor/$${s}x$${s}/apps/aranym.png"; \
+- $(INSTALL_DATA) $(top_srcdir)/contrib/icon-$${s}.png "${DESTDIR}${datadir}/icons/hicolor/$${s}x$${s}/apps/aranym-jit.png"; \
+- $(INSTALL_DATA) $(top_srcdir)/contrib/icon-$${s}.png "${DESTDIR}${datadir}/icons/hicolor/$${s}x$${s}/apps/aranym-mmu.png"; \
+ done
+ $(mkinstalldirs) "${DESTDIR}${datadir}/pixmaps"
+- rm -f "${DESTDIR}${datadir}/pixmaps/aranym"*.png
+- ln -s ../icons/hicolor/32x32/apps/aranym.png "${DESTDIR}${datadir}/pixmaps/aranym.png"
+- ln -s ../icons/hicolor/32x32/apps/aranym.png "${DESTDIR}${datadir}/pixmaps/aranym-jit.png"
+- ln -s ../icons/hicolor/32x32/apps/aranym.png "${DESTDIR}${datadir}/pixmaps/aranym-mmu.png"
++ ln -sf ../icons/hicolor/32x32/apps/aranym.png "${DESTDIR}${datadir}/pixmaps/aranym.png"
+ $(mkinstalldirs) "${DESTDIR}${datadir}/applications"
+- for name in aranym aranym-jit aranym-mmu; do \
+- $(INSTALL_DATA) "$(top_srcdir)/contrib/$${name}.desktop" "${DESTDIR}${datadir}/applications/$${name}.desktop"; \
+- done
++if USE_JIT
++ $(INSTALL_DATA) "$(top_srcdir)/contrib/aranym-jit.desktop" "${DESTDIR}${datadir}/applications/aranym-jit.desktop"
++else
++if FULLMMU
++ $(INSTALL_DATA) "$(top_srcdir)/contrib/aranym-mmu.desktop" "${DESTDIR}${datadir}/applications/aranym-mmu.desktop"
++else
++ $(INSTALL_DATA) "$(top_srcdir)/contrib/aranym.desktop" "${DESTDIR}${datadir}/applications/aranym.desktop"
++endif
++endif
+
+ uninstall-local:
+ rm -f $(DESTDIR)$(docdir)/changelog
+diff --git a/contrib/aranym-jit.desktop b/contrib/aranym-jit.desktop
+index 1ca2c55a..5a4ee582 100644
+--- a/contrib/aranym-jit.desktop
++++ b/contrib/aranym-jit.desktop
+@@ -3,7 +3,7 @@ Encoding=UTF-8
+ Name=ARAnyM JIT
+ Comment=Virtual Machine with JIT CPU compiler for max speed
+ Exec=aranym-jit
+-Icon=aranym-jit
++Icon=aranym
+ Terminal=false
+ Type=Application
+ Categories=System;Emulator;
+diff --git a/contrib/aranym-mmu.desktop b/contrib/aranym-mmu.desktop
+index 610d0e52..2b841f23 100644
+--- a/contrib/aranym-mmu.desktop
++++ b/contrib/aranym-mmu.desktop
+@@ -3,7 +3,7 @@ Encoding=UTF-8
+ Name=ARAnyM MMU
+ Comment=Virtual Machine with MMU for FreeMiNT and Linux-m68k
+ Exec=aranym-mmu
+-Icon=aranym-mmu
++Icon=aranym
+ Terminal=false
+ Type=Application
+ Categories=System;Emulator;
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 3f466ef8..f0a0688e 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,6 +1,12 @@
+ man1dir = $(mandir)/man1
+
+-man1_MANS = aranym.1 aranym-mmu.1 aranym-jit.1
++man1_MANS = aranym.1
++if USE_JIT
++man1_MANS += aranym-jit.1
++endif
++if FULLMMU
++man1_MANS += aranym-mmu.1
++endif
+ if NEED_ARATAPIF
+ man1_MANS += aratapif.1
+ endif
+--
+2.24.0
+
diff --git a/app-emulation/aranym/files/aranym-1.1.0-configure-bashisms.patch b/app-emulation/aranym/files/aranym-1.1.0-configure-bashisms.patch
new file mode 100644
index 000000000000..f2a453095a52
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-configure-bashisms.patch
@@ -0,0 +1,37 @@
+https://github.com/aranym/aranym/pull/102
+
+From 1a45b77ee2eaabc53fef0794c0e3a64a7c41683e Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Sun, 19 Mar 2023 02:05:09 +0000
+Subject: [PATCH] configure.ac: fix bashisms
+
+configure scripts need to be runnable with a POSIX-compliant /bin/sh.
+
+On many (but not all!) systems, /bin/sh is provided by Bash, so errors
+like this aren't spotted. Notably Debian defaults to /bin/sh provided
+by dash which doesn't tolerate such bashisms as '=='.
+
+This retains compatibility with bash.
+--- a/configure.ac
++++ b/configure.ac
+@@ -1714,7 +1714,7 @@ SDL_CFLAGS=
+ SDL_LIBS=
+ no_sdl=yes
+ no_sdl2=yes
+-if test "$OS_TYPE" == darwin -a "$WITH_FINK" = no; then
++if test "$OS_TYPE" = darwin -a "$WITH_FINK" = no; then
+ ARANYM_CHECK_FRAMEWORK(SDL, [])
+ if test "$have_framework_SDL" = yes ; then
+ ARANYM_CHECK_FRAMEWORK_LOCATION(SDL)
+@@ -1781,7 +1781,7 @@ SDL_LIBS="$SDL_LIBS -lpthread"
+ AM_CONDITIONAL([ENABLE_SDL2], test "$enable_sdl2" = yes)
+ #
+ # SDL2 on macOS needs 10.6 or above
+-if test "$enable_sdl2" = yes -a "$OS_TYPE" == darwin; then
++if test "$enable_sdl2" = yes -a "$OS_TYPE" = darwin; then
+ export MACOSX_DEPLOYMENT_TARGET=10.6
+ fi
+
+--
+2.40.0
+
diff --git a/app-emulation/aranym/files/aranym-1.1.0-configure-clang16.patch b/app-emulation/aranym/files/aranym-1.1.0-configure-clang16.patch
new file mode 100644
index 000000000000..66d2c091b860
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-configure-clang16.patch
@@ -0,0 +1,30 @@
+https://github.com/aranym/aranym/pull/102
+
+From ef9ba74fcbf868aeb1b0e0b02e53775a14cda0f7 Mon Sep 17 00:00:00 2001
+From: Sam James <sam@gentoo.org>
+Date: Sun, 19 Mar 2023 01:56:56 +0000
+Subject: [PATCH] configure.ac: fix -Wimplicit-function-declaration in TUN/TAP
+ test
+
+Clang 16 makes -Wimplicit-function-declaration an error by default.
+
+Unfortunately, this can lead to misconfiguration or miscompilation of software as configure
+tests may then return the wrong result.
+
+For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
+or the (new) c-std-porting mailing list [3].
+
+[0] https://lwn.net/Articles/913505/
+[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
+[2] https://wiki.gentoo.org/wiki/Modern_C_porting
+[3] hosted at lists.linux.dev.
+--- a/configure.ac
++++ b/configure.ac
+@@ -539,6 +539,7 @@ AC_CACHE_CHECK([whether TUN/TAP is supported],
+ #include <net/if.h>
+ #include <net/if_tun.h>
+ #endif
++ #include <string.h>
+ ], [
+ struct ifreq ifr;
+ memset(&ifr, 0, sizeof(ifr));
diff --git a/app-emulation/aranym/files/aranym-1.1.0-libcwrap.patch b/app-emulation/aranym/files/aranym-1.1.0-libcwrap.patch
new file mode 100644
index 000000000000..39ef32c7cc41
--- /dev/null
+++ b/app-emulation/aranym/files/aranym-1.1.0-libcwrap.patch
@@ -0,0 +1,24 @@
+From baa00c51d3cd63602912ee1b252fa774a43b042f Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sat, 16 Apr 2022 10:41:44 +0100
+Subject: [PATCH] Use libcwrap.h specifically with glibc, not just Linux, to
+ fix musl
+
+---
+ src/include/linux/libcwrap.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/include/linux/libcwrap.h b/src/include/linux/libcwrap.h
+index f68bafb1..9c5c6b8e 100644
+--- a/src/include/linux/libcwrap.h
++++ b/src/include/linux/libcwrap.h
+@@ -1,5 +1,5 @@
+ /* glibc bindings for target ABI version glibc 2.11 */
+-#if defined(__linux__) && !defined (__LIBC_CUSTOM_BINDINGS_H__) && !defined(__ANDROID__)
++#if defined(__GLIBC__) && defined(__linux__) && !defined (__LIBC_CUSTOM_BINDINGS_H__) && !defined(__ANDROID__)
+
+ #if defined (__cplusplus)
+ extern "C" {
+--
+2.34.1
+
diff --git a/app-emulation/aranym/metadata.xml b/app-emulation/aranym/metadata.xml
new file mode 100644
index 000000000000..d92be110eb21
--- /dev/null
+++ b/app-emulation/aranym/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chewi@gentoo.org</email>
+ <name>James Le Cuirot</name>
+ </maintainer>
+ <use>
+ <flag name="clipboard">Enable bidirectional clipboard transfer between the host and FreeMiNT</flag>
+ <flag name="jit">Build Just-In-Time compiler variant with increased performance</flag>
+ <flag name="lilo">Enable support for directly booting kernels such as Linux</flag>
+ <flag name="osmesa">Allow images to be rendered in memory using the host CPU</flag>
+ <flag name="pmmu">Build full PMMU variant, required for running mainline Linux</flag>
+ <flag name="standard">Build standard (no JIT or PMMU) variant</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/bochs/Manifest b/app-emulation/bochs/Manifest
new file mode 100644
index 000000000000..eb07ddcfa9df
--- /dev/null
+++ b/app-emulation/bochs/Manifest
@@ -0,0 +1 @@
+DIST bochs-3.0.tar.gz 5931351 BLAKE2B 33ceb66df207fd6ce50578f5572dcae387b1f3e761d55f0debf9d44b47b03712a0bcc61afef477831a94d44576edca2879335dac0bf31ba83495ab489d7a8f59 SHA512 93a01cae08898d5efff410f875aef8daeac65b377536ca79ffdbdb176051be21354fdb396e49034ad7834a7cdd1fc78cca44086d978abe6ff9bce589b6372aa8
diff --git a/app-emulation/bochs/bochs-3.0.ebuild b/app-emulation/bochs/bochs-3.0.ebuild
new file mode 100644
index 000000000000..5aec033c4ec9
--- /dev/null
+++ b/app-emulation/bochs/bochs-3.0.ebuild
@@ -0,0 +1,97 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="LGPL-ed pc emulator"
+HOMEPAGE="http://bochs.sourceforge.io/"
+MY_P="REL_$(ver_cut 1)_$(ver_cut 2)_FINAL"
+SRC_URI="https://github.com/bochs-emu/Bochs/archive/refs/tags/${MY_P}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/Bochs-${MY_P}/bochs"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~ppc ~sparc ~x86"
+
+IUSE="3dnow avx debugger doc gdb ncurses readline sdl +smp vnc X +x86-64"
+REQUIRED_USE="
+ avx? ( x86-64 )
+ gdb? ( !debugger !smp )
+ debugger? ( !gdb )
+"
+
+RDEPEND="
+ ncurses? ( sys-libs/ncurses:= )
+ readline? ( sys-libs/readline:= )
+ sdl? ( media-libs/libsdl )
+ X? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libXpm
+ )
+"
+DEPEND="${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ >=app-text/opensp-1.5
+ doc? ( app-text/docbook-sgml-utils )
+"
+
+src_prepare() {
+ default
+
+ sed -i "s:^docdir.*:docdir = ${EPREFIX}/usr/share/doc/${PF}:" \
+ Makefile.in || die
+ sed -i 's:| $(GZIP_BIN) -c > $(DESTDIR)$(man1dir)/$$i.1.gz:> $(DESTDIR)$(man1dir)/$$i.1:' Makefile.in || die
+ sed -i 's:$$i.1.gz:$$i.1:' Makefile.in || die
+ sed -i 's:| $(GZIP_BIN) -c > $(DESTDIR)$(man5dir)/$$i.5.gz:> $(DESTDIR)$(man5dir)/$$i.5:' Makefile.in || die
+ sed -i 's:$$i.5.gz:$$i.5:' Makefile.in || die
+}
+
+src_configure() {
+ econf \
+ --enable-all-optimizations \
+ --enable-idle-hack \
+ --enable-cdrom \
+ --enable-clgd54xx \
+ --enable-cpu-level=6 \
+ --enable-e1000 \
+ --enable-gameport \
+ --enable-iodebug \
+ --enable-monitor-mwait \
+ --enable-ne2000 \
+ --enable-plugins \
+ --enable-pci \
+ --enable-pnic \
+ --enable-raw-serial \
+ --enable-sb16=linux \
+ --enable-usb \
+ --enable-usb-ohci \
+ --enable-usb-xhci \
+ --prefix=/usr \
+ --with-nogui \
+ --without-wx \
+ $(use_enable 3dnow) \
+ $(use_enable avx) \
+ $(use_enable avx evex) \
+ $(use_enable debugger) \
+ $(use_enable doc docbook) \
+ $(use_enable gdb gdb-stub) \
+ $(use_enable readline) \
+ $(use_enable smp) \
+ $(use_enable x86-64) \
+ $(use_with ncurses term) \
+ $(use_with sdl) \
+ $(use_with vnc rfb) \
+ $(use_with X x) \
+ $(use_with X x11)
+}
+
+src_install() {
+ default
+
+ # remove unneeded .la files the plugins load fine even without them.
+ find "${ED}" -name '*.la' -delete || die
+}
diff --git a/app-emulation/bochs/bochs-9999.ebuild b/app-emulation/bochs/bochs-9999.ebuild
new file mode 100644
index 000000000000..3a8f8576c5fb
--- /dev/null
+++ b/app-emulation/bochs/bochs-9999.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit git-r3
+
+DESCRIPTION="LGPL-ed pc emulator"
+HOMEPAGE="http://bochs.sourceforge.net/"
+#SRC_URI="https://downloads.sourceforge.net/bochs/${P}.tar.gz"
+EGIT_REPO_URI="https://github.com/bochs-emu/Bochs.git/"
+S=${WORKDIR}/${P}/bochs
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+IUSE="3dnow avx debugger doc gdb ncurses readline sdl +smp vnc X +x86-64"
+REQUIRED_USE="
+ avx? ( x86-64 )
+ gdb? ( !debugger !smp )
+ debugger? ( !gdb )
+"
+
+RDEPEND="
+ ncurses? ( sys-libs/ncurses:= )
+ readline? ( sys-libs/readline:= )
+ sdl? ( media-libs/libsdl )
+ X? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libXpm
+ )
+"
+DEPEND="${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ >=app-text/opensp-1.5
+ doc? ( app-text/docbook-sgml-utils )
+"
+
+src_prepare() {
+ default
+
+ sed -i "s:^docdir.*:docdir = ${EPREFIX}/usr/share/doc/${PF}:" \
+ Makefile.in || die
+}
+
+src_configure() {
+ econf \
+ --enable-all-optimizations \
+ --enable-idle-hack \
+ --enable-cdrom \
+ --enable-clgd54xx \
+ --enable-cpu-level=6 \
+ --enable-e1000 \
+ --enable-gameport \
+ --enable-iodebug \
+ --enable-monitor-mwait \
+ --enable-ne2000 \
+ --enable-plugins \
+ --enable-pci \
+ --enable-pnic \
+ --enable-raw-serial \
+ --enable-sb16=linux \
+ --enable-usb \
+ --enable-usb-ohci \
+ --enable-usb-xhci \
+ --prefix=/usr \
+ --with-nogui \
+ --without-wx \
+ $(use_enable 3dnow) \
+ $(use_enable avx) \
+ $(use_enable debugger) \
+ $(use_enable doc docbook) \
+ $(use_enable gdb gdb-stub) \
+ $(use_enable readline) \
+ $(use_enable smp) \
+ $(use_enable x86-64) \
+ $(use_with ncurses term) \
+ $(use_with sdl) \
+ $(use_with vnc rfb) \
+ $(use_with X x) \
+ $(use_with X x11)
+}
diff --git a/app-emulation/bochs/metadata.xml b/app-emulation/bochs/metadata.xml
new file mode 100644
index 000000000000..8e353aae5896
--- /dev/null
+++ b/app-emulation/bochs/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>lu_zero@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="3dnow">Enable support for emulating 3DNow! instructions (incomplete)</flag>
+ <flag name="avx">Enable support for emulating Advanced Vector Extensions (AVX)</flag>
+ <flag name="debugger">Enable debugger (slows down emulation)</flag>
+ <flag name="gdb">Enable support for the remote GDB stub</flag>
+ <flag name="x86-64">Enable support for emulation of 64-bit CPUs</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:bochs_project:bochs</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/cloud-init/Manifest b/app-emulation/cloud-init/Manifest
new file mode 100644
index 000000000000..7559439b8e29
--- /dev/null
+++ b/app-emulation/cloud-init/Manifest
@@ -0,0 +1,2 @@
+DIST cloud-init-24.4.tar.gz 1871271 BLAKE2B 438d1296a637211d7a43c9969de6d432b1ab787beab7f617426cdeab67d1c1df28e1adfa610af4dad44c7f46850954ad3d1856bfff143648da0f87fbc4ebdefc SHA512 1c6901497848d8be29ffb0a7bcbbd2df89d0a2b35a65c33f3db9562a544d9e832308f448dcc24a555791b40f00aca32e5d25b8ad3ccb5e90dda6268e5a125f9c
+DIST cloud-init-25.1.tar.gz 1892801 BLAKE2B 7efc5cb8d1f3c63c7b22660873f8c62d49a32d4f09a16df41777a6e41555606ebb5186c29f5d20396dfabc190f2034f88517076c5e342cb8bc04249bbfcee4a4 SHA512 2a40234e92bd27e12a48ab6d62c638599d82deaaf9b69d9ba2deed6a8234e16fcd5e35e995c1880d61c2a60fbea7699ae73ea849f2f4153067ef4aa8af1b4adf
diff --git a/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild b/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild
new file mode 100644
index 000000000000..48ddfb02a2e6
--- /dev/null
+++ b/app-emulation/cloud-init/cloud-init-24.4-r4.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo python-single-r1 udev
+
+DESCRIPTION="Cloud instance initialisation magic"
+HOMEPAGE="https://launchpad.net/cloud-init"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://git.launchpad.net/cloud-init"
+else
+ SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
+ KEYWORDS="amd64 arm64 ~loong ppc64 x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="selinux test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+ $(python_gen_cond_dep '
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/oauthlib[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ >=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/jsonpatch[${PYTHON_USEDEP}]
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ dev-python/netifaces[${PYTHON_USEDEP}]
+ ')
+"
+BDEPEND="
+ ${COMMON_DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/responses[${PYTHON_USEDEP}]
+ ')
+ )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ ${PYTHON_DEPS}
+ net-analyzer/macchanger
+ net-analyzer/openbsd-netcat
+ sys-apps/iproute2
+ sys-fs/growpart
+ virtual/logger
+ selinux? ( sec-policy/selinux-cloudinit )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-24.2-systemd.patch"
+ "${FILESDIR}/${PN}-24.4-netcat.patch"
+)
+
+EPYTEST_IGNORE=(
+ # Can't find file
+ tests/unittests/config/test_apt_configure_sources_list_v1.py
+ tests/unittests/config/test_apt_configure_sources_list_v3.py
+ # PORTAGE_TMPDIR too long for unix sockets
+ tests/unittests/test_all_stages.py
+ # TODO
+ tests/unittests/config/test_schema.py
+)
+
+src_prepare() {
+ default
+
+ # Fix location of documentation installation
+ sed -i "s:USR + \"/share/doc/cloud-init:USR + \"/share/doc/${PF}:" setup.py || die
+
+ if [[ ${PV} == *9999 ]] ; then
+ sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
+ fi
+}
+
+src_compile() {
+ edo ${EPYTHON} setup.py build
+}
+
+src_test() {
+ epytest
+}
+
+src_install() {
+ edo ${EPYTHON} setup.py install \
+ --prefix="${EPREFIX}/usr" \
+ --root="${D}" \
+ --init-system=sysvinit_openrc,systemd \
+ --distro gentoo
+ python_optimize
+
+ keepdir /etc/cloud
+
+ # installs as non-executable
+ chmod +x "${D}"/etc/init.d/* || die
+}
+
+pkg_prerm() {
+ udev_reload
+}
+
+pkg_postinst() {
+ udev_reload
+
+ elog "cloud-init-local needs to be run in the boot runlevel because it"
+ elog "modifies services in the default runlevel. When a runlevel is started"
+ elog "it is cached, so modifications that happen to the current runlevel"
+ elog "while you are in it are not acted upon."
+}
diff --git a/app-emulation/cloud-init/cloud-init-25.1.ebuild b/app-emulation/cloud-init/cloud-init-25.1.ebuild
new file mode 100644
index 000000000000..1ace7c6fae4e
--- /dev/null
+++ b/app-emulation/cloud-init/cloud-init-25.1.ebuild
@@ -0,0 +1,119 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo python-single-r1 udev
+
+DESCRIPTION="Cloud instance initialisation magic"
+HOMEPAGE="https://launchpad.net/cloud-init"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://git.launchpad.net/cloud-init"
+else
+ SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
+ KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="selinux test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+ $(python_gen_cond_dep '
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/oauthlib[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ >=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/jsonpatch[${PYTHON_USEDEP}]
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ dev-python/netifaces[${PYTHON_USEDEP}]
+ ')
+"
+BDEPEND="
+ ${COMMON_DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/responses[${PYTHON_USEDEP}]
+ ')
+ )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ ${PYTHON_DEPS}
+ net-analyzer/macchanger
+ net-analyzer/openbsd-netcat
+ sys-apps/iproute2
+ sys-fs/growpart
+ virtual/logger
+ selinux? ( sec-policy/selinux-cloudinit )
+"
+
+EPYTEST_IGNORE=(
+ # Can't find file
+ tests/unittests/config/test_apt_configure_sources_list_v1.py
+ tests/unittests/config/test_apt_configure_sources_list_v3.py
+ # PORTAGE_TMPDIR too long for unix sockets
+ tests/unittests/test_all_stages.py
+ # TODO
+ tests/unittests/config/test_schema.py
+)
+
+src_prepare() {
+ default
+
+ # Fix location of documentation installation
+ sed -i "s:USR + \"/share/doc/cloud-init:USR + \"/share/doc/${PF}:" setup.py || die
+
+ if [[ ${PV} == *9999 ]] ; then
+ sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
+ fi
+}
+
+src_compile() {
+ edo ${EPYTHON} setup.py build
+}
+
+src_test() {
+ epytest
+}
+
+src_install() {
+ edo ${EPYTHON} setup.py install \
+ --prefix="${EPREFIX}/usr" \
+ --root="${D}" \
+ --init-system=sysvinit_openrc,systemd \
+ --distro gentoo
+ python_optimize
+
+ keepdir /etc/cloud
+
+ # installs as non-executable
+ chmod +x "${D}"/etc/init.d/* || die
+}
+
+pkg_prerm() {
+ udev_reload
+}
+
+pkg_postinst() {
+ udev_reload
+
+ elog "cloud-init-local needs to be run in the boot runlevel because it"
+ elog "modifies services in the default runlevel. When a runlevel is started"
+ elog "it is cached, so modifications that happen to the current runlevel"
+ elog "while you are in it are not acted upon."
+}
diff --git a/app-emulation/cloud-init/cloud-init-9999.ebuild b/app-emulation/cloud-init/cloud-init-9999.ebuild
new file mode 100644
index 000000000000..663cf91818d6
--- /dev/null
+++ b/app-emulation/cloud-init/cloud-init-9999.ebuild
@@ -0,0 +1,119 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo python-single-r1 udev
+
+DESCRIPTION="Cloud instance initialisation magic"
+HOMEPAGE="https://launchpad.net/cloud-init"
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://git.launchpad.net/cloud-init"
+else
+ SRC_URI="https://launchpad.net/${PN}/trunk/${PV}/+download/${P}.tar.gz"
+ KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~x86"
+fi
+
+LICENSE="GPL-3"
+SLOT="0"
+IUSE="selinux test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+COMMON_DEPEND="
+ $(python_gen_cond_dep '
+ dev-python/jinja2[${PYTHON_USEDEP}]
+ dev-python/oauthlib[${PYTHON_USEDEP}]
+ dev-python/pyserial[${PYTHON_USEDEP}]
+ >=dev-python/configobj-5.0.2[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ dev-python/jsonpatch[${PYTHON_USEDEP}]
+ dev-python/jsonschema[${PYTHON_USEDEP}]
+ dev-python/netifaces[${PYTHON_USEDEP}]
+ ')
+"
+BDEPEND="
+ ${COMMON_DEPEND}
+ $(python_gen_cond_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/mock[${PYTHON_USEDEP}]
+ dev-python/passlib[${PYTHON_USEDEP}]
+ dev-python/pytest[${PYTHON_USEDEP}]
+ dev-python/pytest-mock[${PYTHON_USEDEP}]
+ dev-python/responses[${PYTHON_USEDEP}]
+ ')
+ )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ ${PYTHON_DEPS}
+ net-analyzer/macchanger
+ net-analyzer/openbsd-netcat
+ sys-apps/iproute2
+ sys-fs/growpart
+ virtual/logger
+ selinux? ( sec-policy/selinux-cloudinit )
+"
+
+EPYTEST_IGNORE=(
+ # Can't find file
+ tests/unittests/config/test_apt_configure_sources_list_v1.py
+ tests/unittests/config/test_apt_configure_sources_list_v3.py
+ # PORTAGE_TMPDIR too long for unix sockets
+ tests/unittests/test_all_stages.py
+ # TODO
+ tests/unittests/config/test_schema.py
+)
+
+src_prepare() {
+ default
+
+ # Fix location of documentation installation
+ sed -i "s:USR + \"/share/doc/cloud-init:USR + \"/share/doc/${PF}:" setup.py || die
+
+ if [[ ${PV} == *9999 ]] ; then
+ sed -i 's/version=get_version(),/version=9999,/g' setup.py || die
+ fi
+}
+
+src_compile() {
+ edo ${EPYTHON} setup.py build
+}
+
+src_test() {
+ epytest
+}
+
+src_install() {
+ edo ${EPYTHON} setup.py install \
+ --prefix="${EPREFIX}/usr" \
+ --root="${D}" \
+ --init-system=sysvinit_openrc,systemd \
+ --distro gentoo
+ python_optimize
+
+ keepdir /etc/cloud
+
+ # installs as non-executable
+ chmod +x "${D}"/etc/init.d/* || die
+}
+
+pkg_prerm() {
+ udev_reload
+}
+
+pkg_postinst() {
+ udev_reload
+
+ elog "cloud-init-local needs to be run in the boot runlevel because it"
+ elog "modifies services in the default runlevel. When a runlevel is started"
+ elog "it is cached, so modifications that happen to the current runlevel"
+ elog "while you are in it are not acted upon."
+}
diff --git a/app-emulation/cloud-init/files/cloud-init-24.2-systemd.patch b/app-emulation/cloud-init/files/cloud-init-24.2-systemd.patch
new file mode 100644
index 000000000000..62840bafe2d3
--- /dev/null
+++ b/app-emulation/cloud-init/files/cloud-init-24.2-systemd.patch
@@ -0,0 +1,152 @@
+From 3f97be6df5c59339e09ff50e97a94869c29741d0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <dilfridge@gentoo.org>
+Date: Fri, 6 Dec 2024 22:46:31 +0100
+Subject: [PATCH] feat(gentoo): Add compatibility for Gentoo with systemd
+ (#5918)
+
+---
+ cloudinit/distros/gentoo.py | 37 +++++++++++++++++---------
+ tests/unittests/distros/test_gentoo.py | 34 ++++++++++++++++-------
+ 2 files changed, 48 insertions(+), 23 deletions(-)
+
+diff --git a/cloudinit/distros/gentoo.py b/cloudinit/distros/gentoo.py
+index 5ab41bbd9db..94fa6f7aa01 100644
+--- a/cloudinit/distros/gentoo.py
++++ b/cloudinit/distros/gentoo.py
+@@ -1,8 +1,10 @@
+ # Copyright (C) 2014 Rackspace, US Inc.
+ # Copyright (C) 2016 Matthew Thode.
++# Copyright (C) 2024 Andreas K. Huettel
+ #
+ # Author: Nate House <nathan.house@rackspace.com>
+ # Author: Matthew Thode <prometheanfire@gentoo.org>
++# Author: Andreas K. Huettel <dilfridge@gentoo.org>
+ #
+ # This file is part of cloud-init. See LICENSE file for license information.
+
+@@ -18,7 +20,6 @@
+
+ class Distro(distros.Distro):
+ locale_gen_fn = "/etc/locale.gen"
+- hostname_conf_fn = "/etc/conf.d/hostname"
+ default_locale = "en_US.UTF-8"
+
+ # C.UTF8 makes sense to generate, but is not selected
+@@ -27,20 +28,23 @@ class Distro(distros.Distro):
+
+ def __init__(self, name, cfg, paths):
+ distros.Distro.__init__(self, name, cfg, paths)
++
++ if distros.uses_systemd():
++ self.hostname_conf_fn = "/etc/hostname"
++ else:
++ self.hostname_conf_fn = "/etc/conf.d/hostname"
++
+ # This will be used to restrict certain
+ # calls from repeatedly happening (when they
+ # should only happen say once per instance...)
+ self._runner = helpers.Runners(paths)
+ self.osfamily = "gentoo"
+- # Fix sshd restarts
+- cfg["ssh_svcname"] = "/etc/init.d/sshd"
+- if distros.uses_systemd():
+- LOG.error("Cloud-init does not support systemd with gentoo")
++ if not distros.uses_systemd():
++ # Fix sshd restarts (openrc-specific?)
++ cfg["ssh_svcname"] = "/etc/init.d/sshd"
+
+ def apply_locale(self, _, out_fn=None):
+- """rc-only - not compatible with systemd
+-
+- Locales need to be added to /etc/locale.gen and generated prior
++ """Locales need to be added to /etc/locale.gen and generated prior
+ to selection. Default to en_US.UTF-8 for simplicity.
+ """
+ util.write_file(self.locale_gen_fn, "\n".join(self.locales), mode=644)
+@@ -48,7 +52,7 @@ def apply_locale(self, _, out_fn=None):
+ # generate locales
+ subp.subp(["locale-gen"], capture=False)
+
+- # select locale
++ # select locale, works for both openrc and systemd
+ subp.subp(
+ ["eselect", "locale", "set", self.default_locale], capture=False
+ )
+@@ -77,10 +81,17 @@ def _write_hostname(self, hostname, filename):
+ if not conf:
+ conf = HostnameConf("")
+
+- # Many distro's format is the hostname by itself, and that is the
+- # way HostnameConf works but gentoo expects it to be in
+- # hostname="the-actual-hostname"
+- conf.set_hostname('hostname="%s"' % hostname)
++ if distros.uses_systemd():
++ # Gentoo uses the same format for /etc/hostname as everyone else-
++ # only the hostname by itself. Works for openrc and systemd, but
++ # openrc has its own config file and /etc/hostname is generated.
++ conf.set_hostname(hostname)
++ else:
++ # Openrc generates /etc/hostname from /etc/conf.d/hostname with the
++ # differing format
++ # hostname="the-actual-hostname"
++ conf.set_hostname('hostname="%s"' % hostname)
++
+ util.write_file(filename, str(conf), 0o644)
+
+ def _read_system_hostname(self):
+diff --git a/tests/unittests/distros/test_gentoo.py b/tests/unittests/distros/test_gentoo.py
+index a307b9a29ba..979e6d82638 100644
+--- a/tests/unittests/distros/test_gentoo.py
++++ b/tests/unittests/distros/test_gentoo.py
+@@ -2,27 +2,41 @@
+
+ from cloudinit import atomic_helper, util
+ from tests.unittests.distros import _get_distro
+-from tests.unittests.helpers import CiTestCase
++from tests.unittests.helpers import CiTestCase, mock
+
+
+ class TestGentoo(CiTestCase):
+- def test_write_hostname(self):
++ def test_write_hostname(self, whatever=False):
+ distro = _get_distro("gentoo")
+ hostname = "myhostname"
+ hostfile = self.tmp_path("hostfile")
+ distro._write_hostname(hostname, hostfile)
+- self.assertEqual(
+- 'hostname="myhostname"\n', util.load_text_file(hostfile)
+- )
++ if distro.uses_systemd():
++ self.assertEqual("myhostname\n", util.load_text_file(hostfile))
++ else:
++ self.assertEqual(
++ 'hostname="myhostname"\n', util.load_text_file(hostfile)
++ )
+
+- def test_write_existing_hostname_with_comments(self):
++ def test_write_existing_hostname_with_comments(self, whatever=False):
+ distro = _get_distro("gentoo")
+ hostname = "myhostname"
+ contents = '#This is the hostname\nhostname="localhost"'
+ hostfile = self.tmp_path("hostfile")
+ atomic_helper.write_file(hostfile, contents, omode="w")
+ distro._write_hostname(hostname, hostfile)
+- self.assertEqual(
+- '#This is the hostname\nhostname="myhostname"\n',
+- util.load_text_file(hostfile),
+- )
++ if distro.uses_systemd():
++ self.assertEqual(
++ "#This is the hostname\nmyhostname\n",
++ util.load_text_file(hostfile),
++ )
++ else:
++ self.assertEqual(
++ '#This is the hostname\nhostname="myhostname"\n',
++ util.load_text_file(hostfile),
++ )
++
++
++@mock.patch("cloudinit.distros.uses_systemd", return_value=False)
++class TestGentooOpenRC(TestGentoo):
++ pass
diff --git a/app-emulation/cloud-init/files/cloud-init-24.4-netcat.patch b/app-emulation/cloud-init/files/cloud-init-24.4-netcat.patch
new file mode 100644
index 000000000000..745ce4eaef20
--- /dev/null
+++ b/app-emulation/cloud-init/files/cloud-init-24.4-netcat.patch
@@ -0,0 +1,68 @@
+From 50932590203101f5d8217afc02d8c2b4cecabbd4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= <dilfridge@gentoo.org>
+Date: Sun, 15 Dec 2024 15:12:40 +0100
+Subject: [PATCH] fix: use program name of netcat as installed by upstream,
+ "nc"
+
+---
+ systemd/cloud-config.service | 2 +-
+ systemd/cloud-final.service | 2 +-
+ systemd/cloud-init-local.service.tmpl | 2 +-
+ systemd/cloud-init-network.service.tmpl | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/systemd/cloud-config.service b/systemd/cloud-config.service
+index 54599b346..68f80d2b3 100644
+--- a/systemd/cloud-config.service
++++ b/systemd/cloud-config.service
+@@ -16,7 +16,7 @@ Type=oneshot
+ # process has completed this stage. The output from the return socket is piped
+ # into a shell so that the process can send a completion message (defaults to
+ # "done", otherwise includes an error message) and an exit code to systemd.
+-ExecStart=sh -c 'echo "start" | netcat -Uu -W1 /run/cloud-init/share/config.sock -s /run/cloud-init/share/config-return.sock | sh'
++ExecStart=sh -c 'echo "start" | nc -Uu -W1 /run/cloud-init/share/config.sock -s /run/cloud-init/share/config-return.sock | sh'
+ RemainAfterExit=yes
+ TimeoutSec=0
+
+diff --git a/systemd/cloud-final.service b/systemd/cloud-final.service
+index c48f95c4f..fb74a47c8 100644
+--- a/systemd/cloud-final.service
++++ b/systemd/cloud-final.service
+@@ -19,7 +19,7 @@ Type=oneshot
+ # process has completed this stage. The output from the return socket is piped
+ # into a shell so that the process can send a completion message (defaults to
+ # "done", otherwise includes an error message) and an exit code to systemd.
+-ExecStart=sh -c 'echo "start" | netcat -Uu -W1 /run/cloud-init/share/final.sock -s /run/cloud-init/share/final-return.sock | sh'
++ExecStart=sh -c 'echo "start" | nc -Uu -W1 /run/cloud-init/share/final.sock -s /run/cloud-init/share/final-return.sock | sh'
+ RemainAfterExit=yes
+ TimeoutSec=0
+ TasksMax=infinity
+diff --git a/systemd/cloud-init-local.service.tmpl b/systemd/cloud-init-local.service.tmpl
+index e6a300fd4..b123193a1 100644
+--- a/systemd/cloud-init-local.service.tmpl
++++ b/systemd/cloud-init-local.service.tmpl
+@@ -32,7 +32,7 @@ ExecStartPre=/sbin/restorecon /run/cloud-init
+ # process has completed this stage. The output from the return socket is piped
+ # into a shell so that the process can send a completion message (defaults to
+ # "done", otherwise includes an error message) and an exit code to systemd.
+-ExecStart=sh -c 'echo "start" | netcat -Uu -W1 /run/cloud-init/share/local.sock -s /run/cloud-init/share/local-return.sock | sh'
++ExecStart=sh -c 'echo "start" | nc -Uu -W1 /run/cloud-init/share/local.sock -s /run/cloud-init/share/local-return.sock | sh'
+ RemainAfterExit=yes
+ TimeoutSec=0
+
+diff --git a/systemd/cloud-init-network.service.tmpl b/systemd/cloud-init-network.service.tmpl
+index af09fff35..bdc7c8f83 100644
+--- a/systemd/cloud-init-network.service.tmpl
++++ b/systemd/cloud-init-network.service.tmpl
+@@ -53,7 +53,7 @@ Type=oneshot
+ # process has completed this stage. The output from the return socket is piped
+ # into a shell so that the process can send a completion message (defaults to
+ # "done", otherwise includes an error message) and an exit code to systemd.
+-ExecStart=sh -c 'echo "start" | netcat -Uu -W1 /run/cloud-init/share/network.sock -s /run/cloud-init/share/network-return.sock | sh'
++ExecStart=sh -c 'echo "start" | nc -Uu -W1 /run/cloud-init/share/network.sock -s /run/cloud-init/share/network-return.sock | sh'
+ RemainAfterExit=yes
+ TimeoutSec=0
+
+--
+2.45.2
+
diff --git a/app-emulation/cloud-init/metadata.xml b/app-emulation/cloud-init/metadata.xml
new file mode 100644
index 000000000000..453158fa2188
--- /dev/null
+++ b/app-emulation/cloud-init/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>prometheanfire@gentoo.org</email>
+ <name>Matthew Thode</name>
+ </maintainer>
+ <longdescription lang="en">
+ Cloud-init is the industry standard multi-distribution method for cross-platform cloud instance initialization. It is supported across all major public cloud providers, provisioning systems for private cloud infrastructure, and bare-metal installations.
+ </longdescription>
+ <upstream>
+ <remote-id type="launchpad">cloud-init</remote-id>
+ <remote-id type="cpe">cpe:/a:canonical:cloud-init</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/coldfire/Manifest b/app-emulation/coldfire/Manifest
new file mode 100644
index 000000000000..afbbc1aede76
--- /dev/null
+++ b/app-emulation/coldfire/Manifest
@@ -0,0 +1 @@
+DIST coldfire-0.3.1.tar.gz 142964 BLAKE2B b2ec1d9a46b09426caada3cf2216e1aad6eadfc2756c7ea47236f6cebb51b2d09faf6d1e30af240656bc4ec876f425b049e6971e5ab532ceae66b4d80ab41585 SHA512 e9ac6fcd4a9a8cf0998a658c786f91f6d97dbe03cd32fdc7047c87baa14d412a45dfdd233f68e3136e8d0f36c4d6dd556e5df6e8a0645f82d4abf88fa574ff7b
diff --git a/app-emulation/coldfire/coldfire-0.3.1-r1.ebuild b/app-emulation/coldfire/coldfire-0.3.1-r1.ebuild
new file mode 100644
index 000000000000..768ca068bcb2
--- /dev/null
+++ b/app-emulation/coldfire/coldfire-0.3.1-r1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools toolchain-funcs
+
+DESCRIPTION="Motorola Coldfire Emulator"
+HOMEPAGE="http://www.slicer.ca/coldfire/"
+SRC_URI="http://www.slicer.ca/coldfire/files/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+
+DEPEND="
+ sys-libs/ncurses:0=
+ sys-libs/readline:0=
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-build.patch
+ "${FILESDIR}"/${P}-headers.patch
+ "${FILESDIR}"/${P}-ld.patch
+ "${FILESDIR}"/${P}-no-common.patch
+ "${FILESDIR}"/${P}-implicit-function-declarations.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+
+ tc-export LD
+}
+
+src_install() {
+ dobin coldfire
+ dodoc CONTRIBUTORS HACKING README
+}
diff --git a/app-emulation/coldfire/files/coldfire-0.3.1-build.patch b/app-emulation/coldfire/files/coldfire-0.3.1-build.patch
new file mode 100644
index 000000000000..2b54dd4a16f5
--- /dev/null
+++ b/app-emulation/coldfire/files/coldfire-0.3.1-build.patch
@@ -0,0 +1,32 @@
+respect env build settings
+
+--- a/Makefile.rules.in
++++ b/Makefile.rules.in
+@@ -1,9 +1,9 @@
+ CC = @CC@
+-CFLAGS = -Wall -fomit-frame-pointer @CFLAGS@ -I$(TOPSRCDIR)
++CFLAGS = -Wall @CPPFLAGS@ @CFLAGS@ -I$(TOPSRCDIR)
+ LIBS = @LIBS@
+ LD_R = ld -r
+ RM = rm -f
+-LDFLAGS =
++LDFLAGS = @LDFLAGS@
+
+
+ prefix = @prefix@
+
+fix parallel build problems ... objs need generated tracer, and coldfire
+needs subdir objs
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -22,7 +22,8 @@
+ #Force version to be made before subdirectories
+ subdirs-all: version.h
+
+-coldfire: $(OBJS) force
++$(OBJS): | subdirs-all
++coldfire: $(OBJS) force | subdirs-all
+ $(CC) $(LDFLAGS) $(OBJS) $(SUBDIR_OBJS) -o $@ $(LIBS)
+
+
diff --git a/app-emulation/coldfire/files/coldfire-0.3.1-headers.patch b/app-emulation/coldfire/files/coldfire-0.3.1-headers.patch
new file mode 100644
index 000000000000..706b1a2b12c9
--- /dev/null
+++ b/app-emulation/coldfire/files/coldfire-0.3.1-headers.patch
@@ -0,0 +1,16 @@
+make sure we have access to HAVE_* defines to include header files:
+
+run.c: In function ‘sigint’:
+run.c:51:2: warning: implicit declaration of function ‘readline’
+run.c:51:8: warning: cast to pointer from integer of different size
+
+--- a/run.c
++++ b/run.c
+@@ -7,6 +7,7 @@
+ /**********************************/
+
+
++#include "config.h"
+
+ #include <stdio.h>
+ #include <stdlib.h>
diff --git a/app-emulation/coldfire/files/coldfire-0.3.1-implicit-function-declarations.patch b/app-emulation/coldfire/files/coldfire-0.3.1-implicit-function-declarations.patch
new file mode 100644
index 000000000000..2a96229e101f
--- /dev/null
+++ b/app-emulation/coldfire/files/coldfire-0.3.1-implicit-function-declarations.patch
@@ -0,0 +1,12 @@
+https://bugs.gentoo.org/900326
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -87,6 +87,7 @@ AC_CHECK_FUNCS(_snprintf snprintf)
+
+ AC_MSG_CHECKING(for unaligned long accesses)
+ AC_TRY_RUN([
++ #include <stdlib.h>
+ void main(void)
+ { unsigned char data[sizeof(long)*2];
+ long *ptr;
diff --git a/app-emulation/coldfire/files/coldfire-0.3.1-ld.patch b/app-emulation/coldfire/files/coldfire-0.3.1-ld.patch
new file mode 100644
index 000000000000..b0b16fec8603
--- /dev/null
+++ b/app-emulation/coldfire/files/coldfire-0.3.1-ld.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.rules.in
++++ b/Makefile.rules.in
+@@ -1,7 +1,7 @@
+ CC = @CC@
+ CFLAGS = -Wall @CPPFLAGS@ @CFLAGS@ -I$(TOPSRCDIR)
+ LIBS = @LIBS@
+-LD_R = ld -r
++LD_R = $(LD) -r
+ RM = rm -f
+ LDFLAGS = @LDFLAGS@
+
diff --git a/app-emulation/coldfire/files/coldfire-0.3.1-no-common.patch b/app-emulation/coldfire/files/coldfire-0.3.1-no-common.patch
new file mode 100644
index 000000000000..f4cc61f7bb46
--- /dev/null
+++ b/app-emulation/coldfire/files/coldfire-0.3.1-no-common.patch
@@ -0,0 +1,23 @@
+https://bugs.gentoo.org/706942
+--- a/peripherals/sim_5206.c
++++ b/peripherals/sim_5206.c
+@@ -23,7 +23,7 @@ static struct _sim_register *sim_register_lookup_by_offset(s32 offset);
+ static struct _sim_register *sim_register_lookup_by_name(char *name);
+ static void sim_interrupt_assert(s16 number, s16 vector);
+ static void sim_interrupt_withdraw(s16 number);
+-struct _sim sim_data;
++static struct _sim sim_data;
+
+ /* name, offset, width, read, write, resetvalue, description */
+ static struct _sim_register sim_reg[] = {
+--- a/peripherals/sim_5307.c
++++ b/peripherals/sim_5307.c
+@@ -59,7 +59,7 @@ static struct _sim_register *sim_register_lookup_by_offset(s32 offset);
+ static struct _sim_register *sim_register_lookup_by_name(char *name);
+ static void sim_interrupt_assert(s16 number, s16 vector);
+ static void sim_interrupt_withdraw(s16 number);
+-struct _sim sim_data;
++static struct _sim sim_data;
+
+ /* name, offset, width, read, write, resetvalue, description */
+ static struct _sim_register sim_reg[] = {
diff --git a/app-emulation/coldfire/metadata.xml b/app-emulation/coldfire/metadata.xml
new file mode 100644
index 000000000000..683910a78d58
--- /dev/null
+++ b/app-emulation/coldfire/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>embedded@gentoo.org</email>
+ <name>Embedded Gentoo</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/crossover-bin/Manifest b/app-emulation/crossover-bin/Manifest
new file mode 100644
index 000000000000..cf4c2c92f392
--- /dev/null
+++ b/app-emulation/crossover-bin/Manifest
@@ -0,0 +1,5 @@
+DIST install-crossover-22.1.1.bin 335606941 BLAKE2B 3c5eada7190283f348348ef4d3b044db8e24e0dc3588d847854feb712d39bc9013e4f958a80c3f46e84b32f6b5c7d419ef6ab4fa1e946d308ba546140fb95504 SHA512 54bb40941baea184aa824c371a2eb73cdda26fa7c0765e242384e2c29a78f6b600c7455640b9888fd28ad482bf14f53a0308cbd55d9453f76d6eeb75cf0abfc7
+DIST install-crossover-23.6.0.bin 333783609 BLAKE2B d24ef036530d2b8ce916ecb6adb6f5599d9beedb374a27a0009d14ff601685e8a4b23424a3a08e2ce613b3e77ea9893ce1b6caa07448aca365feea86f23fe320 SHA512 203c8966e71b91d98676b5e15646f790c2b4db3db3dbb8539a8ffe29b335f301535f5d7c80bf954c5e79b56668707ae960c396204f59e4079c455f12e663a445
+DIST install-crossover-24.0.4.bin 320804800 BLAKE2B 83aa750117d69836bfbad0fde42b2bfa1a8705a5f640f53fd7195de3a3bb0b876d71df95ecafd2e9c0784ba5a4d745d4f4bf627438bf6df47fc3fe1d8c33d277 SHA512 cde22177104fd37963342983f7c01f7eb12e7ee7037ccc3756e96023d7d2f3770f4d110f68471e9e2450cf6e6580d47a6a9c81bbb03ac25932dce8f0ad5c5cd5
+DIST install-crossover-24.0.6.bin 320870234 BLAKE2B a1cd417140bb77b9371b6ec4df562121f66421f1fc2096c7c305e7948802a43cd242ea308c505556b0e3b5720c3c6071e4c62f19dd67b8914d7fcb146ba49db9 SHA512 f441dbbd344915212d750bff456dbea95b523427aed569033274e1b74314fdcb3ee0b923eecd24feaf684c89ad04062c9a497967d1b9848d2e4988c5a508352f
+DIST install-crossover-25.0.0.bin 302840114 BLAKE2B 784035799c364cf28d04a3fc33d98d3b0a3b9b339ff6f2b2c779141aaa50c03e170037bd42939262ba849a3110ba15f8eb7d6886821ea16362b4e7e438e64793 SHA512 deec91131c38a6c208768cc08e5c70687ff6895cc5674b1df14058644a93ba6efabaee3e01e5c4f9a6d4f365556f182088c963c9bf333e03f8ee1bb486fc7c54
diff --git a/app-emulation/crossover-bin/crossover-bin-22.1.1.ebuild b/app-emulation/crossover-bin/crossover-bin-22.1.1.ebuild
new file mode 100644
index 000000000000..a09916b3aa03
--- /dev/null
+++ b/app-emulation/crossover-bin/crossover-bin-22.1.1.ebuild
@@ -0,0 +1,194 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit python-single-r1 unpacker
+
+DESCRIPTION="Commercial version of app-emulation/wine with paid support"
+HOMEPAGE="https://www.codeweavers.com/products/"
+SRC_URI="https://media.codeweavers.com/pub/crossover/cxlinux/demo/install-crossover-${PV}.bin"
+
+S="${WORKDIR}"
+
+LICENSE="CROSSOVER-3"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="+capi +cups doc +gphoto2 +gsm +gstreamer +jpeg +lcms ldap +mp3 +nls osmesa +openal +opencl +opengl +pcap +png +scanner +ssl +v4l +vulkan"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="bindist test"
+QA_PREBUILT="*"
+
+BDEPEND="${PYTHON_DEPS}
+ app-alternatives/cpio
+ app-arch/unzip
+ dev-lang/perl
+ dev-util/bbe
+"
+
+RDEPEND="${DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ !prefix? ( sys-libs/glibc )
+ capi? ( net-libs/libcapi[abi_x86_32(-)] )
+ cups? ( net-print/cups[abi_x86_32(-)] )
+ gsm? ( media-sound/gsm[abi_x86_32(-)] )
+ jpeg? ( media-libs/libjpeg-turbo:0[abi_x86_32(-)] )
+ lcms? ( media-libs/lcms:2 )
+ ldap? ( net-nds/openldap[abi_x86_32(-)] )
+ gphoto2? ( media-libs/libgphoto2[abi_x86_32(-)] )
+ gstreamer? (
+ media-libs/gstreamer:1.0[abi_x86_32(-)]
+ jpeg? ( media-plugins/gst-plugins-jpeg:1.0[abi_x86_32(-)] )
+ media-plugins/gst-plugins-meta:1.0[abi_x86_32(-)]
+ )
+ mp3? ( >=media-sound/mpg123-1.5.0[abi_x86_32(-)] )
+ nls? ( sys-devel/gettext[abi_x86_32(-)] )
+ openal? ( media-libs/openal[abi_x86_32(-)] )
+ opencl? ( virtual/opencl[abi_x86_32(-)] )
+ opengl? (
+ virtual/glu[abi_x86_32(-)]
+ virtual/opengl[abi_x86_32(-)]
+ )
+ pcap? ( net-libs/libpcap[abi_x86_32(-)] )
+ png? ( media-libs/libpng:0[abi_x86_32(-)] )
+ scanner? ( media-gfx/sane-backends[abi_x86_32(-)] )
+ ssl? ( net-libs/gnutls:0/30.30[abi_x86_32(-)] )
+ v4l? ( media-libs/libv4l[abi_x86_32(-)] )
+ vulkan? ( media-libs/vulkan-loader[abi_x86_32(-)] )
+ dev-libs/glib:2
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ || (
+ dev-libs/openssl-compat:1.1.1
+ =dev-libs/openssl-1.1.1*
+ )
+ dev-util/desktop-file-utils
+ media-libs/alsa-lib[abi_x86_32(-)]
+ media-libs/freetype:2[abi_x86_32(-)]
+ media-libs/mesa[abi_x86_32(-),osmesa?]
+ media-libs/tiff-compat:4[abi_x86_32(-)]
+ sys-auth/nss-mdns[abi_x86_32(-)]
+ sys-apps/util-linux[abi_x86_32(-)]
+ sys-libs/libunwind[abi_x86_32(-)]
+ sys-libs/ncurses-compat:5[abi_x86_32(-)]
+ virtual/zlib:=[abi_x86_32(-)]
+ x11-libs/libICE[abi_x86_32(-)]
+ x11-libs/libSM[abi_x86_32(-)]
+ x11-libs/libX11[abi_x86_32(-)]
+ x11-libs/libXau[abi_x86_32(-)]
+ x11-libs/libXcursor[abi_x86_32(-)]
+ x11-libs/libXdmcp[abi_x86_32(-)]
+ x11-libs/libXext[abi_x86_32(-)]
+ x11-libs/libXi[abi_x86_32(-)]
+ x11-libs/libXrandr[abi_x86_32(-)]
+ x11-libs/libXxf86vm[abi_x86_32(-)]
+ x11-libs/libxcb[abi_x86_32(-)]
+ x11-libs/gdk-pixbuf:2[introspection]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ x11-libs/vte:2.91[introspection]
+ sys-libs/libxcrypt[compat]
+"
+
+src_unpack() {
+ # self unpacking zip archive; unzip warns about the exe stuff
+ unpack_zip ${A}
+}
+
+src_prepare() {
+ default
+
+ # Remove unnecessary files, license.txt file kept as it's used by
+ # multiple files (apart of the menu to show the license)
+ rm -r guis/ || die "Could not remove files"
+ use doc || rm -r doc/ || die "Could not remove files"
+}
+
+src_install() {
+ sed -i \
+ -e "s:xdg_install_icons(:&\"${ED}\".:" \
+ -e "s:\"\(.*\)/applications:\"${ED}\1/applications:" \
+ -e "s:\"\(.*\)/desktop-directories:\"${ED}\1/desktop-directories:" \
+ "${S}/lib/perl/CXMenuXDG.pm" || die
+
+ # Install crossover symlink, bug #476314
+ dosym ../cxoffice/bin/crossover /opt/bin/crossover
+
+ # Install documentation
+ dodoc README changelog.txt
+ rm README changelog.txt || die "Could not remove README and changelog.txt"
+
+ # Install files
+ dodir /opt/cxoffice
+ #cp -r ./* "${ED}/opt/cxoffice" \
+ find . | cpio -dumpl "${ED}/opt/cxoffice" 2>/dev/null \
+ || die "Could not install into ${ED}/opt/cxoffice"
+
+ # Disable auto-update
+ sed -i -e 's/;;\"AutoUpdate\" = \"1\"/\"AutoUpdate\" = \"0\"/g' share/crossover/data/cxoffice.conf || die
+
+ # Install configuration file
+ insinto /opt/cxoffice/etc
+ doins share/crossover/data/cxoffice.conf
+ dodir /etc/env.d
+ echo "CONFIG_PROTECT=/opt/cxoffice/etc/cxoffice.conf" >> "${ED}"/etc/env.d/30crossover-bin || die
+
+ # Konqueror in its infinite wisdom decides to try opening things for
+ # writing, which are sandbox violations. This breaks the install process if
+ # it is installed, so we ninja edit it to false so it so doesn't run.
+ sed -i -e 's/cxwhich konqueror/false &/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Install menus
+ # XXX: locate_gui.sh automatically detects *-application-merged directories
+ # This means what we install will vary depending on the contents of
+ # /etc/xdg, which is a QA violation. It is not clear how to resolve this.
+ XDG_DATA_HOME="/usr/share" XDG_CONFIG_HOME="/etc/xdg" \
+ "${ED}/opt/cxoffice/bin/cxmenu" --destdir="${ED}" --crossover --install \
+ || die "Could not install menus"
+
+ # Revert ninja edit
+ sed -i -e 's/false \(cxwhich konqueror\)/\1/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Drop Uninstall menus
+ rm "${ED}/usr/share/applications/"*"Uninstall"* \
+ || die "Could not remove uninstall menus"
+
+ # Fix PATHs
+ sed -i \
+ -e "s:\"${ED}\".::" \
+ -e "s:${ED}::" \
+ "${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm" \
+ || die "Could not fix paths in ${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm"
+ sed -i -e "s:${ED}::" \
+ "${ED}/usr/share/applications/"*"CrossOver.desktop" \
+ || die "Could not fix paths of *.desktop files"
+
+ # Workaround missing libs
+ #
+ # It tries to load libpcap as packaged in Debian, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657900
+ # https://bugs.gentoo.org/721108
+ if use pcap; then
+ bbe -e 's/libpcap.so.0.8/libpcap.so.1.9.1/' "${ED}/opt/cxoffice/lib/wine/i386-unix/wpcap.so" >tmp || die
+ bbe -e 's/libpcap.so.0.8/libpcap.so.1.9.1/' "${ED}/opt/cxoffice/lib/wine/x86_64-unix/wpcap.so" >tmp64 || die
+ mv tmp "${ED}/opt/cxoffice/lib/wine/i386-unix/wpcap.so" || die
+ mv tmp64 "${ED}/opt/cxoffice/lib/wine/x86_64-unix/wpcap.so" || die
+ fi
+
+ # Remove libs that link to openldap
+ if ! use ldap; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/wldap32.so
+ fi
+
+ # Remove libs that link to opencl
+ if ! use opencl; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/opencl.so || die
+ fi
+}
diff --git a/app-emulation/crossover-bin/crossover-bin-23.6.0.ebuild b/app-emulation/crossover-bin/crossover-bin-23.6.0.ebuild
new file mode 100644
index 000000000000..e1ccd910a594
--- /dev/null
+++ b/app-emulation/crossover-bin/crossover-bin-23.6.0.ebuild
@@ -0,0 +1,184 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit python-single-r1 unpacker
+
+DESCRIPTION="Commercial version of app-emulation/wine with paid support"
+HOMEPAGE="https://www.codeweavers.com/products/"
+SRC_URI="https://media.codeweavers.com/pub/crossover/cxlinux/demo/install-crossover-${PV}.bin"
+
+S="${WORKDIR}"
+
+LICENSE="CROSSOVER-3"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="+capi +cups doc +gphoto2 +gstreamer +jpeg +lcms +mp3 +nls osmesa +openal +opencl +opengl +pcap +png +scanner +ssl +v4l +vulkan"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="bindist test"
+QA_PREBUILT="*"
+
+BDEPEND="${PYTHON_DEPS}
+ app-alternatives/cpio
+ app-arch/unzip
+ dev-lang/perl
+ dev-util/bbe
+"
+
+RDEPEND="${DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ !prefix? ( sys-libs/glibc )
+ capi? ( net-libs/libcapi[abi_x86_32(-)] )
+ cups? ( net-print/cups[abi_x86_32(-)] )
+ jpeg? ( media-libs/libjpeg-turbo:0[abi_x86_32(-)] )
+ lcms? ( media-libs/lcms:2 )
+ gphoto2? ( media-libs/libgphoto2[abi_x86_32(-)] )
+ gstreamer? (
+ media-libs/gstreamer:1.0[abi_x86_32(-)]
+ jpeg? ( media-plugins/gst-plugins-jpeg:1.0[abi_x86_32(-)] )
+ media-plugins/gst-plugins-meta:1.0[abi_x86_32(-)]
+ )
+ mp3? ( >=media-sound/mpg123-1.5.0[abi_x86_32(-)] )
+ nls? ( sys-devel/gettext[abi_x86_32(-)] )
+ openal? ( media-libs/openal[abi_x86_32(-)] )
+ opencl? ( virtual/opencl[abi_x86_32(-)] )
+ opengl? (
+ virtual/glu[abi_x86_32(-)]
+ virtual/opengl[abi_x86_32(-)]
+ )
+ pcap? ( net-libs/libpcap[abi_x86_32(-)] )
+ png? ( media-libs/libpng:0[abi_x86_32(-)] )
+ scanner? ( media-gfx/sane-backends[abi_x86_32(-)] )
+ ssl? ( net-libs/gnutls:0/30.30[abi_x86_32(-)] )
+ v4l? ( media-libs/libv4l[abi_x86_32(-)] )
+ vulkan? ( media-libs/vulkan-loader[abi_x86_32(-)] )
+ dev-libs/glib:2
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ dev-libs/openssl-compat:1.1.1
+ dev-util/desktop-file-utils
+ media-libs/alsa-lib[abi_x86_32(-)]
+ media-libs/freetype:2[abi_x86_32(-)]
+ media-libs/mesa[abi_x86_32(-),osmesa?]
+ media-libs/tiff-compat:4[abi_x86_32(-)]
+ sys-auth/nss-mdns[abi_x86_32(-)]
+ sys-apps/util-linux[abi_x86_32(-)]
+ sys-libs/libunwind[abi_x86_32(-)]
+ sys-libs/ncurses-compat:5[abi_x86_32(-)]
+ virtual/zlib:=[abi_x86_32(-)]
+ x11-libs/libICE[abi_x86_32(-)]
+ x11-libs/libSM[abi_x86_32(-)]
+ x11-libs/libX11[abi_x86_32(-)]
+ x11-libs/libXau[abi_x86_32(-)]
+ x11-libs/libXcursor[abi_x86_32(-)]
+ x11-libs/libXdmcp[abi_x86_32(-)]
+ x11-libs/libXext[abi_x86_32(-)]
+ x11-libs/libXi[abi_x86_32(-)]
+ x11-libs/libXrandr[abi_x86_32(-)]
+ x11-libs/libXxf86vm[abi_x86_32(-)]
+ x11-libs/libxcb[abi_x86_32(-)]
+ x11-libs/gdk-pixbuf:2[introspection]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ x11-libs/vte:2.91[introspection]
+ sys-libs/libxcrypt[compat]
+"
+
+src_unpack() {
+ # self unpacking zip archive; unzip warns about the exe stuff
+ unpack_zip ${A}
+}
+
+src_prepare() {
+ default
+
+ # Remove unnecessary files, license.txt file kept as it's used by
+ # multiple files (apart of the menu to show the license)
+ rm -r guis/ || die "Could not remove files"
+ use doc || rm -r doc/ || die "Could not remove files"
+}
+
+src_install() {
+ sed -i \
+ -e "s:xdg_install_icons(:&\"${ED}\".:" \
+ -e "s:\"\(.*\)/applications:\"${ED}\1/applications:" \
+ -e "s:\"\(.*\)/desktop-directories:\"${ED}\1/desktop-directories:" \
+ "${S}/lib/perl/CXMenuXDG.pm" || die
+
+ # Install crossover symlink, bug #476314
+ dosym ../cxoffice/bin/crossover /opt/bin/crossover
+
+ # Install documentation
+ dodoc README changelog.txt
+ rm README changelog.txt || die "Could not remove README and changelog.txt"
+
+ # Install files
+ dodir /opt/cxoffice
+ #cp -r ./* "${ED}/opt/cxoffice" \
+ find . | cpio -dumpl "${ED}/opt/cxoffice" 2>/dev/null \
+ || die "Could not install into ${ED}/opt/cxoffice"
+
+ # Disable auto-update
+ sed -i -e 's/;;\"AutoUpdate\" = \"1\"/\"AutoUpdate\" = \"0\"/g' share/crossover/data/cxoffice.conf || die
+
+ # Install configuration file
+ insinto /opt/cxoffice/etc
+ doins share/crossover/data/cxoffice.conf
+ dodir /etc/env.d
+ echo "CONFIG_PROTECT=/opt/cxoffice/etc/cxoffice.conf" >> "${ED}"/etc/env.d/30crossover-bin || die
+
+ # Konqueror in its infinite wisdom decides to try opening things for
+ # writing, which are sandbox violations. This breaks the install process if
+ # it is installed, so we ninja edit it to false so it so doesn't run.
+ sed -i -e 's/cxwhich konqueror/false &/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Install menus
+ # XXX: locate_gui.sh automatically detects *-application-merged directories
+ # This means what we install will vary depending on the contents of
+ # /etc/xdg, which is a QA violation. It is not clear how to resolve this.
+ XDG_DATA_HOME="/usr/share" XDG_CONFIG_HOME="/etc/xdg" \
+ "${ED}/opt/cxoffice/bin/cxmenu" --destdir="${ED}" --crossover --install \
+ || die "Could not install menus"
+
+ # Revert ninja edit
+ sed -i -e 's/false \(cxwhich konqueror\)/\1/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Drop Uninstall menus
+ rm "${ED}/usr/share/applications/"*"Uninstall"* \
+ || die "Could not remove uninstall menus"
+
+ # Fix PATHs
+ sed -i \
+ -e "s:\"${ED}\".::" \
+ -e "s:${ED}::" \
+ "${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm" \
+ || die "Could not fix paths in ${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm"
+ sed -i -e "s:${ED}::" \
+ "${ED}/usr/share/applications/"*"CrossOver.desktop" \
+ || die "Could not fix paths of *.desktop files"
+
+ # Workaround missing libs
+ #
+ # It tries to load libpcap as packaged in Debian, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657900
+ # https://bugs.gentoo.org/721108
+ if use pcap; then
+ bbe -e 's/libpcap.so.0.8/libpcap.so.1.9.1/' "${ED}/opt/cxoffice/lib/wine/i386-unix/wpcap.so" >tmp || die
+ bbe -e 's/libpcap.so.0.8/libpcap.so.1.9.1/' "${ED}/opt/cxoffice/lib/wine/x86_64-unix/wpcap.so" >tmp64 || die
+ mv tmp "${ED}/opt/cxoffice/lib/wine/i386-unix/wpcap.so" || die
+ mv tmp64 "${ED}/opt/cxoffice/lib/wine/x86_64-unix/wpcap.so" || die
+ fi
+
+ # Remove libs that link to opencl
+ if ! use opencl; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/opencl.so || die
+ fi
+}
diff --git a/app-emulation/crossover-bin/crossover-bin-24.0.4.ebuild b/app-emulation/crossover-bin/crossover-bin-24.0.4.ebuild
new file mode 100644
index 000000000000..d485566c7fbf
--- /dev/null
+++ b/app-emulation/crossover-bin/crossover-bin-24.0.4.ebuild
@@ -0,0 +1,173 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit python-single-r1 unpacker
+
+DESCRIPTION="Commercial version of app-emulation/wine with paid support"
+HOMEPAGE="https://www.codeweavers.com/products/"
+SRC_URI="https://media.codeweavers.com/pub/crossover/cxlinux/demo/install-crossover-${PV}.bin"
+
+S="${WORKDIR}"
+
+LICENSE="CROSSOVER-3"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="+capi +cups doc +gphoto2 +gstreamer +jpeg +lcms +mp3 +nls osmesa +openal +opencl +opengl +pcap +png +scanner +ssl +v4l +vulkan"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="bindist test"
+QA_PREBUILT="*"
+
+BDEPEND="${PYTHON_DEPS}
+ app-alternatives/cpio
+ app-arch/unzip
+ dev-lang/perl
+ dev-util/bbe
+"
+RDEPEND="${DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ !prefix? ( sys-libs/glibc )
+ capi? ( net-libs/libcapi[abi_x86_32(-)] )
+ cups? ( net-print/cups[abi_x86_32(-)] )
+ jpeg? ( media-libs/libjpeg-turbo:0[abi_x86_32(-)] )
+ lcms? ( media-libs/lcms:2 )
+ gphoto2? ( media-libs/libgphoto2[abi_x86_32(-)] )
+ gstreamer? (
+ media-libs/gstreamer:1.0[abi_x86_32(-)]
+ jpeg? ( media-plugins/gst-plugins-jpeg:1.0[abi_x86_32(-)] )
+ media-plugins/gst-plugins-meta:1.0[abi_x86_32(-)]
+ )
+ mp3? ( >=media-sound/mpg123-1.5.0[abi_x86_32(-)] )
+ nls? ( sys-devel/gettext[abi_x86_32(-)] )
+ openal? ( media-libs/openal[abi_x86_32(-)] )
+ opencl? ( virtual/opencl[abi_x86_32(-)] )
+ opengl? (
+ virtual/glu[abi_x86_32(-)]
+ virtual/opengl[abi_x86_32(-)]
+ )
+ pcap? ( net-libs/libpcap[abi_x86_32(-)] )
+ png? ( media-libs/libpng:0[abi_x86_32(-)] )
+ scanner? ( media-gfx/sane-backends[abi_x86_32(-)] )
+ ssl? ( net-libs/gnutls:0/30.30[abi_x86_32(-)] )
+ v4l? ( media-libs/libv4l[abi_x86_32(-)] )
+ vulkan? ( media-libs/vulkan-loader[abi_x86_32(-)] )
+ dev-libs/glib:2
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ dev-libs/openssl-compat:1.1.1
+ dev-util/desktop-file-utils
+ media-libs/alsa-lib[abi_x86_32(-)]
+ media-libs/freetype:2[abi_x86_32(-)]
+ media-libs/mesa[abi_x86_32(-),osmesa?]
+ media-libs/tiff-compat:4[abi_x86_32(-)]
+ sys-auth/nss-mdns[abi_x86_32(-)]
+ sys-apps/util-linux[abi_x86_32(-)]
+ sys-libs/libunwind[abi_x86_32(-)]
+ sys-libs/ncurses-compat:5[abi_x86_32(-)]
+ virtual/zlib:=[abi_x86_32(-)]
+ x11-libs/libICE[abi_x86_32(-)]
+ x11-libs/libSM[abi_x86_32(-)]
+ x11-libs/libX11[abi_x86_32(-)]
+ x11-libs/libXau[abi_x86_32(-)]
+ x11-libs/libXcursor[abi_x86_32(-)]
+ x11-libs/libXdmcp[abi_x86_32(-)]
+ x11-libs/libXext[abi_x86_32(-)]
+ x11-libs/libXi[abi_x86_32(-)]
+ x11-libs/libXrandr[abi_x86_32(-)]
+ x11-libs/libXxf86vm[abi_x86_32(-)]
+ x11-libs/libxcb[abi_x86_32(-)]
+ x11-libs/gdk-pixbuf:2[introspection]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ x11-libs/vte:2.91[introspection]
+ sys-apps/pcsc-lite[abi_x86_32(-)]
+ sys-libs/libxcrypt[compat]
+"
+
+src_unpack() {
+ # self unpacking zip archive; unzip warns about the exe stuff
+ unpack_zip ${A}
+}
+
+src_prepare() {
+ default
+
+ # Remove unnecessary files, license.txt file kept as it's used by
+ # multiple files (apart of the menu to show the license)
+ rm -r guis/ || die "Could not remove files"
+ use doc || rm -r doc/ || die "Could not remove files"
+}
+
+src_install() {
+ sed -i \
+ -e "s:xdg_install_icons(:&\"${ED}\".:" \
+ -e "s:\"\(.*\)/applications:\"${ED}\1/applications:" \
+ -e "s:\"\(.*\)/desktop-directories:\"${ED}\1/desktop-directories:" \
+ "${S}/lib/perl/CXMenuXDG.pm" || die
+
+ # Install crossover symlink, bug #476314
+ dosym ../cxoffice/bin/crossover /opt/bin/crossover
+
+ # Install documentation
+ dodoc README changelog.txt
+ rm README changelog.txt || die "Could not remove README and changelog.txt"
+
+ # Install files
+ dodir /opt/cxoffice
+ #cp -r ./* "${ED}/opt/cxoffice" \
+ find . | cpio -dumpl "${ED}/opt/cxoffice" 2>/dev/null \
+ || die "Could not install into ${ED}/opt/cxoffice"
+
+ # Disable auto-update
+ sed -i -e 's/;;\"AutoUpdate\" = \"1\"/\"AutoUpdate\" = \"0\"/g' share/crossover/data/cxoffice.conf || die
+
+ # Install configuration file
+ insinto /opt/cxoffice/etc
+ doins share/crossover/data/cxoffice.conf
+ dodir /etc/env.d
+ echo "CONFIG_PROTECT=/opt/cxoffice/etc/cxoffice.conf" >> "${ED}"/etc/env.d/30crossover-bin || die
+
+ # Konqueror in its infinite wisdom decides to try opening things for
+ # writing, which are sandbox violations. This breaks the install process if
+ # it is installed, so we ninja edit it to false so it so doesn't run.
+ sed -i -e 's/cxwhich konqueror/false &/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Install menus
+ # XXX: locate_gui.sh automatically detects *-application-merged directories
+ # This means what we install will vary depending on the contents of
+ # /etc/xdg, which is a QA violation. It is not clear how to resolve this.
+ XDG_DATA_HOME="/usr/share" XDG_CONFIG_HOME="/etc/xdg" \
+ "${ED}/opt/cxoffice/bin/cxmenu" --destdir="${ED}" --crossover --install \
+ || die "Could not install menus"
+
+ # Revert ninja edit
+ sed -i -e 's/false \(cxwhich konqueror\)/\1/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Drop Uninstall menus
+ rm "${ED}/usr/share/applications/"*"Uninstall"* \
+ || die "Could not remove uninstall menus"
+
+ # Fix PATHs
+ sed -i \
+ -e "s:\"${ED}\".::" \
+ -e "s:${ED}::" \
+ "${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm" \
+ || die "Could not fix paths in ${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm"
+ sed -i -e "s:${ED}::" \
+ "${ED}/usr/share/applications/"*"CrossOver.desktop" \
+ || die "Could not fix paths of *.desktop files"
+
+ # Remove libs that link to opencl
+ if ! use opencl; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/opencl.so || die
+ fi
+}
diff --git a/app-emulation/crossover-bin/crossover-bin-24.0.6.ebuild b/app-emulation/crossover-bin/crossover-bin-24.0.6.ebuild
new file mode 100644
index 000000000000..d485566c7fbf
--- /dev/null
+++ b/app-emulation/crossover-bin/crossover-bin-24.0.6.ebuild
@@ -0,0 +1,173 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit python-single-r1 unpacker
+
+DESCRIPTION="Commercial version of app-emulation/wine with paid support"
+HOMEPAGE="https://www.codeweavers.com/products/"
+SRC_URI="https://media.codeweavers.com/pub/crossover/cxlinux/demo/install-crossover-${PV}.bin"
+
+S="${WORKDIR}"
+
+LICENSE="CROSSOVER-3"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="+capi +cups doc +gphoto2 +gstreamer +jpeg +lcms +mp3 +nls osmesa +openal +opencl +opengl +pcap +png +scanner +ssl +v4l +vulkan"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="bindist test"
+QA_PREBUILT="*"
+
+BDEPEND="${PYTHON_DEPS}
+ app-alternatives/cpio
+ app-arch/unzip
+ dev-lang/perl
+ dev-util/bbe
+"
+RDEPEND="${DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ !prefix? ( sys-libs/glibc )
+ capi? ( net-libs/libcapi[abi_x86_32(-)] )
+ cups? ( net-print/cups[abi_x86_32(-)] )
+ jpeg? ( media-libs/libjpeg-turbo:0[abi_x86_32(-)] )
+ lcms? ( media-libs/lcms:2 )
+ gphoto2? ( media-libs/libgphoto2[abi_x86_32(-)] )
+ gstreamer? (
+ media-libs/gstreamer:1.0[abi_x86_32(-)]
+ jpeg? ( media-plugins/gst-plugins-jpeg:1.0[abi_x86_32(-)] )
+ media-plugins/gst-plugins-meta:1.0[abi_x86_32(-)]
+ )
+ mp3? ( >=media-sound/mpg123-1.5.0[abi_x86_32(-)] )
+ nls? ( sys-devel/gettext[abi_x86_32(-)] )
+ openal? ( media-libs/openal[abi_x86_32(-)] )
+ opencl? ( virtual/opencl[abi_x86_32(-)] )
+ opengl? (
+ virtual/glu[abi_x86_32(-)]
+ virtual/opengl[abi_x86_32(-)]
+ )
+ pcap? ( net-libs/libpcap[abi_x86_32(-)] )
+ png? ( media-libs/libpng:0[abi_x86_32(-)] )
+ scanner? ( media-gfx/sane-backends[abi_x86_32(-)] )
+ ssl? ( net-libs/gnutls:0/30.30[abi_x86_32(-)] )
+ v4l? ( media-libs/libv4l[abi_x86_32(-)] )
+ vulkan? ( media-libs/vulkan-loader[abi_x86_32(-)] )
+ dev-libs/glib:2
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ dev-libs/openssl-compat:1.1.1
+ dev-util/desktop-file-utils
+ media-libs/alsa-lib[abi_x86_32(-)]
+ media-libs/freetype:2[abi_x86_32(-)]
+ media-libs/mesa[abi_x86_32(-),osmesa?]
+ media-libs/tiff-compat:4[abi_x86_32(-)]
+ sys-auth/nss-mdns[abi_x86_32(-)]
+ sys-apps/util-linux[abi_x86_32(-)]
+ sys-libs/libunwind[abi_x86_32(-)]
+ sys-libs/ncurses-compat:5[abi_x86_32(-)]
+ virtual/zlib:=[abi_x86_32(-)]
+ x11-libs/libICE[abi_x86_32(-)]
+ x11-libs/libSM[abi_x86_32(-)]
+ x11-libs/libX11[abi_x86_32(-)]
+ x11-libs/libXau[abi_x86_32(-)]
+ x11-libs/libXcursor[abi_x86_32(-)]
+ x11-libs/libXdmcp[abi_x86_32(-)]
+ x11-libs/libXext[abi_x86_32(-)]
+ x11-libs/libXi[abi_x86_32(-)]
+ x11-libs/libXrandr[abi_x86_32(-)]
+ x11-libs/libXxf86vm[abi_x86_32(-)]
+ x11-libs/libxcb[abi_x86_32(-)]
+ x11-libs/gdk-pixbuf:2[introspection]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ x11-libs/vte:2.91[introspection]
+ sys-apps/pcsc-lite[abi_x86_32(-)]
+ sys-libs/libxcrypt[compat]
+"
+
+src_unpack() {
+ # self unpacking zip archive; unzip warns about the exe stuff
+ unpack_zip ${A}
+}
+
+src_prepare() {
+ default
+
+ # Remove unnecessary files, license.txt file kept as it's used by
+ # multiple files (apart of the menu to show the license)
+ rm -r guis/ || die "Could not remove files"
+ use doc || rm -r doc/ || die "Could not remove files"
+}
+
+src_install() {
+ sed -i \
+ -e "s:xdg_install_icons(:&\"${ED}\".:" \
+ -e "s:\"\(.*\)/applications:\"${ED}\1/applications:" \
+ -e "s:\"\(.*\)/desktop-directories:\"${ED}\1/desktop-directories:" \
+ "${S}/lib/perl/CXMenuXDG.pm" || die
+
+ # Install crossover symlink, bug #476314
+ dosym ../cxoffice/bin/crossover /opt/bin/crossover
+
+ # Install documentation
+ dodoc README changelog.txt
+ rm README changelog.txt || die "Could not remove README and changelog.txt"
+
+ # Install files
+ dodir /opt/cxoffice
+ #cp -r ./* "${ED}/opt/cxoffice" \
+ find . | cpio -dumpl "${ED}/opt/cxoffice" 2>/dev/null \
+ || die "Could not install into ${ED}/opt/cxoffice"
+
+ # Disable auto-update
+ sed -i -e 's/;;\"AutoUpdate\" = \"1\"/\"AutoUpdate\" = \"0\"/g' share/crossover/data/cxoffice.conf || die
+
+ # Install configuration file
+ insinto /opt/cxoffice/etc
+ doins share/crossover/data/cxoffice.conf
+ dodir /etc/env.d
+ echo "CONFIG_PROTECT=/opt/cxoffice/etc/cxoffice.conf" >> "${ED}"/etc/env.d/30crossover-bin || die
+
+ # Konqueror in its infinite wisdom decides to try opening things for
+ # writing, which are sandbox violations. This breaks the install process if
+ # it is installed, so we ninja edit it to false so it so doesn't run.
+ sed -i -e 's/cxwhich konqueror/false &/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Install menus
+ # XXX: locate_gui.sh automatically detects *-application-merged directories
+ # This means what we install will vary depending on the contents of
+ # /etc/xdg, which is a QA violation. It is not clear how to resolve this.
+ XDG_DATA_HOME="/usr/share" XDG_CONFIG_HOME="/etc/xdg" \
+ "${ED}/opt/cxoffice/bin/cxmenu" --destdir="${ED}" --crossover --install \
+ || die "Could not install menus"
+
+ # Revert ninja edit
+ sed -i -e 's/false \(cxwhich konqueror\)/\1/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Drop Uninstall menus
+ rm "${ED}/usr/share/applications/"*"Uninstall"* \
+ || die "Could not remove uninstall menus"
+
+ # Fix PATHs
+ sed -i \
+ -e "s:\"${ED}\".::" \
+ -e "s:${ED}::" \
+ "${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm" \
+ || die "Could not fix paths in ${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm"
+ sed -i -e "s:${ED}::" \
+ "${ED}/usr/share/applications/"*"CrossOver.desktop" \
+ || die "Could not fix paths of *.desktop files"
+
+ # Remove libs that link to opencl
+ if ! use opencl; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/opencl.so || die
+ fi
+}
diff --git a/app-emulation/crossover-bin/crossover-bin-25.0.0.ebuild b/app-emulation/crossover-bin/crossover-bin-25.0.0.ebuild
new file mode 100644
index 000000000000..87993c5ca818
--- /dev/null
+++ b/app-emulation/crossover-bin/crossover-bin-25.0.0.ebuild
@@ -0,0 +1,172 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit python-single-r1 unpacker
+
+DESCRIPTION="Commercial version of app-emulation/wine with paid support"
+HOMEPAGE="https://www.codeweavers.com/products/"
+SRC_URI="https://media.codeweavers.com/pub/crossover/cxlinux/demo/install-crossover-${PV}.bin"
+
+S="${WORKDIR}"
+
+LICENSE="CROSSOVER-3"
+SLOT="0"
+KEYWORDS="-* ~amd64 ~x86"
+IUSE="+capi +cups +gphoto2 +gstreamer +jpeg +lcms +mp3 +nls osmesa +openal +opencl +opengl +pcap +png +scanner +ssl +v4l +vulkan"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RESTRICT="bindist test"
+QA_PREBUILT="*"
+
+BDEPEND="${PYTHON_DEPS}
+ app-alternatives/cpio
+ app-arch/unzip
+ dev-lang/perl
+ dev-util/bbe
+"
+RDEPEND="${DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-python/dbus-python[${PYTHON_USEDEP}]
+ dev-python/pycairo[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ ')
+ !prefix? ( sys-libs/glibc )
+ capi? ( net-libs/libcapi[abi_x86_32(-)] )
+ cups? ( net-print/cups[abi_x86_32(-)] )
+ jpeg? ( media-libs/libjpeg-turbo:0[abi_x86_32(-)] )
+ lcms? ( media-libs/lcms:2 )
+ gphoto2? ( media-libs/libgphoto2[abi_x86_32(-)] )
+ gstreamer? (
+ media-libs/gstreamer:1.0[abi_x86_32(-)]
+ jpeg? ( media-plugins/gst-plugins-jpeg:1.0[abi_x86_32(-)] )
+ media-plugins/gst-plugins-meta:1.0[abi_x86_32(-)]
+ )
+ mp3? ( >=media-sound/mpg123-1.5.0[abi_x86_32(-)] )
+ nls? ( sys-devel/gettext[abi_x86_32(-)] )
+ openal? ( media-libs/openal[abi_x86_32(-)] )
+ opencl? ( virtual/opencl[abi_x86_32(-)] )
+ opengl? (
+ virtual/glu[abi_x86_32(-)]
+ virtual/opengl[abi_x86_32(-)]
+ )
+ pcap? ( net-libs/libpcap[abi_x86_32(-)] )
+ png? ( media-libs/libpng:0[abi_x86_32(-)] )
+ scanner? ( media-gfx/sane-backends[abi_x86_32(-)] )
+ ssl? ( net-libs/gnutls:0/30.30[abi_x86_32(-)] )
+ v4l? ( media-libs/libv4l[abi_x86_32(-)] )
+ vulkan? ( media-libs/vulkan-loader[abi_x86_32(-)] )
+ dev-libs/glib:2
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ dev-libs/openssl-compat:1.1.1
+ dev-util/desktop-file-utils
+ media-libs/alsa-lib[abi_x86_32(-)]
+ media-libs/freetype:2[abi_x86_32(-)]
+ media-libs/mesa[abi_x86_32(-),osmesa?]
+ media-libs/tiff-compat:4[abi_x86_32(-)]
+ sys-auth/nss-mdns[abi_x86_32(-)]
+ sys-apps/util-linux[abi_x86_32(-)]
+ sys-libs/libunwind[abi_x86_32(-)]
+ sys-libs/ncurses-compat:5[abi_x86_32(-)]
+ virtual/zlib:=[abi_x86_32(-)]
+ x11-libs/libICE[abi_x86_32(-)]
+ x11-libs/libSM[abi_x86_32(-)]
+ x11-libs/libX11[abi_x86_32(-)]
+ x11-libs/libXau[abi_x86_32(-)]
+ x11-libs/libXcursor[abi_x86_32(-)]
+ x11-libs/libXdmcp[abi_x86_32(-)]
+ x11-libs/libXext[abi_x86_32(-)]
+ x11-libs/libXi[abi_x86_32(-)]
+ x11-libs/libXrandr[abi_x86_32(-)]
+ x11-libs/libXxf86vm[abi_x86_32(-)]
+ x11-libs/libxcb[abi_x86_32(-)]
+ x11-libs/gdk-pixbuf:2[introspection]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ x11-libs/vte:2.91[introspection]
+ sys-apps/pcsc-lite[abi_x86_32(-)]
+ sys-libs/libxcrypt[compat]
+"
+
+src_unpack() {
+ # self unpacking zip archive; unzip warns about the exe stuff
+ unpack_zip ${A}
+}
+
+src_prepare() {
+ default
+
+ # Remove unnecessary files, license.txt file kept as it's used by
+ # multiple files (apart of the menu to show the license)
+ rm -r guis/ || die "Could not remove files"
+}
+
+src_install() {
+ sed -i \
+ -e "s:xdg_install_icons(:&\"${ED}\".:" \
+ -e "s:\"\(.*\)/applications:\"${ED}\1/applications:" \
+ -e "s:\"\(.*\)/desktop-directories:\"${ED}\1/desktop-directories:" \
+ "${S}/lib/perl/CXMenuXDG.pm" || die
+
+ # Install crossover symlink, bug #476314
+ dosym ../cxoffice/bin/crossover /opt/bin/crossover
+
+ # Install documentation
+ dodoc README changelog.txt
+ rm README changelog.txt || die "Could not remove README and changelog.txt"
+
+ # Install files
+ dodir /opt/cxoffice
+ #cp -r ./* "${ED}/opt/cxoffice" \
+ find . | cpio -dumpl "${ED}/opt/cxoffice" 2>/dev/null \
+ || die "Could not install into ${ED}/opt/cxoffice"
+
+ # Disable auto-update
+ sed -i -e 's/;;\"AutoUpdate\" = \"1\"/\"AutoUpdate\" = \"0\"/g' share/crossover/data/cxoffice.conf || die
+
+ # Install configuration file
+ insinto /opt/cxoffice/etc
+ doins share/crossover/data/cxoffice.conf
+ dodir /etc/env.d
+ echo "CONFIG_PROTECT=/opt/cxoffice/etc/cxoffice.conf" >> "${ED}"/etc/env.d/30crossover-bin || die
+
+ # Konqueror in its infinite wisdom decides to try opening things for
+ # writing, which are sandbox violations. This breaks the install process if
+ # it is installed, so we ninja edit it to false so it so doesn't run.
+ sed -i -e 's/cxwhich konqueror/false &/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Install menus
+ # XXX: locate_gui.sh automatically detects *-application-merged directories
+ # This means what we install will vary depending on the contents of
+ # /etc/xdg, which is a QA violation. It is not clear how to resolve this.
+ XDG_DATA_HOME="/usr/share" XDG_CONFIG_HOME="/etc/xdg" \
+ "${ED}/opt/cxoffice/bin/cxmenu" --destdir="${ED}" --crossover --install \
+ || die "Could not install menus"
+
+ # Revert ninja edit
+ sed -i -e 's/false \(cxwhich konqueror\)/\1/' "${ED}/opt/cxoffice/bin/locate_gui.sh" \
+ || die "Could not apply workaround for konqueror"
+
+ # Drop Uninstall menus
+ rm "${ED}/usr/share/applications/"*"Uninstall"* \
+ || die "Could not remove uninstall menus"
+
+ # Fix PATHs
+ sed -i \
+ -e "s:\"${ED}\".::" \
+ -e "s:${ED}::" \
+ "${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm" \
+ || die "Could not fix paths in ${ED}/opt/cxoffice/lib/perl/CXMenuXDG.pm"
+ sed -i -e "s:${ED}::" \
+ "${ED}/usr/share/applications/"*"CrossOver.desktop" \
+ || die "Could not fix paths of *.desktop files"
+
+ # Remove libs that link to opencl
+ if ! use opencl; then
+ rm "${ED}"/opt/cxoffice/lib/wine/{i386,x86_64}-unix/opencl.so || die
+ fi
+}
diff --git a/app-emulation/crossover-bin/metadata.xml b/app-emulation/crossover-bin/metadata.xml
new file mode 100644
index 000000000000..b691ccb9f1e2
--- /dev/null
+++ b/app-emulation/crossover-bin/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="capi">Enable ISDN support via CAPI</flag>
+ <flag name="osmesa">Add support for OpenGL in bitmaps using libOSMesa</flag>
+ <flag name="pcap">Support packet capture software (e.g. wireshark)</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/dinero/Manifest b/app-emulation/dinero/Manifest
new file mode 100644
index 000000000000..3ea51171f86d
--- /dev/null
+++ b/app-emulation/dinero/Manifest
@@ -0,0 +1 @@
+DIST d4-7.tar.gz 295814 BLAKE2B 2d7d28718f861e9b09240b1286d0ed73bf399a239d71ade0a0edf73c1391f7b000d3af786f547d0627bdc883d473e324263eaa418bfa0c8ad7366c62956a8ef4 SHA512 20a6232c732e42a7b37061cb75b3b97fe839824d066a6b3295d1fe8aa5312913d7fad404e93f5ecfb5690f5e7c7a0e266daee16973f1f165c7f33c5095c90f14
diff --git a/app-emulation/dinero/dinero-4.7-r1.ebuild b/app-emulation/dinero/dinero-4.7-r1.ebuild
new file mode 100644
index 000000000000..6fe3a1546442
--- /dev/null
+++ b/app-emulation/dinero/dinero-4.7-r1.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit autotools toolchain-funcs
+
+MY_P="d${PV/./-}"
+S="${WORKDIR}/${MY_P}"
+DESCRIPTION="Cache simulator"
+HOMEPAGE="https://pages.cs.wisc.edu/~markhill/DineroIV/"
+SRC_URI="ftp://ftp.cs.wisc.edu/markhill/DineroIV/${MY_P}.tar.gz"
+
+LICENSE="free-noncomm"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+
+src_prepare() {
+ default
+
+ # 331837
+ sed -e "s/\$(CC)/& \$(LDFLAGS)/" \
+ -i Makefile.in || die
+
+ mv configure.{in,ac} || die
+
+ eautoreconf
+}
+
+src_configure() {
+ tc-export AR
+ default
+}
+
+src_install() {
+ dobin dineroIV
+ dodoc CHANGES COPYRIGHT NOTES README TODO
+}
diff --git a/app-emulation/dinero/metadata.xml b/app-emulation/dinero/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/app-emulation/dinero/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/diskimage-builder/Manifest b/app-emulation/diskimage-builder/Manifest
new file mode 100644
index 000000000000..b87f6b6a2edf
--- /dev/null
+++ b/app-emulation/diskimage-builder/Manifest
@@ -0,0 +1,3 @@
+DIST diskimage-builder-3.32.0.tar.gz 532942 BLAKE2B e436e5268b649dc5e050f66b098e527b79f172df00da93f23c115e3d88692c3f6546774c2046c8d4722cdd4139af4d05701725496f283b60e08ce0885b70de66 SHA512 6f5c2e0df428bf85b847fdc0ceebfdb66823b92b5b903de247d0e83ff2588c36e6f9786ea91f252c838cedeec22913f491d79643e77d83ad1fb690da7566af47
+DIST diskimage-builder-3.33.0.tar.gz 536798 BLAKE2B ac6dcc67bb336e98e1a1b822dbfb03effa47d67b96a95bf6ec3dc44cc3329315d5ce7808a42358f55b58a436dd140b21cb63ae7455f1cc8a8f136515f49457e8 SHA512 aeb287a7fcbd3b2fe022c1e7535df9bc67f224b8558a6685f29182ea64d926078385d924a452503b4fb00bb915ffdce1116034b182281fcb531931303d53892b
+DIST diskimage_builder-3.41.0.tar.gz 557300 BLAKE2B dce56866b7de50144ae94ab65be072e62dfbc385c44454d63e4aa10b5c0a28d1593067e18966bf9027b356bff31cf6aa0ab121b3b8136a589ed18e1ce1c4db94 SHA512 6e3fde60a9b2be3da0237a281cb6b709bab4cc4b758ba57520913cef11ad2796a0fe1c2d761b37775c117b7db3f5a52c42a3b999bded04efade8d3c48a15ae74
diff --git a/app-emulation/diskimage-builder/diskimage-builder-3.32.0.ebuild b/app-emulation/diskimage-builder/diskimage-builder-3.32.0.ebuild
new file mode 100644
index 000000000000..75bb176c3905
--- /dev/null
+++ b/app-emulation/diskimage-builder/diskimage-builder-3.32.0.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+PYPI_NO_NORMALIZE=1
+inherit distutils-r1
+
+DESCRIPTION="Golden Disk Image builder"
+HOMEPAGE="http://docs.openstack.org/developer/diskimage-builder/"
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://opendev.org/openstack/diskimage-builder.git"
+else
+ inherit pypi
+ KEYWORDS="amd64 ~arm64 x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+CDEPEND=">=dev-python/pbr-2.0.0[${PYTHON_USEDEP}]
+ !~dev-python/pbr-2.1.0[${PYTHON_USEDEP}]"
+DEPEND="${CDEPEND}"
+RDEPEND="${CDEPEND}
+ >=dev-python/babel-2.3.4[${PYTHON_USEDEP}]
+ !~dev-python/babel-2.4.0[${PYTHON_USEDEP}]
+ >=dev-python/networkx-1.10[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ >=dev-python/six-1.10.0[${PYTHON_USEDEP}]
+ >=dev-python/stevedore-1.20.0[${PYTHON_USEDEP}]
+ app-emulation/qemu
+ sys-block/parted
+ sys-fs/multipath-tools
+ sys-fs/dosfstools
+ sys-apps/gptfdisk
+ !dev-python/dib-utils[${PYTHON_USEDEP}]"
diff --git a/app-emulation/diskimage-builder/diskimage-builder-3.33.0.ebuild b/app-emulation/diskimage-builder/diskimage-builder-3.33.0.ebuild
new file mode 100644
index 000000000000..8faeae7cd6de
--- /dev/null
+++ b/app-emulation/diskimage-builder/diskimage-builder-3.33.0.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+PYPI_NO_NORMALIZE=1
+inherit distutils-r1
+
+DESCRIPTION="Golden Disk Image builder"
+HOMEPAGE="http://docs.openstack.org/developer/diskimage-builder/"
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://opendev.org/openstack/diskimage-builder.git"
+else
+ inherit pypi
+ KEYWORDS="amd64 ~arm64 x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+CDEPEND=">=dev-python/pbr-2.0.0[${PYTHON_USEDEP}]
+ !~dev-python/pbr-2.1.0[${PYTHON_USEDEP}]"
+DEPEND="${CDEPEND}"
+RDEPEND="${CDEPEND}
+ >=dev-python/networkx-2.3.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ >=dev-python/stevedore-1.20.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0.2[${PYTHON_USEDEP}]
+ app-emulation/qemu
+ sys-block/parted
+ sys-fs/multipath-tools
+ sys-fs/dosfstools
+ sys-apps/gptfdisk
+ !dev-python/dib-utils[${PYTHON_USEDEP}]"
diff --git a/app-emulation/diskimage-builder/diskimage-builder-3.41.0.ebuild b/app-emulation/diskimage-builder/diskimage-builder-3.41.0.ebuild
new file mode 100644
index 000000000000..44b32bc40e25
--- /dev/null
+++ b/app-emulation/diskimage-builder/diskimage-builder-3.41.0.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+inherit distutils-r1
+
+DESCRIPTION="Golden Disk Image builder"
+HOMEPAGE="http://docs.openstack.org/developer/diskimage-builder/"
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://opendev.org/openstack/diskimage-builder.git"
+else
+ inherit pypi
+ KEYWORDS="~amd64 ~arm64 ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+CDEPEND=">=dev-python/pbr-2.0.0[${PYTHON_USEDEP}]
+ !~dev-python/pbr-2.1.0[${PYTHON_USEDEP}]"
+DEPEND="${CDEPEND}"
+RDEPEND="${CDEPEND}
+ >=dev-python/networkx-2.3.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ >=dev-python/stevedore-1.20.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0.2[${PYTHON_USEDEP}]
+ app-emulation/qemu
+ sys-block/parted
+ sys-fs/multipath-tools
+ sys-fs/dosfstools
+ sys-apps/gptfdisk
+ !dev-python/dib-utils[${PYTHON_USEDEP}]"
diff --git a/app-emulation/diskimage-builder/diskimage-builder-9999.ebuild b/app-emulation/diskimage-builder/diskimage-builder-9999.ebuild
new file mode 100644
index 000000000000..44b32bc40e25
--- /dev/null
+++ b/app-emulation/diskimage-builder/diskimage-builder-9999.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+inherit distutils-r1
+
+DESCRIPTION="Golden Disk Image builder"
+HOMEPAGE="http://docs.openstack.org/developer/diskimage-builder/"
+if [[ ${PV} == 9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://opendev.org/openstack/diskimage-builder.git"
+else
+ inherit pypi
+ KEYWORDS="~amd64 ~arm64 ~x86"
+fi
+
+LICENSE="Apache-2.0"
+SLOT="0"
+IUSE=""
+
+CDEPEND=">=dev-python/pbr-2.0.0[${PYTHON_USEDEP}]
+ !~dev-python/pbr-2.1.0[${PYTHON_USEDEP}]"
+DEPEND="${CDEPEND}"
+RDEPEND="${CDEPEND}
+ >=dev-python/networkx-2.3.0[${PYTHON_USEDEP}]
+ >=dev-python/pyyaml-3.12[${PYTHON_USEDEP}]
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ >=dev-python/stevedore-1.20.0[${PYTHON_USEDEP}]
+ >=dev-python/jsonschema-3.0.2[${PYTHON_USEDEP}]
+ app-emulation/qemu
+ sys-block/parted
+ sys-fs/multipath-tools
+ sys-fs/dosfstools
+ sys-apps/gptfdisk
+ !dev-python/dib-utils[${PYTHON_USEDEP}]"
diff --git a/app-emulation/diskimage-builder/metadata.xml b/app-emulation/diskimage-builder/metadata.xml
new file mode 100644
index 000000000000..d65123c58a73
--- /dev/null
+++ b/app-emulation/diskimage-builder/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>prometheanfire@gentoo.org</email>
+ <name>Matthew Thode</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>openstack@gentoo.org</email>
+ <name>Openstack</name>
+ </maintainer>
+ <longdescription lang="en">
+ diskimage-builder is a flexible suite of components
+ for building a wide-range of disk images, filesystem
+ images and ramdisk images for use with OpenStack.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/dosemu/Manifest b/app-emulation/dosemu/Manifest
new file mode 100644
index 000000000000..4166b3947caf
--- /dev/null
+++ b/app-emulation/dosemu/Manifest
@@ -0,0 +1,2 @@
+DIST dosemu-1.4.1_pre20130107.zip 2767256 BLAKE2B 068c38108257b83d046682d4e9bda6f2da84195cff3aa5eb73764e88ba48bd415a6af9fa1b57059dee12ddd75b379df730fe6957014b554cc13b12ac029eed8d SHA512 eb8dcb914a74b235f2b37ff4dd5c1c84b4916ff195c7bf76cdbe6a4d5e6247c57297eef0c579f219ff7f475e727d66fa5a0f314da46d79cc97a0d794e9ad5864
+DIST dosemu-freedos-1.0-bin.tgz 1205628 BLAKE2B e88a23b14cf1ccccb4f648b3c3af39330d8af29940e228b951cc7e48595f9838236066b67f841328e75ee7aee18f9e7814ea33382bb48902ca7947806b646852 SHA512 d0c4235ceac55de63ce5f72e51b7d57a82b8104f4bf2df6f4dc25c9889d3337b40d75665c2dfc98492ec7123e0959a725f5c7579e145895024bd80a07036e3bd
diff --git a/app-emulation/dosemu/dosemu-1.4.1_pre20130107-r7.ebuild b/app-emulation/dosemu/dosemu-1.4.1_pre20130107-r7.ebuild
new file mode 100644
index 000000000000..f9c4955b5508
--- /dev/null
+++ b/app-emulation/dosemu/dosemu-1.4.1_pre20130107-r7.ebuild
@@ -0,0 +1,125 @@
+# Copyright 2002-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="8"
+
+inherit autotools flag-o-matic pax-utils toolchain-funcs
+
+P_FD="dosemu-freedos-1.0-bin"
+COMMIT="15cfb41ff20a052769d753c3262c57ecb050ad71"
+# snapshot is downloaded as:
+# https://sourceforge.net/code-snapshots/git/d/do/dosemu/code.git/dosemu-code-${COMMIT}.zip
+
+DESCRIPTION="DOS Emulator"
+HOMEPAGE="http://www.dosemu.org/"
+SRC_URI="https://downloads.sourceforge.net/dosemu/${P_FD}.tgz
+ https://dev.gentoo.org/~sam/distfiles/${P}.zip"
+
+S="${WORKDIR}/${PN}-code-${COMMIT}"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="-* amd64 x86"
+IUSE="X alsa debug fluidsynth gpm"
+
+BDEPEND="app-arch/unzip
+ sys-devel/bison
+ X? (
+ x11-apps/bdftopcf
+ >=x11-apps/mkfontscale-1.2.0
+ )"
+COMMON_DEPEND="media-libs/libsdl
+ >=sys-libs/slang-1.4
+ X? (
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXxf86vm
+ )
+ alsa? ( media-libs/alsa-lib )
+ fluidsynth? (
+ media-sound/fluid-soundfont
+ media-sound/fluidsynth
+ )
+ gpm? ( sys-libs/gpm )"
+# sndfile? ( media-libs/libsndfile )
+DEPEND="${COMMON_DEPEND}
+ X? ( x11-base/xorg-proto )"
+RDEPEND="${COMMON_DEPEND}
+ X? ( x11-apps/xset )"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-fortify.patch
+ "${FILESDIR}"/${PN}-1.4.1_pre20091009-dash.patch
+ "${FILESDIR}"/${P}-no-glibc.patch
+ "${FILESDIR}"/${P}-flex-2.6.3.patch
+ "${FILESDIR}"/${P}-ia16-ldflags.patch
+ "${FILESDIR}"/${P}-fix-inline.patch
+ "${FILESDIR}"/${P}-lto.patch
+ "${FILESDIR}"/${P}-as.patch
+ "${FILESDIR}"/${P}-nm.patch
+ "${FILESDIR}"/${P}-pcm_write_interleaved-incompatiible-pointer-type.patch
+ "${FILESDIR}"/${P}-gcc10-const.patch
+ "${FILESDIR}"/${P}-gcc-15.patch
+)
+
+pkg_pretend() {
+ if tc-is-clang; then
+ die "${P} does not work on clang due to missing 16-bit assembly support: https://bugs.gentoo.org/729240. Please try gcc."
+ fi
+}
+
+src_prepare() {
+ default
+
+ # Has problems with -O3 on some systems
+ replace-flags -O[3-9] -O2
+
+ # This one is from media-sound/fluid-soundfont (bug #479534)
+ sed "s,/usr/share/soundfonts/default.sf2,${EPREFIX}/usr/share/sounds/sf2/FluidR3_GM.sf2,"\
+ -i src/plugin/fluidsynth/mid_o_flus.c || die
+
+ eautoreconf
+}
+
+src_configure() {
+ unset YACC
+
+ # workaround binutils ld.gold bug #618366
+ local nopie_flag=
+ if tc-enables-pie; then
+ if gcc-specs-pie; then
+ # before gcc got upstream support for '-no-pie'
+ nopie_flag=-nopie
+ else
+ nopie_flag=-no-pie
+ fi
+ fi
+
+ # sndfile support is unconditionally disabled in src/plugin/sndfile/snd_o_wav.c
+ # CPP has to be set explicitly to workaround autoconf-2.69
+ # CPP detection (fixed in 2.70). bug #762748.
+ econf $(use_with X x) \
+ $(use_enable debug) \
+ $(use_with gpm) \
+ $(use_with alsa) \
+ $(use_with fluidsynth) \
+ --without-sndfile \
+ --with-fdtarball="${DISTDIR}"/${P_FD}.tgz \
+ --sysconfdir="${EPREFIX}"/etc/dosemu/ \
+ --with-docdir="${EPREFIX}"/usr/share/doc/${PF} \
+ IA16_LDFLAGS_EXTRA=${nopie_flag} \
+ CPP="$(tc-getCPP)"
+}
+
+src_compile() {
+ # src/makefile.common is written manually, uses AR=ar
+ emake AR="$(tc-getAR)"
+}
+
+src_install() {
+ default
+
+ # r - randmmap: dosemu tries to get address mapping
+ # exactly where asked, loops otherwise.
+ # m - allow RWX mapping: as it's an emulator / code loader
+ pax-mark -mr "${ED}/usr/bin/dosemu.bin"
+}
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20091009-dash.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20091009-dash.patch
new file mode 100644
index 000000000000..c48712e68661
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20091009-dash.patch
@@ -0,0 +1,10 @@
+Dash does not support 'echo -n' and breaks default config sourcing.
+diff --git a/default-configure b/default-configure
+index 9e4b78b..a749f63 100755
+--- a/default-configure
++++ b/default-configure
+@@ -30,3 +30,3 @@ done
+ CONF=`cat $CONF_FILE`
+-CONF=`echo -n "$CONF"| sed '/^config {/d' | sed '/^}/d' | tr '\n' ' ' `
++CONF=`printf "%s" "$CONF"| sed '/^config {/d' | sed '/^}/d' | tr '\n' ' ' `
+
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-as.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-as.patch
new file mode 100644
index 000000000000..2db3048be391
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-as.patch
@@ -0,0 +1,12 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -503,8 +503,7 @@ dnl CPU emulator
+ AC_MSG_NOTICE(Compiling for native x86...);
+ fi
+
+-
+-if ! echo '.code16;.text;addr32 pushw 4(%esp)' | as -o dummy.o >/dev/null 2>&1; then
++if ! echo '.code16;.text;addr32 pushw 4(%esp)' | $CC -c -x assembler -o dummy.o - >/dev/null 2>&1; then
+ echo ''
+ echo '*** error:'
+ echo '*** Your system has no complete code16 functional gas,'
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fix-inline.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fix-inline.patch
new file mode 100644
index 000000000000..9a515941b812
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fix-inline.patch
@@ -0,0 +1,14 @@
+diff --git a/src/dosext/sound/sound.c b/src/dosext/sound/sound.c
+index f33f78f..f429362 100644
+--- a/src/dosext/sound/sound.c
++++ b/src/dosext/sound/sound.c
+@@ -173,3 +173,3 @@ void sb_cms_write (ioport_t port, Bit8u value);
+
+-inline void sb_mixer_register_write (Bit8u value);
++static inline void sb_mixer_register_write (Bit8u value);
+ void sb_mixer_data_write (Bit8u value);
+@@ -840,3 +840,3 @@ void sb_cms_write (ioport_t port, Bit8u value)
+
+-inline void sb_mixer_register_write (Bit8u value)
++static inline void sb_mixer_register_write (Bit8u value)
+ {
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-flex-2.6.3.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-flex-2.6.3.patch
new file mode 100644
index 000000000000..de5b00b783cf
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-flex-2.6.3.patch
@@ -0,0 +1,15 @@
+https://bugs.gentoo.org/604610
+
+New flex seems to define yywrap even for non-yywrap lexers.
+diff --git a/src/base/init/lexer.l.in b/src/base/init/lexer.l.in
+index aeaa2e2..9e42ddf 100644
+--- a/src/base/init/lexer.l.in
++++ b/src/base/init/lexer.l.in
+@@ -810,7 +810,2 @@ static void enter_includefile(char * fname)
+
+-
+-#ifdef yywrap
+- error "yywrap defined elsewere, need our own one"
+-#endif
+-
+ int yywrap(void) /* this gets called at EOF of a parsed file */
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fortify.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fortify.patch
new file mode 100644
index 000000000000..5daa4e9fee41
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-fortify.patch
@@ -0,0 +1,48 @@
+From ff9bea065f4cc6068dcb8d6ea9423105305ca590 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Mon, 5 Aug 2013 13:03:21 +0300
+Subject: [PATCH] src/tools/tools86.c: fix stack buffer overflow in
+ 'change_aout'
+
+Detected by gcc:
+
+gcc -std=gnu99 -c -MP -MMD -I../../src/include -I../../src/plugin/include -Wall -Wstrict-prototypes -Wmissing-declarations -Wnested-externs -fno-strict-aliasing -pipe -O2 -fomit-frame-pointer -o tools86.o tools86.c
+In file included from /usr/include/stdio.h:937:0,
+ from tools86.c:98:
+ In function 'fread',
+ inlined from 'change_aout.constprop.1' at tools86.c:174:12,
+ inlined from 'main' at tools86.c:391:18:
+ /usr/include/bits/stdio2.h:293:2: warning: call to '__fread_chk_warn' declared with attribute warning: fread called with bigger size * nmemb than length of destination buffer [enabled by default]
+ return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);
+ ^
+Gentoo-bug: http://bugs.gentoo.org/343577
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+---
+ src/tools/tools86.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/tools/tools86.c b/src/tools/tools86.c
+index 141610d..35a0b96 100644
+--- a/src/tools/tools86.c
++++ b/src/tools/tools86.c
+@@ -137,7 +137,7 @@ struct bsd_header { /* a.out header */
+ #endif
+
+ #ifdef __linux__
+-static int header_ld86out_to_gnuasout(struct bsd_header *bsd, struct gnu_header *gnu)
++static int header_ld86out_to_gnuasout(const struct bsd_header *bsd, struct gnu_header *gnu)
+ {
+ if (bsd->a_magic[0] != 0x01 || bsd->a_magic[1] != 0x03 ||
+ bsd->a_flags != 0x00 || bsd->a_cpu != 0x10) return -1;
+@@ -171,7 +171,7 @@ static int change_aout(char *objfile, int update_symtable)
+ return errno;
+ }
+ #ifdef __linux__
+- if (fread(&bsd,sizeof(gnu),1,f) != 1 ) {
++ if (fread(&bsd,sizeof(bsd),1,f) != 1 ) {
+ fclose(f);
+ return -1;
+ }
+--
+1.8.3.2
+
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc-15.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc-15.patch
new file mode 100644
index 000000000000..f611076495df
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc-15.patch
@@ -0,0 +1,26 @@
+Bug: https://bugs.gentoo.org/944235
+--- a/src/arch/linux/dosext/sound/midid/midid.h
++++ b/src/arch/linux/dosext/sound/midid/midid.h
+@@ -8,7 +8,8 @@
+ #define _MIDID_H
+
+ typedef unsigned char byte;
+-typedef enum {FALSE, TRUE} bool;
++#include <stdbool.h>
++enum {FALSE, TRUE};
+ typedef enum {EMUMODE_MT32, EMUMODE_GM} Emumode;
+
+ /* Configuration */
+--- a/src/base/init/parser.y.in
++++ b/src/base/init/parser.y.in
+@@ -92,8 +92,8 @@ int dexe_running = 0;
+ static int dexe_forbid_disk = 1;
+ char own_hostname[128];
+
+-static struct printer nullptr;
+-static struct printer *pptr = &nullptr;
++static struct printer null_ptr;
++static struct printer *pptr = &null_ptr;
+ static int c_printers = 0;
+
+ static int ports_permission = IO_RDWR;
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc10-const.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc10-const.patch
new file mode 100644
index 000000000000..01cf146c603c
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-gcc10-const.patch
@@ -0,0 +1,64 @@
+https://bugs.gentoo.org/890302
+https://bugzilla.redhat.com/1866474
+https://sourceforge.net/p/dosemu/patches/129/
+
+commit b3320c3a67c0bb050b40e76831ec95a4d156890a
+Author: Matthew Ogilvie <mmogilvi+gnto@zoho.com>
+Date: Thu Jun 15 21:55:30 2023 -0600
+
+ mem_base: avoid undefined behavior writing to const global with casts
+
+ Fix crash under gcc 10 or later.
+
+--- a/src/arch/linux/mapping/mapping.c
++++ b/src/arch/linux/mapping/mapping.c
+@@ -47,8 +47,8 @@ static int kmem_mappings = 0;
+ static struct mem_map_struct kmem_map[MAX_KMEM_MAPPINGS];
+
+ static int init_done = 0;
+-unsigned char * const mem_base;
+-char * const lowmem_base;
++unsigned char * mem_base;
++char * lowmem_base;
+
+ static struct mappingdrivers *mappingdrv[] = {
+ #ifdef HAVE_SHM_OPEN
+@@ -205,7 +205,7 @@ void *alias_mapping(int cap, unsigned targ, size_t mapsize, int protect, void *s
+ addr = mappingdriver.alias(cap, target, mapsize, protect, source);
+ update_aliasmap(target, mapsize, (cap & MAPPING_VGAEMU) ? target : source);
+ if (cap & MAPPING_INIT_LOWRAM) {
+- *(unsigned char **)&mem_base = addr;
++ mem_base = addr;
+ }
+ return addr;
+ }
+@@ -416,7 +416,7 @@ void *alloc_mapping(int cap, size_t mapsize, off_t target)
+
+ if (cap & MAPPING_INIT_LOWRAM) {
+ Q__printf("MAPPING: LOWRAM_INIT, cap=%s, base=%p\n", cap, addr);
+- *(char **)(&lowmem_base) = addr;
++ lowmem_base = addr;
+ }
+ return addr;
+ }
+--- a/src/include/memory.h
++++ b/src/include/memory.h
+@@ -209,7 +209,7 @@ void *lowmemp(const void *ptr);
+ restrictions it can be non-zero. Non-zero values block vm86 but at least
+ give NULL pointer protection.
+ */
+-extern unsigned char * const mem_base;
++extern unsigned char * mem_base;
+
+ /* lowmem_base points to a shared memory image of the area 0--1MB+64K.
+ It does not have any holes or mapping for video RAM etc.
+@@ -221,7 +221,7 @@ extern unsigned char * const mem_base;
+ It is set "const" to help GCC optimize accesses. In reality it is set only
+ once, at startup
+ */
+-extern char * const lowmem_base;
++extern char * lowmem_base;
+
+ #define UNIX_READ_BYTE(addr) (*(Bit8u *) (addr))
+ #define UNIX_WRITE_BYTE(addr, val) (*(Bit8u *) (addr) = (val) )
+
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-ia16-ldflags.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-ia16-ldflags.patch
new file mode 100644
index 000000000000..f8c05622571c
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-ia16-ldflags.patch
@@ -0,0 +1,44 @@
+Add a @IA16_LDFLAGS_EXTRA@ environment variable
+to be able to pass through -no-pie.
+
+It's a workaround for binutils ld.gold bug:
+https://bugs.gentoo.org/618366
+diff --git a/Makefile.conf.in b/Makefile.conf.in
+index cd4b34d..cc29931 100644
+--- a/Makefile.conf.in
++++ b/Makefile.conf.in
+@@ -55,2 +55,3 @@ ALL_LDFLAGS:=@DOSEMU_LDFLAGS@ ${LDFLAGS}
+ DOSBIN_LDFLAGS:=@DOSBIN_LDFLAGS@
++IA16_LDFLAGS_EXTRA:=@IA16_LDFLAGS_EXTRA@
+ LIBS:=@LIBS@
+diff --git a/configure.ac b/configure.ac
+index 0f06f57..a86208e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -604,2 +604,3 @@ AC_SUBST(X_LIBS)
+ AC_SUBST(X_CFLAGS)
++AC_SUBST(IA16_LDFLAGS_EXTRA)
+
+diff --git a/src/commands/Makefile b/src/commands/Makefile
+index 3139b85..c5c4607 100644
+--- a/src/commands/Makefile
++++ b/src/commands/Makefile
+@@ -56,3 +56,3 @@ dosbin: $(COM1) $(COM2) $(SYS)
+ $(D)/%.sys: %.o
+- $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,0,-e,_start16,--oformat,binary -nostdlib -s -o $@ $<
++ $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,0,-e,_start16,--oformat,binary -nostdlib -s $(IA16_LDFLAGS_EXTRA) -o $@ $<
+ chmod -x $@
+@@ -60,3 +60,3 @@ $(D)/%.sys: %.o
+ $(D)/%.com: %.o
+- $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,100,-e,_start16,--oformat,binary -nostdlib -s -o $@ $<
++ $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,100,-e,_start16,--oformat,binary -nostdlib -s $(IA16_LDFLAGS_EXTRA) -o $@ $<
+ chmod -x $@
+diff --git a/src/plugin/commands/Makefile b/src/plugin/commands/Makefile
+index 48f49d5..d3a5667 100644
+--- a/src/plugin/commands/Makefile
++++ b/src/plugin/commands/Makefile
+@@ -57,3 +57,3 @@ $(STUBFULL): $(D)/generic.com ./mkcomstub
+ $(D)/%.com: %.o
+- $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,0x100,-e,_start16,--oformat,binary -nostdlib -s -o $@ $<
++ $(LD) $(ALL_LDFLAGS) -Wl,-Ttext,0x100,-e,_start16,--oformat,binary -nostdlib -s $(IA16_LDFLAGS_EXTRA) -o $@ $<
+ chmod -x $@
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-lto.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-lto.patch
new file mode 100644
index 000000000000..730ad4e5d5fd
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-lto.patch
@@ -0,0 +1,27 @@
+'asmlinkage' macros are supposed to make symbol available
+for calling from inline (or not) assembly.
+
+'static' keyword is not compatible to it and breaks -flto
+when gcc's LTO partitioner separates assembly definitions
+from C definitions. This causes symbol resolution failures:
+
+ ld: /tmp/dosemu.bin.h8Y59G.ltrans0.ltrans.o: in function `stub_rep__':
+ <artificial>:(.text+0xe): undefined reference to `rep_movs_stos'
+
+The changes turns 'asmlinkage' into exported symbol.
+
+https://bugs.gentoo.org/700126
+--- a/src/emu-i386/simx86/cpatch.c
++++ b/src/emu-i386/simx86/cpatch.c
+@@ -37,9 +37,9 @@
+ #include "codegen-arch.h"
+
+ #ifdef __i386__
+-#define asmlinkage static __attribute__((used)) __attribute__((cdecl))
++#define asmlinkage __attribute__((used)) __attribute__((cdecl))
+ #else
+-#define asmlinkage static __attribute__((used))
++#define asmlinkage __attribute__((used))
+ #endif
+
+ int s_munprotect(unsigned int addr)
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-nm.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-nm.patch
new file mode 100644
index 000000000000..73bfd9dfbc5b
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-nm.patch
@@ -0,0 +1,44 @@
+https://bugs.gentoo.org/762778
+--- a/Makefile.conf.in
++++ b/Makefile.conf.in
+@@ -82,6 +82,8 @@ REQUIRED:=@REQUIRED@
+ OS=@CONFIG_HOST@
+ RANLIB:=@RANLIB@
+
++NM:=@NM@
++
+ @ASPI_SUPPORT@
+ @USE_DL_PLUGINS@
+ @USE_APBUILD@
+--- a/configure.ac
++++ b/configure.ac
+@@ -39,6 +39,7 @@ AC_PROG_LN_S
+ AC_PROG_MAKE_SET
+ AC_PROG_RANLIB
+ AC_PROG_YACC
++AC_CHECK_TOOL(NM, nm)
+ dnl The bison problem
+ if test -z "`echo $YACC | grep bison`" ; then
+ AC_MSG_WARN( )
+--- a/src/arch/linux/Makefile.main
++++ b/src/arch/linux/Makefile.main
+@@ -80,7 +80,7 @@ emu.o: emu.c
+ $(BINPATH)/bin/$(DOSBIN): emu.o $(LIBS_)
+ $(LD) $(ALL_LDFLAGS) $(DOSBIN_LDFLAGS) -o $@ emu.o \
+ -Wl,--whole-archive $(LIBS_) -Wl,--no-whole-archive $(LIBS)
+- @nm $(BINPATH)/bin/$(DOSBIN) | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \
++ @$(NM) $(BINPATH)/bin/$(DOSBIN) | grep -v '\(compiled\)\|\(\.o$$\)\|\( a \)' | \
+ sort > $(BINPATH)/bin/dosemu.map
+ @ln -sf $(DOSBIN) $(BINPATH)/bin/dos
+ ifdef X_SUPPORT
+--- a/src/plugin/term/Makefile
++++ b/src/plugin/term/Makefile
+@@ -33,7 +33,7 @@ SLANGLIB:=`relaytool --partial-map partial.map --relay slang \
+ libslang.so.1-UTF8 libslang-utf8.so.1 libslang.so.1 $(SLANGLIB)`
+
+ partial.map: $(OBJS)
+- nm $(OBJS) | LC_ALL=C grep SL | LC_ALL=C sort | LC_ALL=C uniq | \
++ $(NM) $(OBJS) | LC_ALL=C grep SL | LC_ALL=C sort | LC_ALL=C uniq | \
+ LC_ALL=C sed -e 's/ *U \(SL[^_]*_[a-z0-9].*\)/F \1/' \
+ -e 's/ *U \(SL[^_]*_[A-Z0-9].*\)/V \1/' > $@
+ echo 'F SLsmg_write_nwchars' >> $@
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-no-glibc.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-no-glibc.patch
new file mode 100644
index 000000000000..7c5b8a50a094
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-no-glibc.patch
@@ -0,0 +1,18 @@
+The check has no AC_MGS_RESULT finish helper
+and gets called as
+ set ``
+on gcc-6 which clutters ./configure output.
+
+One of fallouts of https://bugs.gentoo.org/598798
+diff --git a/configure.ac b/configure.ac
+index 34a7f71..0f06f57 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -574,7 +574,2 @@ if test "$GCC" = "yes" ; then
+
+- AC_MSG_CHECKING(for glibc...)
+- set `printf '%b\n' '#include <features.h>\nXXAaZZ __GLIBC__'|${CC-cc} -E -|awk '/XXAaZZ/ {print $2}'`
+- if test "$1" = "__GLIBC__"; then
+- AC_MSG_ERROR([Sorry, you need glibc.])
+- fi
+ fi
diff --git a/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-pcm_write_interleaved-incompatiible-pointer-type.patch b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-pcm_write_interleaved-incompatiible-pointer-type.patch
new file mode 100644
index 000000000000..15e2ac0fcf4d
--- /dev/null
+++ b/app-emulation/dosemu/files/dosemu-1.4.1_pre20130107-pcm_write_interleaved-incompatiible-pointer-type.patch
@@ -0,0 +1,11 @@
+--- dosemu-code-15cfb41ff20a052769d753c3262c57ecb050ad71-orig/src/plugin/midimisc/mid_o_tmdty.c 2013-01-07 10:44:22.000000000 +1100
++++ dosemu-code-15cfb41ff20a052769d753c3262c57ecb050ad71/src/plugin/midimisc/mid_o_tmdty.c 2024-06-06 12:57:40.055442661 +1000
+@@ -77,7 +77,7 @@
+ if (n > 0) {
+ int frames = n / (pcm_format_size(fmt) * TMDTY_CHANS);
+ pcm_running = 1;
+- pcm_write_interleaved(buf, frames, TMDTY_FREQ, fmt,
++ pcm_write_interleaved((sndbuf_t(*)[SNDBUF_CHANS])buf, frames, TMDTY_FREQ, fmt,
+ TMDTY_CHANS, pcm_stream);
+ } else {
+ break;
diff --git a/app-emulation/dosemu/metadata.xml b/app-emulation/dosemu/metadata.xml
new file mode 100644
index 000000000000..fc691657b60d
--- /dev/null
+++ b/app-emulation/dosemu/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="fluidsynth">use <pkg>media-sound/fluidsynth</pkg> for MIDI emulation</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/dxvk/Manifest b/app-emulation/dxvk/Manifest
new file mode 100644
index 000000000000..57b3ac3caf8e
--- /dev/null
+++ b/app-emulation/dxvk/Manifest
@@ -0,0 +1,10 @@
+DIST dxvk-2.3.1.tar.gz 1005669 BLAKE2B d78448fcde9d600f7206dfa606fca4069e7563bb8b181fbc172691d6c45586904ae529550926a03612ed3cc1f2a2dff00990638125c1d7ce6179d3cd3ba8df04 SHA512 085567ac263872eb93d776ce7cf982690603e240a977dbb51ad69344af387fd745536ca62819afd4a809732a6f2d22b36c3df9538decf37dec527973d41e392f
+DIST dxvk-2.4.1.tar.gz 1060662 BLAKE2B 43294af5829fe306acdb72c07b94c28d34eb798a2eaf6d2e42c2b80900e9b6f4f323569dfd51d565c836237fddce26b843f69e4ff57fc2a5838382993a9dd6ed SHA512 629e45bbdaddf83cd8a394877289781e8f54330b4c865b2d453ba3068a6054511a3697ca115497b64df0ce9ee36748a7fdb01fdc5f49a7dc44c4a3d3e47bf6de
+DIST dxvk-2.5.3.tar.gz 1142475 BLAKE2B 04bfb577902effec9e22b6546cdfc2b3dd76b84e72c23cb26ac4e54f7aa9464b15d7d74b41dd810fc62d4fff9bbb24cee2771f562a7b931025abfa5995b000bc SHA512 93de46ab69dceea9e13904d9f267a53295a885676bce432c13d992ea33553250e03a695caf15f2c0a9a416c0ed3d799a9155a09dcadfeb43e516780fb188b122
+DIST dxvk-2.6.2.tar.gz 1215059 BLAKE2B 433574d229eee82b25a2424f2adebb9fe8c17d6876fdac2a6cf2f08fe3538c729478643108df79c2df9085b80580ec39ad876a4e685b6c4c31ba732c1b279494 SHA512 fb1cf19138c5a9e31c3f6be32be71b431c1aabc8e0d8a303e2ccb957b65510f793cdfc07069a535568ec43d29d4ccea93e2489a811d352c62add923eb9a16523
+DIST dxvk-2.7.1.tar.gz 1245578 BLAKE2B 66fc7d114890791eec750e8b6e059a14ae03c34cd039ee9470e79b33c7954237fcc023d2dd186077e662262fdbbbfc02c8161c17721122948ee727418b5a1480 SHA512 4d8c580d6e7a4e1a3438ec60fa323c5af002a3ea2f6dc4f049832ee6cbae34177623c373ab3d3f720be3149ce3cffb5b91da5892c1bdfe22c1e86bb9dde071ca
+DIST libdisplay-info-275e6459c7ab1ddd4b125f28d0440716e4888078.tar.bz2 81172 BLAKE2B 7a1e9e2feeb95e06e9d3f49ad9d14a8a152cca525085e819cda0b69c238fb79dddd6d547cd0f0a4b51dfc1ec74ac4c006345b9fc48563807bc8ab3bab58ea5ff SHA512 794e94e8c16d65901a7b705d1ba3361817b4e9e19e520b1004bcab232d0347f5713594d67f3c2b79d4f86b3012e710c648975547d27a63de043fcbe9e6b7e66d
+DIST setup_dxvk.sh 4631 BLAKE2B 25270e1f6dfd446b1d124eac3bd19da8bc770527d02d987949fc3ae0bead07866dafa25f77a90b9a408413a724354a29a4a156ff5c9dc75e26b66e079824ec86 SHA512 257fd84e29a7037f04a1a2a506502c71d527af58f8c84d8c3dfb64597ebdc41c3dca362eaf20ab4bc1982b76428c1f843815d56a6e1369d072e0009e270cb121
+DIST spirv-headers-8b246ff75c6615ba4532fe4fde20f1be090c3764.tar.gz 472513 BLAKE2B f1ad7e11c306c62509655eb41d74efc5fb88688780d006c6944844e964b339baa000f70e115c4df2947e882c9ac33186e301b31138c38fe5f997f7af7260f521 SHA512 fe1d9d70b217b194c92dd397bca386ce8452bc5ec3967d64a257b3a531386fe6a6ecb5e9ed8ab5bc5a2707c5378f02f05809d6d197dcfb3f87cd33304c3b1959
+DIST vulkan-headers-234c4b7370a8ea3239a214c9e871e4b17c89f4ab.tar.gz 2497311 BLAKE2B 29edd895e3066b25ab7b798ea22ea50b48b6234fcfc3ddb623a280ca4f19e3df4988b677e28457e85dc4e8c35784ddb543c4f6bb285f298ff4060e29df5e48e0 SHA512 d5fad9aa8027a3b47c79611f54d18a8a90538fa6de09aed3f669cff90a7afcbee32f3b019a516ea6e2a547416eb18b26cb953da5a853ed50b4e84f95ca9f9425
+DIST vulkan-headers-46dc0f6e514f5730784bb2cac2a7c731636839e8.tar.gz 2255426 BLAKE2B efaf09df3274586c4df2bdd0b1dd9dd43b3b6125e0033ae87af999aea64709e9758bc7b675398b480ae063e28273732d768062d97f6cd61d63ccc798ca7410a5 SHA512 7ea993f7c8ff72dc6bedbfdaced29782ab372228e9111f747d931955e832a7920114f5d1953ecd34d220634a53449ca2ed4c0ed28d3165e258c4d9fafd0aa4be
diff --git a/app-emulation/dxvk/dxvk-2.3.1-r1.ebuild b/app-emulation/dxvk/dxvk-2.3.1-r1.ebuild
new file mode 100644
index 000000000000..33569e90367c
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-2.3.1-r1.ebuild
@@ -0,0 +1,187 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/{spirv,vulkan}
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=46dc0f6e514f5730784bb2cac2a7c731636839e8
+ HASH_DISPLAYINFO=275e6459c7ab1ddd4b125f28d0440716e4888078
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d9 d3d10 d3d11 dxgi )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.3.1-gcc14.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir include/{spirv,vulkan} subprojects/libdisplay-info || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_preinst() {
+ [[ -e ${EROOT}/usr/$(get_libdir)/dxvk/d3d11.dll ]] && DXVK_HAD_OVERLAY=
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ elif [[ -v DXVK_HAD_OVERLAY ]]; then
+ # temporary warning until this version is more widely used
+ elog "Gentoo's main repo ebuild for ${PN} uses different paths than most overlays."
+ elog "If you were using symbolic links in wine prefixes it may be necessary to"
+ elog "refresh them by re-running the command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "Also, if you were using /etc/${PN}.conf, ${PN} is no longer patched to load"
+ elog "it. See ${EROOT}/usr/share/doc/${PF}/README.md* for handling configs."
+ fi
+
+ if ver_replacing -lt 2.0; then
+ elog
+ elog ">=${PN}-2.0 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ elog "For details, see: https://github.com/doitsujin/dxvk/wiki/Driver-support"
+ fi
+}
diff --git a/app-emulation/dxvk/dxvk-2.4.1.ebuild b/app-emulation/dxvk/dxvk-2.4.1.ebuild
new file mode 100644
index 000000000000..92e98110a59c
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-2.4.1.ebuild
@@ -0,0 +1,178 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/{spirv,vulkan}
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=46dc0f6e514f5730784bb2cac2a7c731636839e8
+ HASH_DISPLAYINFO=275e6459c7ab1ddd4b125f28d0440716e4888078
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d8 +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d8 d3d9 d3d10 d3d11 dxgi )
+ d3d8? ( d3d9 )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.3.1-gcc14.patch
+ "${FILESDIR}"/${PN}-2.4-d3d8-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir include/{spirv,vulkan} subprojects/libdisplay-info || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d8)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ fi
+
+ if use d3d8 && ver_replacing -lt 2.4; then
+ elog
+ elog ">=${PN}-2.4 now provides d3d8.dll, to make use of it will need to"
+ elog "update old wine prefixes which is typically done by re-running:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ fi
+}
diff --git a/app-emulation/dxvk/dxvk-2.5.3.ebuild b/app-emulation/dxvk/dxvk-2.5.3.ebuild
new file mode 100644
index 000000000000..a593eeff748e
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-2.5.3.ebuild
@@ -0,0 +1,177 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/{spirv,vulkan}
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=46dc0f6e514f5730784bb2cac2a7c731636839e8
+ HASH_DISPLAYINFO=275e6459c7ab1ddd4b125f28d0440716e4888078
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d8 +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d8 d3d9 d3d10 d3d11 dxgi )
+ d3d8? ( d3d9 )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.4-d3d8-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir include/{spirv,vulkan} subprojects/libdisplay-info || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d8)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ fi
+
+ if use d3d8 && ver_replacing -lt 2.4; then
+ elog
+ elog ">=${PN}-2.4 now provides d3d8.dll, to make use of it will need to"
+ elog "update old wine prefixes which is typically done by re-running:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ fi
+}
diff --git a/app-emulation/dxvk/dxvk-2.6.2.ebuild b/app-emulation/dxvk/dxvk-2.6.2.ebuild
new file mode 100644
index 000000000000..858ffd03bdf0
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-2.6.2.ebuild
@@ -0,0 +1,177 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/{spirv,vulkan}
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=234c4b7370a8ea3239a214c9e871e4b17c89f4ab
+ HASH_DISPLAYINFO=275e6459c7ab1ddd4b125f28d0440716e4888078
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d8 +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d8 d3d9 d3d10 d3d11 dxgi )
+ d3d8? ( d3d9 )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.4-d3d8-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir include/{spirv,vulkan} subprojects/libdisplay-info || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d8)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ fi
+
+ if use d3d8 && ver_replacing -lt 2.4; then
+ elog
+ elog ">=${PN}-2.4 now provides d3d8.dll, to make use of it will need to"
+ elog "update old wine prefixes which is typically done by re-running:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ fi
+}
diff --git a/app-emulation/dxvk/dxvk-2.7.1.ebuild b/app-emulation/dxvk/dxvk-2.7.1.ebuild
new file mode 100644
index 000000000000..858ffd03bdf0
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-2.7.1.ebuild
@@ -0,0 +1,177 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/{spirv,vulkan}
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=234c4b7370a8ea3239a214c9e871e4b17c89f4ab
+ HASH_DISPLAYINFO=275e6459c7ab1ddd4b125f28d0440716e4888078
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d8 +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d8 d3d9 d3d10 d3d11 dxgi )
+ d3d8? ( d3d9 )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.4-d3d8-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir include/{spirv,vulkan} subprojects/libdisplay-info || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d8)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ fi
+
+ if use d3d8 && ver_replacing -lt 2.4; then
+ elog
+ elog ">=${PN}-2.4 now provides d3d8.dll, to make use of it will need to"
+ elog "update old wine prefixes which is typically done by re-running:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ fi
+}
diff --git a/app-emulation/dxvk/dxvk-9999.ebuild b/app-emulation/dxvk/dxvk-9999.ebuild
new file mode 100644
index 000000000000..af5042a6207a
--- /dev/null
+++ b/app-emulation/dxvk/dxvk-9999.ebuild
@@ -0,0 +1,198 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib python-any-r1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/doitsujin/dxvk.git"
+ EGIT_SUBMODULES=(
+ # picky about headers and is cross-compiled making -I/usr/include troublesome
+ include/spirv
+ include/vulkan
+ subprojects/dxbc-spirv
+ subprojects/dxbc-spirv/submodules/spirv_headers
+ subprojects/libdisplay-info
+ )
+else
+ HASH_SPIRV=
+ HASH_VULKAN=
+ HASH_DXBCSPIRV=
+ HASH_DXBCSPIRV_SPIRV=
+ HASH_DISPLAYINFO=
+ SRC_URI="
+ https://github.com/doitsujin/dxvk/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ https://github.com/doitsujin/dxbc-spirv/archive/${HASH_DXBCSPIRV}.tar.gz
+ -> dxbc-spirv-${HASH_DXBCSPIRV}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_DXBCSPIRV_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_DXBCSPIRV_SPIRV}.tar.gz
+ https://gitlab.freedesktop.org/JoshuaAshton/libdisplay-info/-/archive/${HASH_DISPLAYINFO}/libdisplay-info-${HASH_DISPLAYINFO}.tar.bz2
+ "
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine"
+HOMEPAGE="https://github.com/doitsujin/dxvk/"
+
+# setup_dxvk.sh is no longer provided, fetch old until a better solution
+SRC_URI+=" https://raw.githubusercontent.com/doitsujin/dxvk/cd21cd7fa3b0df3e0819e21ca700b7627a838d69/setup_dxvk.sh"
+
+LICENSE="ZLIB Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw +d3d8 +d3d9 +d3d10 +d3d11 +dxgi +strip"
+REQUIRED_USE="
+ || ( d3d8 d3d9 d3d10 d3d11 dxgi )
+ d3d8? ( d3d9 )
+ d3d10? ( d3d11 )
+ d3d11? ( dxgi )
+"
+
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.10.3-wow64-setup.patch
+ "${FILESDIR}"/${PN}-2.4-d3d8-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is set but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is set but ${tool} does not use POSIX threads"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ # TODO?: may need to consider making our tarballs if this keeps up
+ # (if do this, also drop EGIT_SUBMODULES and leave it default)
+ rmdir include/{spirv,vulkan} subprojects/{dxbc-spirv,libdisplay-info} || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} include/spirv || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} include/vulkan || die
+ mv ../dxbc-spirv-${HASH_DXBCSPIRV} subprojects/dxbc-spirv || die
+ mv ../libdisplay-info-${HASH_DISPLAYINFO} subprojects/libdisplay-info || die
+
+ rmdir subprojects/dxbc-spirv/submodules/spirv_headers || die
+ if [[ ${HASH_SPIRV} == ${HASH_DXBCSPIRV_SPIRV} ]]; then
+ ln -s ../../../include/spirv \
+ subprojects/dxbc-spirv/submodules/spirv_headers || die
+ else
+ mv ../SPIRV-Headers-${HASH_DXBCSPIRV_SPIRV} \
+ subprojects/dxbc-spirv/submodules/spirv_headers || die
+ fi
+ fi
+ cp -- "${DISTDIR}"/setup_dxvk.sh . || die
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_dxvk.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX RC STRIP
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${MULTILIB_ABI_FLAG: -2}
+ --force-fallback-for=libdisplay-info # system's is ELF (unusable)
+ $(meson_use {,enable_}d3d8)
+ $(meson_use {,enable_}d3d9)
+ $(meson_use {,enable_}d3d10)
+ $(meson_use {,enable_}d3d11)
+ $(meson_use {,enable_}dxgi)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_dxvk.sh
+ dodoc README.md dxvk.conf
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ elog "Note: setup_dxvk.sh is unofficially temporarily provided as it was"
+ elog "removed upstream, handling may change in the future."
+ fi
+
+ if use d3d8 && ver_replacing -lt 2.4; then
+ elog
+ elog ">=${PN}-2.4 now provides d3d8.dll, to make use of it will need to"
+ elog "update old wine prefixes which is typically done by re-running:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_dxvk.sh install --symlink"
+ elog
+ fi
+}
diff --git a/app-emulation/dxvk/files/dxvk-1.10.3-wow64-setup.patch b/app-emulation/dxvk/files/dxvk-1.10.3-wow64-setup.patch
new file mode 100644
index 000000000000..707eba19b24b
--- /dev/null
+++ b/app-emulation/dxvk/files/dxvk-1.10.3-wow64-setup.patch
@@ -0,0 +1,14 @@
+Dirty workaround to try syswow64 if paths are the same. This can happen
+with USE=wow64 on wine where wine64 is a symlink to wine.
+
+TODO: dxvk's and vkd3d-proton's setup script should be rewritten and packaged
+separately (shared) as upstream hardly support these (dxvk dropped altogether).
+--- a/setup_dxvk.sh
++++ b/setup_dxvk.sh
+@@ -89,2 +89,6 @@
+ win32_sys_path="${win32_sys_path/$'\r'/}"
++ if [ "$win32_sys_path" = "$win64_sys_path" ]; then
++ win32_sys_path=$($wine winepath -u 'C:\windows\syswow64' 2> /dev/null)
++ win32_sys_path="${win32_sys_path/$'\r'/}"
++ fi
+ fi
diff --git a/app-emulation/dxvk/files/dxvk-2.3.1-gcc14.patch b/app-emulation/dxvk/files/dxvk-2.3.1-gcc14.patch
new file mode 100644
index 000000000000..957735b1909e
--- /dev/null
+++ b/app-emulation/dxvk/files/dxvk-2.3.1-gcc14.patch
@@ -0,0 +1,7 @@
+for std::remove_if
+--- a/src/d3d9/d3d9_mem.cpp
++++ b/src/d3d9/d3d9_mem.cpp
+@@ -5,2 +5,3 @@
+ #include "../util/util_likely.h"
++#include <algorithm>
+ #include <utility>
diff --git a/app-emulation/dxvk/files/dxvk-2.4-d3d8-setup.patch b/app-emulation/dxvk/files/dxvk-2.4-d3d8-setup.patch
new file mode 100644
index 000000000000..9a0e15310d96
--- /dev/null
+++ b/app-emulation/dxvk/files/dxvk-2.4-d3d8-setup.patch
@@ -0,0 +1,8 @@
+Newly added in dxvk-2.4, but the old script does not know about it.
+(see also wow64-setup.patch, this script needs a replacement)
+--- a/setup_dxvk.sh
++++ b/setup_dxvk.sh
+@@ -207,2 +207,3 @@
+
++$action d3d8
+ $action d3d9
diff --git a/app-emulation/dxvk/metadata.xml b/app-emulation/dxvk/metadata.xml
new file mode 100644
index 000000000000..261366db14d2
--- /dev/null
+++ b/app-emulation/dxvk/metadata.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <use>
+ <flag name="crossdev-mingw">
+ Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+ <pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up
+ and is mostly unsupported, try disabling if have issues)
+ </flag>
+ <flag name="d3d8">Enable support for DirectX 8 (d3d8.dll)</flag>
+ <flag name="d3d9">Enable support for DirectX 9 (d3d9.dll)</flag>
+ <flag name="d3d10">Enable support for DirectX 10 (d3d10.dll)</flag>
+ <flag name="d3d11">Enable support for DirectX 11 (d3d11.dll)</flag>
+ <flag name="dxgi">Enable support for the DirectX Graphics Infrastructure (dxgi.dll)</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/dynamips/Manifest b/app-emulation/dynamips/Manifest
new file mode 100644
index 000000000000..ecad438d6708
--- /dev/null
+++ b/app-emulation/dynamips/Manifest
@@ -0,0 +1,2 @@
+DIST dynamips-0.2.23.tar.gz 835736 BLAKE2B 5ea57ffbcd289a3982d873dace5bda8941209d7a0f2e36bc0cc4266c59e266f8277a215580487fb70a505eb133672247aa76d7e41124516eb67e40b999bcd67c SHA512 b68af39cd66f10555d860437f55e63887aefdb5a949bacacf3a308cc0c4eaaab3bb9a496c5ac32fd19d3920bada807bff2af8eb66b01d8d735419fec5d134746
+DIST dynamips-0.2.24.tar.gz 845465 BLAKE2B f9f92fc29ace2be9a2612ecc543026defa251d562184ebd5dfec54d5d5ffd555a30616d56a14721e3d6edc5a933a04c64f497e3cdaaa95ce7023e142cca3f91e SHA512 960a748a43373512c64035a6fd79e24a171c490d31e55c23fd931d30dcd08fbee5e288050cdfbd36e6ca574b02fd3f4f6ed3a1e557d5053b79df4a6cd48112d2
diff --git a/app-emulation/dynamips/dynamips-0.2.23.ebuild b/app-emulation/dynamips/dynamips-0.2.23.ebuild
new file mode 100644
index 000000000000..1a0741cc4406
--- /dev/null
+++ b/app-emulation/dynamips/dynamips-0.2.23.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Cisco 7200/3600 Simulator"
+HOMEPAGE="https://github.com/GNS3/dynamips"
+SRC_URI="https://github.com/GNS3/dynamips/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ dev-libs/elfutils
+ net-libs/libpcap"
+DEPEND="${RDEPEND}"
+
+DOCS=( ChangeLog README.md README.hypervisor RELEASE-NOTES )
+
+PATCHES=( "${FILESDIR}/${PN}-0.2.18-docs.patch" )
+
+src_prepare() {
+ # comment out DYNAMIPS_FLAGS to respect CFLAGS
+ sed -e "s:^set ( DYNAMIPS_FLAGS:#&:" -i cmake/dependencies.cmake || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DANY_COMPILER=1
+ -DENABLE_IPV6=yes
+ )
+ cmake_src_configure
+}
diff --git a/app-emulation/dynamips/dynamips-0.2.24.ebuild b/app-emulation/dynamips/dynamips-0.2.24.ebuild
new file mode 100644
index 000000000000..ae8c73f6f699
--- /dev/null
+++ b/app-emulation/dynamips/dynamips-0.2.24.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Cisco 7200/3600 Simulator"
+HOMEPAGE="https://github.com/GNS3/dynamips"
+SRC_URI="https://github.com/GNS3/dynamips/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ dev-libs/elfutils
+ net-libs/libpcap"
+DEPEND="${RDEPEND}"
+
+DOCS=( ChangeLog README.md README.hypervisor RELEASE-NOTES )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.2.18-docs.patch"
+ "${FILESDIR}/${P}-cmake-minimum.patch"
+)
+
+src_prepare() {
+ # comment out DYNAMIPS_FLAGS to respect CFLAGS
+ sed -e "s:^set ( DYNAMIPS_FLAGS:#&:" -i cmake/dependencies.cmake || die
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ local mycmakeargs=(
+ -DANY_COMPILER=1
+ -DENABLE_IPV6=yes
+ )
+ cmake_src_configure
+}
diff --git a/app-emulation/dynamips/files/dynamips-0.2.18-docs.patch b/app-emulation/dynamips/files/dynamips-0.2.18-docs.patch
new file mode 100644
index 000000000000..d94da32812b4
--- /dev/null
+++ b/app-emulation/dynamips/files/dynamips-0.2.18-docs.patch
@@ -0,0 +1,20 @@
+--- a/CMakeLists.txt 2018-09-28 13:12:14 +0300
++++ b/CMakeLists.txt 2018-09-28 13:12:39 +0300
+@@ -37,16 +37,6 @@
+ add_subdirectory ( stable )
+ add_subdirectory ( unstable )
+
+-install_docs (
+- "ChangeLog"
+- "COPYING"
+- "MAINTAINERS"
+- "README.md"
+- "README.hypervisor"
+- "RELEASE-NOTES"
+- "TODO"
+- )
+-
+ # uninstall target - leaves behind any directory created during install
+ set ( _templatefile "${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" )
+ set ( _scriptfile "${CMAKE_BINARY_DIR}/cmake_uninstall.cmake" )
+
diff --git a/app-emulation/dynamips/files/dynamips-0.2.24-cmake-minimum.patch b/app-emulation/dynamips/files/dynamips-0.2.24-cmake-minimum.patch
new file mode 100644
index 000000000000..8a6cc4525a18
--- /dev/null
+++ b/app-emulation/dynamips/files/dynamips-0.2.24-cmake-minimum.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,7 +6,7 @@
+ # - ANY_COMPILER : skip compiler check (assumes gcc)
+ # - CMAKE_INSTALL_PREFIX : where to install
+
+-cmake_minimum_required ( VERSION 3.5 )
++cmake_minimum_required ( VERSION 3.12 )
+ foreach ( _dir
+ "/usr/sfw" # search in "Sun FreeWare" (SunOS)
+ "/opt/csw" # search in "OpenCSW" (SunOS)
diff --git a/app-emulation/dynamips/metadata.xml b/app-emulation/dynamips/metadata.xml
new file mode 100644
index 000000000000..e2588c662efd
--- /dev/null
+++ b/app-emulation/dynamips/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>mm1ke@gentoo.org</email>
+ <name>Michael Mair-Keimberger</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:solarwinds:dynamips</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/faudio/Manifest b/app-emulation/faudio/Manifest
new file mode 100644
index 000000000000..12a4f0d9f8e0
--- /dev/null
+++ b/app-emulation/faudio/Manifest
@@ -0,0 +1,2 @@
+DIST faudio-26.04.tar.gz 1133894 BLAKE2B af7bfe5bc6473152a123925070a7500981e84cc67e26582251b7c1ab50a4ed34ecae8a128702f2d8519613783452000d5092c5ffc0786bef443ec1a12d6fbd06 SHA512 4d24a750f3222aad36bf93e74f82726c2904bad7aa4254833dfa40c68bf6161442660bc7ba04de90fd98f2799ac6f0ebfb40fc9694ef79e8db79417403769876
+DIST faudio-26.05.tar.gz 1136187 BLAKE2B da56b50f0dcced9c16b74b56b82f37c70c9695390ef3b45cbc8b7453f0eb1526c775d2922d62fb7e2b333f2c4fa9d352da8f43c61d8caf1e04c4e15c227fe883 SHA512 523298017bfbcea2739a18406ed6860e45713049b503558e91f5e6de98993c6e6654c7358bc861a9337d74a12a0cd89f5ecac49ae9734b4856384062a64c79d0
diff --git a/app-emulation/faudio/faudio-26.04.ebuild b/app-emulation/faudio/faudio-26.04.ebuild
new file mode 100644
index 000000000000..b29949c0a633
--- /dev/null
+++ b/app-emulation/faudio/faudio-26.04.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake-multilib flag-o-matic
+
+DESCRIPTION="Accuracy-focused XAudio reimplementation for open platforms"
+HOMEPAGE="https://fna-xna.github.io/"
+SRC_URI="https://github.com/FNA-XNA/FAudio/archive/${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/FAudio-${PV}"
+
+LICENSE="ZLIB"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="debug dumpvoices sdl3 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ sdl3? ( media-libs/libsdl3[${MULTILIB_USEDEP}] )
+ !sdl3? ( media-libs/libsdl2[${MULTILIB_USEDEP},sound] )
+"
+DEPEND="${RDEPEND}"
+
+src_configure() {
+ append-cppflags -D_DEFAULT_SOURCE # usleep() in tests
+ use debug || append-cppflags -DFAUDIO_DISABLE_DEBUGCONFIGURATION
+
+ local mycmakeargs=(
+ -DBUILD_SDL3="$(usex sdl3)"
+ -DBUILD_TESTS="$(usex test)"
+ -DDUMP_VOICES="$(usex dumpvoices)"
+ )
+
+ cmake-multilib_src_configure
+}
+
+multilib_src_test() {
+ einfo "Running faudio_tests, this may take some time without output..."
+ SDL_AUDIODRIVER=dummy "${BUILD_DIR}"/faudio_tests || die
+}
diff --git a/app-emulation/faudio/faudio-26.05.ebuild b/app-emulation/faudio/faudio-26.05.ebuild
new file mode 100644
index 000000000000..70f5ae591a4b
--- /dev/null
+++ b/app-emulation/faudio/faudio-26.05.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake-multilib flag-o-matic
+
+DESCRIPTION="Accuracy-focused XAudio reimplementation for open platforms"
+HOMEPAGE="https://fna-xna.github.io/"
+SRC_URI="https://github.com/FNA-XNA/FAudio/archive/${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/FAudio-${PV}"
+
+LICENSE="ZLIB"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug dumpvoices sdl3 test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ sdl3? ( media-libs/libsdl3[${MULTILIB_USEDEP}] )
+ !sdl3? ( media-libs/libsdl2[${MULTILIB_USEDEP},sound] )
+"
+DEPEND="${RDEPEND}"
+
+src_configure() {
+ append-cppflags -D_DEFAULT_SOURCE # usleep() in tests
+ use debug || append-cppflags -DFAUDIO_DISABLE_DEBUGCONFIGURATION
+
+ local mycmakeargs=(
+ -DBUILD_SDL3="$(usex sdl3)"
+ -DBUILD_TESTS="$(usex test)"
+ -DDUMP_VOICES="$(usex dumpvoices)"
+ )
+
+ cmake-multilib_src_configure
+}
+
+multilib_src_test() {
+ einfo "Running faudio_tests, this may take some time without output..."
+ SDL_AUDIODRIVER=dummy "${BUILD_DIR}"/faudio_tests || die
+}
diff --git a/app-emulation/faudio/metadata.xml b/app-emulation/faudio/metadata.xml
new file mode 100644
index 000000000000..5439745b0df7
--- /dev/null
+++ b/app-emulation/faudio/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ FAudio is an XAudio reimplementation that focuses solely on developing
+ fully accurate DirectX Audio runtime libraries for the FNA project,
+ including XAudio2, X3DAudio, XAPO, and XACT3.
+ </longdescription>
+ <use>
+ <flag name="dumpvoices">FAudio dumps buffer data to individual files with RIFF/XWMA headers, usable with players like ffplay/testxwma.</flag>
+ <flag name="sdl3">Build against SDL3 using <pkg>media-libs/libsdl3</pkg>.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/fex-xtajit/Manifest b/app-emulation/fex-xtajit/Manifest
new file mode 100644
index 000000000000..e418767bd262
--- /dev/null
+++ b/app-emulation/fex-xtajit/Manifest
@@ -0,0 +1,12 @@
+DIST FEX-2601.tar.gz 2332430 BLAKE2B 27f99d018e63aa137c73b3cb55007c66353f14fe69639964bbf4ac2db2c049cf32a6fae4e73d523ba46c7c514bda7c8a7a37a50251eb5f4482a5d8f3dd331049 SHA512 7aea0ee09d331c030a7948234500de34145882ea74fd3283c458002202fac5b1ac02d811d7d20fd4dc68752f7afc7b41810097a52fbac6971f05c0569de3e949
+DIST FEX-2603.tar.gz 2353841 BLAKE2B e54da24a7fc3769efd5263aaed3c1f7a98395ea71da258b563cffd6d728928edc0efe7d27784c28376504c8236f10368dd9ae539be748063e1e0f7fabb3d50cd SHA512 384f80f9f6cc714f7ebb812a7a4805df68b2be4edd658690a60c3ef2ee220fea164b94ee2846a8bdf7f71c8dd5023b25ce51f72891ce9d964005ea4377947e1a
+DIST FEX-2604.tar.gz 2373960 BLAKE2B 53934dc269e31c6e1bf9e40a14a1c7b4fe4067c5dfdb4f990274266ff16c94fca4cc39fd551ce9037cf8de5913bf1a77ac64b14e4bda3569720c6531cd80aa32 SHA512 0c94276522fa3f3fee15fc2a02888627317852baa61c8c451f8ffaa1810fb0d4deb0b4424f3a5061dda47f5368a15748d0dffcae2c34ae9be8a3cba0c19e1295
+DIST FEX-2605.tar.gz 2394653 BLAKE2B 2debb3ba18187a4ec3ebec45ff960dade12a451fdf82f10d776e707187a54a6ad7b6cb680c681da0be4a48cffc8f2638aba2ef2e6ff7f1d5dc48c18e75305362 SHA512 b930960838a3baa1b70493d980a92b166e7ac0a49461617733c95b2e1d13b562c2b8ea5051bd1ca48b288f50bae3889718f8ab69130c18fdd63f22862a7a93c2
+DIST cpp-optparse-9f94388a339fcbb0bc95c17768eb786c85988f6e.tar.gz 13218 BLAKE2B 8a9857b639509d66e59732e3cf84879da6eb714f48d55fe2e00c7ee3e5ae2e0be093eeb1b004b6d070766f5fedfd4173f11f6205a961f9e65bfa7848eb225024 SHA512 600559354c8a3e233f7d2d855a8325b747b6656eb05fe13b3fae31f7f41154968b995bc3a519b0c61e5db904d4bca4cb17eb72a2f35a1a273e275ec34593b92f
+DIST fmt-407c905e45ad75fc29bf0f9bb7c5c2fd3475976f.tar.gz 711737 BLAKE2B 0b9d8d8077c6d0ba53ce6188bf8bc4623657d9c17bca6bfe756c2cf5c9a0f33756b2f435c977a7a93e2fdbeefce46fa5d8797a5a042b8059e1698b0223ede3d2 SHA512 90d92dc436be1b79263722a4677458c077e78f862bb41070dc4df65019b6ac03df52b1354213b4a11d5edf24a1bbf0f96ef28b52ca6abf23535bbf5b9f7f5af9
+DIST jemalloc-97d986993dc735a2022856e7e9fdfa1180e8527a.tar.gz 847985 BLAKE2B 0dd648be3ec3d961e964c90490f364d2ffc4aa2949341c86332e51dde804d8c5a5a4d82a57bf0282534682d67206e6341a5f47ea082184a9a0031a78f4dfcf76 SHA512 adb7af47bdc5bde9b67946a98235010415c463af0679e40bdf032aabb019403345ff5b699d24d46087bfbc5c4ad47a3b7a466c595d4df1e344293bd321753a21
+DIST range-v3-ca1388fb9da8e69314dda222dc7b139ca84e092f.tar.gz 585661 BLAKE2B 6955643b9d569b101079c41154cd293d12a0b197078cf03376abd4555f9ff64b7c4e755a583a517c82f64a590bdc38a6d332a43ccd42e636057917754c75138a SHA512 6a151236845d9758555be81640dba773abf90c2ee6410d3eadbdc7d993bbedcd359251c334a3fa20eb6148aa3d357e036ae5d94337a6837fd4ae09c3b842da9d
+DIST robin-map-d5683d9f1891e5b04e3e3b2192b5349dc8d814ea.tar.gz 70652 BLAKE2B 03ca6c6c333661ece0ac818d43eee37ead3e0a0acb71c45df201bff30715db89b8f2be3f5bac0991379327f2fac4273ba1bd3d6c4102e5a472a7c7567fae4651 SHA512 23fe18c7d2dda9bc4216201a7e5935c8dc9f51066173e95d514360e3310c994c4dc7786a33f43cb7d15dcceb913375a48b8c02529eacde58c0a80f0e91e9b94d
+DIST rpmalloc-1f6fb494f2a4237c35494786a3c8f1eba048b217.tar.gz 76365 BLAKE2B 30d194b71f6462ef0b99a67eb068b46aea1f8305be253ba5aba883c5a7954fbc8fe4853b5f86d6c72ded3e87ba2fe5b86ff53a93ea902001e9234ffea72d03d8 SHA512 d9de7ce8ca2608fbf0db0c398bb6d06d1585837cee668918ce361cfbde689c9608593666e570e32c83cc1e535184a27739a7aab3c6bdd45dde4821a3e1524ef1
+DIST unordered_dense-3234af2c03549bc85656bfd3a86993bf1cd8aef1.tar.gz 914070 BLAKE2B d6ebb2af2a523b096abb64adeb8ac273f32d0ae31c15a97480674473a464e768aadcefd963a2c184cf18c626d6f0bc9431d13fee11a9edf23c65c7b9d3a49c9d SHA512 67f44a62d0a32b99d42c94f204eb995effbb39f374494e992bcea1c7b9b29df5376129aec9f87868df48ddf706f44cf4f2cffc2a928f667057e418aed8d56626
+DIST xxhash-e626a72bc2321cd320e953a0ccf1584cad60f363.tar.gz 1147772 BLAKE2B b96ef9287863cf01d36e73c418f4d2045d00e5d0f26a4e2a73c029cd1e627599e4ff8e5182cfc29e68035b539cecb2d5a0e36abec959685b166d9f216074b086 SHA512 eae9f72abc0bf8fa2cf7087411fd42c2e4640f7f4787bb080d65894e83db8dc78203502bbad6a08c662477e69dc8b93364f9360bf1cd8c2b87deb6cd9440ff4d
diff --git a/app-emulation/fex-xtajit/fex-xtajit-2601.ebuild b/app-emulation/fex-xtajit/fex-xtajit-2601.ebuild
new file mode 100644
index 000000000000..0b3cd4084d9e
--- /dev/null
+++ b/app-emulation/fex-xtajit/fex-xtajit-2601.ebuild
@@ -0,0 +1,154 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic ninja-utils toolchain-funcs
+
+DESCRIPTION="A wine emulation dll for running x86 application on an arm64 host"
+HOMEPAGE="https://fex-emu.com"
+
+JEMALLOC_HASH="97d986993dc735a2022856e7e9fdfa1180e8527a"
+CPP_OPTPARSE_HASH="9f94388a339fcbb0bc95c17768eb786c85988f6e"
+ROBIN_MAP_HASH="d5683d9f1891e5b04e3e3b2192b5349dc8d814ea"
+FMT_HASH="407c905e45ad75fc29bf0f9bb7c5c2fd3475976f"
+XXHASH_HASH="e626a72bc2321cd320e953a0ccf1584cad60f363"
+RANGE_V3_HASH="ca1388fb9da8e69314dda222dc7b139ca84e092f"
+
+SRC_URI="
+ https://github.com/FEX-Emu/jemalloc/archive/${JEMALLOC_HASH}.tar.gz -> jemalloc-${JEMALLOC_HASH}.tar.gz
+ https://github.com/Sonicadvance1/cpp-optparse/archive/${CPP_OPTPARSE_HASH}.tar.gz -> cpp-optparse-${CPP_OPTPARSE_HASH}.tar.gz
+ https://github.com/FEX-Emu/robin-map/archive/${ROBIN_MAP_HASH}.tar.gz -> robin-map-${ROBIN_MAP_HASH}.tar.gz
+ https://github.com/Cyan4973/xxHash/archive/${XXHASH_HASH}.tar.gz -> xxhash-${XXHASH_HASH}.tar.gz
+ https://github.com/fmtlib/fmt/archive/${FMT_HASH}.tar.gz -> fmt-${FMT_HASH}.tar.gz
+ https://github.com/ericniebler/range-v3/archive/${RANGE_V3_HASH}.tar.gz -> range-v3-${RANGE_V3_HASH}.tar.gz
+ https://github.com/FEX-Emu/FEX/archive/refs/tags/FEX-${PV}.tar.gz
+"
+
+S="${WORKDIR}/FEX-FEX-${PV}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="-* ~arm64"
+IUSE="+wow64 +arm64ec"
+REQUIRED_USE="|| ( wow64 arm64ec )"
+
+BDEPEND="
+ arm64ec? ( dev-util/llvm-mingw64[arm64ec-pe(-)] )
+ dev-build/cmake
+ >=dev-util/llvm-mingw64-13.0.0
+ llvm-core/clang
+ llvm-core/llvm
+"
+
+pkg_setup() {
+ HOSTS=(
+ $(usev wow64 aarch64-w64-mingw32)
+ $(usev arm64ec arm64ec-w64-mingw32)
+ )
+}
+
+src_unpack() {
+ default
+ local -A deps=(
+ jemalloc "jemalloc-${JEMALLOC_HASH}"
+ robin-map "robin-map-${ROBIN_MAP_HASH}"
+ xxhash "xxHash-${XXHASH_HASH}"
+ fmt "fmt-${FMT_HASH}"
+ range-v3 "range-v3-${RANGE_V3_HASH}"
+ )
+ for dep in "${!deps[@]}"; do
+ rmdir "${S}/External/${dep}" || die
+ mv "${WORKDIR}/${deps[${dep}]}" "${S}/External/${dep}"
+ done
+ rmdir "${S}/Source/Common/cpp-optparse" || die
+ mv "${WORKDIR}/cpp-optparse-${CPP_OPTPARSE_HASH}" "${S}/Source/Common/cpp-optparse" || die
+}
+
+src_configure() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_configure
+ )
+ done
+}
+
+setup_env() {
+ PATH="${BROOT}/usr/lib/llvm-mingw64/bin:${PATH}"
+ CC=${CHOST}-clang
+ CXX=${CHOST}-clang++
+ LD=${CHOST}-clang
+ AR=llvm-ar
+ NM=llvm-nm
+ RANLIB=llvm-ranlib
+ STRIP=llvm-strip
+ RC=${CHOST}-windres
+ KERNEL=Winnt
+ tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+ strip-flags
+ filter-lto
+ filter-flags '-fuse-ld=*'
+ strip-unsupported-flags
+}
+
+per_host_src_configure() {
+ mkdir "${WORKDIR}/${CHOST}-build" || die
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ cmake -GNinja \
+ -DCMAKE_C_COMPILER_WORKS=1 \
+ -DCMAKE_CXX_COMPILER_WORKS=1 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_TOOLCHAIN_FILE="${S}/Data/CMake/toolchain_mingw.cmake" \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib/fex-xtajit \
+ -DENABLE_LTO=False \
+ -DMINGW_TRIPLE=${CHOST} \
+ -DBUILD_TESTING=False \
+ -DENABLE_JEMALLOC_GLIBC_ALLOC=False \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DENABLE_CCACHE=FALSE \
+ -DBUILD_FEXCONFIG=FALSE \
+ -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
+ -DCMAKE_DISABLE_FIND_PACKAGE_fmt=true \
+ -DCMAKE_DISABLE_FIND_PACKAGE_range-v3=true \
+ "${S}" || die
+ popd >/dev/null || die
+}
+
+src_compile() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_compile
+ )
+ done
+}
+
+per_host_src_compile() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ eninja
+ popd >/dev/null || die
+}
+
+src_install() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_install
+ )
+ done
+}
+
+per_host_src_install() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ DESTDIR="${D}" eninja install
+ popd >/dev/null || die
+ rm -r "${ED}/usr/"{include,share} || die
+}
+
+pkg_postinst() {
+ elog "If you had already created a wine prefix, run wineboot -u"
+ elog "to install x86 emulation support, or update it's local copy"
+ elog "of the relevant files."
+}
diff --git a/app-emulation/fex-xtajit/fex-xtajit-2603.ebuild b/app-emulation/fex-xtajit/fex-xtajit-2603.ebuild
new file mode 100644
index 000000000000..f0091c31ce10
--- /dev/null
+++ b/app-emulation/fex-xtajit/fex-xtajit-2603.ebuild
@@ -0,0 +1,153 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic ninja-utils toolchain-funcs
+
+DESCRIPTION="A wine emulation dll for running x86 application on an arm64 host"
+HOMEPAGE="https://fex-emu.com"
+
+RPMALLOC_HASH="1f6fb494f2a4237c35494786a3c8f1eba048b217"
+CPP_OPTPARSE_HASH="9f94388a339fcbb0bc95c17768eb786c85988f6e"
+UNORDERED_DENSE_HASH="3234af2c03549bc85656bfd3a86993bf1cd8aef1"
+FMT_HASH="407c905e45ad75fc29bf0f9bb7c5c2fd3475976f"
+XXHASH_HASH="e626a72bc2321cd320e953a0ccf1584cad60f363"
+RANGE_V3_HASH="ca1388fb9da8e69314dda222dc7b139ca84e092f"
+
+SRC_URI="
+ https://github.com/FEX-Emu/rpmalloc/archive/${RPMALLOC_HASH}.tar.gz -> rpmalloc-${RPMALLOC_HASH}.tar.gz
+ https://github.com/Sonicadvance1/cpp-optparse/archive/${CPP_OPTPARSE_HASH}.tar.gz -> cpp-optparse-${CPP_OPTPARSE_HASH}.tar.gz
+ https://github.com/martinus/unordered_dense/archive/${UNORDERED_DENSE_HASH}.tar.gz -> unordered_dense-${UNORDERED_DENSE_HASH}.tar.gz
+ https://github.com/Cyan4973/xxHash/archive/${XXHASH_HASH}.tar.gz -> xxhash-${XXHASH_HASH}.tar.gz
+ https://github.com/fmtlib/fmt/archive/${FMT_HASH}.tar.gz -> fmt-${FMT_HASH}.tar.gz
+ https://github.com/ericniebler/range-v3/archive/${RANGE_V3_HASH}.tar.gz -> range-v3-${RANGE_V3_HASH}.tar.gz
+ https://github.com/FEX-Emu/FEX/archive/refs/tags/FEX-${PV}.tar.gz
+"
+
+S="${WORKDIR}/FEX-FEX-${PV}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="-* ~arm64"
+IUSE="+wow64 +arm64ec"
+REQUIRED_USE="|| ( wow64 arm64ec )"
+
+BDEPEND="
+ arm64ec? ( dev-util/llvm-mingw64[arm64ec-pe(-)] )
+ dev-build/cmake
+ >=dev-util/llvm-mingw64-13.0.0
+ llvm-core/clang
+ llvm-core/llvm
+"
+
+pkg_setup() {
+ HOSTS=(
+ $(usev wow64 aarch64-w64-mingw32)
+ $(usev arm64ec arm64ec-w64-mingw32)
+ )
+}
+
+src_unpack() {
+ default
+ local -A deps=(
+ rpmalloc "rpmalloc-${RPMALLOC_HASH}"
+ unordered_dense "unordered_dense-${UNORDERED_DENSE_HASH}"
+ xxhash "xxHash-${XXHASH_HASH}"
+ fmt "fmt-${FMT_HASH}"
+ range-v3 "range-v3-${RANGE_V3_HASH}"
+ )
+ for dep in "${!deps[@]}"; do
+ rmdir "${S}/External/${dep}" || die
+ mv "${WORKDIR}/${deps[${dep}]}" "${S}/External/${dep}"
+ done
+ rmdir "${S}/Source/Common/cpp-optparse" || die
+ mv "${WORKDIR}/cpp-optparse-${CPP_OPTPARSE_HASH}" "${S}/Source/Common/cpp-optparse" || die
+}
+
+src_configure() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_configure
+ )
+ done
+}
+
+setup_env() {
+ PATH="${BROOT}/usr/lib/llvm-mingw64/bin:${PATH}"
+ CC=${CHOST}-clang
+ CXX=${CHOST}-clang++
+ LD=${CHOST}-clang
+ AR=llvm-ar
+ NM=llvm-nm
+ RANLIB=llvm-ranlib
+ STRIP=llvm-strip
+ RC=${CHOST}-windres
+ KERNEL=Winnt
+ tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+ strip-flags
+ filter-lto
+ filter-flags '-fuse-ld=*'
+ strip-unsupported-flags
+}
+
+per_host_src_configure() {
+ mkdir "${WORKDIR}/${CHOST}-build" || die
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ cmake -GNinja \
+ -DCMAKE_C_COMPILER_WORKS=1 \
+ -DCMAKE_CXX_COMPILER_WORKS=1 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_TOOLCHAIN_FILE="${S}/Data/CMake/toolchain_mingw.cmake" \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib/fex-xtajit \
+ -DENABLE_LTO=False \
+ -DMINGW_TRIPLE=${CHOST} \
+ -DBUILD_TESTING=False \
+ -DENABLE_JEMALLOC_GLIBC_ALLOC=False \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DENABLE_CCACHE=FALSE \
+ -DBUILD_FEXCONFIG=FALSE \
+ -DCMAKE_DISABLE_FIND_PACKAGE_fmt=true \
+ -DCMAKE_DISABLE_FIND_PACKAGE_range-v3=true \
+ "${S}" || die
+ popd >/dev/null || die
+}
+
+src_compile() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_compile
+ )
+ done
+}
+
+per_host_src_compile() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ eninja
+ popd >/dev/null || die
+}
+
+src_install() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_install
+ )
+ done
+}
+
+per_host_src_install() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ DESTDIR="${D}" eninja install
+ popd >/dev/null || die
+ rm -r "${ED}/usr/"{include,share} || die
+}
+
+pkg_postinst() {
+ elog "If you had already created a wine prefix, run wineboot -u"
+ elog "to install x86 emulation support, or update it's local copy"
+ elog "of the relevant files."
+}
diff --git a/app-emulation/fex-xtajit/fex-xtajit-2604.ebuild b/app-emulation/fex-xtajit/fex-xtajit-2604.ebuild
new file mode 100644
index 000000000000..f0091c31ce10
--- /dev/null
+++ b/app-emulation/fex-xtajit/fex-xtajit-2604.ebuild
@@ -0,0 +1,153 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic ninja-utils toolchain-funcs
+
+DESCRIPTION="A wine emulation dll for running x86 application on an arm64 host"
+HOMEPAGE="https://fex-emu.com"
+
+RPMALLOC_HASH="1f6fb494f2a4237c35494786a3c8f1eba048b217"
+CPP_OPTPARSE_HASH="9f94388a339fcbb0bc95c17768eb786c85988f6e"
+UNORDERED_DENSE_HASH="3234af2c03549bc85656bfd3a86993bf1cd8aef1"
+FMT_HASH="407c905e45ad75fc29bf0f9bb7c5c2fd3475976f"
+XXHASH_HASH="e626a72bc2321cd320e953a0ccf1584cad60f363"
+RANGE_V3_HASH="ca1388fb9da8e69314dda222dc7b139ca84e092f"
+
+SRC_URI="
+ https://github.com/FEX-Emu/rpmalloc/archive/${RPMALLOC_HASH}.tar.gz -> rpmalloc-${RPMALLOC_HASH}.tar.gz
+ https://github.com/Sonicadvance1/cpp-optparse/archive/${CPP_OPTPARSE_HASH}.tar.gz -> cpp-optparse-${CPP_OPTPARSE_HASH}.tar.gz
+ https://github.com/martinus/unordered_dense/archive/${UNORDERED_DENSE_HASH}.tar.gz -> unordered_dense-${UNORDERED_DENSE_HASH}.tar.gz
+ https://github.com/Cyan4973/xxHash/archive/${XXHASH_HASH}.tar.gz -> xxhash-${XXHASH_HASH}.tar.gz
+ https://github.com/fmtlib/fmt/archive/${FMT_HASH}.tar.gz -> fmt-${FMT_HASH}.tar.gz
+ https://github.com/ericniebler/range-v3/archive/${RANGE_V3_HASH}.tar.gz -> range-v3-${RANGE_V3_HASH}.tar.gz
+ https://github.com/FEX-Emu/FEX/archive/refs/tags/FEX-${PV}.tar.gz
+"
+
+S="${WORKDIR}/FEX-FEX-${PV}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="-* ~arm64"
+IUSE="+wow64 +arm64ec"
+REQUIRED_USE="|| ( wow64 arm64ec )"
+
+BDEPEND="
+ arm64ec? ( dev-util/llvm-mingw64[arm64ec-pe(-)] )
+ dev-build/cmake
+ >=dev-util/llvm-mingw64-13.0.0
+ llvm-core/clang
+ llvm-core/llvm
+"
+
+pkg_setup() {
+ HOSTS=(
+ $(usev wow64 aarch64-w64-mingw32)
+ $(usev arm64ec arm64ec-w64-mingw32)
+ )
+}
+
+src_unpack() {
+ default
+ local -A deps=(
+ rpmalloc "rpmalloc-${RPMALLOC_HASH}"
+ unordered_dense "unordered_dense-${UNORDERED_DENSE_HASH}"
+ xxhash "xxHash-${XXHASH_HASH}"
+ fmt "fmt-${FMT_HASH}"
+ range-v3 "range-v3-${RANGE_V3_HASH}"
+ )
+ for dep in "${!deps[@]}"; do
+ rmdir "${S}/External/${dep}" || die
+ mv "${WORKDIR}/${deps[${dep}]}" "${S}/External/${dep}"
+ done
+ rmdir "${S}/Source/Common/cpp-optparse" || die
+ mv "${WORKDIR}/cpp-optparse-${CPP_OPTPARSE_HASH}" "${S}/Source/Common/cpp-optparse" || die
+}
+
+src_configure() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_configure
+ )
+ done
+}
+
+setup_env() {
+ PATH="${BROOT}/usr/lib/llvm-mingw64/bin:${PATH}"
+ CC=${CHOST}-clang
+ CXX=${CHOST}-clang++
+ LD=${CHOST}-clang
+ AR=llvm-ar
+ NM=llvm-nm
+ RANLIB=llvm-ranlib
+ STRIP=llvm-strip
+ RC=${CHOST}-windres
+ KERNEL=Winnt
+ tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+ strip-flags
+ filter-lto
+ filter-flags '-fuse-ld=*'
+ strip-unsupported-flags
+}
+
+per_host_src_configure() {
+ mkdir "${WORKDIR}/${CHOST}-build" || die
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ cmake -GNinja \
+ -DCMAKE_C_COMPILER_WORKS=1 \
+ -DCMAKE_CXX_COMPILER_WORKS=1 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_TOOLCHAIN_FILE="${S}/Data/CMake/toolchain_mingw.cmake" \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib/fex-xtajit \
+ -DENABLE_LTO=False \
+ -DMINGW_TRIPLE=${CHOST} \
+ -DBUILD_TESTING=False \
+ -DENABLE_JEMALLOC_GLIBC_ALLOC=False \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DENABLE_CCACHE=FALSE \
+ -DBUILD_FEXCONFIG=FALSE \
+ -DCMAKE_DISABLE_FIND_PACKAGE_fmt=true \
+ -DCMAKE_DISABLE_FIND_PACKAGE_range-v3=true \
+ "${S}" || die
+ popd >/dev/null || die
+}
+
+src_compile() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_compile
+ )
+ done
+}
+
+per_host_src_compile() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ eninja
+ popd >/dev/null || die
+}
+
+src_install() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_install
+ )
+ done
+}
+
+per_host_src_install() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ DESTDIR="${D}" eninja install
+ popd >/dev/null || die
+ rm -r "${ED}/usr/"{include,share} || die
+}
+
+pkg_postinst() {
+ elog "If you had already created a wine prefix, run wineboot -u"
+ elog "to install x86 emulation support, or update it's local copy"
+ elog "of the relevant files."
+}
diff --git a/app-emulation/fex-xtajit/fex-xtajit-2605.ebuild b/app-emulation/fex-xtajit/fex-xtajit-2605.ebuild
new file mode 100644
index 000000000000..f0091c31ce10
--- /dev/null
+++ b/app-emulation/fex-xtajit/fex-xtajit-2605.ebuild
@@ -0,0 +1,153 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic ninja-utils toolchain-funcs
+
+DESCRIPTION="A wine emulation dll for running x86 application on an arm64 host"
+HOMEPAGE="https://fex-emu.com"
+
+RPMALLOC_HASH="1f6fb494f2a4237c35494786a3c8f1eba048b217"
+CPP_OPTPARSE_HASH="9f94388a339fcbb0bc95c17768eb786c85988f6e"
+UNORDERED_DENSE_HASH="3234af2c03549bc85656bfd3a86993bf1cd8aef1"
+FMT_HASH="407c905e45ad75fc29bf0f9bb7c5c2fd3475976f"
+XXHASH_HASH="e626a72bc2321cd320e953a0ccf1584cad60f363"
+RANGE_V3_HASH="ca1388fb9da8e69314dda222dc7b139ca84e092f"
+
+SRC_URI="
+ https://github.com/FEX-Emu/rpmalloc/archive/${RPMALLOC_HASH}.tar.gz -> rpmalloc-${RPMALLOC_HASH}.tar.gz
+ https://github.com/Sonicadvance1/cpp-optparse/archive/${CPP_OPTPARSE_HASH}.tar.gz -> cpp-optparse-${CPP_OPTPARSE_HASH}.tar.gz
+ https://github.com/martinus/unordered_dense/archive/${UNORDERED_DENSE_HASH}.tar.gz -> unordered_dense-${UNORDERED_DENSE_HASH}.tar.gz
+ https://github.com/Cyan4973/xxHash/archive/${XXHASH_HASH}.tar.gz -> xxhash-${XXHASH_HASH}.tar.gz
+ https://github.com/fmtlib/fmt/archive/${FMT_HASH}.tar.gz -> fmt-${FMT_HASH}.tar.gz
+ https://github.com/ericniebler/range-v3/archive/${RANGE_V3_HASH}.tar.gz -> range-v3-${RANGE_V3_HASH}.tar.gz
+ https://github.com/FEX-Emu/FEX/archive/refs/tags/FEX-${PV}.tar.gz
+"
+
+S="${WORKDIR}/FEX-FEX-${PV}"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="-* ~arm64"
+IUSE="+wow64 +arm64ec"
+REQUIRED_USE="|| ( wow64 arm64ec )"
+
+BDEPEND="
+ arm64ec? ( dev-util/llvm-mingw64[arm64ec-pe(-)] )
+ dev-build/cmake
+ >=dev-util/llvm-mingw64-13.0.0
+ llvm-core/clang
+ llvm-core/llvm
+"
+
+pkg_setup() {
+ HOSTS=(
+ $(usev wow64 aarch64-w64-mingw32)
+ $(usev arm64ec arm64ec-w64-mingw32)
+ )
+}
+
+src_unpack() {
+ default
+ local -A deps=(
+ rpmalloc "rpmalloc-${RPMALLOC_HASH}"
+ unordered_dense "unordered_dense-${UNORDERED_DENSE_HASH}"
+ xxhash "xxHash-${XXHASH_HASH}"
+ fmt "fmt-${FMT_HASH}"
+ range-v3 "range-v3-${RANGE_V3_HASH}"
+ )
+ for dep in "${!deps[@]}"; do
+ rmdir "${S}/External/${dep}" || die
+ mv "${WORKDIR}/${deps[${dep}]}" "${S}/External/${dep}"
+ done
+ rmdir "${S}/Source/Common/cpp-optparse" || die
+ mv "${WORKDIR}/cpp-optparse-${CPP_OPTPARSE_HASH}" "${S}/Source/Common/cpp-optparse" || die
+}
+
+src_configure() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_configure
+ )
+ done
+}
+
+setup_env() {
+ PATH="${BROOT}/usr/lib/llvm-mingw64/bin:${PATH}"
+ CC=${CHOST}-clang
+ CXX=${CHOST}-clang++
+ LD=${CHOST}-clang
+ AR=llvm-ar
+ NM=llvm-nm
+ RANLIB=llvm-ranlib
+ STRIP=llvm-strip
+ RC=${CHOST}-windres
+ KERNEL=Winnt
+ tc-export CC CXX LD AR NM OBJDUMP RANLIB PKG_CONFIG
+
+ strip-flags
+ filter-lto
+ filter-flags '-fuse-ld=*'
+ strip-unsupported-flags
+}
+
+per_host_src_configure() {
+ mkdir "${WORKDIR}/${CHOST}-build" || die
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ cmake -GNinja \
+ -DCMAKE_C_COMPILER_WORKS=1 \
+ -DCMAKE_CXX_COMPILER_WORKS=1 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_TOOLCHAIN_FILE="${S}/Data/CMake/toolchain_mingw.cmake" \
+ -DCMAKE_INSTALL_LIBDIR=/usr/lib/fex-xtajit \
+ -DENABLE_LTO=False \
+ -DMINGW_TRIPLE=${CHOST} \
+ -DBUILD_TESTING=False \
+ -DENABLE_JEMALLOC_GLIBC_ALLOC=False \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DENABLE_CCACHE=FALSE \
+ -DBUILD_FEXCONFIG=FALSE \
+ -DCMAKE_DISABLE_FIND_PACKAGE_fmt=true \
+ -DCMAKE_DISABLE_FIND_PACKAGE_range-v3=true \
+ "${S}" || die
+ popd >/dev/null || die
+}
+
+src_compile() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_compile
+ )
+ done
+}
+
+per_host_src_compile() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ eninja
+ popd >/dev/null || die
+}
+
+src_install() {
+ for CHOST in ${HOSTS[@]}; do
+ (
+ setup_env
+ per_host_src_install
+ )
+ done
+}
+
+per_host_src_install() {
+ pushd "${WORKDIR}/${CHOST}-build" >/dev/null || die
+ DESTDIR="${D}" eninja install
+ popd >/dev/null || die
+ rm -r "${ED}/usr/"{include,share} || die
+}
+
+pkg_postinst() {
+ elog "If you had already created a wine prefix, run wineboot -u"
+ elog "to install x86 emulation support, or update it's local copy"
+ elog "of the relevant files."
+}
diff --git a/app-emulation/fex-xtajit/metadata.xml b/app-emulation/fex-xtajit/metadata.xml
new file mode 100644
index 000000000000..636d00b7013f
--- /dev/null
+++ b/app-emulation/fex-xtajit/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>asahi@gentoo.org</email>
+ </maintainer>
+ <use>
+ <flag name="arm64ec">Enable x86_64 emulation using arm64ec</flag>
+ <flag name="wow64">Enable x86 (32-bit) emulation using wow64</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/firecracker-bin/Manifest b/app-emulation/firecracker-bin/Manifest
new file mode 100644
index 000000000000..32375bfb4346
--- /dev/null
+++ b/app-emulation/firecracker-bin/Manifest
@@ -0,0 +1,4 @@
+DIST firecracker-v1.14.4-aarch64.tgz 7390160 BLAKE2B 3473aeb684edeeec97584f4f9e0737335d48f8f4dfa505c58ae7a66161a1bb04bc4087d363deb9324d99f9febc23bc8ac3e332e104e0739f676f0289e917010a SHA512 0a4862e2c96f2ed807dd113ef4eab52ac88b9fb38cb5f07aac7b96aa5e7846cc810928c0ee064a2f3393dda85a795d75f1b9bb3562e50702d5521cd2b6a6646a
+DIST firecracker-v1.14.4-x86_64.tgz 7668273 BLAKE2B 6132167e3e34864b6804c7fb5025fb183f849a800621045566b107f4492ba04743a176cb64c9848f5a82323a29f5fb326c44aa1d30301a0c717b5e05450b5e5c SHA512 d8bd3e0eba5b20654ec75b1b915ae2e18eee452e64e980190364067103f5e2df350a35a4fbb631c71ee25388ca81b8b47e12a16ee521b34f612c391f363b6465
+DIST firecracker-v1.15.1-aarch64.tgz 7422699 BLAKE2B 253ec53eb13f825db7ee1c5cff4ea57c27bb1549e55eace7cc2147d3d9b32244ddc023eebeba565d27a611a72aaab8695d0e3752414e53c85a9a20a5ba986ecf SHA512 685e2d87e37ffab3b2d6df99a429f8a22c9381c45788d3b8f98b6f6e94dd8af01a89e3a04e48e5bc98986f4a880b0e8867785b2409760fd934710e86de016b1a
+DIST firecracker-v1.15.1-x86_64.tgz 7622285 BLAKE2B fa14cadb53998ac95997ddc5951464842de0b59f96bf2e71ab7777becc5248a27ad2722a348b3733d09b5ecf5afbbcaa08c099c5071c4a05d3bb985619784bb7 SHA512 2dea44f530af116b442daf339a6da9af7ba4ee924313aaa8c781051b8141fb9a5d6606da0f1c2cf5498da36b8cfd3ee86b9cac573e66afacbd4bb7a66b2dd559
diff --git a/app-emulation/firecracker-bin/firecracker-bin-1.14.4.ebuild b/app-emulation/firecracker-bin/firecracker-bin-1.14.4.ebuild
new file mode 100644
index 000000000000..20eb7212cfa8
--- /dev/null
+++ b/app-emulation/firecracker-bin/firecracker-bin-1.14.4.ebuild
@@ -0,0 +1,87 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+DESCRIPTION="Secure and fast microVMs for serverless computing (static build)"
+HOMEPAGE="https://firecracker-microvm.github.io https://github.com/firecracker-microvm/firecracker"
+SRC_URI="
+ amd64? (
+ https://github.com/firecracker-microvm/firecracker/releases/download/v${PV}/firecracker-v${PV}-x86_64.tgz
+ )
+ arm64? (
+ https://github.com/firecracker-microvm/firecracker/releases/download/v${PV}/firecracker-v${PV}-aarch64.tgz
+ )"
+
+S="${WORKDIR}"
+
+LICENSE="|| ( Apache-2.0 MIT Apache-2.0-with-LLVM-exceptions ) MPL-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+RESTRICT="test strip"
+
+RDEPEND="acct-group/kvm"
+
+QA_PREBUILT="usr/bin/cpu-template-helper
+ usr/bin/firecracker
+ usr/bin/jailer
+ usr/bin/rebase-snap
+ usr/bin/seccompiler-bin
+ usr/bin/snapshot-editor"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 4 14; then
+ eerror "Firecracker requires a host kernel of 4.14 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use"
+ ERROR_TUN+=" virtual network devices."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+
+ if use amd64; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+}
+
+src_compile() { :; }
+
+src_install() {
+ local my_arch
+ if use amd64; then
+ my_arch=x86_64
+ elif use arm64; then
+ my_arch=aarch64
+ fi
+
+ dodoc "release-v${PV}-${my_arch}/firecracker_spec-v${PV}.yaml"
+ dodoc "release-v${PV}-${my_arch}/seccomp-filter-v${PV}-${my_arch}.json"
+
+ newbin "release-v${PV}-${my_arch}/cpu-template-helper-v${PV}-${my_arch}" cpu-template-helper
+ newbin "release-v${PV}-${my_arch}/firecracker-v${PV}-${my_arch}" firecracker
+ newbin "release-v${PV}-${my_arch}/jailer-v${PV}-${my_arch}" jailer
+ newbin "release-v${PV}-${my_arch}/rebase-snap-v${PV}-${my_arch}" rebase-snap
+ newbin "release-v${PV}-${my_arch}/seccompiler-bin-v${PV}-${my_arch}" seccompiler-bin
+ newbin "release-v${PV}-${my_arch}/snapshot-editor-v${PV}-${my_arch}" snapshot-editor
+}
diff --git a/app-emulation/firecracker-bin/firecracker-bin-1.15.1.ebuild b/app-emulation/firecracker-bin/firecracker-bin-1.15.1.ebuild
new file mode 100644
index 000000000000..20eb7212cfa8
--- /dev/null
+++ b/app-emulation/firecracker-bin/firecracker-bin-1.15.1.ebuild
@@ -0,0 +1,87 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info
+
+DESCRIPTION="Secure and fast microVMs for serverless computing (static build)"
+HOMEPAGE="https://firecracker-microvm.github.io https://github.com/firecracker-microvm/firecracker"
+SRC_URI="
+ amd64? (
+ https://github.com/firecracker-microvm/firecracker/releases/download/v${PV}/firecracker-v${PV}-x86_64.tgz
+ )
+ arm64? (
+ https://github.com/firecracker-microvm/firecracker/releases/download/v${PV}/firecracker-v${PV}-aarch64.tgz
+ )"
+
+S="${WORKDIR}"
+
+LICENSE="|| ( Apache-2.0 MIT Apache-2.0-with-LLVM-exceptions ) MPL-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+RESTRICT="test strip"
+
+RDEPEND="acct-group/kvm"
+
+QA_PREBUILT="usr/bin/cpu-template-helper
+ usr/bin/firecracker
+ usr/bin/jailer
+ usr/bin/rebase-snap
+ usr/bin/seccompiler-bin
+ usr/bin/snapshot-editor"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 4 14; then
+ eerror "Firecracker requires a host kernel of 4.14 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use"
+ ERROR_TUN+=" virtual network devices."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+
+ if use amd64; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+}
+
+src_compile() { :; }
+
+src_install() {
+ local my_arch
+ if use amd64; then
+ my_arch=x86_64
+ elif use arm64; then
+ my_arch=aarch64
+ fi
+
+ dodoc "release-v${PV}-${my_arch}/firecracker_spec-v${PV}.yaml"
+ dodoc "release-v${PV}-${my_arch}/seccomp-filter-v${PV}-${my_arch}.json"
+
+ newbin "release-v${PV}-${my_arch}/cpu-template-helper-v${PV}-${my_arch}" cpu-template-helper
+ newbin "release-v${PV}-${my_arch}/firecracker-v${PV}-${my_arch}" firecracker
+ newbin "release-v${PV}-${my_arch}/jailer-v${PV}-${my_arch}" jailer
+ newbin "release-v${PV}-${my_arch}/rebase-snap-v${PV}-${my_arch}" rebase-snap
+ newbin "release-v${PV}-${my_arch}/seccompiler-bin-v${PV}-${my_arch}" seccompiler-bin
+ newbin "release-v${PV}-${my_arch}/snapshot-editor-v${PV}-${my_arch}" snapshot-editor
+}
diff --git a/app-emulation/firecracker-bin/metadata.xml b/app-emulation/firecracker-bin/metadata.xml
new file mode 100644
index 000000000000..e81207c56fd3
--- /dev/null
+++ b/app-emulation/firecracker-bin/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>gentoo-bugs@ares-macrotechnology.com</email>
+ <name>Sebastian Hamann</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:amazon:firecracker</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/free42/Manifest b/app-emulation/free42/Manifest
new file mode 100644
index 000000000000..4e1f8754a7cb
--- /dev/null
+++ b/app-emulation/free42/Manifest
@@ -0,0 +1,3 @@
+DIST free42-nologo-3.1.9.tgz 7464567 BLAKE2B d3a8e87a71b1e6de0da2f9d0efe20e3131c8589151b1f67873d29aa45131b513a2e7fb127fd93fec35c318ed9ed9959f356df3b8c39ea31ed89022d9d66de3eb SHA512 350a0f15f08afbca04cf59e453ac0e48c78fb068b67746ac4174a595140085a167409a51eb9f627a71b931177495456ab31ae3ec00a9dda29bb21db7244381fd
+DIST free42-nologo-3.3.11.tgz 7470639 BLAKE2B 86b168dc4d04745c842dcfd6e921e331c078c977a85423b6c0c40cd9b039a3da74204e99d9aaa06f5162b6e8f3330481b386f887e036f293b6b42ac36716ef75 SHA512 13e7f9aef5b4be57e19abc629c35f498212a2df92bc79e6f73d2305dcf8b752b59d71fb659831874045bdeb3aaedc75e8b7a32194a0684e33bb849a8447ce4e6
+DIST free42-nologo-3.3.12.tgz 7470726 BLAKE2B 9f639f71070842210d036e77de13a82856be92c324108261ba9d97369dd86d777d952c27458f9e24c4c9c34c9b276fc67c758d60075e7931566f84e2c86070f4 SHA512 ef2fcbdebb4f55acc95cfb0dc23b42b5108a22fe1157acdd5f82aa75f1f575a429d65791cfcb30ff401d9ea7dbe71c3fd6429a47ef04e6571ebda13ffba8bf44
diff --git a/app-emulation/free42/files/free42-3.0.14-fix-makefile.patch b/app-emulation/free42/files/free42-3.0.14-fix-makefile.patch
new file mode 100644
index 000000000000..6e46ed540320
--- /dev/null
+++ b/app-emulation/free42/files/free42-3.0.14-fix-makefile.patch
@@ -0,0 +1,26 @@
+diff -Naur free42-nologo-3.0.14.orig/gtk/Makefile free42-nologo-3.0.14/gtk/Makefile
+--- free42-nologo-3.0.14.orig/gtk/Makefile 2022-08-13 23:55:44.000000000 +0200
++++ free42-nologo-3.0.14/gtk/Makefile 2022-09-23 20:46:30.096874563 +0200
+@@ -40,10 +40,11 @@
+ -DDECIMAL_GLOBAL_EXCEPTION_FLAGS=1 \
+ -DDECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS=1
+
+-CXXFLAGS = $(CFLAGS) \
++CXXFLAGS := $(CFLAGS) \
+ -fno-exceptions \
+ -fno-rtti \
+- -D_WCHAR_T_DEFINED
++ -D_WCHAR_T_DEFINED \
++ ${CXXFLAGS}
+
+ LIBS = gcc111libbid.a $(shell $(PKG_CONFIG) --libs gtk+-3.0)
+
+@@ -118,7 +119,7 @@
+ ./keymap2cc
+
+ gcc111libbid.a:
+- sh ./build-intel-lib.sh
++ +sh ./build-intel-lib.sh
+ ln -s IntelRDFPMathLib20U1/TESTS/readtest.c
+
+ symlinks:
diff --git a/app-emulation/free42/files/free42-3.0.16-fix-build-intel-lib.patch b/app-emulation/free42/files/free42-3.0.16-fix-build-intel-lib.patch
new file mode 100644
index 000000000000..c9cde2fbda2c
--- /dev/null
+++ b/app-emulation/free42/files/free42-3.0.16-fix-build-intel-lib.patch
@@ -0,0 +1,64 @@
+diff -Naur free42-nologo-3.0.16.orig/gtk/build-intel-lib.sh free42-nologo-3.0.16/gtk/build-intel-lib.sh
+--- free42-nologo-3.0.16.orig/gtk/build-intel-lib.sh 2022-10-29 17:03:11.000000000 +0200
++++ free42-nologo-3.0.16/gtk/build-intel-lib.sh 2022-11-06 22:09:42.384802729 +0100
+@@ -10,13 +10,6 @@
+ fi
+ fi
+
+-which gcc >/dev/null
+-if [ $? -eq 0 ]; then
+- CC=gcc
+-else
+- CC=cc
+-fi
+-
+ # Hack to support FreeBSD; not 100% sure what this does, but it produces a
+ # library that passes all tests.
+
+@@ -64,8 +57,10 @@
+ ;;
+ esac
+
++patch -p0 <../intel-lib-custom-cc.patch
++
+ cd LIBRARY
+-$MK $OS_ARG CC=$CC CALL_BY_REF=1 GLOBAL_RND=1 GLOBAL_FLAGS=1 UNCHANGED_BINARY_FLAGS=0 $ENDIAN_ARG
++$MK $OS_ARG A=a AR_CMD="${AR:-ar} rv" CC=$CC CALL_BY_REF=1 GLOBAL_RND=1 GLOBAL_FLAGS=1 UNCHANGED_BINARY_FLAGS=0 $ENDIAN_ARG
+ mv libbid.a ../../gcc111libbid.a
+ cd ../..
+ ( echo '#ifdef FREE42_FPTEST'; echo 'const char *readtest_lines[] = {'; tr -d '\r' < IntelRDFPMathLib20U1/TESTS/readtest.in | sed 's/^\(.*\)$/"\1",/'; echo '0 };'; echo '#endif' ) > readtest_lines.cc
+diff -Naur free42-nologo-3.0.16.orig/gtk/intel-lib-custom-cc.patch free42-nologo-3.0.16/gtk/intel-lib-custom-cc.patch
+--- free42-nologo-3.0.16.orig/gtk/intel-lib-custom-cc.patch 1970-01-01 01:00:00.000000000 +0100
++++ free42-nologo-3.0.16/gtk/intel-lib-custom-cc.patch 2022-11-06 22:18:35.428433045 +0100
+@@ -0,0 +1,31 @@
++diff -Naur orig/LIBRARY/makefile.iml_head LIBRARY/makefile.iml_head
++--- orig/LIBRARY/makefile.iml_head 2011-07-12 17:26:21.000000000 +0200
+++++ LIBRARY/makefile.iml_head 2022-11-06 22:18:17.048411637 +0100
++@@ -527,12 +527,8 @@
++ CC_TYPES := gcc cl
++ INTEL_CC_LIST := icc icl
++
++-CC_NAME_INDEX := $(call GetIndex,$(CC_NAME),$(CC_NAME_LIST))
++-ifeq ($(CC_NAME_INDEX),)
++- $(error "Unknown CC_NAME ($(CC_NAME)). Must be one of $(CC_NAME_LIST))
++-endif
++
++-CC_INDEX := $(call GetIndex,$(CC_NAME),$(CC_NAME_LIST))
+++CC_INDEX := 3
++ CC_TYPE := $(word $(CC_INDEX),$(CC_TYPE_LIST))
++ CC_TYPE_INDEX := $(call GetIndex,$(CC_TYPE),$(CC_TYPES))
++
++@@ -543,13 +539,6 @@
++ _CPP := $(CC_NAME) $(call CcNameSelect,-EP,-EP,-E -P,-EP)
++ _CC := $(CC_NAME) $(call CcNameSelect,, -nologo,, -nologo)
++
++-ifeq ($(origin CC),default)
++- CC := $(_CC)
++-endif
++-ifeq ($(origin CPP),default)
++- CPP := $(_CPP)
++-endif
++-
++ CselCc = $(call Cset,$1,$(call CcTypeSelect,$2,$3))
++
++ QOPT := $(call CselCc, QOPT, -, /Q )
diff --git a/app-emulation/free42/free42-3.1.9.ebuild b/app-emulation/free42/free42-3.1.9.ebuild
new file mode 100644
index 000000000000..962007422a29
--- /dev/null
+++ b/app-emulation/free42/free42-3.1.9.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_PV="${PN}-nologo-${PV}"
+
+DESCRIPTION="An HP-42S Calculator Simulator"
+HOMEPAGE="https://thomasokken.com/free42/"
+SRC_URI="https://thomasokken.com/free42/upstream/${MY_PV}.tgz"
+S=${WORKDIR}/${MY_PV}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="+alsa"
+
+DEPEND="app-accessibility/at-spi2-core
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf
+ x11-libs/gtk+:3
+ alsa? ( media-libs/alsa-lib )"
+RDEPEND="${DEPEND}"
+
+DOCS=( CREDITS HISTORY README )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.0.14-fix-makefile.patch"
+ "${FILESDIR}/${PN}-3.0.16-fix-build-intel-lib.patch"
+)
+
+src_compile() {
+ local myconf
+ use alsa && myconf="AUDIO_ALSA=yes"
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" ${myconf} -C gtk
+ emake -C gtk clean
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" BCD_MATH=1 ${myconf} -C gtk
+}
+
+src_install() {
+ default
+ dobin gtk/free42bin gtk/free42dec
+}
diff --git a/app-emulation/free42/free42-3.3.11.ebuild b/app-emulation/free42/free42-3.3.11.ebuild
new file mode 100644
index 000000000000..a89dce3c8bce
--- /dev/null
+++ b/app-emulation/free42/free42-3.3.11.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_PV="${PN}-nologo-${PV}"
+
+DESCRIPTION="An HP-42S Calculator Simulator"
+HOMEPAGE="https://thomasokken.com/free42/"
+SRC_URI="https://thomasokken.com/free42/upstream/${MY_PV}.tgz"
+S=${WORKDIR}/${MY_PV}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+alsa"
+
+DEPEND="app-accessibility/at-spi2-core
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf
+ x11-libs/gtk+:3
+ alsa? ( media-libs/alsa-lib )"
+RDEPEND="${DEPEND}"
+
+DOCS=( CREDITS HISTORY README )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.0.14-fix-makefile.patch"
+ "${FILESDIR}/${PN}-3.0.16-fix-build-intel-lib.patch"
+)
+
+src_compile() {
+ local myconf
+ use alsa && myconf="AUDIO_ALSA=yes"
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" ${myconf} -C gtk
+ emake -C gtk clean
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" BCD_MATH=1 ${myconf} -C gtk
+}
+
+src_install() {
+ default
+ dobin gtk/free42bin gtk/free42dec
+}
diff --git a/app-emulation/free42/free42-3.3.12.ebuild b/app-emulation/free42/free42-3.3.12.ebuild
new file mode 100644
index 000000000000..a89dce3c8bce
--- /dev/null
+++ b/app-emulation/free42/free42-3.3.12.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_PV="${PN}-nologo-${PV}"
+
+DESCRIPTION="An HP-42S Calculator Simulator"
+HOMEPAGE="https://thomasokken.com/free42/"
+SRC_URI="https://thomasokken.com/free42/upstream/${MY_PV}.tgz"
+S=${WORKDIR}/${MY_PV}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+alsa"
+
+DEPEND="app-accessibility/at-spi2-core
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf
+ x11-libs/gtk+:3
+ alsa? ( media-libs/alsa-lib )"
+RDEPEND="${DEPEND}"
+
+DOCS=( CREDITS HISTORY README )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.0.14-fix-makefile.patch"
+ "${FILESDIR}/${PN}-3.0.16-fix-build-intel-lib.patch"
+)
+
+src_compile() {
+ local myconf
+ use alsa && myconf="AUDIO_ALSA=yes"
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" ${myconf} -C gtk
+ emake -C gtk clean
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" BCD_MATH=1 ${myconf} -C gtk
+}
+
+src_install() {
+ default
+ dobin gtk/free42bin gtk/free42dec
+}
diff --git a/app-emulation/free42/metadata.xml b/app-emulation/free42/metadata.xml
new file mode 100644
index 000000000000..e7778ddc74c3
--- /dev/null
+++ b/app-emulation/free42/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>voyageur@gentoo.org</email>
+ <name>Bernard Cafarelli</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/fs-uae-launcher/Manifest b/app-emulation/fs-uae-launcher/Manifest
new file mode 100644
index 000000000000..4882f5a6779f
--- /dev/null
+++ b/app-emulation/fs-uae-launcher/Manifest
@@ -0,0 +1,3 @@
+DIST fs-uae-launcher-3.1.70-qt6.patch 84928 BLAKE2B 830717b0cbe88b2d002691f8d584e5edd90e9a45c022b4e44fbc408615a1e8b67693febc8e946ba10a50bb20fafc4dcac75206104996a0431079bad26459ff45 SHA512 9aeb496ff98094d17574dd9374693b3db70eefb4bbe8595c6fccce8fd4b5e1abf23e836df111f1253774d5a55091ae39d6d6b8b9d42d7c7fa26c38456dddb0a6
+DIST fs-uae-launcher-3.1.70.tar.xz 7707368 BLAKE2B fce6e47b1e09fbfae4959cffe55fec5803aa4dca511af76d621fba2156eee5d76164c0ff5dfad75864b3c2fd5c0a8b5968181538d37b9a039ffd8ab037eeafa2 SHA512 6a4eca273ebd21f64ee0a863497fb39c8b17b6dba0b99a0122f33ea688fb2b341998280b3d0ab4cac2d913bc15834dfec3a1662331dea48933135a82e29f5a83
+DIST fs-uae-launcher-3.2.35.tar.xz 7727452 BLAKE2B 4f176ac1aafc0b4bb5f85731bedc5983033f849cc567e065de6ff6f8bc923b4b2f5efaa2ea7935767335660dd2e3b49d5269d44782c453dca05bd9caa299d3c4 SHA512 2b719fc9f2d47cdbe7e040f1e4632757bf22aa7ccaf5ef0a2ea4e972acca301929dd2f8ecfc63e957ff1f9394229dadf130ac1542ce251e29c84d57592654e3d
diff --git a/app-emulation/fs-uae-launcher/files/fs-uae-launcher-3.0.0-ROMs.patch b/app-emulation/fs-uae-launcher/files/fs-uae-launcher-3.0.0-ROMs.patch
new file mode 100644
index 000000000000..44427642253f
--- /dev/null
+++ b/app-emulation/fs-uae-launcher/files/fs-uae-launcher-3.0.0-ROMs.patch
@@ -0,0 +1,14 @@
+diff -Naur a/fsgs/amiga/roms.py b/fsgs/amiga/roms.py
+--- a/fsgs/amiga/roms.py 2019-06-21 17:49:42.000000000 +0100
++++ b/fsgs/amiga/roms.py 2019-07-21 21:42:14.135600616 +0100
+@@ -10,7 +10,9 @@
+ # amiga-os-130.rom (decrypted, patched)
+ # Kickstart v1.3 r34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!]
+ # Kickstart v1.3 r34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[o] (patch)
+- "891e9a547772fe0c6c19b610baf8bc4ea7fcb785"
++ "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
++ # kick13.rom - from Upgrade Commodore Amiga 500 (1989)
++ "90933936cce43ca9bc6bf375662c076b27e3c458",
+ ]
+
+ A500_1_2_KICKSTARTS = [
diff --git a/app-emulation/fs-uae-launcher/fs-uae-launcher-3.1.70-r1.ebuild b/app-emulation/fs-uae-launcher/fs-uae-launcher-3.1.70-r1.ebuild
new file mode 100644
index 000000000000..b0f33b7c112b
--- /dev/null
+++ b/app-emulation/fs-uae-launcher/fs-uae-launcher-3.1.70-r1.ebuild
@@ -0,0 +1,66 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_SINGLE_IMPL=yes
+
+inherit distutils-r1 xdg
+
+DESCRIPTION="PyQt-based launcher for FS-UAE"
+HOMEPAGE="https://fs-uae.net/"
+SRC_URI="https://fs-uae.net/files/FS-UAE-Launcher/Stable/${PV}/${P}.tar.xz
+ https://github.com/chewi/fs-uae-launcher/compare/stable...stable-qt6.patch -> ${P}-qt6.patch"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="lha"
+RESTRICT="test" # The test files are just boilerplate.
+
+RDEPEND="
+ app-emulation/fs-uae
+ $(python_gen_cond_dep '
+ dev-python/pyqt6[${PYTHON_USEDEP},gui,network,opengl,widgets]
+ dev-python/pyopengl[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ lha? ( dev-python/lhafile[${PYTHON_USEDEP}] )
+ ')
+"
+
+BDEPEND="
+ sys-devel/gettext
+"
+
+PATCHES=(
+ "${DISTDIR}"/${P}-qt6.patch
+ "${FILESDIR}"/${PN}-3.0.0-ROMs.patch
+)
+
+python_compile_all() {
+ emake mo
+}
+
+python_install_all() {
+ emake install-data DESTDIR="${D}" prefix="${EPREFIX}"/usr
+ mv "${ED}"/usr/share/doc/{${PN},${PF}} || die
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ elog "Some important information:"
+ elog
+ elog " - By default, FS-UAE creates its directories under Documents/FS-UAE."
+ elog " If your Documents directory is not configured according to the XDG"
+ elog " user diretory spec, ~/FS-UAE will be used as a fallback."
+ elog
+ elog " - You can override this by putting the path to the desired base"
+ elog " directory in a special config file. The config file will be read"
+ elog " from ~/.config/fs-uae/base-dir by both FS-UAE and FS-UAE Launcher"
+ elog " if it exists."
+ elog
+ elog " Alternatively, you can start FS-UAE and/or FS-UAE Launcher with"
+ elog " --base-dir=/path/to/desired/dir"
+}
diff --git a/app-emulation/fs-uae-launcher/fs-uae-launcher-3.2.35.ebuild b/app-emulation/fs-uae-launcher/fs-uae-launcher-3.2.35.ebuild
new file mode 100644
index 000000000000..566f2031513c
--- /dev/null
+++ b/app-emulation/fs-uae-launcher/fs-uae-launcher-3.2.35.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_SINGLE_IMPL=yes
+
+inherit distutils-r1 xdg
+
+DESCRIPTION="PyQt-based launcher for FS-UAE"
+HOMEPAGE="https://fs-uae.net/"
+SRC_URI="https://github.com/FrodeSolheim/${PN}/releases/download/v${PV}/${P}.tar.xz"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="lha"
+RESTRICT="test" # The test files are just boilerplate.
+
+RDEPEND="
+ app-emulation/fs-uae
+ $(python_gen_cond_dep '
+ dev-python/pyqt6[${PYTHON_USEDEP},gui,network,opengl,widgets]
+ dev-python/pyopengl[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ lha? ( dev-python/lhafile[${PYTHON_USEDEP}] )
+ ')
+"
+
+BDEPEND="
+ sys-devel/gettext
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.0.0-ROMs.patch
+)
+
+python_compile_all() {
+ emake mo
+}
+
+python_install_all() {
+ emake install-data DESTDIR="${D}" prefix="${EPREFIX}"/usr
+ mv "${ED}"/usr/share/doc/{${PN},${PF}} || die
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ elog "Some important information:"
+ elog
+ elog " - By default, FS-UAE creates its directories under Documents/FS-UAE."
+ elog " If your Documents directory is not configured according to the XDG"
+ elog " user diretory spec, ~/FS-UAE will be used as a fallback."
+ elog
+ elog " - You can override this by putting the path to the desired base"
+ elog " directory in a special config file. The config file will be read"
+ elog " from ~/.config/fs-uae/base-dir by both FS-UAE and FS-UAE Launcher"
+ elog " if it exists."
+ elog
+ elog " Alternatively, you can start FS-UAE and/or FS-UAE Launcher with"
+ elog " --base-dir=/path/to/desired/dir"
+}
diff --git a/app-emulation/fs-uae-launcher/metadata.xml b/app-emulation/fs-uae-launcher/metadata.xml
new file mode 100644
index 000000000000..40391d06dd16
--- /dev/null
+++ b/app-emulation/fs-uae-launcher/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chewi@gentoo.org</email>
+ <name>James Le Cuirot</name>
+ </maintainer>
+ <use>
+ <flag name="lha">Enable LHA archive support</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/fs-uae/Manifest b/app-emulation/fs-uae/Manifest
new file mode 100644
index 000000000000..b09e8bda07cc
--- /dev/null
+++ b/app-emulation/fs-uae/Manifest
@@ -0,0 +1,2 @@
+DIST fs-uae-3.1.66.tar.xz 3627688 BLAKE2B 9c7742b78055b4c2409c4527ab3b5daac829fa8d09363c5640ce433770ec0f7f6417cfa5dc7689bfdf747083bad654a8d433216b2c94e93ef3189f7e6f7213d9 SHA512 3d93c6481d4aebb21607fa6cd0716bb809a902a5e6e20cda97751f7878157a0737b80df1290c2e1cf4e13f1e9a824b750c52479cd05e56bff291be7471d167a1
+DIST fs-uae-3.2.35.tar.xz 3620972 BLAKE2B d609561e341ee95a065dac62d74f3bfde8ff1d8860180c6b8321b6a1b9a4f3db6b5c410a097d20afaecc42bc605ae253f916ede6f7329f04cd0b9a2f38a2c2f0 SHA512 719c2a528acbc4f66baaf52eda25ca6923194dbe57a5c8ab860f9eba01ab8bc7a165396ed78ff2960c3678dea2e81da2d625dd604a52be60434a250940f2c6f0
diff --git a/app-emulation/fs-uae/files/fs-uae-3.0.0-Xatom.h.patch b/app-emulation/fs-uae/files/fs-uae-3.0.0-Xatom.h.patch
new file mode 100644
index 000000000000..8fa5bd612c43
--- /dev/null
+++ b/app-emulation/fs-uae/files/fs-uae-3.0.0-Xatom.h.patch
@@ -0,0 +1,25 @@
+From c4c267a90d412bc6d072615d38ce891325282b6d Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Tue, 27 Aug 2019 22:22:57 +0100
+Subject: [PATCH] Add missing X11/Xatom.h include
+
+It is sometimes (but not always?) included by SDL2.
+---
+ libfsemu/src/ml/x11.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libfsemu/src/ml/x11.c b/libfsemu/src/ml/x11.c
+index c20073d3..4dc5487c 100644
+--- a/libfsemu/src/ml/x11.c
++++ b/libfsemu/src/ml/x11.c
+@@ -26,6 +26,7 @@ extern SDL_Window* g_fs_ml_window;
+
+ #include <X11/Xlib.h>
+ #include <X11/keysym.h>
++#include <X11/Xatom.h>
+ #ifdef USE_X11_XTEST
+ #include <X11/extensions/XTest.h>
+ #endif
+--
+2.21.0
+
diff --git a/app-emulation/fs-uae/files/fs-uae-3.0.0-libmpeg2.patch b/app-emulation/fs-uae/files/fs-uae-3.0.0-libmpeg2.patch
new file mode 100644
index 000000000000..ad77dab4cdab
--- /dev/null
+++ b/app-emulation/fs-uae/files/fs-uae-3.0.0-libmpeg2.patch
@@ -0,0 +1,48 @@
+From b10a8c60fb2cc4d80eb5a95591a9e79681f7830a Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Fri, 19 Apr 2019 21:56:58 +0100
+Subject: [PATCH] Only run configure in libmpeg2 when using built-in version
+
+---
+ Makefile.am | 3 +++
+ configure.ac | 4 +++-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 66356baa..eece9f1e 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,7 @@
+ # Makefile.am for FS-UAE
+
+ SUBDIRS =
++DIST_SUBDIRS =
+
+ WARNINGS =
+
+@@ -1262,6 +1263,7 @@ endif
+
+ if BUILTIN_LIBMPEG2
+ SUBDIRS += libmpeg2
++DIST_SUBDIRS += libmpeg2
+ AM_CPPFLAGS += -I$(s)/libmpeg2/include
+ fs_uae_LDADD += \
+ libmpeg2/libmpeg2/.libs/libmpeg2.a \
+diff --git a/configure.ac b/configure.ac
+index 5dd3bfbd..4d4849fd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -801,7 +801,9 @@ OPT_FEATURE([A_ZIP], [zip], [zip],
+
+ AC_DEFINE([FPU_UAE], [1], [Define to 1])
+
+-AC_CONFIG_SUBDIRS([libmpeg2])
++AS_IF([test "x$with_libmpeg2" = xbuiltin], [
++ AC_CONFIG_SUBDIRS([libmpeg2])
++])
+
+ # Write Makefile
+
+--
+2.21.0
+
diff --git a/app-emulation/fs-uae/files/fs-uae-3.1.35-deepbind.patch b/app-emulation/fs-uae/files/fs-uae-3.1.35-deepbind.patch
new file mode 100644
index 000000000000..0a60301772f1
--- /dev/null
+++ b/app-emulation/fs-uae/files/fs-uae-3.1.35-deepbind.patch
@@ -0,0 +1,43 @@
+From c5b02df4598c5fbe7a034b67ee06c506abeb3828 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Mon, 18 Oct 2021 10:22:09 +0100
+Subject: [PATCH] Don't assume RTLD_DEEPBIND is always present on Linux
+
+It's not supported by musl.
+---
+ configure.ac | 5 +++++
+ src/dlopen.cpp | 2 +-
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6e41d68e..2cac2dac 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -655,6 +655,11 @@ AC_CHECK_FUNCS([gettimeofday])
+ AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [#include <time.h>])
+
+
++# RTLD_DEEPBIND is not supported by all C libraries.
++
++AC_CHECK_DECLS([RTLD_DEEPBIND], [], [], [#include <dlfcn.h>])
++
++
+ # Check for POSIX support.
+
+ AS_CASE([$host_os],
+diff --git a/src/dlopen.cpp b/src/dlopen.cpp
+index f79c401b..14edbc02 100644
+--- a/src/dlopen.cpp
++++ b/src/dlopen.cpp
+@@ -22,7 +22,7 @@ UAE_DLHANDLE uae_dlopen(const TCHAR *path)
+ }
+ #ifdef _WIN32
+ result = LoadLibrary(path);
+-#elif defined(LINUX)
++#elif HAVE_DECL_RTLD_DEEPBIND == 1
+ result = dlopen(path, RTLD_NOW | RTLD_DEEPBIND);
+ #else
+ result = dlopen(path, RTLD_NOW);
+--
+2.32.0
+
diff --git a/app-emulation/fs-uae/files/fs-uae-3.1.66-musl.patch b/app-emulation/fs-uae/files/fs-uae-3.1.66-musl.patch
new file mode 100644
index 000000000000..cc78261ebe40
--- /dev/null
+++ b/app-emulation/fs-uae/files/fs-uae-3.1.66-musl.patch
@@ -0,0 +1,35 @@
+From 5d7287d1aa99f100e560b5a2d231e49b64a18da3 Mon Sep 17 00:00:00 2001
+From: James Le Cuirot <chewi@gentoo.org>
+Date: Sun, 17 Apr 2022 10:29:22 +0100
+Subject: [PATCH] Don't return NULL in mapped_malloc when a bool is expected
+
+This was apparently breaking the build under musl.
+---
+ src/memory.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/memory.cpp b/src/memory.cpp
+index 3cd7dee6..18d1283a 100644
+--- a/src/memory.cpp
++++ b/src/memory.cpp
+@@ -1872,7 +1872,7 @@ bool mapped_malloc (addrbank *ab)
+ if (id == -1) {
+ nocanbang ();
+ if (recurse)
+- return NULL;
++ return false;
+ recurse++;
+ mapped_malloc (ab);
+ recurse--;
+@@ -1904,7 +1904,7 @@ bool mapped_malloc (addrbank *ab)
+ return ab->baseaddr != NULL;
+ }
+ if (recurse)
+- return NULL;
++ return false;
+ nocanbang ();
+ recurse++;
+ mapped_malloc (ab);
+--
+2.34.1
+
diff --git a/app-emulation/fs-uae/fs-uae-3.1.66.ebuild b/app-emulation/fs-uae/fs-uae-3.1.66.ebuild
new file mode 100644
index 000000000000..badec3d215c2
--- /dev/null
+++ b/app-emulation/fs-uae/fs-uae-3.1.66.ebuild
@@ -0,0 +1,121 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic xdg
+
+DESCRIPTION="Integrates the most accurate Amiga emulation code available from WinUAE"
+HOMEPAGE="https://fs-uae.net/"
+SRC_URI="https://fs-uae.net/files/FS-UAE/Stable/${PV}/${P}.tar.xz"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="fmv glew +jit"
+
+RDEPEND="
+ dev-libs/glib:2
+ media-libs/libpng:0=
+ media-libs/libsdl2[opengl,X]
+ media-libs/openal
+ virtual/zlib:=
+ virtual/opengl
+ x11-libs/libdrm
+ x11-libs/libX11
+ fmv? ( media-libs/libmpeg2 )
+ glew? ( media-libs/glew:0= )
+"
+
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+"
+
+BDEPEND="
+ app-arch/zip
+ sys-devel/gettext
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.0.0-libmpeg2.patch
+ "${FILESDIR}"/${PN}-3.0.0-Xatom.h.patch
+ "${FILESDIR}"/${PN}-3.1.35-deepbind.patch
+ "${FILESDIR}"/${PN}-3.1.66-musl.patch
+)
+
+src_prepare() {
+ default
+ AT_NO_RECURSIVE=1 eautoreconf
+
+ # Ensure bundled libraries are not used. Udis86 is unused
+ # regardless. Only FLAC headers are bundled and the library is never
+ # used? Lua is bundled but differs from upstream. We keep the
+ # default of disabling the Lua feature anyway as it is unfinished.
+ rm -r libmpeg2/ libudis86/ || die
+}
+
+src_configure() {
+ # -Werror=odr -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/854519
+ #
+ # Fixed upstream in git master but no releases since 2021 and no activity since 2022.
+ filter-lto
+
+ # Qt and Udis86 are unused.
+ econf \
+ --enable-a2065 \
+ --enable-action-replay \
+ --enable-aga \
+ --enable-arcadia \
+ --enable-bsdsocket \
+ --enable-caps \
+ --enable-cd32 \
+ --enable-cdtv \
+ --enable-codegen \
+ --enable-dms \
+ --enable-drivesound \
+ --enable-fdi2raw \
+ --enable-gfxboard \
+ --disable-lua \
+ --enable-netplay \
+ --enable-ncr \
+ --enable-ncr9x \
+ --enable-parallel-port \
+ --enable-prowizard \
+ --enable-savestate \
+ --enable-scp \
+ --enable-serial-port \
+ --enable-slirp \
+ --enable-softfloat \
+ --enable-qemu-cpu \
+ --enable-qemu-slirp \
+ --enable-uaenative \
+ --enable-uaenet \
+ --enable-uaescsi \
+ --enable-uaeserial \
+ --disable-udis86 \
+ --enable-vpar \
+ --enable-xml-shader \
+ --enable-zip \
+ --without-cef \
+ --with-glad \
+ --without-qt \
+ $(use_enable jit) \
+ $(use_enable jit jit-fpu) \
+ $(use_with fmv libmpeg2) \
+ $(use_with glew)
+}
+
+src_install() {
+ default
+
+ # Needed for QEMU-UAE.
+ insinto /usr/include/uae
+ doins src/include/uae/{api,attributes,log,ppc,qemu,types}.h
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+ elog "Install app-emulation/fs-uae-launcher for a better graphical interface."
+}
diff --git a/app-emulation/fs-uae/fs-uae-3.2.35.ebuild b/app-emulation/fs-uae/fs-uae-3.2.35.ebuild
new file mode 100644
index 000000000000..d4cc6a346b7c
--- /dev/null
+++ b/app-emulation/fs-uae/fs-uae-3.2.35.ebuild
@@ -0,0 +1,120 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic xdg
+
+DESCRIPTION="Integrates the most accurate Amiga emulation code available from WinUAE"
+HOMEPAGE="https://fs-uae.net/"
+SRC_URI="https://github.com/FrodeSolheim/${PN}/releases/download/v${PV}/${P}.tar.xz"
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+IUSE="fmv glew +jit"
+
+RDEPEND="
+ dev-libs/glib:2
+ media-libs/libpng:0=
+ media-libs/libsdl2[opengl,X]
+ media-libs/openal
+ virtual/zlib:=
+ virtual/opengl
+ x11-libs/libdrm
+ x11-libs/libX11
+ fmv? ( media-libs/libmpeg2 )
+ glew? ( media-libs/glew:0= )
+"
+
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+"
+
+BDEPEND="
+ app-arch/zip
+ sys-devel/gettext
+ virtual/pkgconfig
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.0.0-libmpeg2.patch
+ "${FILESDIR}"/${PN}-3.0.0-Xatom.h.patch
+ "${FILESDIR}"/${PN}-3.1.35-deepbind.patch
+)
+
+src_prepare() {
+ default
+ AT_NO_RECURSIVE=1 eautoreconf
+
+ # Ensure bundled libraries are not used. Udis86 is unused
+ # regardless. Only FLAC headers are bundled and the library is never
+ # used? Lua is bundled but differs from upstream. We keep the
+ # default of disabling the Lua feature anyway as it is unfinished.
+ rm -r libmpeg2/ libudis86/ || die
+}
+
+src_configure() {
+ # -Werror=odr -Werror=lto-type-mismatch
+ # https://bugs.gentoo.org/854519
+ #
+ # Fixed upstream in git master but no releases since 2021 and no activity since 2022.
+ filter-lto
+
+ # Qt and Udis86 are unused.
+ econf \
+ --enable-a2065 \
+ --enable-action-replay \
+ --enable-aga \
+ --enable-arcadia \
+ --enable-bsdsocket \
+ --enable-caps \
+ --enable-cd32 \
+ --enable-cdtv \
+ --enable-codegen \
+ --enable-dms \
+ --enable-drivesound \
+ --enable-fdi2raw \
+ --enable-gfxboard \
+ --disable-lua \
+ --enable-netplay \
+ --enable-ncr \
+ --enable-ncr9x \
+ --enable-parallel-port \
+ --enable-prowizard \
+ --enable-savestate \
+ --enable-scp \
+ --enable-serial-port \
+ --enable-slirp \
+ --enable-softfloat \
+ --enable-qemu-cpu \
+ --enable-qemu-slirp \
+ --enable-uaenative \
+ --enable-uaenet \
+ --enable-uaescsi \
+ --enable-uaeserial \
+ --disable-udis86 \
+ --enable-vpar \
+ --enable-xml-shader \
+ --enable-zip \
+ --without-cef \
+ --with-glad \
+ --without-qt \
+ $(use_enable jit) \
+ $(use_enable jit jit-fpu) \
+ $(use_with fmv libmpeg2) \
+ $(use_with glew)
+}
+
+src_install() {
+ default
+
+ # Needed for QEMU-UAE.
+ insinto /usr/include/uae
+ doins src/include/uae/{api,attributes,log,ppc,qemu,types}.h
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+ elog "Install app-emulation/fs-uae-launcher for a better graphical interface."
+}
diff --git a/app-emulation/fs-uae/fs-uae-9999.ebuild b/app-emulation/fs-uae/fs-uae-9999.ebuild
new file mode 100644
index 000000000000..4d4ce545a91a
--- /dev/null
+++ b/app-emulation/fs-uae/fs-uae-9999.ebuild
@@ -0,0 +1,103 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit autotools python-single-r1 xdg
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/FrodeSolheim/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/FrodeSolheim/${PN}/releases/download/v${PV}/${P}.tar.xz"
+ KEYWORDS="~amd64 ~ppc64"
+fi
+
+DESCRIPTION="Integrates the most accurate Amiga emulation code available from WinUAE"
+HOMEPAGE="https://fs-uae.net/"
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="glew +jit portmidi"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ app-arch/zstd:=
+ dev-libs/glib:2
+ media-libs/flac:=
+ media-libs/libglvnd
+ media-libs/libmpeg2
+ media-libs/libpng:0=
+ media-libs/libsdl3[opengl]
+ media-libs/sdl3-image
+ media-libs/sdl3-ttf
+ media-sound/mpg123
+ virtual/zlib:=
+ glew? ( media-libs/glew:0= )
+ portmidi? ( media-libs/portmidi )
+"
+
+DEPEND="
+ ${RDEPEND}
+"
+
+BDEPEND="
+ app-arch/zip
+ sys-devel/gettext
+ virtual/pkgconfig
+"
+
+src_prepare() {
+ default
+ AT_NO_RECURSIVE=1 eautoreconf
+}
+
+src_configure() {
+ # Udis86 is unused.
+ econf \
+ --enable-a2065 \
+ --enable-action-replay \
+ --enable-aga \
+ --enable-arcadia \
+ --enable-bsdsocket \
+ --enable-caps \
+ --enable-cd32 \
+ --enable-cdtv \
+ --enable-codegen \
+ --enable-drivesound \
+ --enable-fdi2raw \
+ --enable-gfxboard \
+ --enable-netplay \
+ --enable-ncr \
+ --enable-ncr9x \
+ --enable-parallel-port \
+ --enable-prowizard \
+ --enable-savestate \
+ --enable-scp \
+ --enable-serial-port \
+ --enable-slirp \
+ --enable-softfloat \
+ --enable-qemu-cpu \
+ --enable-uaenative \
+ --enable-uaenet \
+ --enable-uaescsi \
+ --enable-uaeserial \
+ --disable-udis86 \
+ --enable-vpar \
+ --enable-xml-shader \
+ --with-glad \
+ $(use_enable jit) \
+ $(use_enable jit jit-fpu) \
+ $(use_with glew) \
+ $(use_with portmidi midi)
+}
+
+src_install() {
+ default
+
+ # Needed for QEMU-UAE.
+ insinto /usr/include/uae
+ doins include/uae/{api,attributes,log,ppc,qemu,types}.h
+}
diff --git a/app-emulation/fs-uae/metadata.xml b/app-emulation/fs-uae/metadata.xml
new file mode 100644
index 000000000000..cb0efefdd510
--- /dev/null
+++ b/app-emulation/fs-uae/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chewi@gentoo.org</email>
+ <name>James Le Cuirot</name>
+ </maintainer>
+ <use>
+ <flag name="fmv">Enable support for CD32 FMV (full motion video)</flag>
+ <flag name="glew">Enable support for The OpenGL Extension Wrangler Library (<pkg>media-libs/glew</pkg>)</flag>
+ <flag name="portmidi">Enable support for MIDI via <pkg>media-libs/portmidi</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/fuse-utils/Manifest b/app-emulation/fuse-utils/Manifest
new file mode 100644
index 000000000000..64d5ba42c07d
--- /dev/null
+++ b/app-emulation/fuse-utils/Manifest
@@ -0,0 +1,2 @@
+DIST fuse-utils-1.4.3.tar.gz 501006 BLAKE2B 0637fe05b71416e89eb61e3618ff45bd71250201924fb3741a4c5b9898d09b30acecba9957baeaa864c2c9cfe1bcb9cb38a2af83368bc5729221cec36a1eda47 SHA512 13404d1be81a2de9262cd79cce9dd8dc3f17238fdbb75da8a724b76b0976c03f34da9978af36b808103fedcf3f5d5da4bb10f251c5510127d59ca8de5607b99e
+DIST fuse-utils-1.4.4.tar.gz 551378 BLAKE2B e692d635524ac5d2a780cb81fd63d17198398adb7e2277218c4651f6323dba6b9eeab79707924ee1ef412920a83352ebe07181efe2ee40fd6d83034a2215ade6 SHA512 390877e6f940d499ae28a2ce7b74864489b79f535d963b69aa3169c7af84638f37c9ed3a91faa82185ee876b9bb1a619cfbd738e328a12dd17d8c385c0715815
diff --git a/app-emulation/fuse-utils/files/remove-local-prefix.patch b/app-emulation/fuse-utils/files/remove-local-prefix.patch
new file mode 100644
index 000000000000..41daba71cdd9
--- /dev/null
+++ b/app-emulation/fuse-utils/files/remove-local-prefix.patch
@@ -0,0 +1,22 @@
+diff -Naur fuse-utils-1.4.3/configure.ac fuse-utils-1.4.3-patched/configure.ac
+--- fuse-utils-1.4.3/configure.ac 2018-07-01 02:09:55.000000000 +0200
++++ fuse-utils-1.4.3-patched/configure.ac 2020-07-28 17:02:05.287721692 +0200
+@@ -92,18 +92,6 @@
+ )
+ fi
+
+-dnl Allow the user to say that various libraries are in one place
+-AC_ARG_WITH(local-prefix,
+-[ --with-local-prefix=PFX local libraries installed in PFX (optional)],
+-CPPFLAGS="$CPPFLAGS -I$withval/include";
+-CXXFLAGS="$CXXFLAGS -I$withval/include";
+-LDFLAGS="$LDFLAGS -L$withval/lib",
+-if test "$prefix" != "NONE"; then
+- CPPFLAGS="$CPPFLAGS -I$prefix/include";
+- CXXFLAGS="$CXXFLAGS -I$prefix/include";
+- LDFLAGS="$LDFLAGS -L$prefix/lib"
+-fi)
+-
+ dnl Check if libjpeg is available and supports jpeg_write_scanlines
+ AC_MSG_CHECKING(whether to use libjpeg)
+ AC_ARG_WITH(libjpeg,
diff --git a/app-emulation/fuse-utils/fuse-utils-1.4.3-r3.ebuild b/app-emulation/fuse-utils/fuse-utils-1.4.3-r3.ebuild
new file mode 100644
index 000000000000..e2dc6e59556d
--- /dev/null
+++ b/app-emulation/fuse-utils/fuse-utils-1.4.3-r3.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Utils for the Free Unix Spectrum Emulator by Philip Kendall"
+HOMEPAGE="https://fuse-emulator.sourceforge.net"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="audiofile gcrypt jpeg png zlib"
+
+RDEPEND=">=app-emulation/libspectrum-1.4.4:=[audiofile?,gcrypt?,zlib?]
+ audiofile? ( >=media-libs/audiofile-0.3.6 )
+ gcrypt? ( dev-libs/libgcrypt )
+ jpeg? ( media-libs/libjpeg-turbo:= )
+ png? ( media-libs/libpng:0 )
+ zlib? ( virtual/zlib:= )"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ $(use_with audiofile)
+ $(use_with gcrypt libgcrypt)
+ $(use_with jpeg libjpeg)
+ $(use_with png libpng)
+ $(use_with zlib)
+ )
+ econf "${myconf[@]}"
+}
diff --git a/app-emulation/fuse-utils/fuse-utils-1.4.4.ebuild b/app-emulation/fuse-utils/fuse-utils-1.4.4.ebuild
new file mode 100644
index 000000000000..0cc415f56c66
--- /dev/null
+++ b/app-emulation/fuse-utils/fuse-utils-1.4.4.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Utils for the Free Unix Spectrum Emulator by Philip Kendall"
+HOMEPAGE="https://fuse-emulator.sourceforge.net"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~riscv ~x86"
+IUSE="audiofile gcrypt jpeg png zlib"
+
+RDEPEND="
+ >=app-emulation/libspectrum-1.6.0:=[audiofile?,gcrypt?,zlib?]
+ dev-libs/glib:2
+ audiofile? ( >=media-libs/audiofile-0.3.6 )
+ gcrypt? ( dev-libs/libgcrypt )
+ jpeg? ( media-libs/libjpeg-turbo:= )
+ png? ( media-libs/libpng:0= )
+ zlib? ( virtual/zlib:= )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ $(use_with audiofile)
+ $(use_with gcrypt libgcrypt)
+ $(use_with jpeg libjpeg)
+ $(use_with png libpng)
+ $(use_with zlib)
+ )
+ econf "${myconf[@]}"
+}
diff --git a/app-emulation/fuse-utils/metadata.xml b/app-emulation/fuse-utils/metadata.xml
new file mode 100644
index 000000000000..756ee38acb41
--- /dev/null
+++ b/app-emulation/fuse-utils/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="gcrypt">Use <pkg>dev-libs/libgcrypt</pkg> for low-level crypto of some
+ features, including logfiles.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/fuse/Manifest b/app-emulation/fuse/Manifest
new file mode 100644
index 000000000000..af4129ce3b6b
--- /dev/null
+++ b/app-emulation/fuse/Manifest
@@ -0,0 +1,2 @@
+DIST fuse-1.6.0.tar.gz 1686171 BLAKE2B d1e6b166f2f649f408349b16a5eb40dd414750ed7a805eb6505b6c81be6ed7bcaa4e6f0b14057645172add1b1a77881f90b64767390fe1a64a486168f452d29d SHA512 5096b24b5b3d812942a7ad401b886b6a99f5493686912cb4aff18ede65404ae97a9bcafa6337aaed4378382f2a170918797d7d4570bb809476be5aa9fc625b8b
+DIST fuse-1.7.0.tar.gz 1742469 BLAKE2B 55b652a15079539694e2e40cc002aec6d8566e1ff3ccb8c400b09a3db1246aacc3a1214afe970de769ccf609ffd7526fee224724319efa0e8adb9a5244557453 SHA512 9903773fd9ced1e36f4b0720201f721f9a3b7876a4d11ada95ffa328ec5bd166dc37c09818e7d96de3c45e5f26d074f4b072a1db6dd0786470dc9fbbb3483084
diff --git a/app-emulation/fuse/files/fuse-1.6.0-fix-joystick.patch b/app-emulation/fuse/files/fuse-1.6.0-fix-joystick.patch
new file mode 100644
index 000000000000..f6bc2f65cce3
--- /dev/null
+++ b/app-emulation/fuse/files/fuse-1.6.0-fix-joystick.patch
@@ -0,0 +1,14 @@
+https://bugs.gentoo.org/921615
+
+Add missing include
+
+--- a/ui/uijoystick.c
++++ b/ui/uijoystick.c
+@@ -38,6 +38,7 @@
+
+ #include "input.h"
+ #include "uijoystick.h"
++#include "peripherals/joystick.h"
+
+ #if defined USE_JOYSTICK && defined HAVE_JSW_H
+
diff --git a/app-emulation/fuse/files/remove-local-prefix.patch b/app-emulation/fuse/files/remove-local-prefix.patch
new file mode 100644
index 000000000000..61bf33a1adc7
--- /dev/null
+++ b/app-emulation/fuse/files/remove-local-prefix.patch
@@ -0,0 +1,18 @@
+diff -Naur fuse-1.5.7/configure.ac fuse-1.5.7-patched/configure.ac
+--- fuse-1.5.7/configure.ac 2018-12-09 13:06:11.000000000 +0100
++++ fuse-1.5.7-patched/configure.ac 2020-07-28 17:02:33.678546857 +0200
+@@ -110,14 +110,6 @@
+ AX_STRINGS_STRCASECMP
+ fi
+
+-dnl Allow the user to say that various libraries are in one place
+-AC_ARG_WITH(local-prefix,
+-[ --with-local-prefix=PFX local libraries installed in PFX (optional)],
+-CPPFLAGS="$CPPFLAGS -I$withval/include"; LDFLAGS="$LDFLAGS -L$withval/lib",
+-if test "$prefix" != "NONE"; then
+- CPPFLAGS="$CPPFLAGS -I$prefix/include"; LDFLAGS="$LDFLAGS -L$prefix/lib"
+-fi)
+-
+ dnl Check that libspectrum is available and that it is new enough
+ PKG_CHECK_MODULES([LIBSPECTRUM], [libspectrum >= 1.4.0])
+
diff --git a/app-emulation/fuse/fuse-1.6.0-r5.ebuild b/app-emulation/fuse/fuse-1.6.0-r5.ebuild
new file mode 100644
index 000000000000..fdcce36829fe
--- /dev/null
+++ b/app-emulation/fuse/fuse-1.6.0-r5.ebuild
@@ -0,0 +1,129 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic xdg
+
+DESCRIPTION="Free Unix Spectrum Emulator by Philip Kendall"
+HOMEPAGE="https://fuse-emulator.sourceforge.net"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~riscv ~x86"
+IUSE="alsa ao backend-X backend-fbcon +backend-gtk3 backend-sdl gpm joystick memlimit png pulseaudio +xml +zlib"
+
+# TODO:
+# - allow using sdl audio driver without using for the UI
+# - allow using sdl joystick support with gtk3 or X UI in place of libjsw
+# - when using sdl for one of the above but not the UI, allow using sdl2 instead
+
+# At most one audio driver and at most one UI back-end can be enabled at a time
+REQUIRED_USE="?? ( alsa ao backend-sdl pulseaudio )
+ ?? ( backend-X backend-fbcon backend-gtk3 backend-sdl )
+ png? ( zlib )"
+
+RDEPEND="
+ >=app-emulation/libspectrum-1.5.0:=[zlib?]
+ dev-libs/glib:2
+ alsa? ( media-libs/alsa-lib )
+ ao? ( media-libs/libao )
+ backend-X? (
+ x11-libs/libX11
+ x11-libs/libXext
+ )
+ backend-gtk3? (
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ x11-libs/libX11
+ x11-libs/pango
+ )
+ backend-sdl? ( media-libs/libsdl[joystick,sound] )
+ gpm? ( backend-fbcon? ( sys-libs/gpm ) )
+ joystick? ( !backend-sdl? ( media-libs/libjsw ) )
+ png? ( media-libs/libpng:0= )
+ pulseaudio? ( media-libs/libpulse )
+ xml? ( dev-libs/libxml2:2= )
+ zlib? ( virtual/zlib:= )"
+DEPEND="${RDEPEND}
+ backend-fbcon? ( virtual/linux-sources )"
+BDEPEND="dev-lang/perl
+ virtual/pkgconfig"
+
+DOCS=( AUTHORS ChangeLog README THANKS )
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+ "${FILESDIR}"/${P}-fix-joystick.patch
+)
+
+_fuse_audio_driver() {
+ if use alsa; then
+ echo "alsa"
+ elif use ao; then
+ echo "libao"
+ elif use backend-sdl; then
+ echo "sdl"
+ elif use pulseaudio; then
+ echo "pulseaudio"
+ else
+ echo "null"
+ fi
+}
+
+src_prepare() {
+ default
+ xdg_environment_reset
+ eautoreconf
+
+ # Bug #854522
+ filter-lto
+}
+
+src_configure() {
+ local myconf=(
+ --enable-desktop-integration
+ --without-win32
+ --with-audio-driver="$(_fuse_audio_driver)"
+ $(use_with gpm)
+ $(use_with joystick)
+ $(use_enable memlimit smallmem)
+ $(use_with png)
+ $(use_with xml libxml2)
+ $(use_with zlib)
+ )
+
+ # The pure-X UI hasn't got its own configure argument, instead it is
+ # what is used under Linux if all other back-ends have been disabled
+ # - and all except the Gtk+ one are off by default.
+ if use backend-X; then
+ myconf+=("--without-gtk")
+ elif use backend-fbcon; then
+ myconf+=("--with-fb")
+ elif use backend-gtk3; then
+ myconf+=("--with-gtk")
+ elif use backend-sdl; then
+ myconf+=("--with-sdl")
+ else
+ myconf+=("--with-null-ui")
+ fi
+
+ if use joystick; then
+ myconf+=( $(use_enable backend-sdl ui-joystick) )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ emake test
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+ if use pulseaudio; then
+ ewarn "The PulseAudio driver in ${PN} is experimental"
+ fi
+}
diff --git a/app-emulation/fuse/fuse-1.7.0.ebuild b/app-emulation/fuse/fuse-1.7.0.ebuild
new file mode 100644
index 000000000000..bb3d80be7c49
--- /dev/null
+++ b/app-emulation/fuse/fuse-1.7.0.ebuild
@@ -0,0 +1,128 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic xdg
+
+DESCRIPTION="Free Unix Spectrum Emulator by Philip Kendall"
+HOMEPAGE="https://fuse-emulator.sourceforge.net"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~riscv ~x86"
+IUSE="alsa ao backend-X backend-fbcon +backend-gtk3 backend-sdl gpm joystick memlimit png pulseaudio +xml +zlib"
+
+# TODO:
+# - allow using sdl audio driver without using for the UI
+# - allow using sdl joystick support with gtk3 or X UI in place of libjsw
+# - when using sdl for one of the above but not the UI, allow using sdl2 instead
+
+# At most one audio driver and at most one UI back-end can be enabled at a time
+REQUIRED_USE="?? ( alsa ao backend-sdl pulseaudio )
+ ?? ( backend-X backend-fbcon backend-gtk3 backend-sdl )
+ png? ( zlib )"
+
+RDEPEND="
+ >=app-emulation/libspectrum-1.6.0:=[zlib?]
+ dev-libs/glib:2
+ alsa? ( media-libs/alsa-lib )
+ ao? ( media-libs/libao )
+ backend-X? (
+ x11-libs/libX11
+ x11-libs/libXext
+ )
+ backend-gtk3? (
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ x11-libs/libX11
+ x11-libs/pango
+ )
+ backend-sdl? ( media-libs/libsdl[joystick,sound] )
+ gpm? ( backend-fbcon? ( sys-libs/gpm ) )
+ joystick? ( !backend-sdl? ( media-libs/libjsw ) )
+ png? ( media-libs/libpng:0= )
+ pulseaudio? ( media-libs/libpulse )
+ xml? ( dev-libs/libxml2:2= )
+ zlib? ( virtual/zlib:= )"
+DEPEND="${RDEPEND}
+ backend-fbcon? ( virtual/linux-sources )"
+BDEPEND="dev-lang/perl
+ virtual/pkgconfig"
+
+DOCS=( AUTHORS ChangeLog README THANKS )
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+)
+
+_fuse_audio_driver() {
+ if use alsa; then
+ echo "alsa"
+ elif use ao; then
+ echo "libao"
+ elif use backend-sdl; then
+ echo "sdl"
+ elif use pulseaudio; then
+ echo "pulseaudio"
+ else
+ echo "null"
+ fi
+}
+
+src_prepare() {
+ default
+ xdg_environment_reset
+ eautoreconf
+
+ # Bug #854522
+ filter-lto
+}
+
+src_configure() {
+ local myconf=(
+ --enable-desktop-integration
+ --without-win32
+ --with-audio-driver="$(_fuse_audio_driver)"
+ $(use_with gpm)
+ $(use_with joystick)
+ $(use_enable memlimit smallmem)
+ $(use_with png)
+ $(use_with xml libxml2)
+ $(use_with zlib)
+ )
+
+ # The pure-X UI hasn't got its own configure argument, instead it is
+ # what is used under Linux if all other back-ends have been disabled
+ # - and all except the Gtk+ one are off by default.
+ if use backend-X; then
+ myconf+=("--without-gtk")
+ elif use backend-fbcon; then
+ myconf+=("--with-fb")
+ elif use backend-gtk3; then
+ myconf+=("--with-gtk")
+ elif use backend-sdl; then
+ myconf+=("--with-sdl")
+ else
+ myconf+=("--with-null-ui")
+ fi
+
+ if use joystick; then
+ myconf+=( $(use_enable backend-sdl ui-joystick) )
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ emake test
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+ if use pulseaudio; then
+ ewarn "The PulseAudio driver in ${PN} is experimental"
+ fi
+}
diff --git a/app-emulation/fuse/metadata.xml b/app-emulation/fuse/metadata.xml
new file mode 100644
index 000000000000..ef6ccf37f331
--- /dev/null
+++ b/app-emulation/fuse/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="backend-fbcon">Use framebuffer rendering backend</flag>
+ <flag name="backend-gtk3">Use Gtk+ rendering backend</flag>
+ <flag name="backend-sdl">Use SDL rendering backend</flag>
+ <flag name="backend-X">Use X11 rendering backend</flag>
+ <flag name="memlimit">Add compile-time memory usage limiting</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/ganeti-os-noop/Manifest b/app-emulation/ganeti-os-noop/Manifest
new file mode 100644
index 000000000000..35179f3a834b
--- /dev/null
+++ b/app-emulation/ganeti-os-noop/Manifest
@@ -0,0 +1 @@
+DIST ganeti-os-noop-0.2.tar.gz 2247 BLAKE2B ea0d9c4e884aba81895e48b8bb86a28f90432ec768feeef5f561b13041279578c5730783c12a7207b330fe9190c0b41a44fdf154f8685bb8f4d3721f37d797f9 SHA512 ae121759ef775a5fee552ef2f939bb01126ff5fee3deeadae234a6f6f66b2589be1a6cc686d564d3a77406f5839f1cf914a3492c3ea9cc803427967fb75e3c5b
diff --git a/app-emulation/ganeti-os-noop/ganeti-os-noop-0.2.ebuild b/app-emulation/ganeti-os-noop/ganeti-os-noop-0.2.ebuild
new file mode 100644
index 000000000000..a808738db0f4
--- /dev/null
+++ b/app-emulation/ganeti-os-noop/ganeti-os-noop-0.2.ebuild
@@ -0,0 +1,21 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Dummy OS provider for Ganeti"
+HOMEPAGE="https://github.com/grnet/ganeti-os-noop"
+SRC_URI="https://github.com/grnet/ganeti-os-noop/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+src_install() {
+ dodoc CONTRIBUTORS
+ cd ganeti/os/noop || die
+ insinto /usr/share/ganeti/os/noop/
+ doins ganeti_api_version
+ exeinto /usr/share/ganeti/os/noop/
+ doexe create export import rename
+}
diff --git a/app-emulation/ganeti-os-noop/metadata.xml b/app-emulation/ganeti-os-noop/metadata.xml
new file mode 100644
index 000000000000..8772a74e80f9
--- /dev/null
+++ b/app-emulation/ganeti-os-noop/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>robbat2@gentoo.org</email>
+ <name>Robin H. Johnson</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/ganeti-os-simpleimage/Manifest b/app-emulation/ganeti-os-simpleimage/Manifest
new file mode 100644
index 000000000000..01577c3e8385
--- /dev/null
+++ b/app-emulation/ganeti-os-simpleimage/Manifest
@@ -0,0 +1 @@
+DIST ganeti-os-simpleimage-07f67364e66b9f686a5b15d0c516310fcc3c7c9b.tar.gz 10722 BLAKE2B 7b9dfe0ba0f1c53ae61e5304b618e1f31ad08a93352b9781dd502bd27ca4426493eb3b61c4e751fe1787eb19c63ddf377a602a35a815042d5c8437ece991c5ba SHA512 278f9430d28c542b25ce4fd449dc57b97bcd56c0fc8b2c7bfacf08cc090c81d74eca44c0cc57faa28576bdaa3b1a0011d8780e8246acf5993765eb8de741e667
diff --git a/app-emulation/ganeti-os-simpleimage/ganeti-os-simpleimage-0_p20221113.ebuild b/app-emulation/ganeti-os-simpleimage/ganeti-os-simpleimage-0_p20221113.ebuild
new file mode 100644
index 000000000000..ec9d545922ff
--- /dev/null
+++ b/app-emulation/ganeti-os-simpleimage/ganeti-os-simpleimage-0_p20221113.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+COMMIT=07f67364e66b9f686a5b15d0c516310fcc3c7c9b
+MY_PV=$COMMIT
+
+DESCRIPTION="Ganeti OS provider for simple images"
+HOMEPAGE="https://github.com/ganeti/instance-simpleimage"
+SRC_URI="https://github.com/ganeti/instance-simpleimage/archive/${MY_PV}.tar.gz -> ${PN}-${MY_PV}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+S="${WORKDIR}/instance-simpleimage-${MY_PV}"
+
+src_install() {
+ # Config
+ keepdir /etc/ganeti/instance-simpleimage/default/
+ keepdir /etc/ganeti/instance-simpleimage/default/hooks
+ touch "${D}/etc/ganeti/instance-simpleimage/default/config"
+
+ insinto /usr/share/ganeti/os/simpleimage
+ doins ganeti_api_version parameters.list common.sh
+ exeinto /usr/share/ganeti/os/simpleimage
+ doexe create export import rename verify
+ # This is moved into /etc because sysadmins are expected to modify it, and
+ # add matching dirs for each variant in
+ # /etc/ganeti/instance-simpleimage/$VARIANT/
+ insinto /etc/ganeti/instance-simpleimage/
+ doins variants.list
+ dosym ../../../../../etc/ganeti/instance-simpleimage/variants.list \
+ /usr/share/ganeti/os/simpleimage/variants.list
+
+ # Docs
+ dodoc README.md
+ docinto example-hooks
+ dodoc example-hooks/debian-cloud-image-config
+}
diff --git a/app-emulation/ganeti-os-simpleimage/metadata.xml b/app-emulation/ganeti-os-simpleimage/metadata.xml
new file mode 100644
index 000000000000..8772a74e80f9
--- /dev/null
+++ b/app-emulation/ganeti-os-simpleimage/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>robbat2@gentoo.org</email>
+ <name>Robin H. Johnson</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/genymotion-bin/Manifest b/app-emulation/genymotion-bin/Manifest
new file mode 100644
index 000000000000..07bb51ff638a
--- /dev/null
+++ b/app-emulation/genymotion-bin/Manifest
@@ -0,0 +1 @@
+DIST genymotion-3.7.1-linux_x64.bin 103767728 BLAKE2B 08ebd35ed27dc6f197d442752935541cd932a06776c49dc4a2352d2cb2fe746472d658e12d4b2115767752db267d0c5da35e5e3ddcc489eb8a15f88ba6d23d64 SHA512 7a6c91864399ec9e2ee66094b58135c0ffb464eddc46642da225d0929f8247192324a6cb544cfd771bb389bb517c3a92e5da2d19747e0c67284cbd6d6c0b4f5e
diff --git a/app-emulation/genymotion-bin/genymotion-bin-3.7.1.ebuild b/app-emulation/genymotion-bin/genymotion-bin-3.7.1.ebuild
new file mode 100644
index 000000000000..0ba3a91afffb
--- /dev/null
+++ b/app-emulation/genymotion-bin/genymotion-bin-3.7.1.ebuild
@@ -0,0 +1,145 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit bash-completion-r1 desktop pax-utils
+
+MY_PN="${PN/-bin}"
+MY_P="${MY_PN}-${PV}"
+BIN_ARCHIVE="${MY_P}-linux_x64.bin"
+
+DESCRIPTION="Complete set of tools that provide a virtual environment for Android"
+HOMEPAGE="https://www.genymotion.com"
+SRC_URI="https://dl.genymotion.com/releases/${MY_P}/${BIN_ARCHIVE}"
+
+S="${WORKDIR}"
+
+LICENSE="genymotion"
+SLOT="0"
+KEYWORDS="-* ~amd64"
+
+RDEPEND="app-arch/lz4
+ app-crypt/mit-krb5
+ || (
+ app-emulation/qemu[qemu_softmmu_targets_x86_64]
+ app-emulation/virtualbox
+ )
+ || (
+ dev-libs/openssl-compat:1.1.1
+ =dev-libs/openssl-1.1*:0
+ )
+ dev-libs/glib:2
+ =dev-libs/hiredis-1.0*
+ media-libs/alsa-lib
+ media-libs/fontconfig
+ media-libs/freetype
+ media-libs/libpulse
+ media-libs/gst-plugins-base:1.0
+ media-libs/gstreamer:1.0
+ sys-apps/dbus
+ virtual/zlib:=
+ virtual/opengl
+ x11-libs/libX11
+ x11-libs/libxcb
+ x11-libs/libXext
+ x11-libs/libXi
+ x11-libs/libxkbcommon
+ x11-libs/libXmu
+ x11-libs/xcb-util
+ x11-libs/xcb-util-image
+ x11-libs/xcb-util-keysyms
+ x11-libs/xcb-util-renderutil
+ x11-libs/xcb-util-wm
+"
+BDEPEND="x11-misc/xdg-utils"
+
+RESTRICT="bindist mirror"
+
+QA_PREBUILT="
+ opt/${MY_PN}/*.so*
+ opt/${MY_PN}/imageformats/*.so
+ opt/${MY_PN}/plugins/*.so*
+ opt/${MY_PN}/${MY_PN}
+ opt/${MY_PN}/genyshell
+ opt/${MY_PN}/player
+ opt/${MY_PN}/${MY_PN}adbtunneld
+ opt/${MY_PN}/gmtool
+ opt/${MY_PN}/tools/*
+"
+
+src_unpack() {
+ cp "${DISTDIR}/${BIN_ARCHIVE}" "${WORKDIR}" || die "cp failed"
+}
+
+src_prepare() {
+ default
+
+ chmod +x ${BIN_ARCHIVE} || die "chmod failed"
+ yes | ./${BIN_ARCHIVE} > /dev/null || die "unpack failed"
+
+ # removed windows line for bashcompletion
+ sed -i "/complete -F _gmtool gmtool.exe/d" "${MY_PN}/completion/bash/gmtool.bash" || die "sed failed"
+
+ # copy .desktop file in S directory
+ sed -i -e "s:Icon.*:Icon=/opt/${MY_PN}/icons/genymotion-logo.png:" \
+ -e "s:Exec.*:Exec=/opt/${MY_PN}/genymotion:" \
+ "${HOME}"/.local/share/applications/genymobile-genymotion.desktop || die "sed failed"
+ cp "${HOME}"/.local/share/applications/genymobile-genymotion.desktop "${S}" || die "copy .desktop file"
+}
+
+src_install() {
+ insinto /opt/"${MY_PN}"
+ exeinto /opt/"${MY_PN}"
+
+ # Use qt bundled
+ doins -r "${MY_PN}"/{audio,geoservices,Qt,QtGraphicalEffects,QtLocation,QtPositioning,QtQuick,QtQuick.2}
+ doins -r "${MY_PN}"/{icons,imageformats,mediaservice,platforms,plugins,sqldrivers,translations,xcbglintegrations}
+ doins "${MY_PN}"/libQt*
+ doins "${MY_PN}"/qt.conf
+ doins "${MY_PN}"/libicu*
+
+ doexe "${MY_PN}"/{libcom,librendering,libshadertranslator,libswscale,libavutil}.so*
+ # android library
+ doexe "${MY_PN}"/{libOpenglRender,libemugl_logger,libemugl_common}.so*
+
+ find "${ED}/opt/${MY_PN}" -name "*.so*" -type f -exec chmod +x {} \; || die "Change .so permission failed"
+
+ doexe "${MY_PN}"/{genymotion,genyshell,player,gmtool}
+
+ # the android-sdk-update-manager have some bugs and lacks maintenance
+ # so installs bundled version
+ exeinto /opt/"${MY_PN}"/tools
+ doexe "${MY_PN}"/tools/{aapt,adb,glewinfo}
+ exeinto /opt/"${MY_PN}"/tools/lib64
+ doexe "${MY_PN}"/tools/lib64/libc++.so
+
+ pax-mark -m "${ED}/opt/${MY_PN}/genymotion"
+ pax-mark -m "${ED}/opt/${MY_PN}/gmtool"
+
+ dosym -r /opt/"${MY_PN}"/genyshell /opt/bin/genyshell
+ dosym -r /opt/"${MY_PN}"/genymotion /opt/bin/genymotion
+ dosym -r /opt/"${MY_PN}"/gmtool /opt/bin/gmtool
+
+ newbashcomp "${MY_PN}/completion/bash/gmtool.bash" gmtool
+
+ insinto /usr/share/zsh/site-functions
+ doins "${MY_PN}/completion/zsh/_gmtool"
+
+ dodir /opt/"${MY_PN}"/qemu/bin
+ dosym -r /usr/bin/qemu-system-x86_64 /opt/"${MY_PN}"/qemu/x86_64/bin/qemu-system-x86_64
+ dosym -r /usr/bin/qemu-img /opt/"${MY_PN}"/qemu/x86_64/bin/qemu-img
+
+ domenu genymobile-genymotion.desktop
+}
+
+pkg_postinst() {
+ if ! has_version app-emulation/qemu && has_version app-emulation/virtualbox ; then
+ ewarn "By default Genymotion is configured to work with QEMU hypervisor."
+ ewarn "So you should run command:"
+ ewarn ""
+ ewarn " gmtool config --hypervisor virtualbox"
+ ewarn ""
+ ewarn "to change hypervisor to VirtualBox"
+ fi
+}
diff --git a/app-emulation/genymotion-bin/metadata.xml b/app-emulation/genymotion-bin/metadata.xml
new file mode 100644
index 000000000000..a641846fcf02
--- /dev/null
+++ b/app-emulation/genymotion-bin/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>fedeliallalinea@gmail.com</email>
+ <name>Marco Genasci</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/glean/Manifest b/app-emulation/glean/Manifest
new file mode 100644
index 000000000000..6d61859fd515
--- /dev/null
+++ b/app-emulation/glean/Manifest
@@ -0,0 +1 @@
+DIST glean-1.24.0.tar.gz 76586 BLAKE2B c4a11ef4681ea40cc08136b1365832995c700251afea4ab94c063b294f80b0e9eb183bf0b6ad85a77f38c40d7b4b47e4d1d7c02e06cd6228cc68d3a0a2b37b5d SHA512 b62b02b6030bf317da192abcc97970a8b11bec531c167d8485e787dcb097fad7c9baa4f33390cf588429d7f71026c652135d64590aa524b6f5c653908e067df8
diff --git a/app-emulation/glean/files/glean-1.24.0-support-gentoo-install.patch b/app-emulation/glean/files/glean-1.24.0-support-gentoo-install.patch
new file mode 100644
index 000000000000..65e1ad5b24de
--- /dev/null
+++ b/app-emulation/glean/files/glean-1.24.0-support-gentoo-install.patch
@@ -0,0 +1,44 @@
+diff --git a/glean/install.py b/glean/install.py
+index c6a9db2..e5c33c6 100755
+--- a/glean/install.py
++++ b/glean/install.py
+@@ -69,7 +69,7 @@ def install(source_file, target_file, mode='0755', replacements=dict()):
+ cmd = ('install -D -g root -o root'
+ ' -m {mode} {source_file} {target_file}').format(
+ source_file=os.path.join(script_dir, source_file),
+- target_file=target_file,
++ target_file=os.environ["D"] + target_file,
+ mode=mode)
+ log.info(cmd)
+ ret = os.system(cmd)
+@@ -81,7 +81,7 @@ def install(source_file, target_file, mode='0755', replacements=dict()):
+ log.info("Replacing %s -> %s in %s" % (k, v, target_file))
+
+ cmd = 'sed -i "s|%%{k}%%|{v}|g" {target_file}'.format(
+- k=k, v=v, target_file=target_file)
++ k=k, v=v, target_file=os.environ["D"] + target_file)
+ log.info(cmd)
+ ret = os.system(cmd)
+
+@@ -131,9 +131,9 @@ def main():
+ # scripts dir. This means glean shell scripts can call the
+ # sibling python-glean and know that it's using the glean we
+ # installed, even in a virtualenv etc.
+- install('python-glean.template',
+- os.path.join(script_dir, 'python-glean'),
+- mode='0755', replacements=replacements)
++ #install('python-glean.template',
++ # os.path.join(script_dir, 'python-glean'),
++ # mode='0755', replacements=replacements)
+
+ # needs to go first because gentoo can have systemd along side openrc
+ if os.path.exists('/etc/gentoo-release'):
+@@ -177,7 +177,7 @@ def main():
+ mode='0644', replacements=replacements)
+ install(
+ 'glean-udev.rules',
+- '/etc/udev/rules.d/99-glean.rules',
++ '/lib/udev/rules.d/99-glean.rules',
+ mode='0644')
+ if args.use_nm:
+ # NetworkManager has a "after" network-pre, and
diff --git a/app-emulation/glean/glean-1.24.0.ebuild b/app-emulation/glean/glean-1.24.0.ebuild
new file mode 100644
index 000000000000..355a90a0346e
--- /dev/null
+++ b/app-emulation/glean/glean-1.24.0.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+
+inherit edo distutils-r1 pypi udev
+
+DESCRIPTION="Simple program to write static config from config-drive"
+HOMEPAGE="https://opendev.org/opendev/glean"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="amd64 x86"
+
+RDEPEND="dev-python/pbr[${PYTHON_USEDEP}]"
+BDEPEND="${RDEPEND}
+ test? (
+ >=dev-python/oslotest-1.1.0[${PYTHON_USEDEP}]
+ >=dev-python/testscenarios-0.5.0[${PYTHON_USEDEP}]
+ >=dev-python/testtools-2.3.0[${PYTHON_USEDEP}]
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-1.24.0-support-gentoo-install.patch
+)
+
+distutils_enable_tests unittest
+
+python_install_all() {
+ distutils-r1_python_install_all
+ edo "${EPYTHON}" "${S}/glean/install.py"
+}
+
+pkg_postinst() {
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/glean/metadata.xml b/app-emulation/glean/metadata.xml
new file mode 100644
index 000000000000..57460ea2fdea
--- /dev/null
+++ b/app-emulation/glean/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>alexxy@gentoo.org</email>
+ <name>Alexey Shvetsov</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>prometheanfire@gentoo.org</email>
+ <name>Matthew Thode</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>openstack@gentoo.org</email>
+ <name>Openstack</name>
+ </maintainer>
+ <longdescription lang="en">
+ Glean is a program intended to configure a system based on configuration provided in a configuration drive.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/grub-xen-host/grub-xen-host-1.0-r2.ebuild b/app-emulation/grub-xen-host/grub-xen-host-1.0-r2.ebuild
new file mode 100644
index 000000000000..502d03bee2b3
--- /dev/null
+++ b/app-emulation/grub-xen-host/grub-xen-host-1.0-r2.ebuild
@@ -0,0 +1,98 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Grub2 built as a PV grub per the Xen PV Boot Protocol"
+HOMEPAGE="https://wiki.xenproject.org/wiki/PvGrub2"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="pvh"
+
+DEPEND="
+ sys-boot/grub:2=[grub_platforms_xen]
+ pvh? ( >=sys-boot/grub-2.04:2=[grub_platforms_xen-pvh] )
+"
+RDEPEND="${DEPEND}"
+
+S="${WORKDIR}"
+
+RESTRICT="binchecks strip test"
+
+src_configure() {
+ :
+}
+
+src_compile() {
+ cat > "${S}/grub-bootstrap.cfg" <<- EOF || die
+ normal (memdisk)/grub.cfg
+ EOF
+
+ cat > "${S}/grub.cfg" <<- EOF || die
+ if search -s -f /boot/xen/pvboot-x86_64.elf ; then
+ echo "Chainloading (${root})/boot/xen/pvboot-x86_64.elf"
+ multiboot "/boot/xen/pvboot-x86_64.elf"
+ boot
+ fi
+
+ if search -s -f /xen/pvboot-x86_64.elf ; then
+ echo "Chainloading (${root})/xen/pvboot-x86_64.elf"
+ multiboot "/xen/pvboot-x86_64.elf"
+ boot
+ fi
+
+ if search -s -f /boot/grub/grub.cfg ; then
+ echo "Reading (${root})/boot/grub/grub.cfg"
+ configfile /boot/grub/grub.cfg
+ fi
+
+ if search -s -f /grub/grub.cfg ; then
+ echo "Reading (${root})/grub/grub.cfg"
+ configfile /grub/grub.cfg
+ fi
+ EOF
+
+ tar cf memdisk.tar grub.cfg || die "failed to tar"
+
+ local grub_mkimage=grub-mkimage
+ if type grub2-mkimage &> /dev/null; then
+ grub_mkimage=grub2-mkimage
+ fi
+
+ local args=(
+ "${grub_mkimage}"
+ -O x86_64-xen
+ -c grub-bootstrap.cfg
+ -m memdisk.tar
+ -p "${EPREFIX}"/usr/lib/grub/x86_64-xen/*.mod
+ -o grub-x86_64-xen.bin
+ )
+
+ echo "${args[@]}"
+ "${args[@]}" || die "failed to grub-mkimage"
+
+ if use pvh; then
+ local args=(
+ "${grub_mkimage}"
+ -O i386-xen_pvh
+ -c grub-bootstrap.cfg
+ -m memdisk.tar
+ -p "${EPREFIX}"/usr/lib/grub/i386-xen_pvh/*.mod
+ -o grub-i386-xen_pvh.bin
+ )
+
+ echo "${args[@]}"
+ "${args[@]}" || die "failed to grub-mkimage"
+ fi
+
+}
+
+src_install() {
+ exeinto /usr/libexec/xen/bin
+ doexe grub-x86_64-xen.bin
+ if use pvh; then
+ doexe grub-i386-xen_pvh.bin
+ fi
+}
diff --git a/app-emulation/grub-xen-host/metadata.xml b/app-emulation/grub-xen-host/metadata.xml
new file mode 100644
index 000000000000..bf83ea5d8468
--- /dev/null
+++ b/app-emulation/grub-xen-host/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>xen@gentoo.org</email>
+ </maintainer>
+ <longdescription lang="en">
+ A grub 2 built to run in dom0 which is a PV grub that can chain load
+ a guest installed PV grub (grub legacy or grub 2) or handle a guest
+ supplied grub 2 config file.
+ </longdescription>
+ <use>
+ <flag name="pvh">Build an additional grub bin for pvh.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/guestfs-tools/Manifest b/app-emulation/guestfs-tools/Manifest
new file mode 100644
index 000000000000..0fc11bbbd1c8
--- /dev/null
+++ b/app-emulation/guestfs-tools/Manifest
@@ -0,0 +1,3 @@
+DIST guestfs-tools-1.52.3.tar.gz 16237597 BLAKE2B f6ef8a63f3b9dfee6c7ebb954ae9d3602dd3d96a60f85fc1d6a5304725ebca488937802cff337f18bd4e86e2598ad092be2fab2a59f9580d0849c65fef09d3c1 SHA512 f7a965500a7d1b355d447bd4710c9e38e8f7443eef721fbff9504d862bbf4740b8e5f75134fcc0ca50817872799168a46d2ddcca82c36be1d891d3ed3c47c79b
+DIST guestfs-tools-1.54.0.tar.gz 16243507 BLAKE2B a3ad576b5354ef29fddd8d18112a831d1ef0a3c925ded2bcfe5117537f160411f8e39c5680b08b3507702e10841da5945f7e432eae475dda780f0d217bef6058 SHA512 db76a1cbfaa8b53b5c4609030f545b9d043161cebf54379da6418800086855f11cb3a0e5d135184c2a885094a6a7120155774377a6641a2d7fbd45206ff9ec87
+DIST guestfs-tools-1.55.6.tar.gz 16256878 BLAKE2B d14a334b91033865f3f62efe96da64e2c73963a35b43410d7486e4ed7303418d5b8adcd767640236962ae29f9874a31954fca576fc28392f023038fb1a743497 SHA512 454d48ade2c0782e153e0d38e8364e36be1bc60f2430bbced81e62e8bae73284e5817af5f3f61c96c66d90c1b350aa43df5e67148715368b40090018d5f3454a
diff --git a/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-common-libguestfs-1.58-compat.patch b/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-common-libguestfs-1.58-compat.patch
new file mode 100644
index 000000000000..ab6fc57ea91d
--- /dev/null
+++ b/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-common-libguestfs-1.58-compat.patch
@@ -0,0 +1,13 @@
+Submodule common contains modified content
+diff --git a/common/structs/structs-print.c b/common/structs/structs-print.c
+index 6d825e1..1ed2055 100644
+--- a/common/structs/structs-print.c
++++ b/common/structs/structs-print.c
+@@ -63,7 +63,6 @@ guestfs_int_print_application2_indent (struct guestfs_application2 *application2
+ fprintf (dest, "%sapp2_source_package: %s%s", indent, application2->app2_source_package, linesep);
+ fprintf (dest, "%sapp2_summary: %s%s", indent, application2->app2_summary, linesep);
+ fprintf (dest, "%sapp2_description: %s%s", indent, application2->app2_description, linesep);
+- fprintf (dest, "%sapp2_spare1: %s%s", indent, application2->app2_spare1, linesep);
+ fprintf (dest, "%sapp2_spare2: %s%s", indent, application2->app2_spare2, linesep);
+ fprintf (dest, "%sapp2_spare3: %s%s", indent, application2->app2_spare3, linesep);
+ fprintf (dest, "%sapp2_spare4: %s%s", indent, application2->app2_spare4, linesep);
diff --git a/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-guestfs-bash-completion.m4-more-control.patch b/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-guestfs-bash-completion.m4-more-control.patch
new file mode 100644
index 000000000000..d6a92be1a705
--- /dev/null
+++ b/app-emulation/guestfs-tools/files/guestfs-tools-1.52.3-guestfs-bash-completion.m4-more-control.patch
@@ -0,0 +1,64 @@
+From c844f09d5dcacc679569e6adf3a04b97abd13fe0 Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 24 Apr 2026 21:11:37 -0500
+Subject: [PATCH] m4/guestfs-bash-completion.m4: Allow control of completions
+ installation
+
+It can be desirable to install (or suppress) the installion of the bash
+completion files regardless on what's on the compile host. Gentoo always
+installs bash completions files, even if bash-completion is not installed.
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ m4/guestfs-bash-completion.m4 | 37 +++++++++++++++++++++++++----------
+ 1 file changed, 27 insertions(+), 10 deletions(-)
+
+diff --git a/m4/guestfs-bash-completion.m4 b/m4/guestfs-bash-completion.m4
+index 4a9c2ee0..1a7bd8b3 100644
+--- a/m4/guestfs-bash-completion.m4
++++ b/m4/guestfs-bash-completion.m4
+@@ -16,14 +16,31 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ dnl Bash completion.
+-PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], [
+- bash_completion=yes
+- AC_MSG_CHECKING([for bash-completions directory])
+- BASH_COMPLETIONS_DIR="`pkg-config --variable=completionsdir bash-completion`"
+- AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
+- AC_SUBST([BASH_COMPLETIONS_DIR])
+-],[
+- bash_completion=no
+- AC_MSG_WARN([bash-completion not installed])
++AC_ARG_WITH([bash-completion],
++ [AS_HELP_STRING([--with-bash-completion],[Enable bash completions @<:@default=auto@:>@])],
++ [with_bash_completion="$withval"],
++ [with_bash_completion=auto])
++
++AS_IF([test "x$with_bash_completion" = "xauto"], [
++ PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
++ [], [
++ AC_MSG_WARN([bash-completion not installed])
++ BASH_COMPLETION=no
++])],[BASH_COMPLETION=$with_bash_completion])
++AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$BASH_COMPLETION" != "xno"])
++
++AC_ARG_WITH([bash-completion-dir],
++ [AS_HELP_STRING([--with-bash-completion-dir],[Directory to install bash completions @<:@default=auto@:>@])],
++ [with_bash_completion_dir="$withval"],
++ [with_bash_completion_dir=auto])
++
++AS_IF([test "x$BASH_COMPLETION" != "xno"], [
++ AC_MSG_CHECKING([for bash-completions directory])
++ AS_IF([test "x$with_bash_completion_dir" = "xauto" || test "x$with_bash_completion_dir" = "xyes"], [
++ PKG_CHECK_VAR([BASH_COMPLETIONS_DIR], [bash-completion], [completionsdir], [], [
++ BASH_COMPLETIONS_DIR="${datadir}/bash-completion/completions"])
++ ],
++ [BASH_COMPLETIONS_DIR=$with_bash_completion_dir])
++ AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
++ AC_SUBST([BASH_COMPLETIONS_DIR])
+ ])
+-AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$bash_completion" = "xyes"])
+--
+2.53.0
+
diff --git a/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-bash-Remove-vestigial-bash-completions.patch b/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-bash-Remove-vestigial-bash-completions.patch
new file mode 100644
index 000000000000..3be473cf2b72
--- /dev/null
+++ b/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-bash-Remove-vestigial-bash-completions.patch
@@ -0,0 +1,47 @@
+From a880070ce7ede60be0cf1cb7f013f21ac46b6e7d Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 24 Apr 2026 18:47:13 -0500
+Subject: [PATCH 1/2] bash/*: Remove vestigial bash completions
+
+They've long since moved to other projects, and Gentoo Portage complains about them.
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ bash/virt-alignment-scan | 6 ------
+ bash/virt-win-reg | 6 ------
+ 2 files changed, 12 deletions(-)
+
+diff --git a/bash/virt-alignment-scan b/bash/virt-alignment-scan
+index 36529fa8..ba299064 100644
+--- a/bash/virt-alignment-scan
++++ b/bash/virt-alignment-scan
+@@ -79,12 +79,6 @@ _guestfs_virttools ()
+ esac
+ }
+
+-_guestunmount ()
+-{
+- _guestfs_virttools "guestunmount" 1
+-} &&
+-complete -o default -F _guestunmount guestunmount
+-
+ _virt_alignment_scan ()
+ {
+ _guestfs_virttools "virt-alignment-scan" 1
+diff --git a/bash/virt-win-reg b/bash/virt-win-reg
+index 91cfbf82..a430508a 100644
+--- a/bash/virt-win-reg
++++ b/bash/virt-win-reg
+@@ -45,9 +45,3 @@ _virt_win_reg ()
+ _guestfs_options_only "virt-win-reg"
+ } &&
+ complete -o default -F _virt_win_reg virt-win-reg
+-
+-_libguestfs-test-tool ()
+-{
+- _guestfs_options_only "libguestfs-test-tool"
+-} &&
+-complete -o default -F _libguestfs-test-tool libguestfs-test-tool
+--
+2.53.0
+
diff --git a/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-guestfs-bash-completion.m4-more-control.patch b/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-guestfs-bash-completion.m4-more-control.patch
new file mode 100644
index 000000000000..b1b5e45524c5
--- /dev/null
+++ b/app-emulation/guestfs-tools/files/guestfs-tools-1.54.0-guestfs-bash-completion.m4-more-control.patch
@@ -0,0 +1,78 @@
+From 8f1531ec29968e379758baac487b3e63f9bdaf55 Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 24 Apr 2026 21:11:37 -0500
+Subject: [PATCH 2/2] m4/guestfs-bash-completion.m4: Allow control of
+ completions installation
+
+It can be desirable to install (or suppress) the installion of the bash
+completion files regardless on what's on the compile host. Gentoo always
+installs bash completions files, even if bash-completion is not installed.
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ configure.ac | 2 ++
+ m4/guestfs-bash-completion.m4 | 37 +++++++++++++++++++++++++----------
+ 2 files changed, 29 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8a180a1d..bb1d35d7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -218,6 +218,8 @@ feature "OCaml-based virt tools" test "x$HAVE_OCAML_TRUE" = "x"
+ feature "OCaml gettext" test "x$OCAML_PKG_gettext" != "xno"
+ feature "Perl-based virt tools" test "x$HAVE_TOOLS_TRUE" = "x"
+ feature "Bash tab completion" test "x$HAVE_BASH_COMPLETION_TRUE" = "x"
++AS_IF([test "x$HAVE_BASH_COMPLETION_TRUE" = "x"],
++[print "Bash completions dir" "$BASH_COMPLETIONS_DIR"])
+
+ echo
+ echo "If any optional component is configured 'no' when you expected 'yes'"
+diff --git a/m4/guestfs-bash-completion.m4 b/m4/guestfs-bash-completion.m4
+index ecd9f591..72ea2ef7 100644
+--- a/m4/guestfs-bash-completion.m4
++++ b/m4/guestfs-bash-completion.m4
+@@ -16,14 +16,31 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ dnl Bash completion.
+-PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], [
+- bash_completion=yes
+- AC_MSG_CHECKING([for bash-completions directory])
+- BASH_COMPLETIONS_DIR="`pkg-config --variable=completionsdir bash-completion`"
+- AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
+- AC_SUBST([BASH_COMPLETIONS_DIR])
+-],[
+- bash_completion=no
+- AC_MSG_WARN([bash-completion not installed])
++AC_ARG_WITH([bash-completion],
++ [AS_HELP_STRING([--with-bash-completion],[Enable bash completions @<:@default=auto@:>@])],
++ [with_bash_completion="$withval"],
++ [with_bash_completion=auto])
++
++AS_IF([test "x$with_bash_completion" = "xauto"], [
++ PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
++ [], [
++ AC_MSG_WARN([bash-completion not installed])
++ BASH_COMPLETION=no
++])],[BASH_COMPLETION=$with_bash_completion])
++AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$BASH_COMPLETION" != "xno"])
++
++AC_ARG_WITH([bash-completion-dir],
++ [AS_HELP_STRING([--with-bash-completion-dir],[Directory to install bash completions @<:@default=auto@:>@])],
++ [with_bash_completion_dir="$withval"],
++ [with_bash_completion_dir=auto])
++
++AS_IF([test "x$BASH_COMPLETION" != "xno"], [
++ AC_MSG_CHECKING([for bash-completions directory])
++ AS_IF([test "x$with_bash_completion_dir" = "xauto" || test "x$with_bash_completion_dir" = "xyes"], [
++ PKG_CHECK_VAR([BASH_COMPLETIONS_DIR], [bash-completion], [completionsdir], [], [
++ BASH_COMPLETIONS_DIR="${datadir}/bash-completion/completions"])
++ ],
++ [BASH_COMPLETIONS_DIR=$with_bash_completion_dir])
++ AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
++ AC_SUBST([BASH_COMPLETIONS_DIR])
+ ])
+-AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$bash_completion" = "xyes"])
+--
+2.53.0
+
diff --git a/app-emulation/guestfs-tools/files/guestfs-tools-1.55.6-common-support-ocaml-4.14.2.patch b/app-emulation/guestfs-tools/files/guestfs-tools-1.55.6-common-support-ocaml-4.14.2.patch
new file mode 100644
index 000000000000..c7560c667917
--- /dev/null
+++ b/app-emulation/guestfs-tools/files/guestfs-tools-1.55.6-common-support-ocaml-4.14.2.patch
@@ -0,0 +1,158 @@
+diff --git a/common/mlcustomize/crypt-c.c b/common/mlcustomize/crypt-c.c
+index e1bc740..e358018 100644
+--- a/common/mlcustomize/crypt-c.c
++++ b/common/mlcustomize/crypt-c.c
+@@ -47,7 +47,7 @@ virt_customize_crypt (value keyv, value saltv)
+ */
+ r = crypt (String_val (keyv), String_val (saltv));
+ if (r == NULL)
+- caml_unix_error (errno, (char *) "crypt", Nothing);
++ unix_error (errno, (char *) "crypt", Nothing);
+ rv = caml_copy_string (r);
+
+ CAMLreturn (rv);
+diff --git a/common/mltools/tools_utils-c.c b/common/mltools/tools_utils-c.c
+index 21f7469..4ff42e5 100644
+--- a/common/mltools/tools_utils-c.c
++++ b/common/mltools/tools_utils-c.c
+@@ -126,10 +126,10 @@ guestfs_int_mllib_rfc3339_date_time_string (value unitv)
+ size_t total = 0;
+
+ if (clock_gettime (CLOCK_REALTIME, &ts) == -1)
+- caml_unix_error (errno, (char *) "clock_gettime", Val_unit);
++ unix_error (errno, (char *) "clock_gettime", Val_unit);
+
+ if (localtime_r (&ts.tv_sec, &tm) == NULL)
+- caml_unix_error (errno, (char *) "localtime_r", caml_copy_int64 (ts.tv_sec));
++ unix_error (errno, (char *) "localtime_r", caml_copy_int64 (ts.tv_sec));
+
+ /* Sadly strftime does not support nanoseconds, so what we do is:
+ * - stringify everything before the nanoseconds
+@@ -141,17 +141,17 @@ guestfs_int_mllib_rfc3339_date_time_string (value unitv)
+
+ ret = strftime (buf, sizeof (buf), "%Y-%m-%dT%H:%M:%S.", &tm);
+ if (ret == 0)
+- caml_unix_error (errno, (char *) "strftime", Val_unit);
++ unix_error (errno, (char *) "strftime", Val_unit);
+ total += ret;
+
+ ret = snprintf (buf + total, sizeof (buf) - total, "%09ld", ts.tv_nsec);
+ if (ret == 0)
+- caml_unix_error (errno, (char *) "sprintf", caml_copy_int64 (ts.tv_nsec));
++ unix_error (errno, (char *) "sprintf", caml_copy_int64 (ts.tv_nsec));
+ total += ret;
+
+ ret = strftime (buf + total, sizeof (buf) - total, "%z", &tm);
+ if (ret == 0)
+- caml_unix_error (errno, (char *) "strftime", Val_unit);
++ unix_error (errno, (char *) "strftime", Val_unit);
+ total += ret;
+
+ /* Move the timezone minutes one character to the right, moving the
+diff --git a/common/mlutils/c_utils-c.c b/common/mlutils/c_utils-c.c
+index f0e2798..54791ec 100644
+--- a/common/mlutils/c_utils-c.c
++++ b/common/mlutils/c_utils-c.c
+@@ -68,7 +68,7 @@ guestfs_int_mlutils_shell_unquote (value strv)
+
+ ret = guestfs_int_shell_unquote (String_val (strv));
+ if (ret == NULL)
+- caml_unix_error (errno, (char *) "guestfs_int_shell_unquote", Nothing);
++ unix_error (errno, (char *) "guestfs_int_shell_unquote", Nothing);
+
+ retv = caml_copy_string (ret);
+ free (ret);
+@@ -102,7 +102,7 @@ guestfs_int_mlutils_full_path (value dirv, value namev)
+
+ ret = guestfs_int_full_path (String_val (dirv), name);
+ if (ret == NULL)
+- caml_unix_error (errno, (char *) "guestfs_int_full_path", dirv);
++ unix_error (errno, (char *) "guestfs_int_full_path", dirv);
+ rv = caml_copy_string (ret);
+ free (ret);
+
+diff --git a/common/mlutils/unix_utils-c.c b/common/mlutils/unix_utils-c.c
+index 919f526..b6ad832 100644
+--- a/common/mlutils/unix_utils-c.c
++++ b/common/mlutils/unix_utils-c.c
+@@ -149,7 +149,7 @@ guestfs_int_mllib_fnmatch (value patternv, value strv, value flagsv)
+ /* XXX The fnmatch specification doesn't mention what errors can
+ * be returned by fnmatch. Assume they are errnos for now.
+ */
+- caml_unix_error (errno, (char *) "fnmatch", patternv);
++ unix_error (errno, (char *) "fnmatch", patternv);
+ }
+ }
+
+@@ -182,16 +182,16 @@ guestfs_int_mllib_fsync_file (value filenamev)
+ /* Note to do fsync you have to open for write. */
+ fd = open (filename, O_RDWR);
+ if (fd == -1)
+- caml_unix_error (errno, (char *) "open", filenamev);
++ unix_error (errno, (char *) "open", filenamev);
+
+ if (fsync (fd) == -1) {
+ err = errno;
+ close (fd);
+- caml_unix_error (err, (char *) "fsync", filenamev);
++ unix_error (err, (char *) "fsync", filenamev);
+ }
+
+ if (close (fd) == -1)
+- caml_unix_error (errno, (char *) "close", filenamev);
++ unix_error (errno, (char *) "close", filenamev);
+
+ CAMLreturn (Val_unit);
+ }
+@@ -205,13 +205,13 @@ guestfs_int_mllib_mkdtemp (value val_pattern)
+
+ pattern = strdup (String_val (val_pattern));
+ if (pattern == NULL)
+- caml_unix_error (errno, (char *) "strdup", val_pattern);
++ unix_error (errno, (char *) "strdup", val_pattern);
+
+ ret = mkdtemp (pattern);
+ if (ret == NULL) {
+ int err = errno;
+ free (pattern);
+- caml_unix_error (err, (char *) "mkdtemp", val_pattern);
++ unix_error (err, (char *) "mkdtemp", val_pattern);
+ }
+
+ rv = caml_copy_string (ret);
+@@ -229,7 +229,7 @@ guestfs_int_mllib_realpath (value pathv)
+
+ r = realpath (String_val (pathv), NULL);
+ if (r == NULL)
+- caml_unix_error (errno, (char *) "realpath", pathv);
++ unix_error (errno, (char *) "realpath", pathv);
+
+ rv = caml_copy_string (r);
+ free (r);
+@@ -257,7 +257,7 @@ guestfs_int_mllib_statvfs_statvfs (value pathv)
+ struct statvfs buf;
+
+ if (statvfs (String_val (pathv), &buf) == -1)
+- caml_unix_error (errno, (char *) "statvfs", pathv);
++ unix_error (errno, (char *) "statvfs", pathv);
+
+ f_bsize = buf.f_bsize;
+ f_frsize = buf.f_frsize;
+@@ -281,7 +281,7 @@ guestfs_int_mllib_statvfs_statvfs (value pathv)
+ (PULARGE_INTEGER) &free_bytes_available,
+ (PULARGE_INTEGER) &total_number_of_bytes,
+ (PULARGE_INTEGER) &total_number_of_free_bytes))
+- caml_unix_error (EIO, (char *) "statvfs: GetDiskFreeSpaceEx", pathv);
++ unix_error (EIO, (char *) "statvfs: GetDiskFreeSpaceEx", pathv);
+
+ /* XXX I couldn't determine how to get block size. MSDN has a
+ * unhelpful hard-coded list here:
+@@ -356,7 +356,7 @@ guestfs_int_mllib_statvfs_is_network_filesystem (value pathv)
+ struct statfs buf;
+
+ if (statfs (String_val (pathv), &buf) == -1)
+- caml_unix_error (errno, (char *) "statvfs", pathv);
++ unix_error (errno, (char *) "statvfs", pathv);
+
+ /* Some but not all of these are defined in <linux/magic.h>. */
+ #ifndef CIFS_MAGIC_NUMBER
diff --git a/app-emulation/guestfs-tools/guestfs-tools-1.52.3-r1.ebuild b/app-emulation/guestfs-tools/guestfs-tools-1.52.3-r1.ebuild
new file mode 100644
index 000000000000..f6a0d7c8676e
--- /dev/null
+++ b/app-emulation/guestfs-tools/guestfs-tools-1.52.3-r1.ebuild
@@ -0,0 +1,154 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/libguestfs-appliance (if any new release there)
+
+inherit autotools bash-completion-r1 perl-functions toolchain-funcs
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${PN}/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS="amd64"
+fi
+IUSE="doc libvirt +ocaml +perl test"
+RESTRICT="!test? ( test )"
+
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ sys-libs/libxcrypt:=
+ sys-libs/ncurses:=
+"
+COMMON_DEPEND_EXPLICIT="
+ >=app-emulation/libguestfs-1.49.8:=[ocaml,perl?,libvirt=]
+ dev-libs/jansson:=
+ sys-libs/libosinfo
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+COMMON_DEPEND_IMPLICIT="
+ dev-db/sqlite
+ sys-apps/hwdata
+"
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ app-misc/hivex
+ virtual/perl-Getopt-Long
+ )
+"
+
+# Some OCaml is always required
+# bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ ocaml? (
+ dev-ml/ocaml-gettext
+ dev-ml/ocaml-gettext-stub
+ )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+ test? ( ocaml? ( dev-ml/ounit2[ocamlopt] ) )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.54.0-bash-Remove-vestigial-bash-completions.patch"
+ "${FILESDIR}/${PN}-1.52.3-guestfs-bash-completion.m4-more-control.patch"
+ "${FILESDIR}/${PN}-1.52.3-common-libguestfs-1.58-compat.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ # m4/guestfs-progs.m4: (f)lex and bison for virt-builder (required).
+ # Bug #915339
+ unset LEX YACC
+
+ local myconf=(
+ $(usex doc '' PO4A=no)
+ $(use_enable ocaml)
+ $(use_enable perl)
+ $(use_with libvirt)
+ --with-bash-completion
+ --with-bash-completion-dir="$(get_bashcompdir)"
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+}
+
+src_test() {
+ # Missing appliance support? libguestfs (virt-inspector --format=raw -a ${IMAGE}) returns
+ # libguestfs: error: inspect_get_build_id: dispatch_incoming_message: unknown procedure number 513.
+ # set LIBGUESTFS_PATH to point to the matching libguestfs appliance directory
+ local -x SKIP_TEST_VIRT_INSPECTOR_LVM_ON_LUKS_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_LUKS_ON_LVM_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_LINUX_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_WINDOWS_SH=1
+ # Misssing appliance support? libguestfs returns
+ # virt-make-fs: file command failed
+ local -x SKIP_TEST_VIRT_MAKE_FS_SH=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+pkg_postinst() {
+ if ! use ocaml ; then
+ einfo "OCaml based tools and bindings (virt-resize, virt-sparsify, virt-sysprep, ...) NOT installed"
+ fi
+
+ if ! use perl ; then
+ einfo "Perl based tools NOT built"
+ fi
+}
diff --git a/app-emulation/guestfs-tools/guestfs-tools-1.54.0.ebuild b/app-emulation/guestfs-tools/guestfs-tools-1.54.0.ebuild
new file mode 100644
index 000000000000..09205cf2930a
--- /dev/null
+++ b/app-emulation/guestfs-tools/guestfs-tools-1.54.0.ebuild
@@ -0,0 +1,154 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/libguestfs-appliance (if any new release there)
+
+inherit autotools bash-completion-r1 perl-functions toolchain-funcs
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${PN}/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS="~amd64"
+fi
+IUSE="doc libvirt +ocaml +perl test"
+RESTRICT="!test? ( test )"
+
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ sys-libs/libxcrypt:=
+ sys-libs/ncurses:=
+"
+COMMON_DEPEND_EXPLICIT="
+ >=app-emulation/libguestfs-1.55.6:=[ocaml,perl?,libvirt=]
+ dev-libs/json-c:=
+ sys-libs/libosinfo
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+COMMON_DEPEND_IMPLICIT="
+ dev-db/sqlite
+ sys-apps/hwdata
+"
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ app-misc/hivex
+ virtual/perl-Getopt-Long
+ )
+"
+
+# Some OCaml is always required
+# bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ ocaml? (
+ dev-ml/ocaml-gettext
+ dev-ml/ocaml-gettext-stub
+ )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+ test? ( ocaml? ( dev-ml/ounit2[ocamlopt] ) )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.54.0-guestfs-bash-completion.m4-more-control.patch"
+ "${FILESDIR}/${PN}-1.54.0-bash-Remove-vestigial-bash-completions.patch"
+ "${FILESDIR}/${PN}-1.52.3-common-libguestfs-1.58-compat.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ # m4/guestfs-progs.m4: (f)lex and bison for virt-builder (required).
+ # Bug #915339
+ unset LEX YACC
+
+ local myconf=(
+ $(usex doc '' PO4A=no)
+ $(use_enable ocaml)
+ $(use_enable perl)
+ $(use_with libvirt)
+ --with-bash-completion
+ --with-bash-completion-dir="$(get_bashcompdir)"
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+}
+
+src_test() {
+ # Missing appliance support? libguestfs (virt-inspector --format=raw -a ${IMAGE}) returns
+ # libguestfs: error: inspect_get_build_id: dispatch_incoming_message: unknown procedure number 513.
+ # set LIBGUESTFS_PATH to point to the matching libguestfs appliance directory
+ local -x SKIP_TEST_VIRT_INSPECTOR_LVM_ON_LUKS_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_LUKS_ON_LVM_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_LINUX_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_WINDOWS_SH=1
+ # Misssing appliance support? libguestfs returns
+ # virt-make-fs: file command failed
+ local -x SKIP_TEST_VIRT_MAKE_FS_SH=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+pkg_postinst() {
+ if ! use ocaml ; then
+ einfo "OCaml based tools and bindings (virt-resize, virt-sparsify, virt-sysprep, ...) NOT installed"
+ fi
+
+ if ! use perl ; then
+ einfo "Perl based tools NOT built"
+ fi
+}
diff --git a/app-emulation/guestfs-tools/guestfs-tools-1.55.6.ebuild b/app-emulation/guestfs-tools/guestfs-tools-1.55.6.ebuild
new file mode 100644
index 000000000000..42828120ea04
--- /dev/null
+++ b/app-emulation/guestfs-tools/guestfs-tools-1.55.6.ebuild
@@ -0,0 +1,154 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/libguestfs-appliance (if any new release there)
+
+inherit autotools bash-completion-r1 perl-functions toolchain-funcs
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${PN}/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS=""
+fi
+IUSE="doc libvirt +ocaml +perl test"
+RESTRICT="!test? ( test )"
+
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ sys-libs/libxcrypt:=
+ sys-libs/ncurses:=
+"
+COMMON_DEPEND_EXPLICIT="
+ >=app-emulation/libguestfs-1.55.6:=[ocaml,perl?,libvirt=]
+ dev-libs/json-c:=
+ sys-libs/libosinfo
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+COMMON_DEPEND_IMPLICIT="
+ dev-db/sqlite
+ sys-apps/hwdata
+"
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ app-misc/hivex
+ virtual/perl-Getopt-Long
+ )
+"
+
+# Some OCaml is always required
+# bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ ocaml? (
+ dev-ml/ocaml-gettext
+ dev-ml/ocaml-gettext-stub
+ )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+ test? ( ocaml? ( dev-ml/ounit2[ocamlopt] ) )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.54.0-bash-Remove-vestigial-bash-completions.patch"
+ "${FILESDIR}/${PN}-1.54.0-guestfs-bash-completion.m4-more-control.patch"
+ "${FILESDIR}/${PN}-1.55.6-common-support-ocaml-4.14.2.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ # m4/guestfs-progs.m4: (f)lex and bison for virt-builder (required).
+ # Bug #915339
+ unset LEX YACC
+
+ local myconf=(
+ $(usex doc '' PO4A=no)
+ $(use_enable ocaml)
+ $(use_enable perl)
+ $(use_with libvirt)
+ --with-bash-completion
+ --with-bash-completion-dir=$(get_bashcompdir)
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+}
+
+src_test() {
+ # Missing appliance support? libguestfs (virt-inspector --format=raw -a ${IMAGE}) returns
+ # libguestfs: error: inspect_get_build_id: dispatch_incoming_message: unknown procedure number 513.
+ # set LIBGUESTFS_PATH to point to the matching libguestfs appliance directory
+ local -x SKIP_TEST_VIRT_INSPECTOR_LVM_ON_LUKS_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_LUKS_ON_LVM_SH=1
+ local -x SKIP_TEST_VIRT_INSPECTOR_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_LINUX_SH=1
+ local -x SKIP_TEST_VIRT_DRIVERS_WINDOWS_SH=1
+ # Misssing appliance support? libguestfs returns
+ # virt-make-fs: file command failed
+ local -x SKIP_TEST_VIRT_MAKE_FS_SH=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+pkg_postinst() {
+ if ! use ocaml ; then
+ einfo "OCaml based tools and bindings (virt-resize, virt-sparsify, virt-sysprep, ...) NOT installed"
+ fi
+
+ if ! use perl ; then
+ einfo "Perl based tools NOT built"
+ fi
+}
diff --git a/app-emulation/guestfs-tools/metadata.xml b/app-emulation/guestfs-tools/metadata.xml
new file mode 100644
index 000000000000..61ac0226bebd
--- /dev/null
+++ b/app-emulation/guestfs-tools/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="libvirt">Use <pkg>app-emulation/libvirt</pkg> to manipulate VMs</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/gxemul/Manifest b/app-emulation/gxemul/Manifest
new file mode 100644
index 000000000000..b836f6c430e7
--- /dev/null
+++ b/app-emulation/gxemul/Manifest
@@ -0,0 +1,2 @@
+DIST gxemul-0.6.3.1.tar.gz 6144125 BLAKE2B 080f9c0d5ff333bdd782a44cd34abe6cb658efbeed8e68ea7d9f7c3323030b8755f0555cdedaf6531e7d5024f07474de9664ec8537f0b70beffac8ec95d4dd26 SHA512 b750a53c764245d2c02147beefdac4f44f1e6bad0f390a2300b3907b312d59a41fa8f6de612494627366f1787e49174acfc9113263901af878fab8e925b0645e
+DIST gxemul-0.7.0.tar.gz 5985021 BLAKE2B 39059af5caab82c4435d1cdcf1d3cfb66a11cd9042a5214a4fc0ed6f7611284919ce85812c8ba896989279756d2c9b2c020abd9b66467c3a7ecd8c5a4cb59102 SHA512 d977342843e903aedd9dcdf6fdab81ceb5ee1552bf3b90deb77eb59b42e5fad3a65f216ce33cf33259372ff9a10af5b1365827de949f0c61fb9859b417972c71
diff --git a/app-emulation/gxemul/files/gxemul-0.6.0-gcc46.patch b/app-emulation/gxemul/files/gxemul-0.6.0-gcc46.patch
new file mode 100644
index 000000000000..eb0ce26b6e1c
--- /dev/null
+++ b/app-emulation/gxemul/files/gxemul-0.6.0-gcc46.patch
@@ -0,0 +1,16 @@
+ src/include/refcount_ptr.h | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/src/include/refcount_ptr.h b/src/include/refcount_ptr.h
+index 4645769..ebabd58 100644
+--- a/src/include/refcount_ptr.h
++++ b/src/include/refcount_ptr.h
+@@ -1,6 +1,8 @@
+ #ifndef REFCOUNT_PTR_H
+ #define REFCOUNT_PTR_H
+
++#include <stddef.h>
++
+ /*
+ * Copyright (C) 2007-2010 Anders Gavare. All rights reserved.
+ *
diff --git a/app-emulation/gxemul/files/gxemul-0.6.0-no-doxygen.patch b/app-emulation/gxemul/files/gxemul-0.6.0-no-doxygen.patch
new file mode 100644
index 000000000000..ea0a20cba061
--- /dev/null
+++ b/app-emulation/gxemul/files/gxemul-0.6.0-no-doxygen.patch
@@ -0,0 +1,21 @@
+We already have pre-generated docs. Don't bother looking for Doxygen.
+----
+diff --git a/configure b/configure
+index c366701..3895d4f 100755
+--- a/configure
++++ b/configure
+@@ -1106,13 +1106,7 @@ rm -f _test_end*
+
+ printf "checking for Doxygen... "
+
+-if (doxygen --version); then
+- # Version is printed, if found.
+- DOXYGEN=doxygen
+-else
+- # Not found is already printed, if doxygen is not found.
+- DOXYGEN="\#"
+-fi
++DOXYGEN="\#"
+
+
+ ###############################################################################
diff --git a/app-emulation/gxemul/gxemul-0.6.3.1.ebuild b/app-emulation/gxemul/gxemul-0.6.3.1.ebuild
new file mode 100644
index 000000000000..aeb15b0df272
--- /dev/null
+++ b/app-emulation/gxemul/gxemul-0.6.3.1.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="A Machine Emulator, Mainly emulates MIPS, but supports other CPU types"
+HOMEPAGE="http://gxemul.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/project/gxemul/GXemul/${PV}/${P}.tar.gz"
+
+LICENSE="BSD public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~mips ~ppc ~sparc ~x86"
+IUSE="debug X"
+
+RDEPEND="X? ( x11-libs/libX11 )"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+DOCS=( HISTORY README )
+HTML_DOCS=( doc/. )
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.6.0-gcc46.patch
+ "${FILESDIR}"/${PN}-0.6.0-no-doxygen.patch
+)
+
+src_prepare() {
+ default
+ sed -i configure -e 's|-O3||g' || die
+}
+
+src_configure() {
+ tc-export CC CXX
+ # no autotools
+ local myconfargs=(
+ --disable-valgrind
+ $(use debug && echo --debug)
+ $(use X || echo --disable-x)
+ )
+ ./configure "${myconfargs[@]}" || die
+}
+
+src_install() {
+ dobin ${PN}
+ doman man/${PN}.1
+ einstalldocs
+}
diff --git a/app-emulation/gxemul/gxemul-0.7.0.ebuild b/app-emulation/gxemul/gxemul-0.7.0.ebuild
new file mode 100644
index 000000000000..5d5e9d9eaf9d
--- /dev/null
+++ b/app-emulation/gxemul/gxemul-0.7.0.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="A Machine Emulator, Mainly emulates MIPS, but supports other CPU types"
+HOMEPAGE="http://gxemul.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/project/gxemul/GXemul/${PV}/${P}.tar.gz"
+
+LICENSE="BSD public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~mips ~ppc ~sparc ~x86"
+IUSE="debug X"
+
+RDEPEND="X? ( x11-libs/libX11 )"
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )
+"
+DOCS=( HISTORY README )
+HTML_DOCS=( doc/. )
+
+src_prepare() {
+ default
+ append-cflags -fgnu89-inline
+ sed -i configure -e 's|-O3||g' || die
+}
+
+src_configure() {
+ tc-export CC CXX
+ # no autotools
+ local myconfargs=(
+ $(use debug && echo --debug)
+ $(use X || echo --disable-x)
+ )
+ ./configure "${myconfargs[@]}" || die
+}
+
+src_install() {
+ dobin ${PN}
+ doman man/${PN}.1
+ einstalldocs
+}
diff --git a/app-emulation/gxemul/metadata.xml b/app-emulation/gxemul/metadata.xml
new file mode 100644
index 000000000000..abe4d3b10c8f
--- /dev/null
+++ b/app-emulation/gxemul/metadata.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <longdescription>
+ Machine Emulator.
+ Supports emulation across several architectures.
+ Primarily for MIPS support, but other platform support coming soon.
+ </longdescription>
+ <upstream>
+ <changelog>https://gavare.se/gxemul/gxemul-stable/doc/RELEASE.html</changelog>
+ <doc>https://gavare.se/gxemul/gxemul-stable/doc/</doc>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules-sdl-crypto/Manifest b/app-emulation/hercules-sdl-crypto/Manifest
new file mode 100644
index 000000000000..8bbafa033cea
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/Manifest
@@ -0,0 +1,2 @@
+DIST crypto-a5096e5dd79f46b568806240c0824cd8cb2fcda2.tar.gz 81482 BLAKE2B 4e414c66ee3716c17217ac85b658171907b1018bb8b7306c2b040957cb15723f77c32d5b04c5ff12c346e2ac464d16e805c036b7408755a7f1ca40174c031296 SHA512 d55e73d7dfa90da53c173159e32cb733a44780cd8606d539351371e61910f3a82312b8ab9f858b293c89c8f7cc4fe74da86825db2f9a6e73391d95c3f903d94e
+DIST hercules-sdl-crypto-9ac58405c2b91fb7cd230aed474dc7059f0fcad9.tar.gz 81487 BLAKE2B 19a3ad9cef947ab6fa2b75a4ed1e1a48e3c678176339cc6ff0dba18b47f8f977e7ecc39e8cc0fd417b8136c25d7f2ad674f01d9c64b333477c4aeed265aaa3ce SHA512 f2a39153db12a9929eaeef303fa4e67723c670511f78de4673fe0295c7d36d3162dc6201a142957c58ff62e75fd71234b21b45f4517d3493b2aa22a3ca094dff
diff --git a/app-emulation/hercules-sdl-crypto/files/cmakefix.patch b/app-emulation/hercules-sdl-crypto/files/cmakefix.patch
new file mode 100644
index 000000000000..dd8f1840a7d9
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/files/cmakefix.patch
@@ -0,0 +1,155 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a316b76..50176f0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,6 +6,8 @@ cmake_minimum_required( VERSION 3.2 )
+
+ cmake_policy( SET CMP0048 NEW )
+
++include( GNUInstallDirs )
++
+ #------------------------------------------------------------------------------
+ # Define the project
+ #------------------------------------------------------------------------------
+@@ -131,8 +133,8 @@ set_target_properties( ${FULLNAME} PROPERTIES
+ COMPILE_PDB_NAME ${FULLNAME} )
+
+ install( TARGETS ${FULLNAME}
+- PUBLIC_HEADER DESTINATION include
+- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} )
++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/include
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/lib )
+
+
+ #------------------------------------------------------------------------------
+diff --git a/cmake/modules/ParseBinaryDir.cmake b/cmake/modules/ParseBinaryDir.cmake
+index 7983107..2ede77b 100644
+--- a/cmake/modules/ParseBinaryDir.cmake
++++ b/cmake/modules/ParseBinaryDir.cmake
+@@ -7,6 +7,8 @@ macro( ParseBinaryDir )
+ set( CMAKE_DISABLE_IN_SOURCE_BUILD ON )
+ set( CMAKE_DISABLE_SOURCE_CHANGES ON )
+
++ set( FULLNAME ${EXTPKG_NAME} )
++
+ #--------------------------------------------------------------------------
+ # Make sure they are not trying to do an "in source" build by making
+ # sure the cmake "binary" (build) directory is not a subdirectory of
+@@ -48,102 +50,6 @@ Remove the 'CMakeCache.txt' file and the entire 'CMakeFiles' directory and try a
+
+ TEST_BIG_ENDIAN( IS_BIG_ENDIAN )
+
+- #--------------------------------------------------------------------------
+- # Split the binary build directory into its constituent components.
+- # Refer to the "BUILDING" document for more information.
+- #--------------------------------------------------------------------------
+-
+- get_filename_component( BINARY_HLQ "${CMAKE_BINARY_DIR}" DIRECTORY )
+- get_filename_component( BINARY_DIR "${CMAKE_BINARY_DIR}" NAME )
+-
+- trace( BINARY_HLQ )
+- trace( BINARY_DIR )
+-
+- string( FIND ${BINARY_DIR} " " _n )
+- if( NOT ${_n} EQUAL -1 )
+- message( FATAL_ERROR "Build directory name cannot have spaces! ${BINARY_DIR}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # First, split it into two parts: before the dot and after the dot
+- #--------------------------------------------------------------------------
+-
+- string( REGEX MATCH "([^\\.]*)" _xxxxx ${BINARY_DIR} )
+- string( REGEX MATCH "([^.]*\$)" CONFIG ${BINARY_DIR} )
+-
+- trace( _xxxxx )
+- trace( CONFIG )
+-
+- #--------------------------------------------------------------------------
+- # The second part tells us if this is a "Debug" or "Release" build.
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${CONFIG} _n )
+- if( ${_n} LESS 1 )
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Capitalize "Debug" and "Release" for Visual Studio compatibility.
+- #--------------------------------------------------------------------------
+-
+- include( CapitalizeWord )
+-
+- Capitalize_Word( ${CONFIG} CONFIG )
+-
+- if(( NOT CONFIG STREQUAL "Debug" ) AND (NOT CONFIG STREQUAL "Release" ))
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Define the "Debug" or "Release" build type
+- #--------------------------------------------------------------------------
+-
+- if( CONFIG STREQUAL "Debug" )
+- set( CMAKE_BUILD_TYPE "Debug" CACHE PATH "" FORCE )
+- set( DBGCHAR "d" )
+- elseif( CONFIG STREQUAL "Release" )
+- set( CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE PATH "" FORCE )
+- set( DBGCHAR "" )
+- endif()
+-
+- trace( CMAKE_BUILD_TYPE )
+-
+- #--------------------------------------------------------------------------
+- # Now split the first part into the base package/product name
+- # and build architecture (32-bit ot 64-bit).
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${_xxxxx} _n )
+- if( ${_n} LESS 3 )
+- message( FATAL_ERROR "Invalid base package name! ${_xxxxx}" )
+- endif()
+-
+- math( EXPR _n "${_n} - 2" ) # (want the last two characters)
+-
+- string( SUBSTRING ${_xxxxx} 0 ${_n} BASENAME )
+- string( SUBSTRING ${_xxxxx} ${_n} -1 BITNESS )
+-
+- if( NOT BITNESS STREQUAL "32" AND
+- NOT BITNESS STREQUAL "64" )
+- message( FATAL_ERROR "Invalid package architecture! ${BITNESS}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Show results
+- #--------------------------------------------------------------------------
+-
+- set( SUFFIX "${BITNESS}${DBGCHAR}" )
+- set( FULLNAME "${BASENAME}${SUFFIX}" )
+-
+- trace( BASENAME )
+- trace( BITNESS )
+- trace( CONFIG )
+- trace( DBGCHAR )
+- trace( SUFFIX )
+- trace( FULLNAME )
+- trace( CMAKE_BINARY_DIR )
+-
+ #--------------------------------------------------------------------------
+ # Define the install directory
+ #--------------------------------------------------------------------------
+diff --git a/extra.txt b/extra.txt
+index dfb293d..6018eb6 100644
+--- a/extra.txt
++++ b/extra.txt
+@@ -2,8 +2,8 @@
+ # Define additional files to be installed
+ #------------------------------------------------------------------------------
+
+-install( FILES "crypto.LICENSE.txt" DESTINATION . )
+-install( FILES "crypto.README.txt" DESTINATION . )
++install( FILES "crypto.LICENSE.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "crypto.README.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
+
+ #------------------------------------------------------------------------------
+
diff --git a/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.7.0.ebuild b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.7.0.ebuild
new file mode 100644
index 000000000000..cb828f4cfb70
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.7.0.ebuild
@@ -0,0 +1,20 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="a5096e5dd79f46b568806240c0824cd8cb2fcda2"
+
+DESCRIPTION="Simple AES/DES encryption and SHA1/SHA2 hashing library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/crypto"
+SRC_URI="https://github.com/SDL-Hercules-390/crypto/archive/${COMMIT}.tar.gz -> crypto-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/crypto-${COMMIT}"
+LICENSE="public-domain MIT BSD"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
diff --git a/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.8.0.ebuild b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.8.0.ebuild
new file mode 100644
index 000000000000..f9099c407459
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.8.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="9ac58405c2b91fb7cd230aed474dc7059f0fcad9"
+
+DESCRIPTION="Simple AES/DES encryption and SHA1/SHA2 hashing library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/crypto"
+SRC_URI="https://github.com/SDL-Hercules-390/crypto/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/crypto-${COMMIT}"
+LICENSE="public-domain MIT BSD"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.0.ebuild b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.0.ebuild
new file mode 100644
index 000000000000..507e658e9cce
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="9ac58405c2b91fb7cd230aed474dc7059f0fcad9"
+
+DESCRIPTION="Simple AES/DES encryption and SHA1/SHA2 hashing library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/crypto"
+SRC_URI="https://github.com/SDL-Hercules-390/crypto/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/crypto-${COMMIT}"
+LICENSE="public-domain MIT BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.1.ebuild b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.1.ebuild
new file mode 100644
index 000000000000..507e658e9cce
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-4.9.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="9ac58405c2b91fb7cd230aed474dc7059f0fcad9"
+
+DESCRIPTION="Simple AES/DES encryption and SHA1/SHA2 hashing library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/crypto"
+SRC_URI="https://github.com/SDL-Hercules-390/crypto/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/crypto-${COMMIT}"
+LICENSE="public-domain MIT BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-9999.ebuild b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-9999.ebuild
new file mode 100644
index 000000000000..d49827b8e856
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/hercules-sdl-crypto-9999.ebuild
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 cmake dot-a
+
+DESCRIPTION="Simple AES/DES encryption and SHA1/SHA2 hashing library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/crypto"
+EGIT_REPO_URI="https://github.com/SDL-Hercules-390/crypto"
+
+LICENSE="public-domain MIT BSD"
+SLOT="0"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-crypto/metadata.xml b/app-emulation/hercules-sdl-crypto/metadata.xml
new file mode 100644
index 000000000000..2d3d9aebd995
--- /dev/null
+++ b/app-emulation/hercules-sdl-crypto/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>matoro_gentoo@matoro.tk</email>
+ <name>Matoro Mahri</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ Simple AES/DES encryption and SHA1/SHA2 hashing library for use by the SDL-Hercules-390 emulator
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules-sdl-decnumber/Manifest b/app-emulation/hercules-sdl-decnumber/Manifest
new file mode 100644
index 000000000000..24ec2ddd1aaf
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/Manifest
@@ -0,0 +1,2 @@
+DIST decNumber-3aa2f4531b5fcbd0478ecbaf72ccc47079c67280.tar.gz 785702 BLAKE2B c7348c33dfdad046f79fc8112800e31b8010a0aa0acbca0e84d21e0f4ba366969a4c453d07ed8a3fdb79735850f17d71e66731a9b2db6d64781309f2c2861f8e SHA512 dad1c2d271f5739ac99850ac90ad45209e8efc80c20d29210f2f5b911b10ffc12a039e1bf6a7b8a171869a63ecad9bc8dfcf95161273385974b03221bd538a74
+DIST hercules-sdl-decnumber-995184583107625015bb450228a5f3fb781d9502.tar.gz 785704 BLAKE2B 8da0e9f5f8f2c0f72629a1b4418f65d2b36388eb4292ba100f8e9d3ec0cf3127b46f23e42d58350b6c5d7ab06950450d85785e509858fe84ae01da28218c8e8c SHA512 1626ad71e9e0f22c721b66a4001c4d084b7bcf0997eabe1935ffc4eb728a6f93534e99a25415dcda4ecf449b1fd2d2777da629f4b8e56ee3cab6e011ef06ecde
diff --git a/app-emulation/hercules-sdl-decnumber/files/cmakefix.patch b/app-emulation/hercules-sdl-decnumber/files/cmakefix.patch
new file mode 100644
index 000000000000..42e461d92e24
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/files/cmakefix.patch
@@ -0,0 +1,159 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a316b76..50176f0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,6 +6,8 @@ cmake_minimum_required( VERSION 3.2 )
+
+ cmake_policy( SET CMP0048 NEW )
+
++include( GNUInstallDirs )
++
+ #------------------------------------------------------------------------------
+ # Define the project
+ #------------------------------------------------------------------------------
+@@ -131,8 +133,8 @@ set_target_properties( ${FULLNAME} PROPERTIES
+ COMPILE_PDB_NAME ${FULLNAME} )
+
+ install( TARGETS ${FULLNAME}
+- PUBLIC_HEADER DESTINATION include
+- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} )
++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/include
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/lib )
+
+
+ #------------------------------------------------------------------------------
+diff --git a/cmake/modules/ParseBinaryDir.cmake b/cmake/modules/ParseBinaryDir.cmake
+index 7983107..2ede77b 100644
+--- a/cmake/modules/ParseBinaryDir.cmake
++++ b/cmake/modules/ParseBinaryDir.cmake
+@@ -7,6 +7,8 @@ macro( ParseBinaryDir )
+ set( CMAKE_DISABLE_IN_SOURCE_BUILD ON )
+ set( CMAKE_DISABLE_SOURCE_CHANGES ON )
+
++ set( FULLNAME ${EXTPKG_NAME} )
++
+ #--------------------------------------------------------------------------
+ # Make sure they are not trying to do an "in source" build by making
+ # sure the cmake "binary" (build) directory is not a subdirectory of
+@@ -48,102 +50,6 @@ Remove the 'CMakeCache.txt' file and the entire 'CMakeFiles' directory and try a
+
+ TEST_BIG_ENDIAN( IS_BIG_ENDIAN )
+
+- #--------------------------------------------------------------------------
+- # Split the binary build directory into its constituent components.
+- # Refer to the "BUILDING" document for more information.
+- #--------------------------------------------------------------------------
+-
+- get_filename_component( BINARY_HLQ "${CMAKE_BINARY_DIR}" DIRECTORY )
+- get_filename_component( BINARY_DIR "${CMAKE_BINARY_DIR}" NAME )
+-
+- trace( BINARY_HLQ )
+- trace( BINARY_DIR )
+-
+- string( FIND ${BINARY_DIR} " " _n )
+- if( NOT ${_n} EQUAL -1 )
+- message( FATAL_ERROR "Build directory name cannot have spaces! ${BINARY_DIR}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # First, split it into two parts: before the dot and after the dot
+- #--------------------------------------------------------------------------
+-
+- string( REGEX MATCH "([^\\.]*)" _xxxxx ${BINARY_DIR} )
+- string( REGEX MATCH "([^.]*\$)" CONFIG ${BINARY_DIR} )
+-
+- trace( _xxxxx )
+- trace( CONFIG )
+-
+- #--------------------------------------------------------------------------
+- # The second part tells us if this is a "Debug" or "Release" build.
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${CONFIG} _n )
+- if( ${_n} LESS 1 )
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Capitalize "Debug" and "Release" for Visual Studio compatibility.
+- #--------------------------------------------------------------------------
+-
+- include( CapitalizeWord )
+-
+- Capitalize_Word( ${CONFIG} CONFIG )
+-
+- if(( NOT CONFIG STREQUAL "Debug" ) AND (NOT CONFIG STREQUAL "Release" ))
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Define the "Debug" or "Release" build type
+- #--------------------------------------------------------------------------
+-
+- if( CONFIG STREQUAL "Debug" )
+- set( CMAKE_BUILD_TYPE "Debug" CACHE PATH "" FORCE )
+- set( DBGCHAR "d" )
+- elseif( CONFIG STREQUAL "Release" )
+- set( CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE PATH "" FORCE )
+- set( DBGCHAR "" )
+- endif()
+-
+- trace( CMAKE_BUILD_TYPE )
+-
+- #--------------------------------------------------------------------------
+- # Now split the first part into the base package/product name
+- # and build architecture (32-bit ot 64-bit).
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${_xxxxx} _n )
+- if( ${_n} LESS 3 )
+- message( FATAL_ERROR "Invalid base package name! ${_xxxxx}" )
+- endif()
+-
+- math( EXPR _n "${_n} - 2" ) # (want the last two characters)
+-
+- string( SUBSTRING ${_xxxxx} 0 ${_n} BASENAME )
+- string( SUBSTRING ${_xxxxx} ${_n} -1 BITNESS )
+-
+- if( NOT BITNESS STREQUAL "32" AND
+- NOT BITNESS STREQUAL "64" )
+- message( FATAL_ERROR "Invalid package architecture! ${BITNESS}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Show results
+- #--------------------------------------------------------------------------
+-
+- set( SUFFIX "${BITNESS}${DBGCHAR}" )
+- set( FULLNAME "${BASENAME}${SUFFIX}" )
+-
+- trace( BASENAME )
+- trace( BITNESS )
+- trace( CONFIG )
+- trace( DBGCHAR )
+- trace( SUFFIX )
+- trace( FULLNAME )
+- trace( CMAKE_BINARY_DIR )
+-
+ #--------------------------------------------------------------------------
+ # Define the install directory
+ #--------------------------------------------------------------------------
+diff --git a/extra.txt b/extra.txt
+index dfb293d..6018eb6 100644
+--- a/extra.txt
++++ b/extra.txt
+@@ -2,10 +2,10 @@
+ # Define additional files to be installed
+ #------------------------------------------------------------------------------
+
+-install( FILES "decnumber.ICU-license.html" DESTINATION . )
+-install( FILES "decnumber.pdf" DESTINATION . )
+-install( FILES "decnumber.readme.txt" DESTINATION . )
+-install( FILES "decnumber.ERRATA" DESTINATION . )
++install( FILES "decnumber.ICU-license.html" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "decnumber.pdf" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "decnumber.readme.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "decnumber.ERRATA" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
+
+ #------------------------------------------------------------------------------
+
diff --git a/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.7.0.ebuild b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.7.0.ebuild
new file mode 100644
index 000000000000..bc35c58122a4
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.7.0.ebuild
@@ -0,0 +1,20 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="3aa2f4531b5fcbd0478ecbaf72ccc47079c67280"
+
+DESCRIPTION="ANSI C General Decimal Arithmetic Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/decNumber"
+SRC_URI="https://github.com/SDL-Hercules-390/decNumber/archive/${COMMIT}.tar.gz -> decNumber-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/decNumber-${COMMIT}"
+LICENSE="icu"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
diff --git a/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.8.0.ebuild b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.8.0.ebuild
new file mode 100644
index 000000000000..533406fd90a4
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.8.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="995184583107625015bb450228a5f3fb781d9502"
+
+DESCRIPTION="ANSI C General Decimal Arithmetic Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/decNumber"
+SRC_URI="https://github.com/SDL-Hercules-390/decNumber/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/decNumber-${COMMIT}"
+LICENSE="icu"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.0.ebuild b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.0.ebuild
new file mode 100644
index 000000000000..192a63d09da4
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="995184583107625015bb450228a5f3fb781d9502"
+
+DESCRIPTION="ANSI C General Decimal Arithmetic Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/decNumber"
+SRC_URI="https://github.com/SDL-Hercules-390/decNumber/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/decNumber-${COMMIT}"
+LICENSE="icu"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.1.ebuild b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.1.ebuild
new file mode 100644
index 000000000000..192a63d09da4
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-4.9.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="995184583107625015bb450228a5f3fb781d9502"
+
+DESCRIPTION="ANSI C General Decimal Arithmetic Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/decNumber"
+SRC_URI="https://github.com/SDL-Hercules-390/decNumber/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/decNumber-${COMMIT}"
+LICENSE="icu"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-9999.ebuild b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-9999.ebuild
new file mode 100644
index 000000000000..8438afda8e15
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/hercules-sdl-decnumber-9999.ebuild
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 cmake dot-a
+
+DESCRIPTION="ANSI C General Decimal Arithmetic Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/decNumber"
+EGIT_REPO_URI="https://github.com/SDL-Hercules-390/decNumber"
+
+LICENSE="icu"
+SLOT="0"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-decnumber/metadata.xml b/app-emulation/hercules-sdl-decnumber/metadata.xml
new file mode 100644
index 000000000000..d42d7da612da
--- /dev/null
+++ b/app-emulation/hercules-sdl-decnumber/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>matoro_gentoo@matoro.tk</email>
+ <name>Matoro Mahri</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ ANSI C General Decimal Arithmetic Library for use by the SDL-Hercules-390 emulator
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules-sdl-softfloat/Manifest b/app-emulation/hercules-sdl-softfloat/Manifest
new file mode 100644
index 000000000000..0d76d0de9f12
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/Manifest
@@ -0,0 +1,2 @@
+DIST SoftFloat-4b0c326008e174610969c92e69178939ed80653d.tar.gz 237236 BLAKE2B 4d29161ebdb1b659a61a7c83cb2c5eee1b0874455d0e6f634d2fb70a4dd0200c0bd46961edf9e7f41fd84695278653e1073c2b0fe39bf252ca7242bafdcf6adc SHA512 549b144c63fdbbb0815650dfe9fb443a92fb8baeff33baeca1d25fa6226705ef149a1bdb80236c5debeb161bfaecd4cffe9f8d74298a83175c2ddeebb735c48c
+DIST hercules-sdl-softfloat-e053494d988ec0648c92f683abce52597bfae745.tar.gz 237302 BLAKE2B f2433766865742b6d8f6b61867120460986c5280fdf42201aec232e2e470f3b1fc7907e603b3632da8d3c511c654049a585faac87bb30e2055ffc3470fbeafea SHA512 322fcb5d8522610b3d2d3a725d9f720dc05e0554b53dbf898f2826cf98ede81a6441f2a83ad71cbaf2d58fa3c8faa8b086144f4492950732dd3f3a1e3b40e0a5
diff --git a/app-emulation/hercules-sdl-softfloat/files/cmakefix.patch b/app-emulation/hercules-sdl-softfloat/files/cmakefix.patch
new file mode 100644
index 000000000000..21796e3cda00
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/files/cmakefix.patch
@@ -0,0 +1,159 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a316b76..50176f0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,6 +6,8 @@ cmake_minimum_required( VERSION 3.2 )
+
+ cmake_policy( SET CMP0048 NEW )
+
++include( GNUInstallDirs )
++
+ #------------------------------------------------------------------------------
+ # Define the project
+ #------------------------------------------------------------------------------
+@@ -131,8 +133,8 @@ set_target_properties( ${FULLNAME} PROPERTIES
+ COMPILE_PDB_NAME ${FULLNAME} )
+
+ install( TARGETS ${FULLNAME}
+- PUBLIC_HEADER DESTINATION include
+- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} )
++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/include
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/lib )
+
+
+ #------------------------------------------------------------------------------
+diff --git a/cmake/modules/ParseBinaryDir.cmake b/cmake/modules/ParseBinaryDir.cmake
+index 7983107..2ede77b 100644
+--- a/cmake/modules/ParseBinaryDir.cmake
++++ b/cmake/modules/ParseBinaryDir.cmake
+@@ -7,6 +7,8 @@ macro( ParseBinaryDir )
+ set( CMAKE_DISABLE_IN_SOURCE_BUILD ON )
+ set( CMAKE_DISABLE_SOURCE_CHANGES ON )
+
++ set( FULLNAME ${EXTPKG_NAME} )
++
+ #--------------------------------------------------------------------------
+ # Make sure they are not trying to do an "in source" build by making
+ # sure the cmake "binary" (build) directory is not a subdirectory of
+@@ -48,102 +50,6 @@ Remove the 'CMakeCache.txt' file and the entire 'CMakeFiles' directory and try a
+
+ TEST_BIG_ENDIAN( IS_BIG_ENDIAN )
+
+- #--------------------------------------------------------------------------
+- # Split the binary build directory into its constituent components.
+- # Refer to the "BUILDING" document for more information.
+- #--------------------------------------------------------------------------
+-
+- get_filename_component( BINARY_HLQ "${CMAKE_BINARY_DIR}" DIRECTORY )
+- get_filename_component( BINARY_DIR "${CMAKE_BINARY_DIR}" NAME )
+-
+- trace( BINARY_HLQ )
+- trace( BINARY_DIR )
+-
+- string( FIND ${BINARY_DIR} " " _n )
+- if( NOT ${_n} EQUAL -1 )
+- message( FATAL_ERROR "Build directory name cannot have spaces! ${BINARY_DIR}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # First, split it into two parts: before the dot and after the dot
+- #--------------------------------------------------------------------------
+-
+- string( REGEX MATCH "([^\\.]*)" _xxxxx ${BINARY_DIR} )
+- string( REGEX MATCH "([^.]*\$)" CONFIG ${BINARY_DIR} )
+-
+- trace( _xxxxx )
+- trace( CONFIG )
+-
+- #--------------------------------------------------------------------------
+- # The second part tells us if this is a "Debug" or "Release" build.
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${CONFIG} _n )
+- if( ${_n} LESS 1 )
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Capitalize "Debug" and "Release" for Visual Studio compatibility.
+- #--------------------------------------------------------------------------
+-
+- include( CapitalizeWord )
+-
+- Capitalize_Word( ${CONFIG} CONFIG )
+-
+- if(( NOT CONFIG STREQUAL "Debug" ) AND (NOT CONFIG STREQUAL "Release" ))
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Define the "Debug" or "Release" build type
+- #--------------------------------------------------------------------------
+-
+- if( CONFIG STREQUAL "Debug" )
+- set( CMAKE_BUILD_TYPE "Debug" CACHE PATH "" FORCE )
+- set( DBGCHAR "d" )
+- elseif( CONFIG STREQUAL "Release" )
+- set( CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE PATH "" FORCE )
+- set( DBGCHAR "" )
+- endif()
+-
+- trace( CMAKE_BUILD_TYPE )
+-
+- #--------------------------------------------------------------------------
+- # Now split the first part into the base package/product name
+- # and build architecture (32-bit ot 64-bit).
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${_xxxxx} _n )
+- if( ${_n} LESS 3 )
+- message( FATAL_ERROR "Invalid base package name! ${_xxxxx}" )
+- endif()
+-
+- math( EXPR _n "${_n} - 2" ) # (want the last two characters)
+-
+- string( SUBSTRING ${_xxxxx} 0 ${_n} BASENAME )
+- string( SUBSTRING ${_xxxxx} ${_n} -1 BITNESS )
+-
+- if( NOT BITNESS STREQUAL "32" AND
+- NOT BITNESS STREQUAL "64" )
+- message( FATAL_ERROR "Invalid package architecture! ${BITNESS}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Show results
+- #--------------------------------------------------------------------------
+-
+- set( SUFFIX "${BITNESS}${DBGCHAR}" )
+- set( FULLNAME "${BASENAME}${SUFFIX}" )
+-
+- trace( BASENAME )
+- trace( BITNESS )
+- trace( CONFIG )
+- trace( DBGCHAR )
+- trace( SUFFIX )
+- trace( FULLNAME )
+- trace( CMAKE_BINARY_DIR )
+-
+ #--------------------------------------------------------------------------
+ # Define the install directory
+ #--------------------------------------------------------------------------
+diff --git a/extra.txt b/extra.txt
+index dfb293d..6018eb6 100644
+--- a/extra.txt
++++ b/extra.txt
+@@ -2,10 +2,10 @@
+ # Define additional files to be installed
+ #------------------------------------------------------------------------------
+
+-install( FILES "softfloat.LICENSE.txt" DESTINATION . )
+-install( FILES "softfloat.README.txt" DESTINATION . )
+-install( FILES "softfloat.README.html" DESTINATION . )
+-install( DIRECTORY "doc/" DESTINATION doc )
++install( FILES "softfloat.LICENSE.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "softfloat.README.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "softfloat.README.html" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( DIRECTORY "doc/" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
+
+ #------------------------------------------------------------------------------
+
diff --git a/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.7.0.ebuild b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.7.0.ebuild
new file mode 100644
index 000000000000..89f0baee6c41
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.7.0.ebuild
@@ -0,0 +1,20 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="4b0c326008e174610969c92e69178939ed80653d"
+
+DESCRIPTION="Berkeley IEEE Binary Floating-Point Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/SoftFloat"
+SRC_URI="https://github.com/SDL-Hercules-390/SoftFloat/archive/${COMMIT}.tar.gz -> SoftFloat-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/SoftFloat-${COMMIT}"
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
diff --git a/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.8.0.ebuild b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.8.0.ebuild
new file mode 100644
index 000000000000..574f8d373010
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.8.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="e053494d988ec0648c92f683abce52597bfae745"
+
+DESCRIPTION="Berkeley IEEE Binary Floating-Point Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/SoftFloat"
+SRC_URI="https://github.com/SDL-Hercules-390/SoftFloat/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/SoftFloat-${COMMIT}"
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.0.ebuild b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.0.ebuild
new file mode 100644
index 000000000000..32ebb7a7efdd
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="e053494d988ec0648c92f683abce52597bfae745"
+
+DESCRIPTION="Berkeley IEEE Binary Floating-Point Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/SoftFloat"
+SRC_URI="https://github.com/SDL-Hercules-390/SoftFloat/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/SoftFloat-${COMMIT}"
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.1.ebuild b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.1.ebuild
new file mode 100644
index 000000000000..32ebb7a7efdd
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-4.9.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="e053494d988ec0648c92f683abce52597bfae745"
+
+DESCRIPTION="Berkeley IEEE Binary Floating-Point Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/SoftFloat"
+SRC_URI="https://github.com/SDL-Hercules-390/SoftFloat/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/SoftFloat-${COMMIT}"
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-9999.ebuild b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-9999.ebuild
new file mode 100644
index 000000000000..b628ba75efc8
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/hercules-sdl-softfloat-9999.ebuild
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 cmake dot-a
+
+DESCRIPTION="Berkeley IEEE Binary Floating-Point Library"
+HOMEPAGE="https://github.com/SDL-Hercules-390/SoftFloat"
+EGIT_REPO_URI="https://github.com/SDL-Hercules-390/SoftFloat"
+
+LICENSE="BSD"
+SLOT="0"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-softfloat/metadata.xml b/app-emulation/hercules-sdl-softfloat/metadata.xml
new file mode 100644
index 000000000000..1662dfd03728
--- /dev/null
+++ b/app-emulation/hercules-sdl-softfloat/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>matoro_gentoo@matoro.tk</email>
+ <name>Matoro Mahri</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ Berkeley IEEE Binary Floating-Point Library for use by the SDL-Hercules-390 emulator
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules-sdl-telnet/Manifest b/app-emulation/hercules-sdl-telnet/Manifest
new file mode 100644
index 000000000000..7d670d5dfb5a
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/Manifest
@@ -0,0 +1,2 @@
+DIST hercules-sdl-telnet-384b2542dfc9af67ca078e2bc13487a8fc234a3f.tar.gz 67296 BLAKE2B 538b04b44f3370ead6d15a020d213ee5f471caf9bb16f61c07e3152411227f63ccad28b6f745b7b55d696f8bef46b7eb88569d7cd1eb6686632ee5fe86951842 SHA512 3f576c4fc9fb2462db3a804c89f342df24e20a060c87f92485c85350397819ec3b92bf4cff0cd00d52d40c3af1d5f3b009184563047182b2b09411d3ee5016e9
+DIST telnet-729f0b688c1426018112c1e509f207fb5f266efa.tar.gz 67277 BLAKE2B 720b292adbe6c1273221d57f74018c08c529b5766dbe623f04af5b14ec3fa9c56f749395aa0f365da97b90a08549e378afbbd3634e4e11cd0418fa0f80d85a9c SHA512 e44df68cfba85b4f2e235c6b830cf89a10d66c635cfec933843c1695bdac33bf307b2e66c965a8b853723c2fd02419c40f80bcf6098be98f01472d9c3cebf1dd
diff --git a/app-emulation/hercules-sdl-telnet/files/cmakefix.patch b/app-emulation/hercules-sdl-telnet/files/cmakefix.patch
new file mode 100644
index 000000000000..76fd8513213a
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/files/cmakefix.patch
@@ -0,0 +1,155 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a316b76..50176f0 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,6 +6,8 @@ cmake_minimum_required( VERSION 3.2 )
+
+ cmake_policy( SET CMP0048 NEW )
+
++include( GNUInstallDirs )
++
+ #------------------------------------------------------------------------------
+ # Define the project
+ #------------------------------------------------------------------------------
+@@ -131,8 +133,8 @@ set_target_properties( ${FULLNAME} PROPERTIES
+ COMPILE_PDB_NAME ${FULLNAME} )
+
+ install( TARGETS ${FULLNAME}
+- PUBLIC_HEADER DESTINATION include
+- ARCHIVE DESTINATION ${LIB_INSTALL_DIR} )
++ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/include
++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/hercules-sdl/lib )
+
+
+ #------------------------------------------------------------------------------
+diff --git a/cmake/modules/ParseBinaryDir.cmake b/cmake/modules/ParseBinaryDir.cmake
+index 7983107..2ede77b 100644
+--- a/cmake/modules/ParseBinaryDir.cmake
++++ b/cmake/modules/ParseBinaryDir.cmake
+@@ -7,6 +7,8 @@ macro( ParseBinaryDir )
+ set( CMAKE_DISABLE_IN_SOURCE_BUILD ON )
+ set( CMAKE_DISABLE_SOURCE_CHANGES ON )
+
++ set( FULLNAME ${EXTPKG_NAME} )
++
+ #--------------------------------------------------------------------------
+ # Make sure they are not trying to do an "in source" build by making
+ # sure the cmake "binary" (build) directory is not a subdirectory of
+@@ -48,102 +50,6 @@ Remove the 'CMakeCache.txt' file and the entire 'CMakeFiles' directory and try a
+
+ TEST_BIG_ENDIAN( IS_BIG_ENDIAN )
+
+- #--------------------------------------------------------------------------
+- # Split the binary build directory into its constituent components.
+- # Refer to the "BUILDING" document for more information.
+- #--------------------------------------------------------------------------
+-
+- get_filename_component( BINARY_HLQ "${CMAKE_BINARY_DIR}" DIRECTORY )
+- get_filename_component( BINARY_DIR "${CMAKE_BINARY_DIR}" NAME )
+-
+- trace( BINARY_HLQ )
+- trace( BINARY_DIR )
+-
+- string( FIND ${BINARY_DIR} " " _n )
+- if( NOT ${_n} EQUAL -1 )
+- message( FATAL_ERROR "Build directory name cannot have spaces! ${BINARY_DIR}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # First, split it into two parts: before the dot and after the dot
+- #--------------------------------------------------------------------------
+-
+- string( REGEX MATCH "([^\\.]*)" _xxxxx ${BINARY_DIR} )
+- string( REGEX MATCH "([^.]*\$)" CONFIG ${BINARY_DIR} )
+-
+- trace( _xxxxx )
+- trace( CONFIG )
+-
+- #--------------------------------------------------------------------------
+- # The second part tells us if this is a "Debug" or "Release" build.
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${CONFIG} _n )
+- if( ${_n} LESS 1 )
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Capitalize "Debug" and "Release" for Visual Studio compatibility.
+- #--------------------------------------------------------------------------
+-
+- include( CapitalizeWord )
+-
+- Capitalize_Word( ${CONFIG} CONFIG )
+-
+- if(( NOT CONFIG STREQUAL "Debug" ) AND (NOT CONFIG STREQUAL "Release" ))
+- message( FATAL_ERROR "Invalid Release/Debug build type! ${CONFIG}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Define the "Debug" or "Release" build type
+- #--------------------------------------------------------------------------
+-
+- if( CONFIG STREQUAL "Debug" )
+- set( CMAKE_BUILD_TYPE "Debug" CACHE PATH "" FORCE )
+- set( DBGCHAR "d" )
+- elseif( CONFIG STREQUAL "Release" )
+- set( CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE PATH "" FORCE )
+- set( DBGCHAR "" )
+- endif()
+-
+- trace( CMAKE_BUILD_TYPE )
+-
+- #--------------------------------------------------------------------------
+- # Now split the first part into the base package/product name
+- # and build architecture (32-bit ot 64-bit).
+- #--------------------------------------------------------------------------
+-
+- string( LENGTH ${_xxxxx} _n )
+- if( ${_n} LESS 3 )
+- message( FATAL_ERROR "Invalid base package name! ${_xxxxx}" )
+- endif()
+-
+- math( EXPR _n "${_n} - 2" ) # (want the last two characters)
+-
+- string( SUBSTRING ${_xxxxx} 0 ${_n} BASENAME )
+- string( SUBSTRING ${_xxxxx} ${_n} -1 BITNESS )
+-
+- if( NOT BITNESS STREQUAL "32" AND
+- NOT BITNESS STREQUAL "64" )
+- message( FATAL_ERROR "Invalid package architecture! ${BITNESS}" )
+- endif()
+-
+- #--------------------------------------------------------------------------
+- # Show results
+- #--------------------------------------------------------------------------
+-
+- set( SUFFIX "${BITNESS}${DBGCHAR}" )
+- set( FULLNAME "${BASENAME}${SUFFIX}" )
+-
+- trace( BASENAME )
+- trace( BITNESS )
+- trace( CONFIG )
+- trace( DBGCHAR )
+- trace( SUFFIX )
+- trace( FULLNAME )
+- trace( CMAKE_BINARY_DIR )
+-
+ #--------------------------------------------------------------------------
+ # Define the install directory
+ #--------------------------------------------------------------------------
+diff --git a/extra.txt b/extra.txt
+index dfb293d..6018eb6 100644
+--- a/extra.txt
++++ b/extra.txt
+@@ -2,8 +2,8 @@
+ # Define additional files to be installed
+ #------------------------------------------------------------------------------
+
+-install( FILES "telnet.LICENSE.txt" DESTINATION . )
+-install( FILES "telnet.README.txt" DESTINATION . )
++install( FILES "telnet.LICENSE.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
++install( FILES "telnet.README.txt" DESTINATION ${CMAKE_INSTALL_DOCDIR} )
+
+ #------------------------------------------------------------------------------
+
diff --git a/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.7.0.ebuild b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.7.0.ebuild
new file mode 100644
index 000000000000..4f6a293c90b9
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.7.0.ebuild
@@ -0,0 +1,20 @@
+# Copyright 2022-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="729f0b688c1426018112c1e509f207fb5f266efa"
+
+DESCRIPTION="Simple RFC-complient TELNET implementation"
+HOMEPAGE="https://github.com/SDL-Hercules-390/telnet"
+SRC_URI="https://github.com/SDL-Hercules-390/telnet/archive/${COMMIT}.tar.gz -> telnet-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/telnet-${COMMIT}"
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
diff --git a/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.8.0.ebuild b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.8.0.ebuild
new file mode 100644
index 000000000000..2197a2d646da
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.8.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="384b2542dfc9af67ca078e2bc13487a8fc234a3f"
+
+DESCRIPTION="Simple RFC-complient TELNET implementation"
+HOMEPAGE="https://github.com/SDL-Hercules-390/telnet"
+SRC_URI="https://github.com/SDL-Hercules-390/telnet/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/telnet-${COMMIT}"
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.0.ebuild b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.0.ebuild
new file mode 100644
index 000000000000..211106121842
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.0.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="384b2542dfc9af67ca078e2bc13487a8fc234a3f"
+
+DESCRIPTION="Simple RFC-complient TELNET implementation"
+HOMEPAGE="https://github.com/SDL-Hercules-390/telnet"
+SRC_URI="https://github.com/SDL-Hercules-390/telnet/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/telnet-${COMMIT}"
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.1.ebuild b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.1.ebuild
new file mode 100644
index 000000000000..211106121842
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-4.9.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake dot-a
+
+# Use ../hercules-sdl/files/gen_hashes.sh to identify the relevant
+# commit when tagging new versions.
+COMMIT="384b2542dfc9af67ca078e2bc13487a8fc234a3f"
+
+DESCRIPTION="Simple RFC-complient TELNET implementation"
+HOMEPAGE="https://github.com/SDL-Hercules-390/telnet"
+SRC_URI="https://github.com/SDL-Hercules-390/telnet/archive/${COMMIT}.tar.gz -> ${PN}-${COMMIT}.tar.gz"
+
+S="${WORKDIR}/telnet-${COMMIT}"
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-9999.ebuild b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-9999.ebuild
new file mode 100644
index 000000000000..6dee664d143f
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/hercules-sdl-telnet-9999.ebuild
@@ -0,0 +1,24 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit git-r3 cmake dot-a
+
+DESCRIPTION="Simple RFC-complient TELNET implementation"
+HOMEPAGE="https://github.com/SDL-Hercules-390/telnet"
+EGIT_REPO_URI="https://github.com/SDL-Hercules-390/telnet"
+
+LICENSE="public-domain"
+SLOT="0"
+PATCHES=( "${FILESDIR}/cmakefix.patch" )
+
+src_configure() {
+ lto-guarantee-fat
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ strip-lto-bytecode
+}
diff --git a/app-emulation/hercules-sdl-telnet/metadata.xml b/app-emulation/hercules-sdl-telnet/metadata.xml
new file mode 100644
index 000000000000..58a4abd06331
--- /dev/null
+++ b/app-emulation/hercules-sdl-telnet/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>matoro_gentoo@matoro.tk</email>
+ <name>Matoro Mahri</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ Simple RFC-complient TELNET implementation for use by the SDL-Hercules-390 emulator
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules-sdl/Manifest b/app-emulation/hercules-sdl/Manifest
new file mode 100644
index 000000000000..0ecfb7a96289
--- /dev/null
+++ b/app-emulation/hercules-sdl/Manifest
@@ -0,0 +1,4 @@
+DIST hercules-sdl-4.7.tar.gz 25439384 BLAKE2B 78a8d2df947c80e23d0e956a25a4f009dd32b09f2834cc06373f685badf9f1e657bf0f4e4408c7085371c46085718998076f3a6063caf80c9161b1fa7caa91eb SHA512 9d7060c4e2687358b9547b59b47362d642cbf2bf009085fdd41e485170d0f81029ee3d04d12b905a3a266cd26a9087e92c231c3f4600c32a8535a6140656b7b0
+DIST hercules-sdl-4.8.tar.gz 29051256 BLAKE2B 70a8554a1796fab2860f137bc16c8f2d75ff9079e9d699e49552f31edfadabfcbd361b2d594bf92756f9b100c96178ee650f9a6c84507ec1472a0cbfd4389aef SHA512 3ce7fcab4ce1c003a1c42ebdd089452feb0d950851cf126d08e33a1b4201e1ae7f6e3572a2505f1a684377f9e4e8f1e1e932fe5c17498477d0946ad7cb8c4957
+DIST hercules-sdl-4.9.1.tar.gz 32229239 BLAKE2B 5e85e464277af69236fd7b6e55b67a88afb27eb40d79317b3ee8e90a1f8f2b1b4aba483a60bae9e315997f056877cc00183cc48bdd1908360f2c99a19eb3bc61 SHA512 eaf5bfc1daa9ba15b082b2a599d045e41d0905d22cb3d0ad73fe1a653bda665a4d439088bf1294ffaa9f38c4fdc45f79e6beb0b09a769cc72bfe3e29bc261c29
+DIST hercules-sdl-4.9.tar.gz 32216669 BLAKE2B 0c1f4117f57a3322a6ff7f8261c2d3f428a65e487feb12170dfd8a8e15223f0f9461dc84c658d4835e01e108a101f6dcf548de52679c88e35ad690fb12a45810 SHA512 2ba95cd0b6c70460d7849fb664dddf85132da2a9c205b211cbd0d5f6c45cf08e9f06941ef63ffd85bc828aa41790e8f5ceda1d8321c8fb71a8ee4e47b6952545
diff --git a/app-emulation/hercules-sdl/files/gen_hashes.sh b/app-emulation/hercules-sdl/files/gen_hashes.sh
new file mode 100644
index 000000000000..dee50ea3cb0e
--- /dev/null
+++ b/app-emulation/hercules-sdl/files/gen_hashes.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+[[ -z "${1}" ]] && exit 1
+[[ "${1}" =~ [0-9]+\.[0-9]+\.[0-9]+ ]] || exit 1
+
+CLONEDIR="$(mktemp -d)"
+for f in "hyperion" "crypto" "decNumber" "SoftFloat" "telnet"
+do
+ git -C "${CLONEDIR}" clone --tags "https://github.com/SDL-Hercules-390/${f}"
+done
+
+VERSIONARR=( ${1//./ })
+VERSIONTAG="Release_${VERSIONARR[0]}.${VERSIONARR[1]}"
+[[ "${VERSIONARR[2]}" == "0" ]] || VERSIONTAG+=".${VERSIONARR[2]}"
+RELEASEDATE="$(git -C "${CLONEDIR}/hyperion" show -s --format="%ci" "${VERSIONTAG}")"
+
+echo
+for f in "crypto" "decNumber" "SoftFloat" "telnet"
+do
+ echo -n "${f,,}: "
+ git -C "${CLONEDIR}/${f}" rev-list -n 1 --first-parent --before="${RELEASEDATE}" master
+done
+
+rm -rf "${CLONEDIR}"
diff --git a/app-emulation/hercules-sdl/files/hercules-sdl-4.4.1-htmldir.patch b/app-emulation/hercules-sdl/files/hercules-sdl-4.4.1-htmldir.patch
new file mode 100644
index 000000000000..50b30cca91dd
--- /dev/null
+++ b/app-emulation/hercules-sdl/files/hercules-sdl-4.4.1-htmldir.patch
@@ -0,0 +1,29 @@
+diff --git a/html/Makefile.am b/html/Makefile.am
+index b4d21d0..1e5af4c 100644
+--- a/html/Makefile.am
++++ b/html/Makefile.am
+@@ -1,5 +1,5 @@
+
+-dist_pkgdata_DATA = \
++dist_html_DATA = \
+ cckddasd.html \
+ fishgui.html \
+ hercconf.html \
+@@ -62,7 +62,7 @@ include_sources = \
+ include/footer.htmlpart \
+ include/header.htmlpart
+
+-include_pkgdatadir = $(pkgdatadir)/include
++include_pkgdatadir = $(htmldir)/include
+
+ dist_include_pkgdata_DATA = $(include_sources)
+
+@@ -120,7 +120,7 @@ images_sources = \
+ images/waitoffu.gif \
+ images/waitonu.gif
+
+-images_pkgdatadir = $(pkgdatadir)/images
++images_pkgdatadir = $(htmldir)/images
+
+ dist_images_pkgdata_DATA = $(images_sources)
+
diff --git a/app-emulation/hercules-sdl/files/hercules-sdl-4.7.0-backport-pr658.patch b/app-emulation/hercules-sdl/files/hercules-sdl-4.7.0-backport-pr658.patch
new file mode 100644
index 000000000000..db4773d2249c
--- /dev/null
+++ b/app-emulation/hercules-sdl/files/hercules-sdl-4.7.0-backport-pr658.patch
@@ -0,0 +1,46 @@
+https://bugs.gentoo.org/931607
+https://github.com/SDL-Hercules-390/hyperion/pull/658
+
+From 655f179dbf34a3b1e9714691462faa9732257937 Mon Sep 17 00:00:00 2001
+From: matoro <matoro@users.noreply.github.com>
+Date: Thu, 9 May 2024 12:36:01 -0400
+Subject: [PATCH] Add missing includes to configure script
+
+This is needed for gcc 14 and clang 16 as they both make implicit
+function definitions a hard error. In a configure script, this means
+these tests will switch from passing to failing, which likely means
+features will get unintentionally flipped as configure now thinks you
+don't have support.
+
+See: https://wiki.gentoo.org/wiki/Modern_C_porting
+See: https://bugs.gentoo.org/931607
+---
+ autoconf/hercules.m4 | 1 +
+ configure.ac | 2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/autoconf/hercules.m4 b/autoconf/hercules.m4
+index cb962f5e0..4d35cb039 100755
+--- a/autoconf/hercules.m4
++++ b/autoconf/hercules.m4
+@@ -380,6 +380,7 @@ AC_DEFUN([HC_CHECK_NEED_GETOPT_OPTRESET],
+ AC_TRY_LINK(
+ [],
+ [
++ #include <unistd.h>
+ extern int optreset;
+ optreset=1;
+ getopt(0,0,0);
+diff --git a/configure.ac b/configure.ac
+index f444a9b1e..bfe31357d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1872,6 +1872,8 @@ if test "$GCC" = "yes"; then
+ -g -O2 -fomit-frame-pointer
+ */
+
++ #include <string.h>
++
+ int foo ()
+ {
+ char a[50000+16];
diff --git a/app-emulation/hercules-sdl/hercules-sdl-4.7.0-r1.ebuild b/app-emulation/hercules-sdl/hercules-sdl-4.7.0-r1.ebuild
new file mode 100644
index 000000000000..b1e3b9a98813
--- /dev/null
+++ b/app-emulation/hercules-sdl/hercules-sdl-4.7.0-r1.ebuild
@@ -0,0 +1,92 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools fcaps
+
+DESCRIPTION="The SoftDevLabs (SDL) version of the Hercules 4.x Hyperion Emulator"
+HOMEPAGE="https://sdl-hercules-390.github.io/html/"
+SRC_URI="https://github.com/SDL-Hercules-390/hyperion/archive/refs/tags/Release_${PV/.0/}.tar.gz -> ${P/.0/}.tar.gz"
+
+S="${WORKDIR}/hyperion-Release_${PV/.0/}"
+LICENSE="QPL-1.0"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+# In theory USE=object-rexx and USE=regina-rexx are not mutually-exclusive.
+# In practice they functionally are as the Gentoo packages conflict, and
+# additionally Hercules only supports calling out to one of them at runtime,
+# controlled by the HREXX_PACKAGE environment variable.
+IUSE="bzip2 debug object-rexx regina-rexx test"
+RESTRICT="!test? ( test )"
+FILECAPS=(
+ -M 755 cap_sys_nice\=eip usr/bin/hercules --
+ -M 755 cap_sys_nice\=eip usr/bin/herclin --
+ -M 755 cap_net_admin+ep usr/bin/hercifc
+)
+
+COMMON_DEPEND="
+ dev-libs/libltdl
+ net-libs/libnsl:0
+ virtual/zlib:=
+ bzip2? ( app-arch/bzip2 )
+ object-rexx? ( dev-lang/oorexx )
+ regina-rexx? ( dev-lang/regina-rexx )"
+RDEPEND="
+ !app-emulation/hercules
+ !app-arch/tapeutils
+ ${COMMON_DEPEND}"
+DEPEND="
+ ${COMMON_DEPEND}
+ ~app-emulation/hercules-sdl-crypto-${PV}
+ ~app-emulation/hercules-sdl-decnumber-${PV}
+ ~app-emulation/hercules-sdl-softfloat-${PV}
+ ~app-emulation/hercules-sdl-telnet-${PV}"
+# Neither package support needs to be compiled-in for tests,
+# but the "rexx" command needs to be available
+BDEPEND="test? ( || ( dev-lang/regina-rexx dev-lang/oorexx ) )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-4.4.1-htmldir.patch"
+ "${FILESDIR}/${PN}-4.7.0-backport-pr658.patch"
+)
+
+src_prepare() {
+ rm -rf crypto decNumber SoftFloat telnet || die
+ sed -i 's#/lib${hc_cv_pkg_lib_subdir}#/lib#g' configure.ac || die
+ sed -i 's#_pkgname}${hc_cv_pkg_lib_suffix}#_pkgname}#g' configure.ac || die
+
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local -x ac_cv_lib_bz2_BZ2_bzBuffToBuffDecompress=$(usex bzip2)
+ econf \
+ $(use_enable bzip2 cckd-bzip2) \
+ $(use_enable bzip2 het-bzip2) \
+ $(use_enable object-rexx) \
+ $(use_enable regina-rexx) \
+ $(use_enable debug) \
+ --enable-custom="Gentoo ${PF}.ebuild" \
+ --disable-optimization \
+ --disable-setuid-hercifc \
+ --disable-capabilities \
+ --enable-ipv6 \
+ --enable-enhanced-configincludes \
+ --disable-fthreads \
+ --enable-shared \
+ --enable-automatic-operator \
+ --enable-extpkgs="${SYSROOT}/usr/$(get_libdir)/${PN}"
+}
+
+src_install() {
+ default
+ dodoc RELEASE.NOTES
+
+ insinto /usr/share/hercules
+ doins hercules.cnf
+
+ # No static archives. Have to leave .la files for modules. #720342
+ find "${ED}/usr/$(get_libdir)" -name "*.la" -delete || die
+}
diff --git a/app-emulation/hercules-sdl/hercules-sdl-4.8.0.ebuild b/app-emulation/hercules-sdl/hercules-sdl-4.8.0.ebuild
new file mode 100644
index 000000000000..5c99665ed563
--- /dev/null
+++ b/app-emulation/hercules-sdl/hercules-sdl-4.8.0.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools fcaps
+
+DESCRIPTION="The SoftDevLabs (SDL) version of the Hercules 4.x Hyperion Emulator"
+HOMEPAGE="https://sdl-hercules-390.github.io/html/"
+SRC_URI="https://github.com/SDL-Hercules-390/hyperion/archive/refs/tags/Release_${PV/.0/}.tar.gz -> ${P/.0/}.tar.gz"
+
+S="${WORKDIR}/hyperion-Release_${PV/.0/}"
+LICENSE="QPL-1.0"
+SLOT="0"
+KEYWORDS="amd64 ppc64"
+# In theory USE=object-rexx and USE=regina-rexx are not mutually-exclusive.
+# In practice they functionally are as the Gentoo packages conflict, and
+# additionally Hercules only supports calling out to one of them at runtime,
+# controlled by the HREXX_PACKAGE environment variable.
+IUSE="bzip2 debug object-rexx regina-rexx test"
+RESTRICT="!test? ( test )"
+FILECAPS=(
+ -M 755 cap_sys_nice\=eip usr/bin/hercules --
+ -M 755 cap_sys_nice\=eip usr/bin/herclin --
+ -M 755 cap_net_admin+ep usr/bin/hercifc
+)
+
+COMMON_DEPEND="
+ dev-libs/libltdl
+ net-libs/libnsl:0
+ virtual/zlib:=
+ bzip2? ( app-arch/bzip2 )
+ object-rexx? ( dev-lang/oorexx )
+ regina-rexx? ( dev-lang/regina-rexx )"
+RDEPEND="
+ !app-emulation/hercules
+ !app-arch/tapeutils
+ ${COMMON_DEPEND}"
+DEPEND="
+ ${COMMON_DEPEND}
+ ~app-emulation/hercules-sdl-crypto-${PV}
+ ~app-emulation/hercules-sdl-decnumber-${PV}
+ ~app-emulation/hercules-sdl-softfloat-${PV}
+ ~app-emulation/hercules-sdl-telnet-${PV}"
+# Neither package support needs to be compiled-in for tests,
+# but the "rexx" command needs to be available
+BDEPEND="test? ( || ( dev-lang/regina-rexx dev-lang/oorexx ) )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-4.4.1-htmldir.patch"
+)
+
+src_prepare() {
+ rm -rf crypto decNumber SoftFloat telnet || die
+ sed -i 's#}${hc_cv_pkg_lib_subdir}#}#g' configure.ac || die
+ sed -i 's#_pkgname}${hc_cv_pkg_lib_suffix}#_pkgname}#g' configure.ac || die
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local -x ac_cv_lib_bz2_BZ2_bzBuffToBuffDecompress=$(usex bzip2)
+ local confopts=(
+ $(use_enable bzip2 cckd-bzip2)
+ $(use_enable bzip2 het-bzip2)
+ $(use_enable object-rexx)
+ $(use_enable regina-rexx)
+ $(use_enable debug)
+ --enable-custom="Gentoo ${PF}.ebuild"
+ --disable-optimization
+ --disable-setuid-hercifc
+ --disable-capabilities
+ --enable-ipv6
+ --enable-enhanced-configincludes
+ --disable-fthreads
+ --enable-shared
+ --enable-automatic-operator
+ --enable-extpkgs="${SYSROOT}/usr/$(get_libdir)/${PN}"
+ )
+
+ econf "${confopts[@]}"
+}
+
+src_install() {
+ default
+ dodoc RELEASE.NOTES
+
+ insinto /usr/share/hercules
+ doins hercules.cnf
+
+ # No static archives. Have to leave .la files for modules. #720342
+ find "${ED}/usr/$(get_libdir)" -name "*.la" -delete || die
+}
diff --git a/app-emulation/hercules-sdl/hercules-sdl-4.9.0.ebuild b/app-emulation/hercules-sdl/hercules-sdl-4.9.0.ebuild
new file mode 100644
index 000000000000..03e12f04499a
--- /dev/null
+++ b/app-emulation/hercules-sdl/hercules-sdl-4.9.0.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools fcaps
+
+DESCRIPTION="The SoftDevLabs (SDL) version of the Hercules 4.x Hyperion Emulator"
+HOMEPAGE="https://sdl-hercules-390.github.io/html/"
+SRC_URI="https://github.com/SDL-Hercules-390/hyperion/archive/refs/tags/Release_${PV/.0/}.tar.gz -> ${P/.0/}.tar.gz"
+
+S="${WORKDIR}/hyperion-Release_${PV/.0/}"
+LICENSE="QPL-1.0"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+# In theory USE=object-rexx and USE=regina-rexx are not mutually-exclusive.
+# In practice they functionally are as the Gentoo packages conflict, and
+# additionally Hercules only supports calling out to one of them at runtime,
+# controlled by the HREXX_PACKAGE environment variable.
+IUSE="bzip2 debug object-rexx regina-rexx test"
+RESTRICT="!test? ( test )"
+FILECAPS=(
+ -M 755 cap_sys_nice\=eip usr/bin/hercules --
+ -M 755 cap_sys_nice\=eip usr/bin/herclin --
+ -M 755 cap_net_admin+ep usr/bin/hercifc
+)
+
+COMMON_DEPEND="
+ dev-libs/libltdl
+ net-libs/libnsl:0
+ virtual/zlib:=
+ bzip2? ( app-arch/bzip2 )
+ object-rexx? ( dev-lang/oorexx )
+ regina-rexx? ( dev-lang/regina-rexx )"
+RDEPEND="
+ !app-emulation/hercules
+ !app-arch/tapeutils
+ ${COMMON_DEPEND}"
+DEPEND="
+ ${COMMON_DEPEND}
+ ~app-emulation/hercules-sdl-crypto-${PV}
+ ~app-emulation/hercules-sdl-decnumber-${PV}
+ ~app-emulation/hercules-sdl-softfloat-${PV}
+ ~app-emulation/hercules-sdl-telnet-${PV}"
+# Neither package support needs to be compiled-in for tests,
+# but the "rexx" command needs to be available
+BDEPEND="test? ( || ( dev-lang/regina-rexx dev-lang/oorexx ) )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-4.4.1-htmldir.patch"
+)
+
+src_prepare() {
+ rm -rf crypto decNumber SoftFloat telnet || die
+ sed -i 's#}${hc_cv_pkg_lib_subdir}#}#g' configure.ac || die
+ sed -i 's#_pkgname}${hc_cv_pkg_lib_suffix}#_pkgname}#g' configure.ac || die
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local -x ac_cv_lib_bz2_BZ2_bzBuffToBuffDecompress=$(usex bzip2)
+ local confopts=(
+ $(use_enable bzip2 cckd-bzip2)
+ $(use_enable bzip2 het-bzip2)
+ $(use_enable object-rexx)
+ $(use_enable regina-rexx)
+ $(use_enable debug)
+ --enable-custom="Gentoo ${PF}.ebuild"
+ --disable-optimization
+ --disable-setuid-hercifc
+ --disable-capabilities
+ --enable-ipv6
+ --enable-enhanced-configincludes
+ --disable-fthreads
+ --enable-shared
+ --enable-automatic-operator
+ --enable-extpkgs="${SYSROOT}/usr/$(get_libdir)/${PN}"
+ )
+
+ econf "${confopts[@]}"
+}
+
+src_install() {
+ default
+ dodoc RELEASE.NOTES
+
+ insinto /usr/share/hercules
+ doins hercules.cnf
+
+ # No static archives. Have to leave .la files for modules. #720342
+ find "${ED}/usr/$(get_libdir)" -name "*.la" -delete || die
+}
diff --git a/app-emulation/hercules-sdl/hercules-sdl-4.9.1.ebuild b/app-emulation/hercules-sdl/hercules-sdl-4.9.1.ebuild
new file mode 100644
index 000000000000..03e12f04499a
--- /dev/null
+++ b/app-emulation/hercules-sdl/hercules-sdl-4.9.1.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools fcaps
+
+DESCRIPTION="The SoftDevLabs (SDL) version of the Hercules 4.x Hyperion Emulator"
+HOMEPAGE="https://sdl-hercules-390.github.io/html/"
+SRC_URI="https://github.com/SDL-Hercules-390/hyperion/archive/refs/tags/Release_${PV/.0/}.tar.gz -> ${P/.0/}.tar.gz"
+
+S="${WORKDIR}/hyperion-Release_${PV/.0/}"
+LICENSE="QPL-1.0"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc64"
+# In theory USE=object-rexx and USE=regina-rexx are not mutually-exclusive.
+# In practice they functionally are as the Gentoo packages conflict, and
+# additionally Hercules only supports calling out to one of them at runtime,
+# controlled by the HREXX_PACKAGE environment variable.
+IUSE="bzip2 debug object-rexx regina-rexx test"
+RESTRICT="!test? ( test )"
+FILECAPS=(
+ -M 755 cap_sys_nice\=eip usr/bin/hercules --
+ -M 755 cap_sys_nice\=eip usr/bin/herclin --
+ -M 755 cap_net_admin+ep usr/bin/hercifc
+)
+
+COMMON_DEPEND="
+ dev-libs/libltdl
+ net-libs/libnsl:0
+ virtual/zlib:=
+ bzip2? ( app-arch/bzip2 )
+ object-rexx? ( dev-lang/oorexx )
+ regina-rexx? ( dev-lang/regina-rexx )"
+RDEPEND="
+ !app-emulation/hercules
+ !app-arch/tapeutils
+ ${COMMON_DEPEND}"
+DEPEND="
+ ${COMMON_DEPEND}
+ ~app-emulation/hercules-sdl-crypto-${PV}
+ ~app-emulation/hercules-sdl-decnumber-${PV}
+ ~app-emulation/hercules-sdl-softfloat-${PV}
+ ~app-emulation/hercules-sdl-telnet-${PV}"
+# Neither package support needs to be compiled-in for tests,
+# but the "rexx" command needs to be available
+BDEPEND="test? ( || ( dev-lang/regina-rexx dev-lang/oorexx ) )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-4.4.1-htmldir.patch"
+)
+
+src_prepare() {
+ rm -rf crypto decNumber SoftFloat telnet || die
+ sed -i 's#}${hc_cv_pkg_lib_subdir}#}#g' configure.ac || die
+ sed -i 's#_pkgname}${hc_cv_pkg_lib_suffix}#_pkgname}#g' configure.ac || die
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local -x ac_cv_lib_bz2_BZ2_bzBuffToBuffDecompress=$(usex bzip2)
+ local confopts=(
+ $(use_enable bzip2 cckd-bzip2)
+ $(use_enable bzip2 het-bzip2)
+ $(use_enable object-rexx)
+ $(use_enable regina-rexx)
+ $(use_enable debug)
+ --enable-custom="Gentoo ${PF}.ebuild"
+ --disable-optimization
+ --disable-setuid-hercifc
+ --disable-capabilities
+ --enable-ipv6
+ --enable-enhanced-configincludes
+ --disable-fthreads
+ --enable-shared
+ --enable-automatic-operator
+ --enable-extpkgs="${SYSROOT}/usr/$(get_libdir)/${PN}"
+ )
+
+ econf "${confopts[@]}"
+}
+
+src_install() {
+ default
+ dodoc RELEASE.NOTES
+
+ insinto /usr/share/hercules
+ doins hercules.cnf
+
+ # No static archives. Have to leave .la files for modules. #720342
+ find "${ED}/usr/$(get_libdir)" -name "*.la" -delete || die
+}
diff --git a/app-emulation/hercules-sdl/metadata.xml b/app-emulation/hercules-sdl/metadata.xml
new file mode 100644
index 000000000000..b726e646ce18
--- /dev/null
+++ b/app-emulation/hercules-sdl/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>matoro_gentoo@matoro.tk</email>
+ <name>Matoro Mahri</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <longdescription>
+ This version of Hercules 4.x Hyperion is a SoftDevLabs maintained version of the Hercules emulator containing fixes made by David B. Trout and others for bugs that may still exist in the original hercules-390 version of Hercules 4.0 Hyperion, as well as enhancements and improvements to the overall functionality above and beyond what is provided by the hercules-390 version of Hercules.
+ </longdescription>
+ <use>
+ <flag name="object-rexx">Enable REXX support via Open Object Rexx (<pkg>dev-lang/oorexx</pkg>)</flag>
+ <flag name="regina-rexx">Enable REXX support via Regina Rexx (<pkg>dev-lang/regina-rexx</pkg>)</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/hercules/Manifest b/app-emulation/hercules/Manifest
new file mode 100644
index 000000000000..9d2aef8825b5
--- /dev/null
+++ b/app-emulation/hercules/Manifest
@@ -0,0 +1 @@
+DIST hercules-3.13.tar.gz 2640742 BLAKE2B 1a84ceab346a591c494fb133d1654ffa73e44f73183564167a74f68eb3e5f3f187cc2f66cef444b951645fa85c111da261b9dd8907594ccb770f5b743f891649 SHA512 76f75ef3f1eb10c0fac0d6fa1ab9809b8d1dfe3deccbcd69366b05ee58f1ecb8ea0f387f7201ab4722b121478676f00e707ad27b6ecf1980fb09e900de63d718
diff --git a/app-emulation/hercules/files/hercules-3.13-autoconf.patch b/app-emulation/hercules/files/hercules-3.13-autoconf.patch
new file mode 100644
index 000000000000..e22e91cce514
--- /dev/null
+++ b/app-emulation/hercules/files/hercules-3.13-autoconf.patch
@@ -0,0 +1,81 @@
+From 8a399018269bebd3ee99d2f4f51656b1b74ed02d Mon Sep 17 00:00:00 2001
+From: "Z. Liu" <zhixu.liu@gmail.com>
+Date: Thu, 9 Jan 2025 14:19:48 +0800
+Subject: [PATCH] autoconf: fix -Wimplicit-function-declaration
+
+With modern C compilers this is a bug and will cause false positives in
+feature tests.
+
+Signed-off-by: Z. Liu <zhixu.liu@gmail.com>
+---
+ autoconf/hercules.m4 | 17 ++++++++++++-----
+ configure.ac | 3 +++
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/autoconf/hercules.m4 b/autoconf/hercules.m4
+index edd71d63..08647581 100644
+--- a/autoconf/hercules.m4
++++ b/autoconf/hercules.m4
+@@ -291,6 +291,7 @@ AC_DEFUN([_HC_CHECK_NEED_GETOPT_WRAPPER],
+ Will the linker complain about duplicate
+ symbols for getopt? We'll soon find out!
+ */
++ extern int getopt(int, char *const[], const char *);
+ extern char *optarg;
+ extern int optind;
+
+@@ -315,6 +316,8 @@ DUPGETOPT1
+ needs getopt. Will linker complain about
+ duplicate symbols for getopt? Let's see.
+ */
++ extern int getopt(int, char *const[], const char *);
++ extern int test1();
+ extern char *optarg;
+ extern int optind;
+ extern int test2();
+@@ -334,11 +337,11 @@ DUPGETOPT1
+ }
+ DUPGETOPT2
+
+- libtool --mode=compile ${CC-cc} conftest1.c -c -o conftest1.lo > /dev/null 2>&1
+- libtool --mode=compile ${CC-cc} conftest2.c -c -o conftest2.lo > /dev/null 2>&1
++ libtool --tag=CC --mode=compile ${CC-cc} conftest1.c -c -o conftest1.lo > /dev/null 2>&1
++ libtool --tag=CC --mode=compile ${CC-cc} conftest2.c -c -o conftest2.lo > /dev/null 2>&1
+
+- libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest1.lo -o libconftest1.la > /dev/null 2>&1
+- libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest2.lo libconftest1.la -o libconftest2.la > /dev/null 2>&1
++ libtool --tag=CC --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest1.lo -o libconftest1.la > /dev/null 2>&1
++ libtool --tag=CC --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest2.lo libconftest1.la -o libconftest2.la > /dev/null 2>&1
+
+ if test $? = 0; then
+
+@@ -385,7 +388,11 @@ AC_DEFUN([HC_CHECK_NEED_GETOPT_OPTRESET],
+ [hc_cv_need_getopt_optreset],
+ [
+ AC_TRY_LINK(
+- [],
++ [
++ #ifdef HAVE_UNISTD_H
++ #include <unistd.h>
++ #endif
++ ],
+ [
+ extern int optreset;
+ optreset=1;
+diff --git a/configure.ac b/configure.ac
+index f12d4705..68dae467 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1168,6 +1168,9 @@ if test "$GCC" = "yes"; then
+
+ -g -O2 -fomit-frame-pointer
+ */
++ #if HAVE_STRING_H
++ #include <string.h>
++ #endif
+
+ int foo ()
+ {
+--
+2.45.2
+
diff --git a/app-emulation/hercules/files/hercules-3.13-htmldir.patch b/app-emulation/hercules/files/hercules-3.13-htmldir.patch
new file mode 100644
index 000000000000..962611b87edd
--- /dev/null
+++ b/app-emulation/hercules/files/hercules-3.13-htmldir.patch
@@ -0,0 +1,25 @@
+--- a/html/Makefile.am
++++ b/html/Makefile.am
+@@ -1,4 +1,4 @@
+-dist_pkgdata_DATA = cckddasd.html fishgui.html hercconf.html hercfaq.html \
++dist_html_DATA = cckddasd.html fishgui.html hercconf.html hercfaq.html \
+ hercinst.html herclic.html hercload.html hercmsca.html hercmscf.html \
+ hercmscp.html hercmsct.html hercmscu.html hercmsda.html hercmsdc.html \
+ hercmsdg.html hercmsdi.html hercmsdl.html hercmsds.html hercmsdt.html \
+@@ -12,7 +12,7 @@
+
+ include_sources = include/header.htmlpart include/footer.htmlpart
+
+-include_pkgdatadir = $(pkgdatadir)/include
++include_pkgdatadir = $(htmldir)/include
+
+ dist_include_pkgdata_DATA = $(include_sources)
+
+@@ -33,6 +33,6 @@
+ images/interruptu.gif images/redu.gif images/waitonu.gif \
+ images/loadd.gif images/restartd.gif
+
+-images_pkgdatadir = $(pkgdatadir)/images
++images_pkgdatadir = $(htmldir)/images
+
+ dist_images_pkgdata_DATA = $(images_sources)
diff --git a/app-emulation/hercules/files/hercules-3.13-posix-test.patch b/app-emulation/hercules/files/hercules-3.13-posix-test.patch
new file mode 100644
index 000000000000..abee4b0cc5ed
--- /dev/null
+++ b/app-emulation/hercules/files/hercules-3.13-posix-test.patch
@@ -0,0 +1,29 @@
+https://github.com/rbowler/spinhawk/pull/106
+
+From 9a9f7182069b8fe0483383c177882218244bad16 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Thu, 18 Nov 2021 02:32:02 -0500
+Subject: [PATCH] avoid bashism in test call
+
+POSIX test only supports =, not ==.
+---
+ autoconf/hercules.m4 | 2 +-
+ configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index f12d47058562..8dd420af8d13 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -562,7 +562,7 @@ AC_CHECK_DECLS( SIOCADDRT, [hc_cv_have_siocaddrt=yes], [hc_
+ AC_CHECK_DECLS( SIOCDELRT, [hc_cv_have_siocdelrt=yes], [hc_cv_have_siocdelrt=no], [#include <linux/sockios.h>] )
+ AC_CHECK_DECLS( SIOCDIFADDR, [hc_cv_have_siocdifaddr=yes], [hc_cv_have_siocdifaddr=no], [#include <linux/sockios.h>] )
+
+-if test "$hc_cv_have_sys_mtio_h" == "yes"; then
++if test "$hc_cv_have_sys_mtio_h" = "yes"; then
+ AC_CHECK_DECLS( MTEWARN, [hc_cv_have_mtewarn=yes], [hc_cv_have_mtewarn=no], [#include <sys/mtio.h>] )
+ else
+ hc_cv_have_mtewarn=no
+--
+2.33.0
+
diff --git a/app-emulation/hercules/files/hercules-3.13-unbundle-libltdl.patch b/app-emulation/hercules/files/hercules-3.13-unbundle-libltdl.patch
new file mode 100644
index 000000000000..c96831d96ad2
--- /dev/null
+++ b/app-emulation/hercules/files/hercules-3.13-unbundle-libltdl.patch
@@ -0,0 +1,379 @@
+--- a/bootstrap.c
++++ b/bootstrap.c
+@@ -11,7 +11,7 @@
+ #include "hstdinc.h"
+ #include "hercules.h"
+ #if defined(HDL_USE_LIBTOOL)
+-#include "ltdl.h"
++#include <ltdl.h>
+ #endif
+
+ #if !defined( _MSVC_ )
+--- a/configure.ac
++++ b/configure.ac
+@@ -12,7 +12,7 @@
+ AC_REVISION($Revision$) # (the version of this configure.ac)
+ AC_CONFIG_AUX_DIR(autoconf) # (directory containing auxillary build tools)
+ AM_INIT_AUTOMAKE(hercules,3.13) # (the version of our software package)
+-AM_CONFIG_HEADER(config.h) # (the file the resulting configure script will produce)
++AC_CONFIG_HEADERS(config.h) # (the file the resulting configure script will produce)
+ AM_MAINTAINER_MODE()
+ AC_CANONICAL_HOST() # (sets $host_cpu, $host_vendor, and $host_os)
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+@@ -38,154 +38,8 @@
+ modexecdir='$(libdir)/$(PACKAGE)'
+ AC_SUBST(modexecdir)
+
+-
+-# -----------------------------------------------------------------------------
+-#
+-# AC_LIBTOOL_DLOPEN
+-#
+-# Enable checking for dlopen support. This macro should be used if the
+-# package makes use of the '-dlopen' and '-dlpreopen' flags, otherwise
+-# libtool will assume that the system does not support dlopening. The
+-# macro must be called before AC_PROG_LIBTOOL.
+-#
+-# -----------------------------------------------------------------------------
+-
+-AC_LIBTOOL_DLOPEN() # (we need libtool's dlopen support)
+-
+-
+-# -----------------------------------------------------------------------------
+-#
+-# AC_LIBTOOL_WIN32_DLL
+-#
+-# This macro should be used if the package has been ported to build
+-# clean dlls on win32 platforms. Usually this means that any library
+-# data items are exported with __declspec(dllexport) and imported with
+-# __declspec(dllimport). If this macro is not used, libtool will assume
+-# that the package libraries are not dll clean and will build only static
+-# libraries on win32 hosts.
+-#
+-# This macro must be called before AC_PROG_LIBTOOL, and provision must
+-# be made to pass '-no-undefined' to libtool in link mode from the package
+-# Makefile. Naturally, if you pass '-no-undefined', you must ensure that
+-# all the library symbols really are defined at link time!
+-#
+-# -----------------------------------------------------------------------------
+-
+-AC_LIBTOOL_WIN32_DLL() # (we need Win32 support in libtool)
+-
+-
+-# -----------------------------------------------------------------------------
+-# See: 'AC_PROG_LIBTOOL' below.
+-# -----------------------------------------------------------------------------
+-
+-AC_DISABLE_STATIC() # (forces libtool to build shared
+-
+- # libraries instead of static ones)
+-# -----------------------------------------------------------------------------
+-# AC_PROG_LIBTOOL
+-#
+-# Add support for the '--enable-shared' and '--disable-shared'
+-# configure flags. By default, this macro turns on shared libraries
+-# if they are available, and also enables static libraries if they
+-# don't conflict with the shared libraries. You can modify these
+-# defaults by calling either the AC_DISABLE_SHARED or AC_DISABLE_STATIC
+-# macros.
+-#
+-# Hercules REQUIRES shared libraries (i.e. DLLs), so we do indeed use
+-# the AC_DISABLE_STATIC macro above.
+-#
+-# -----------------------------------------------------------------------------
+-
+-AC_PROG_LIBTOOL() # (we build libtool for ourselves)
+-
+-
+-# -----------------------------------------------------------------------------
+-#
+-# AC_LIB_LTDL
+-#
+-# Even though libltdl is installed together with libtool, you may wish
+-# to include libltdl in the distribution of your package, for the convenience
+-# of users of your package that don't have libtool or libltdl installed.
+-#
+-# The most simplistic way to add libltdl to your package is to copy the
+-# source files, 'ltdl.c' and 'ltdl.h', to a source directory withing your
+-# package and to build and link them along with the rest of your sources.
+-#
+-# To do this, you must add a call to the 'AC_LIB_LTDL' macro to your package's
+-# 'configure.in' to perform the required configure time checks in order that
+-# 'ltdl.o' is built correctly.
+-#
+-# This method does have its problems though: if you try to link the package
+-# binaries with an installed libltdl, or a library which depends on libltdl,
+-# you may have problems with duplicate symbol definitions.
+-#
+-# In order to enable this flavor of libltdl, you should add the line
+-# 'AC_LIBLTDL_CONVENIENCE' to your `configure.in', before 'AC_PROG_LIBTOOL'.
+-#
+-# In order to select the installable version of libltdl, you should add a
+-# call of the macro 'AC_LIBLTDL_INSTALLABLE' to your 'configure.in' before
+-# 'AC_PROG_LIBTOOL'. This macro will check whether libltdl is already
+-# installed and, if not, request the libltdl embedded in your package to be
+-# built and installed.
+-#
+-# Whatever macro you use, it is up to you to ensure that your 'configure.in'
+-# will configure libltdl, using 'AC_CONFIG_SUBDIRS', and that your 'Makefile's
+-# will start sub-makes within libltdl's directory, using automake's SUBDIRS,
+-# for example. Both macros define the shell variables LIBLTDL, to the link flag
+-# that you should use to link with libltdl, and LTDLINCL, to the preprocessor
+-# flag that you should use to compile with programs that include 'ltdl.h'. It
+-# is up to you to use 'AC_SUBST' to ensure that this variable will be available
+-# in 'Makefile's, or add them to variables that are 'AC_SUBST'ed by default,
+-# such as LIBS and CPPFLAGS.
+-#
+-# So, when you want to link a program with libltdl, be it a convenience,
+-# installed or installable library, just compile with '$(LTDLINCL)' and link
+-# it with '$(LIBLTDL)', using libtool.
+-#
+-# You should probably also add 'AC_LIBTOOL_DLOPEN' to your 'configure.in' before
+-# 'AC_PROG_LIBTOOL', otherwise libtool will assume no dlopening mechanism is
+-# supported, and revert to dlpreopening, which is probably not what you want.
+-#
+-# The following example shows you how to embed the convenience libltdl
+-# in your package. In order to use the installable variant just replace
+-# 'AC_LIBLTDL_CONVENIENCE' with 'AC_LIBLTDL_INSTALLABLE'. We assume that libltdl
+-# was embedded using 'libtoolize --ltdl':
+-#
+-# configure.in:
+-#
+-# ...
+-# dnl Enable building of the convenience library
+-# dnl and set LIBLTDL accordingly
+-# AC_LIBLTDL_CONVENIENCE
+-# dnl Substitute LTDLINCL and LIBLTDL in the Makefiles
+-# AC_SUBST(LTDLINCL)
+-# AC_SUBST(LIBLTDL)
+-# dnl Check for dlopen support
+-# AC_LIBTOOL_DLOPEN
+-# dnl Configure libtool
+-# AC_PROG_LIBTOOL
+-# dnl Configure libltdl
+-# AC_CONFIG_SUBDIRS(libltdl)
+-# ...
+-#
+-# Makefile.am:
+-#
+-# ...
+-# SUBDIRS = libltdl
+-#
+-# INCLUDES = $(LTDLINCL)
+-#
+-# myprog_LDFLAGS = -export-dynamic
+-# # The quotes around -dlopen below fool automake <= 1.4 into accepting it
+-# myprog_LDADD = $(LIBLTDL) "-dlopen" self "-dlopen" foo1.la
+-# myprog_DEPENDENCIES = $(LIBLTDL) foo1.la
+-# ...
+-#
+-# -----------------------------------------------------------------------------
+-
+-AC_LIB_LTDL() # (we need the ltdl libtool library)
+-AC_SUBST([LIBTOOL_DEPS]) # (see PROGRAMMING NOTE above)
+-
++LT_PREREQ([2.2.6])
++LT_INIT([dlopen win32-dll disable-static])
+
+ # -----------------------------------------------------------------------------
+ # (See comments in the 'AC_CHECK_LIB' Libraries section further below)
+--- a/crypto/Makefile.am
++++ b/crypto/Makefile.am
+@@ -23,7 +23,6 @@
+
+ if OPTION_DYNAMIC_LOAD
+ DYNSRC =
+- LTDL = ../ltdl.c
+
+ DYNMOD_LD_FLAGS = -module \
+ -no-undefined \
+@@ -31,7 +30,7 @@
+ -export-dynamic \
+ -avoid-version
+
+- DYNMOD_LD_ADD = $(LDADD)
++ DYNMOD_LD_ADD = $(LDADD) -lltdl
+
+ LIB_LD_FLAGS = -export-dynamic \
+ $(XSTATIC) \
+@@ -39,7 +38,6 @@
+ -avoid-version
+ else
+ DYNSRC = $(dyndev_SRC)
+- LTDL =
+ DYNMOD_LD_FLAGS =
+ DYNMOD_LD_ADD =
+ LIB_LD_FLAGS = $(XSTATIC) \
+--- a/decNumber/Makefile.am
++++ b/decNumber/Makefile.am
+@@ -37,13 +37,13 @@
+ endif
+
+ if OPTION_DYNAMIC_LOAD
+- LTDL = ../ltdl.c
++ LIB_LD_ADD = -lltdl
+ LIB_LD_FLAGS = -export-dynamic \
+ $(XSTATIC) \
+ -no-undefined \
+ -avoid-version
+ else
+- LTDL =
++ LIB_LD_ADD =
+ LIB_LD_FLAGS = $(XSTATIC) \
+ -no-undefined \
+ -avoid-version
+@@ -56,7 +56,7 @@
+
+ libdecNumber_la_SOURCES = $(decNumber_SRC)
+ libdecNumber_la_LDFLAGS = $(LIB_LD_FLAGS)
+- libdecNumber_la_LIBADD = $(LDADD)
++ libdecNumber_la_LIBADD = $(LDADD) $(LIB_LD_ADD)
+
+ noinst_HEADERS = decContext.h \
+ decDPD.h \
+--- a/fillfnam.c
++++ b/fillfnam.c
+@@ -5,6 +5,8 @@
+ #include "hercules.h"
+ #include "fillfnam.h"
+
++#include <dirent.h>
++
+ /* On Solaris 2.9 (SunOS 5.9) and earlier, there is no scandir
+ and alphasort function. In this case fillfnam does nothing
+ and the tab command is effectively a no-operation */
+--- a/herclin.c
++++ b/herclin.c
+@@ -26,7 +26,7 @@
+ /* This must be included if HDL uses the */
+ /* libtool ltdl convenience library */
+
+-#include "ltdl.h"
++#include <ltdl.h>
+ #endif
+
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -98,7 +98,7 @@
+
+ if OPTION_DYNAMIC_LOAD
+ DYNSRC =
+- LTDL = ltdl.c
++ LIB_LD_ADD = -lltdl
+
+ DYNMOD_LD_FLAGS = -module \
+ -no-undefined \
+@@ -109,7 +109,8 @@
+ DYNMOD_LD_ADD = libherc.la \
+ libhercs.la \
+ libhercu.la \
+- $(LDADD)
++ $(LDADD) \
++ $(LIB_LD_ADD)
+
+ LIB_LD_FLAGS = -export-dynamic \
+ $(XSTATIC) \
+@@ -117,7 +118,6 @@
+ -avoid-version
+ else
+ DYNSRC = $(dyndev_SRC)
+- LTDL =
+ DYNMOD_LD_FLAGS =
+ DYNMOD_LD_ADD =
+ LIB_LD_FLAGS = $(XSTATIC) \
+@@ -295,12 +295,11 @@
+ memrchr.c \
+ parser.c \
+ pttrace.c \
+- $(FTHREADS) \
+- $(LTDL)
++ $(FTHREADS)
+
+ libhercu_la_LDFLAGS = $(LIB_LD_FLAGS)
+
+- libhercu_la_LIBADD = $(LDADD) libhercs.la
++ libhercu_la_LIBADD = $(LDADD) libhercs.la $(LIB_LD_ADD)
+
+ #
+ # Core Hercules (shared) library
+@@ -372,8 +371,7 @@
+ memrchr.c \
+ $(dynamic_SRC) \
+ $(extra_SRC) \
+- $(dyndev_SRC) \
+- ltdl.c
++ $(dyndev_SRC)
+
+ libherc_la_LDFLAGS = $(LIB_LD_FLAGS)
+
+@@ -383,7 +381,8 @@
+ libhercd.la \
+ decNumber/libdecNumber.la \
+ softfloat/libsoftfloat.la \
+- $(LDADD)
++ $(LDADD) \
++ $(LIB_LD_ADD)
+
+ #
+ # THIS is the hercules executable.
+@@ -440,7 +439,7 @@
+ hercules_SOURCES = bootstrap.c \
+ hdlmain.c
+
+- hercules_LDADD = libherc.la libhercs.la $(LDADD)
++ hercules_LDADD = libherc.la libhercs.la $(LDADD) $(LIB_LD_ADD)
+
+ hercules_LDFLAGS = $(HLDFLAGS)
+
+@@ -656,7 +655,6 @@
+ hdl.h \
+ crypto.h \
+ sockdev.h \
+- ltdl.h \
+ herc_getopt.h \
+ service.h \
+ chsc.h \
+--- a/softfloat/Makefile.am
++++ b/softfloat/Makefile.am
+@@ -22,13 +22,11 @@
+ endif
+
+ if OPTION_DYNAMIC_LOAD
+- LTDL = ../ltdl.c
+ LIB_LD_FLAGS = -export-dynamic \
+ $(XSTATIC) \
+ -no-undefined \
+ -avoid-version
+ else
+- LTDL =
+ LIB_LD_FLAGS = $(XSTATIC) \
+ -no-undefined \
+ -avoid-version
+--- a/autoconf/hercules.m4
++++ b/autoconf/hercules.m4
+@@ -270,7 +270,7 @@
+
+ else
+
+- if test $(./libtool --features | fgrep "enable shared libraries" | wc -l) -ne 1; then
++ if test "$enable_shared" != "yes"; then
+
+ # Libtool doesn't support shared libraries,
+ # and thus our wrapper kludge is not needed.
+@@ -280,11 +280,11 @@
+ }
+ DUPGETOPT2
+
+- ./libtool --mode=compile ${CC-cc} conftest1.c -c -o conftest1.lo > /dev/null 2>&1
+- ./libtool --mode=compile ${CC-cc} conftest2.c -c -o conftest2.lo > /dev/null 2>&1
++ libtool --mode=compile ${CC-cc} conftest1.c -c -o conftest1.lo > /dev/null 2>&1
++ libtool --mode=compile ${CC-cc} conftest2.c -c -o conftest2.lo > /dev/null 2>&1
+
+- ./libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest1.lo -o libconftest1.la > /dev/null 2>&1
+- ./libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest2.lo libconftest1.la -o libconftest2.la > /dev/null 2>&1
++ libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest1.lo -o libconftest1.la > /dev/null 2>&1
++ libtool --mode=link ${CC-cc} -shared -rpath /lib -no-undefined conftest2.lo libconftest1.la -o libconftest2.la > /dev/null 2>&1
+
+ if test $? = 0; then
+
diff --git a/app-emulation/hercules/files/hercules-3.13-user-install.patch b/app-emulation/hercules/files/hercules-3.13-user-install.patch
new file mode 100644
index 000000000000..bcde1181e873
--- /dev/null
+++ b/app-emulation/hercules/files/hercules-3.13-user-install.patch
@@ -0,0 +1,21 @@
+the ebuild will handle these, so no need to do it directly which will fail when
+building as non-root.
+
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -730,15 +730,6 @@ endif
+ (cd $(DESTDIR)$(bindir); @LN_S@ ./dasdcopy$(EXEEXT) cfba2fba$(EXEEXT))
+ rm -f $(DESTDIR)$(bindir)/cckd2ckd$(EXEEXT)
+ (cd $(DESTDIR)$(bindir); @LN_S@ ./dasdcopy$(EXEEXT) cckd2ckd$(EXEEXT))
+-if SETUID_HERCIFC
+- chown root $(DESTDIR)$(bindir)/hercifc
+-if HERCIFC_GROUPSET
+- chgrp $(HERCIFC_GROUPNAME) $(DESTDIR)$(bindir)/hercifc
+-endif
+- chmod 0750 $(DESTDIR)$(bindir)/hercifc
+- chmod +s $(DESTDIR)$(bindir)/hercifc
+- rm hercifc
+-endif
+
+ uninstall-local:
+
diff --git a/app-emulation/hercules/hercules-3.13-r1.ebuild b/app-emulation/hercules/hercules-3.13-r1.ebuild
new file mode 100644
index 000000000000..44709904b813
--- /dev/null
+++ b/app-emulation/hercules/hercules-3.13-r1.ebuild
@@ -0,0 +1,70 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+inherit autotools flag-o-matic
+
+DESCRIPTION="Hercules System/370, ESA/390 and zArchitecture Mainframe Emulator"
+HOMEPAGE="http://www.hercules-390.eu/"
+SRC_URI="http://downloads.hercules-390.eu/${P}.tar.gz"
+
+LICENSE="QPL-1.0"
+SLOT="0"
+KEYWORDS="~alpha amd64 ppc ~sparc x86 ~x64-macos"
+IUSE="bzip2 custom-cflags +suid"
+
+RDEPEND="
+ dev-libs/libltdl:=
+ net-libs/libnsl:0=
+ virtual/zlib:=
+ bzip2? ( app-arch/bzip2:= )"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.13-htmldir.patch
+ "${FILESDIR}"/${PN}-3.13-posix-test.patch
+ "${FILESDIR}"/${PN}-3.13-unbundle-libltdl.patch
+ "${FILESDIR}"/${PN}-3.13-user-install.patch
+ "${FILESDIR}"/${PN}-3.13-autoconf.patch
+)
+
+src_prepare() {
+ default
+
+ # delete bundled libltdl, #252716
+ rm ltdl.{c,h} || die
+ eautoreconf
+
+ # The local modules need local libs, so when doing a parallel install
+ # of the modules and libs breaks during relinking. Force the libs to
+ # install first, and then the modules that use those libs. #488126
+ echo "install-modexecLTLIBRARIES: install-libLTLIBRARIES" >> Makefile.in || die
+}
+
+src_configure() {
+ use custom-cflags || strip-flags
+
+ append-cflags -std=gnu17 # workaround for gcc15
+
+ local -x ac_cv_lib_bz2_BZ2_bzBuffToBuffDecompress=$(usex bzip2)
+ econf \
+ $(use_enable bzip2 cckd-bzip2) \
+ $(use_enable bzip2 het-bzip2) \
+ $(use_enable suid setuid-hercifc) \
+ --enable-custom="Gentoo ${PF}.ebuild" \
+ --disable-optimization
+}
+
+src_install() {
+ default
+ dodoc RELEASE.NOTES
+
+ use suid && fperms 4711 /usr/bin/hercifc
+
+ insinto /usr/share/hercules
+ doins hercules.cnf
+
+ # No static archives. Have to leave .la files for modules. #720342
+ rm "${ED}/usr/$(get_libdir)/"*.la || die
+}
diff --git a/app-emulation/hercules/metadata.xml b/app-emulation/hercules/metadata.xml
new file mode 100644
index 000000000000..fcda66fa960b
--- /dev/null
+++ b/app-emulation/hercules/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>s390@gentoo.org</email>
+ <name>s390 architecture team</name>
+ </maintainer>
+ <longdescription>
+ Hercules is an emulator for the IBM System/360, System/370, ESA/390, and
+ z/Architecture series of mainframe computer systems. It will run any
+ software that will run on those computers, provided the peripheral devices
+ the program requires are present in the configuration.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libcacard/Manifest b/app-emulation/libcacard/Manifest
new file mode 100644
index 000000000000..58cdf557c643
--- /dev/null
+++ b/app-emulation/libcacard/Manifest
@@ -0,0 +1 @@
+DIST libcacard-2.8.1.tar.xz 396472 BLAKE2B 49b1c0c9184f0a926df85de6146dd31a7127ee5e40a172e3d9e47f33ef4cdef57ee85f34c9c53719b4a8c5a1de695b8936cfcfce141cd558e6d53d215421621b SHA512 6deddd3319dbd74165eeaa2e8ab10de4a6eb111e980edd608801f7fe3c4fa896c9fb239110d17763864887f5eb0b77c03c680d83fd58a3913b48deb5a225ec74
diff --git a/app-emulation/libcacard/libcacard-2.8.1.ebuild b/app-emulation/libcacard/libcacard-2.8.1.ebuild
new file mode 100644
index 000000000000..46c10bdebe7e
--- /dev/null
+++ b/app-emulation/libcacard/libcacard-2.8.1.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+DESCRIPTION="Virtual Common Access Card (CAC) library emulator"
+HOMEPAGE="https://gitlab.freedesktop.org/spice/libcacard https://www.spice-space.org/"
+SRC_URI="https://www.spice-space.org/download/libcacard/${P}.tar.xz"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm ~arm64 ~loong ppc ppc64 ~riscv ~sparc x86"
+IUSE="+passthrough static-libs test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ >=dev-libs/nss-3.12.8
+ >=dev-libs/glib-2.32
+ passthrough? ( >=sys-apps/pcsc-lite-1.8 )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+src_configure() {
+ local emesonargs=(
+ -Ddefault_library=$(usex static-libs both shared)
+ $(meson_feature passthrough pcsc)
+ $(meson_use !test disable_tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+
+ dodoc docs/*.txt
+}
diff --git a/app-emulation/libcacard/metadata.xml b/app-emulation/libcacard/metadata.xml
new file mode 100644
index 000000000000..1540f1047fad
--- /dev/null
+++ b/app-emulation/libcacard/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="passthrough">Enable smartcard passthrough support via <pkg>sys-apps/pcsc-lite</pkg>
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:libcacard_project:libcacard</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libdsk/Manifest b/app-emulation/libdsk/Manifest
new file mode 100644
index 000000000000..6ab91ed70c30
--- /dev/null
+++ b/app-emulation/libdsk/Manifest
@@ -0,0 +1 @@
+DIST libdsk-1.5.21.tar.gz 1326482 BLAKE2B 4fb655ca2225ea58d6c81d18c23acf74860fa2ef718873d921b10841d44d0a2c5d1463f8198c204ab30329ba77b56865d0d88669940395c52f5bf9846cac9002 SHA512 aa217caa952ca6ed26b14932bb773d33bbcb7f4f4621815879113b33f2cc5936cd0f31fb7a1776e5adb3096b085f653f0004eb95a25642a4bba32d612321b342
diff --git a/app-emulation/libdsk/libdsk-1.5.21.ebuild b/app-emulation/libdsk/libdsk-1.5.21.ebuild
new file mode 100644
index 000000000000..4ae22b8c6561
--- /dev/null
+++ b/app-emulation/libdsk/libdsk-1.5.21.ebuild
@@ -0,0 +1,26 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Library for accessing discs and disc image files"
+HOMEPAGE="https://www.seasip.info/Unix/LibDsk/"
+SRC_URI="https://www.seasip.info/Unix/LibDsk/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64"
+
+DOCS=( doc/${PN}.{txt,pdf} )
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_install() {
+ default
+ find "${ED}" -name '*.la' -delete || die
+}
diff --git a/app-emulation/libdsk/metadata.xml b/app-emulation/libdsk/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/app-emulation/libdsk/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libguestfs-appliance/Manifest b/app-emulation/libguestfs-appliance/Manifest
new file mode 100644
index 000000000000..4af4eddd56fe
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/Manifest
@@ -0,0 +1,3 @@
+DIST appliance-1.54.0.tar.xz 197794224 BLAKE2B 52e9e3c14c728a270b7bba250e71a6f7f060990450c287bba33a5f8453bb01f3ddc8c1f6755041b1222ae7f7900151a68cb4ee76533a926ca815f24b6b3a16c8 SHA512 9ca010a3df5de27e60d0815bfec23c01ff3b45839765f3ee7728717b165b6a2cf8eb812313441104fe0cb14853726ead682e6b91f64a62334c4e50023ccff502
+DIST appliance-1.56.0.tar.xz 268544972 BLAKE2B 02c0834b4e38cba5e7d9f811a4f7a91514c4fc64c0557358db8bc291f46de00519f6e33f97268f065f440f01a8b68cd6c34f171abaf82eeac5014c4aacf61eb8 SHA512 d56ec586890658803ab933652ad8d64503f74ca4f3257a7763cc5aaef52ad8e7a3b19d073c981963fac581bc28b090556723c1cea276d9f00232de32172bbd0b
+DIST appliance-1.58.1.tar.xz 167591140 BLAKE2B dc3f04dfdbd1a82aaa9b90aafb19d1ce69666326ead925a750b0e25848e7004e367119c7205cf7f67543246b483372feb472d7ea4e2e7fce7e561893268ebe47 SHA512 0e3cb389620f510dbaa1ad37fa3c1df2637144e00db48e6a09081797e797e15265cf69a9c22d3c5be194774a68276e5066c5f8c16832a4d9bc80b186cc0d7d8d
diff --git a/app-emulation/libguestfs-appliance/files/env.file b/app-emulation/libguestfs-appliance/files/env.file
new file mode 100644
index 000000000000..577009eebf8f
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/files/env.file
@@ -0,0 +1 @@
+LIBGUESTFS_PATH=/usr/share/guestfs/appliance/
diff --git a/app-emulation/libguestfs-appliance/libguestfs-appliance-1.54.0.ebuild b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.54.0.ebuild
new file mode 100644
index 000000000000..bdce1d187f86
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.54.0.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/guestfs-tools (if any new release there)
+
+CHECKREQS_DISK_USR=500M
+CHECKREQS_DISK_BUILD=500M
+
+inherit check-reqs
+
+DESCRIPTION="VM appliance disk image used in libguestfs package"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/binaries/appliance/appliance-${PV}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0"
+# Precompiled binaries
+KEYWORDS="-* amd64"
+
+# Mixing libguestfs versions causes weird problems, bug #501588
+RDEPEND="!<app-emulation/libguestfs-${PV}"
+
+src_unpack() {
+ # We'll unpack the tarball directly into ${D} to speed up install.
+ # Otherwise we need to duplicate hundreds of data.
+ :
+}
+
+src_install() {
+ dodir /usr/share/guestfs
+ cd "${ED}"/usr/share/guestfs || die
+ unpack ${A}
+
+ cd appliance || die
+ dodoc README*
+ # Don't rm README.* here, at least README.fixed is needed for libguestfs, see
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1183780
+ chmod 755 . || die
+ chmod 644 * || die
+
+ newenvd "${FILESDIR}"/env.file 99${PN}
+}
+
+pkg_postinst() {
+ # bug #776790
+ elog "Please run . ${EROOT}/etc/profile before attempting to use this package!"
+}
diff --git a/app-emulation/libguestfs-appliance/libguestfs-appliance-1.56.0.ebuild b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.56.0.ebuild
new file mode 100644
index 000000000000..a9f045c31616
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.56.0.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/guestfs-tools (if any new release there)
+
+CHECKREQS_DISK_USR=500M
+CHECKREQS_DISK_BUILD=500M
+
+inherit check-reqs
+
+DESCRIPTION="VM appliance disk image used in libguestfs package"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/binaries/appliance/appliance-${PV}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0"
+# Precompiled binaries
+KEYWORDS="-* amd64"
+
+# Mixing libguestfs versions causes weird problems, bug #501588
+RDEPEND="!<app-emulation/libguestfs-${PV}"
+
+src_unpack() {
+ # We'll unpack the tarball directly into ${D} to speed up install.
+ # Otherwise we need to duplicate hundreds of data.
+ :
+}
+
+src_install() {
+ dodir /usr/share/guestfs
+ cd "${ED}"/usr/share/guestfs || die
+ unpack ${A}
+
+ cd appliance || die
+ dodoc README*
+ # Don't rm README.* here, at least README.fixed is needed for libguestfs, see
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1183780
+ chmod 755 . || die
+ chmod 644 * || die
+
+ newenvd "${FILESDIR}"/env.file 99${PN}
+}
+
+pkg_postinst() {
+ # bug #776790
+ elog "Please run . ${EROOT}/etc/profile before attempting to use this package!"
+}
diff --git a/app-emulation/libguestfs-appliance/libguestfs-appliance-1.58.1.ebuild b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.58.1.ebuild
new file mode 100644
index 000000000000..d5ddffe32d9e
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/libguestfs-appliance-1.58.1.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bump with app-emulation/libguestfs and app-emulation/guestfs-tools (if any new release there)
+
+CHECKREQS_DISK_USR=500M
+CHECKREQS_DISK_BUILD=500M
+
+inherit check-reqs
+
+DESCRIPTION="VM appliance disk image used in libguestfs package"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/binaries/appliance/appliance-${PV}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0"
+# Precompiled binaries
+KEYWORDS="-* ~amd64"
+
+# Mixing libguestfs versions causes weird problems, bug #501588
+RDEPEND="!<app-emulation/libguestfs-${PV}"
+
+src_unpack() {
+ # We'll unpack the tarball directly into ${D} to speed up install.
+ # Otherwise we need to duplicate hundreds of data.
+ :
+}
+
+src_install() {
+ dodir /usr/share/guestfs
+ cd "${ED}"/usr/share/guestfs || die
+ unpack ${A}
+
+ cd appliance || die
+ dodoc README*
+ # Don't rm README.* here, at least README.fixed is needed for libguestfs, see
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1183780
+ chmod 755 . || die
+ chmod 644 * || die
+
+ newenvd "${FILESDIR}"/env.file 99${PN}
+}
+
+pkg_postinst() {
+ # bug #776790
+ elog "Please run . ${EROOT}/etc/profile before attempting to use this package!"
+}
diff --git a/app-emulation/libguestfs-appliance/metadata.xml b/app-emulation/libguestfs-appliance/metadata.xml
new file mode 100644
index 000000000000..c95fdd3cc85a
--- /dev/null
+++ b/app-emulation/libguestfs-appliance/metadata.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <upstream>
+ <maintainer>
+ <email>rjones@redhat.com</email>
+ <name>Richard Jones</name>
+ </maintainer>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libguestfs/Manifest b/app-emulation/libguestfs/Manifest
new file mode 100644
index 000000000000..16049fd84d78
--- /dev/null
+++ b/app-emulation/libguestfs/Manifest
@@ -0,0 +1,3 @@
+DIST libguestfs-1.54.1.tar.gz 19023492 BLAKE2B 13fe3a536ec04901a69192ecc9fefe055099d057ba3609bd1ec51b8853e5ad50fd608ef4de7d6296f9bf53a19c1bc81f2ae54c185c18c6e68f7a541f34222f93 SHA512 0113ea1cd26aba9b935b65299cf34d53c3d669508238d642a1a97622eb24948df05b55072d4c715cacb4fdfc7339c69ca25f65ca51ac87c40c5325175e939a0d
+DIST libguestfs-1.56.2.tar.gz 19022635 BLAKE2B 0da837826673b75faac3bc05c6eddf7df60fbac50fcb5dedbe877777f450344217b6fd58892695efcb241cfb3c1fb19d251a8fef9ba5e015b250afb6aad17143 SHA512 80d99319bc6d13f0f4252c21250d4191a9dec94c6d10b572806043f3ecc36581c2169ddac4ebf7c7c7a1a560c6e85c5ce366baea2e63efcaa093f601d1031c62
+DIST libguestfs-1.58.1.tar.gz 19012505 BLAKE2B 53899808635e281ed85b01a0faf2b8053c7f1c46c2a5d73f8ec060e9ea74f95ca88e0a41f3d5c4dfafa2419e65ec5975ac6fbda0480c7d2f5929c65a82d4e392 SHA512 56e8f21592b4c63a14cfaa3255180c3d83bea7d3cc1a404befb121513b7287dd09ae96477b80b3f8794b2cde49febb1909b9716c3b896a313e4445f7f2a5072a
diff --git a/app-emulation/libguestfs/files/libguestfs-1.52.1-disable-obsolete-lvmetad-in-tests.patch b/app-emulation/libguestfs/files/libguestfs-1.52.1-disable-obsolete-lvmetad-in-tests.patch
new file mode 100644
index 000000000000..ba5b9c726361
--- /dev/null
+++ b/app-emulation/libguestfs/files/libguestfs-1.52.1-disable-obsolete-lvmetad-in-tests.patch
@@ -0,0 +1,12 @@
+diff --git a/appliance/init b/appliance/init
+index 5d35a47dd..8b63be245 100755
+--- a/appliance/init
++++ b/appliance/init
+@@ -166,7 +166,6 @@ fi
+
+ LVM_SYSTEM_DIR=/tmp/lvm
+ export LVM_SYSTEM_DIR
+-lvmetad
+
+ # Scan for LVM.
+ modprobe dm_mod ||:
diff --git a/app-emulation/libguestfs/files/libguestfs-1.56.2-bash-Remove-vestigial-bash-completions.patch b/app-emulation/libguestfs/files/libguestfs-1.56.2-bash-Remove-vestigial-bash-completions.patch
new file mode 100644
index 000000000000..1521d8d88039
--- /dev/null
+++ b/app-emulation/libguestfs/files/libguestfs-1.56.2-bash-Remove-vestigial-bash-completions.patch
@@ -0,0 +1,149 @@
+From bc0443f84259198cf51b613b9bb541758c6b0ef4 Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 24 Apr 2026 18:33:29 -0500
+Subject: [PATCH 1/2] bash/*: Remove vestigial bash completions
+
+They've long since moved to other projects, and Gentoo Portage complains about them.
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ bash/guestunmount | 108 --------------------------------------
+ bash/libguestfs-test-tool | 6 ---
+ 2 files changed, 114 deletions(-)
+
+diff --git a/bash/guestunmount b/bash/guestunmount
+index 871bf18a5..446f5d5b1 100644
+--- a/bash/guestunmount
++++ b/bash/guestunmount
+@@ -84,111 +84,3 @@ _guestunmount ()
+ _guestfs_virttools "guestunmount" 1
+ } &&
+ complete -o default -F _guestunmount guestunmount
+-
+-_virt_alignment_scan ()
+-{
+- _guestfs_virttools "virt-alignment-scan" 1
+-} &&
+-complete -o default -F _virt_alignment_scan virt-alignment-scan
+-
+-_virt_builder ()
+-{
+- _guestfs_virttools "virt-builder" 0
+-} &&
+-complete -o default -F _virt_builder virt-builder
+-
+-_virt_cat ()
+-{
+- _guestfs_virttools "virt-cat" 1
+-} &&
+-complete -o default -F _virt_cat virt-cat
+-
+-_virt_customize ()
+-{
+- _guestfs_virttools "virt-customize" 0
+-} &&
+-complete -o default -F _virt_customize virt-customize
+-
+-_virt_dib ()
+-{
+- _guestfs_virttools "virt-dib" 0
+-} &&
+-complete -o default -F _virt_dib virt-dib
+-
+-_virt_df ()
+-{
+- _guestfs_virttools "virt-df" 1
+-} &&
+-complete -o default -F _virt_df virt-df
+-
+-_virt_diff ()
+-{
+- _guestfs_virttools "virt-diff" 1
+-} &&
+-complete -o default -F _virt_diff virt-diff
+-
+-_virt_edit ()
+-{
+- _guestfs_virttools "virt-edit" 0
+-} &&
+-complete -o default -F _virt_edit virt-edit
+-
+-_virt_filesystems ()
+-{
+- _guestfs_virttools "virt-filesystems" 1
+-} &&
+-complete -o default -F _virt_filesystems virt-filesystems
+-
+-_virt_format ()
+-{
+- _guestfs_virttools "virt-format" 0
+-} &&
+-complete -o default -F _virt_format virt-format
+-
+-_virt_get_kernel ()
+-{
+- _guestfs_virttools "virt-get-kernel" 1
+-} &&
+-complete -o default -F _virt_get_kernel virt-get-kernel
+-
+-_virt_inspector ()
+-{
+- _guestfs_virttools "virt-inspector" 1
+-} &&
+-complete -o default -F _virt_inspector virt-inspector
+-
+-_virt_log ()
+-{
+- _guestfs_virttools "virt-log" 1
+-} &&
+-complete -o default -F _virt_log virt-log
+-
+-_virt_ls ()
+-{
+- _guestfs_virttools "virt-ls" 1
+-} &&
+-complete -o default -F _virt_ls virt-ls
+-
+-_virt_resize ()
+-{
+- _guestfs_virttools "virt-resize" 0
+-} &&
+-complete -o default -F _virt_resize virt-resize
+-
+-_virt_sparsify ()
+-{
+- _guestfs_virttools "virt-sparsify" 0
+-} &&
+-complete -o default -F _virt_sparsify virt-sparsify
+-
+-_virt_sysprep ()
+-{
+- _guestfs_virttools "virt-sysprep" 0
+-} &&
+-complete -o default -F _virt_sysprep virt-sysprep
+-
+-_virt_tail ()
+-{
+- _guestfs_virttools "virt-tail" 1
+-} &&
+-complete -o default -F _virt_tail virt-tail
+diff --git a/bash/libguestfs-test-tool b/bash/libguestfs-test-tool
+index 91cfbf821..4c467cf04 100644
+--- a/bash/libguestfs-test-tool
++++ b/bash/libguestfs-test-tool
+@@ -40,12 +40,6 @@ _guestfs_options_only ()
+ esac
+ }
+
+-_virt_win_reg ()
+-{
+- _guestfs_options_only "virt-win-reg"
+-} &&
+-complete -o default -F _virt_win_reg virt-win-reg
+-
+ _libguestfs-test-tool ()
+ {
+ _guestfs_options_only "libguestfs-test-tool"
+--
+2.53.0
+
diff --git a/app-emulation/libguestfs/files/libguestfs-1.56.2-guestfs-bash-completion.m4-more-control.patch b/app-emulation/libguestfs/files/libguestfs-1.56.2-guestfs-bash-completion.m4-more-control.patch
new file mode 100644
index 000000000000..d66db2b686ac
--- /dev/null
+++ b/app-emulation/libguestfs/files/libguestfs-1.56.2-guestfs-bash-completion.m4-more-control.patch
@@ -0,0 +1,78 @@
+From 48e47e7c9f3266cf3e12e3665046ae3ba3e37166 Mon Sep 17 00:00:00 2001
+From: Christopher Byrne <salah.coronya@gmail.com>
+Date: Fri, 24 Apr 2026 21:00:32 -0500
+Subject: [PATCH 2/2] m4/guestfs-bash-completion.m4: Allow control of
+ completions installation
+
+It can be desirable to install (or suppress) the installion of the bash
+completion files regardless on what's on the compile host. Gentoo always
+installs bash completions files, even if bash-completion is not installed.
+
+Signed-off-by: Christopher Byrne <salah.coronya@gmail.com>
+---
+ configure.ac | 2 ++
+ m4/guestfs-bash-completion.m4 | 37 +++++++++++++++++++++++++----------
+ 2 files changed, 29 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 57c24da5e..3425c11ee 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -324,6 +324,8 @@ feature "Erlang bindings" test "x$HAVE_ERLANG_TRUE" = "x"
+ feature "Lua bindings" test "x$HAVE_LUA_TRUE" = "x"
+ feature "Go bindings" test "x$HAVE_GOLANG_TRUE" = "x"
+ feature "bash completion" test "x$HAVE_BASH_COMPLETION_TRUE" = "x"
++AS_IF([test "x$HAVE_BASH_COMPLETION_TRUE" = "x"],
++[print "Bash completions dir" "$BASH_COMPLETIONS_DIR"])
+ feature "Rust bindings" test "x$HAVE_RUST_TRUE" = "x"
+
+ echo
+diff --git a/m4/guestfs-bash-completion.m4 b/m4/guestfs-bash-completion.m4
+index ecd9f591d..72ea2ef72 100644
+--- a/m4/guestfs-bash-completion.m4
++++ b/m4/guestfs-bash-completion.m4
+@@ -16,14 +16,31 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ dnl Bash completion.
+-PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0], [
+- bash_completion=yes
+- AC_MSG_CHECKING([for bash-completions directory])
+- BASH_COMPLETIONS_DIR="`pkg-config --variable=completionsdir bash-completion`"
+- AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
+- AC_SUBST([BASH_COMPLETIONS_DIR])
+-],[
+- bash_completion=no
+- AC_MSG_WARN([bash-completion not installed])
++AC_ARG_WITH([bash-completion],
++ [AS_HELP_STRING([--with-bash-completion],[Enable bash completions @<:@default=auto@:>@])],
++ [with_bash_completion="$withval"],
++ [with_bash_completion=auto])
++
++AS_IF([test "x$with_bash_completion" = "xauto"], [
++ PKG_CHECK_MODULES([BASH_COMPLETION], [bash-completion >= 2.0],
++ [], [
++ AC_MSG_WARN([bash-completion not installed])
++ BASH_COMPLETION=no
++])],[BASH_COMPLETION=$with_bash_completion])
++AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$BASH_COMPLETION" != "xno"])
++
++AC_ARG_WITH([bash-completion-dir],
++ [AS_HELP_STRING([--with-bash-completion-dir],[Directory to install bash completions @<:@default=auto@:>@])],
++ [with_bash_completion_dir="$withval"],
++ [with_bash_completion_dir=auto])
++
++AS_IF([test "x$BASH_COMPLETION" != "xno"], [
++ AC_MSG_CHECKING([for bash-completions directory])
++ AS_IF([test "x$with_bash_completion_dir" = "xauto" || test "x$with_bash_completion_dir" = "xyes"], [
++ PKG_CHECK_VAR([BASH_COMPLETIONS_DIR], [bash-completion], [completionsdir], [], [
++ BASH_COMPLETIONS_DIR="${datadir}/bash-completion/completions"])
++ ],
++ [BASH_COMPLETIONS_DIR=$with_bash_completion_dir])
++ AC_MSG_RESULT([$BASH_COMPLETIONS_DIR])
++ AC_SUBST([BASH_COMPLETIONS_DIR])
+ ])
+-AM_CONDITIONAL([HAVE_BASH_COMPLETION],[test "x$bash_completion" = "xyes"])
+--
+2.53.0
+
diff --git a/app-emulation/libguestfs/files/libguestfs-1.56.2-respect-LDFLAGS-in-perl-module.patch b/app-emulation/libguestfs/files/libguestfs-1.56.2-respect-LDFLAGS-in-perl-module.patch
new file mode 100644
index 000000000000..d1580c1b938d
--- /dev/null
+++ b/app-emulation/libguestfs/files/libguestfs-1.56.2-respect-LDFLAGS-in-perl-module.patch
@@ -0,0 +1,13 @@
+diff --git a/perl/Build.PL.in b/perl/Build.PL.in
+index abec96591..7da7606df 100755
+--- a/perl/Build.PL.in
++++ b/perl/Build.PL.in
+@@ -66,7 +66,7 @@ my $build = Module::Build->new (
+ ],
+ extra_linker_flags => [
+ '-DGUESTFS_PRIVATE=1',
+- split (' ', '@CFLAGS@'),
++ split (' ', '@LDFLAGS@'),
+ '-L@top_builddir@/lib/.libs',
+ '-lguestfs',
+ ],
diff --git a/app-emulation/libguestfs/libguestfs-1.54.1-r1.ebuild b/app-emulation/libguestfs/libguestfs-1.54.1-r1.ebuild
new file mode 100644
index 000000000000..fa8e4dec55e2
--- /dev/null
+++ b/app-emulation/libguestfs/libguestfs-1.54.1-r1.ebuild
@@ -0,0 +1,231 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+USE_RUBY=( ruby3{2..3} )
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit autotools bash-completion-r1 dot-a linux-info lua-single perl-functions\
+ python-single-r1 ruby-single toolchain-funcs vala
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS="amd64"
+fi
+
+IUSE="doc erlang +fuse introspection libvirt lua +ocaml +perl python readline ruby selinux static-libs test vala"
+
+REQUIRED_USE="
+ lua? ( ${LUA_REQUIRED_USE} )
+ python? ( ${PYTHON_REQUIRED_USE} )
+ vala? ( introspection )
+"
+
+RESTRICT="!test? ( test )"
+
+# Not part of the system profile, but dependenices of it with base USE flags
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ app-arch/zstd
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ net-libs/libtirpc:=
+ sys-libs/libcap-ng
+ sys-libs/ncurses:=
+ sys-libs/readline:=
+ virtual/acl
+ virtual/libcrypt
+"
+# Won't compile without it
+COMMON_DEPEND_EXPLICIT="
+ app-admin/augeas
+ app-alternatives/cpio
+ app-emulation/qemu[qemu_softmmu_targets_x86_64,selinux?]
+ app-misc/hivex[ocaml?]
+ dev-libs/jansson:=
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+# "Automagic" dependencies
+COMMON_DEPEND_IMPLICIT="
+ dev-libs/libconfig:=
+ media-gfx/icoutils
+ media-libs/netpbm[png]
+"
+# Sum of the above + conditional dependencies
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ erlang? ( dev-lang/erlang )
+ fuse? ( sys-fs/fuse:0 )
+ introspection? (
+ dev-libs/glib
+ >=dev-libs/gobject-introspection-1.82.0-r2
+ )
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ dev-perl/libintl-perl
+ virtual/perl-Getopt-Long
+ )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline )
+ ruby? ( ${RUBY_DEPS} )
+ selinux? ( sys-libs/libselinux )
+ vala? ( $(vala_depend) )
+"
+# Some OCaml is always required
+# Bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml:=[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+ dev-util/gperf
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ lua? ( ${LUA_DEPS} )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+ test? (
+ introspection? ( dev-libs/gjs )
+ ocaml? ( dev-ml/ounit2[ocamlopt] )
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.52.1-disable-obsolete-lvmetad-in-tests.patch"
+)
+
+src_prepare() {
+ cat <<EOF > "${S}/m4/guestfs-bash-completion.m4" || die
+dnl Unconditionally install Bash completion files
+AC_MSG_CHECKING([for bash-completions directory])
+AC_SUBST([BASH_COMPLETIONS_DIR],[$(get_bashcompdir)])
+AC_MSG_RESULT([\$BASH_COMPLETIONS_DIR])
+AM_CONDITIONAL([HAVE_BASH_COMPLETION],[/bin/true])
+EOF
+
+ default
+ eautoreconf
+}
+
+pkg_setup() {
+ CONFIG_CHECK="~KVM ~VIRTIO"
+ [[ -n "${CONFIG_CHECK}" ]] && check_extra_config
+
+ use lua && lua-single_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ # m4/guestfs-progs.m4: (f)lex and bison for virt-builder (required).
+ # Bug #915339
+ unset LEX YACC
+
+ if use ocaml || use static-libs; then
+ lto-guarantee-fat
+ fi
+
+ local myconf=(
+ --disable-appliance
+ --disable-daemon
+ --disable-haskell
+ --disable-golang
+ --disable-rust
+ $(use_enable ocaml)
+ --disable-php
+ --without-java
+ $(use_enable lua)
+ $(use_enable erlang)
+ $(use_enable vala)
+ $(usex doc '' PO4A=no)
+ --with-extra="-gentoo"
+ $(use_with readline)
+ $(use_enable ruby)
+ $(use_enable fuse)
+ $(use_enable introspection gobject)
+ $(use_enable introspection)
+ $(use_with libvirt)
+ --with-default-backend=$(usex libvirt libvirt direct)
+ $(use_enable perl)
+ $(use_enable python)
+ $(use_enable static-libs static)
+ )
+
+ # Avoid automagic SELinux dependency
+ local -x ac_cv_header_selinux_selinux_h
+
+ if use selinux && use !libvirt; then
+ ewarn "USE=selinux has no effect without USE=libvirt"
+ ac_cv_header_selinux_selinux_h="no"
+ else
+ ac_cv_header_selinux_selinux_h=$(usex selinux)
+ fi
+
+ use vala && vala_setup
+
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ # bash-completions may not exist
+ # Bug #794874
+ local -x SKIP_TEST_COMPLETE_IN_SCRIPT_SH=1
+ # Upstream doesn't ship the test data
+ local -x SKIP_TEST_JOURNAL_PL=1
+ local -x SKIP_TEST_MOUNTABLE_INSPECT_SH=1
+ # Sandbox interferes with tests
+ local -x SKIP_TEST_BIG_HEAP=1
+ local -x SKIP_TEST_SELINUX_XATTRS_FUSE=1
+ local -x SKIP_TEST_GUESTUNMOUNT_FD=1
+ # Doesn't work correctly when --without-daemon is specified
+ local -x SKIP_TEST_NOEXEC_STACK_PL=1
+ # Appliance requires sys-apps/file[zstd,-seccomp].
+ local -x SKIP_TEST_FILE_ARCHITECTURE_26=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+ # ocaml always installs a static lib even without USE=static-libs
+ strip-lto-bytecode "${ED}"
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+ use python && python_optimize
+}
diff --git a/app-emulation/libguestfs/libguestfs-1.56.2.ebuild b/app-emulation/libguestfs/libguestfs-1.56.2.ebuild
new file mode 100644
index 000000000000..481534017663
--- /dev/null
+++ b/app-emulation/libguestfs/libguestfs-1.56.2.ebuild
@@ -0,0 +1,207 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+USE_RUBY=( ruby3{2..3} )
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit autotools bash-completion-r1 dot-a linux-info lua-single perl-functions\
+ python-single-r1 ruby-single toolchain-funcs
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS="amd64"
+fi
+
+IUSE="doc erlang +fuse libvirt lua +ocaml +perl python readline ruby selinux static-libs test"
+
+REQUIRED_USE="
+ lua? ( ${LUA_REQUIRED_USE} )
+ python? ( ${PYTHON_REQUIRED_USE} )
+"
+
+RESTRICT="!test? ( test )"
+
+# Not part of the system profile, but dependenices of it with base USE flags
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ app-arch/zstd
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ net-libs/libtirpc:=
+ sys-libs/libcap-ng
+ sys-libs/ncurses:=
+ sys-libs/readline:=
+ virtual/acl
+ virtual/libcrypt
+"
+# Won't compile without it
+COMMON_DEPEND_EXPLICIT="
+ app-alternatives/cpio
+ app-emulation/qemu[qemu_softmmu_targets_x86_64,selinux?]
+ dev-libs/json-c:=
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+# "Automagic" dependencies
+COMMON_DEPEND_IMPLICIT="
+ dev-libs/libconfig:=
+ media-gfx/icoutils
+ media-libs/netpbm[png]
+"
+# Sum of the above + conditional dependencies
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ erlang? ( dev-lang/erlang )
+ fuse? ( sys-fs/fuse:0 )
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ dev-perl/libintl-perl
+ virtual/perl-Getopt-Long
+ )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline )
+ ruby? ( ${RUBY_DEPS} )
+ selinux? ( sys-libs/libselinux )
+"
+# Some OCaml is always required
+# Bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml:=[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+ dev-util/gperf
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ lua? ( ${LUA_DEPS} )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.52.1-disable-obsolete-lvmetad-in-tests.patch"
+ "${FILESDIR}/${PN}-1.56.2-respect-LDFLAGS-in-perl-module.patch"
+ "${FILESDIR}/${PN}-1.56.2-bash-Remove-vestigial-bash-completions.patch"
+ "${FILESDIR}/${PN}-1.56.2-guestfs-bash-completion.m4-more-control.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+pkg_setup() {
+ CONFIG_CHECK="~KVM ~VIRTIO"
+ [[ -n "${CONFIG_CHECK}" ]] && check_extra_config
+
+ use lua && lua-single_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ if use ocaml || use static-libs; then
+ lto-guarantee-fat
+ fi
+
+ local myconf=(
+ --disable-appliance
+ --disable-daemon
+ --disable-haskell
+ --disable-golang
+ --disable-rust
+ $(use_enable ocaml)
+ --disable-php
+ --without-java
+ $(use_enable lua)
+ $(use_enable erlang)
+ --disable-vala
+ $(usex doc '' PO4A=no)
+ --with-extra="-gentoo"
+ $(use_with readline)
+ $(use_enable ruby)
+ $(use_enable fuse)
+ --disable-gobject
+ --disable-introspection
+ $(use_with libvirt)
+ --with-default-backend=$(usex libvirt libvirt direct)
+ --with-bash-completion
+ --with-bash-completion-dir=$(get_bashcompdir)
+ $(use_enable perl)
+ $(use_enable python)
+ $(use_enable static-libs static)
+ )
+
+ # Avoid automagic SELinux dependency
+ local -x ac_cv_header_selinux_selinux_h
+
+ if use selinux && use !libvirt; then
+ ewarn "USE=selinux has no effect without USE=libvirt"
+ ac_cv_header_selinux_selinux_h="no"
+ else
+ ac_cv_header_selinux_selinux_h=$(usex selinux)
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ # app-shells/bash-completion may not be installed
+ # Bug #794874
+ local -x SKIP_TEST_COMPLETE_IN_SCRIPT_SH=1
+ # Upstream doesn't ship the test data
+ local -x SKIP_TEST_JOURNAL_PL=1
+ local -x SKIP_TEST_MOUNTABLE_INSPECT_SH=1
+ # Sandbox interferes with tests
+ local -x SKIP_TEST_BIG_HEAP=1
+ local -x SKIP_TEST_SELINUX_XATTRS_FUSE=1
+ local -x SKIP_TEST_GUESTUNMOUNT_FD=1
+ # Doesn't work correctly when --without-daemon is specified
+ local -x SKIP_TEST_NOEXEC_STACK_PL=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+ # ocaml always installs a static lib even without USE=static-libs
+ strip-lto-bytecode "${ED}"
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+ use python && python_optimize
+}
diff --git a/app-emulation/libguestfs/libguestfs-1.58.1.ebuild b/app-emulation/libguestfs/libguestfs-1.58.1.ebuild
new file mode 100644
index 000000000000..66c5c1f770b0
--- /dev/null
+++ b/app-emulation/libguestfs/libguestfs-1.58.1.ebuild
@@ -0,0 +1,207 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+USE_RUBY=( ruby3{2..3} )
+LUA_COMPAT=( lua5-{1,3,4} luajit )
+
+inherit autotools bash-completion-r1 dot-a linux-info lua-single perl-functions\
+ python-single-r1 ruby-single toolchain-funcs
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tools for accessing, inspecting, and modifying virtual machine (VM) disk images"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2 LGPL-2"
+SLOT="0/${MY_PV_1}"
+if [[ ${SD} == "stable" ]] ; then
+ KEYWORDS="amd64"
+fi
+
+IUSE="doc erlang +fuse libvirt lua +ocaml +perl python readline ruby selinux static-libs test"
+
+REQUIRED_USE="
+ lua? ( ${LUA_REQUIRED_USE} )
+ python? ( ${PYTHON_REQUIRED_USE} )
+ test? ( python )
+"
+
+RESTRICT="!test? ( test )"
+
+# Not part of the system profile, but dependenices of it with base USE flags
+COMMON_DEPEND_DEFAULT="
+ app-arch/xz-utils
+ app-arch/zstd
+ dev-libs/libpcre2:=
+ dev-libs/libxml2:=
+ net-libs/libtirpc:=
+ sys-libs/libcap-ng
+ sys-libs/ncurses:=
+ sys-libs/readline:=
+ virtual/acl
+ virtual/libcrypt
+"
+# Won't compile without it
+COMMON_DEPEND_EXPLICIT="
+ app-alternatives/cpio
+ app-emulation/qemu[qemu_softmmu_targets_x86_64,selinux?]
+ dev-libs/json-c:=
+ || (
+ dev-libs/libisoburn
+ app-cdr/cdrtools
+ )
+"
+# "Automagic" dependencies
+COMMON_DEPEND_IMPLICIT="
+ dev-libs/libconfig:=
+ media-gfx/icoutils
+ media-libs/netpbm[png]
+"
+# Sum of the above + conditional dependencies
+COMMON_DEPEND="
+ ${COMMON_DEPEND_DEFAULT}
+ ${COMMON_DEPEND_EXPLICIT}
+ ${COMMON_DEPEND_IMPLICIT}
+ erlang? ( dev-lang/erlang )
+ fuse? ( sys-fs/fuse:0 )
+ libvirt? ( app-emulation/libvirt[qemu] )
+ perl? (
+ dev-perl/libintl-perl
+ virtual/perl-Getopt-Long
+ )
+ python? ( ${PYTHON_DEPS} )
+ readline? ( sys-libs/readline )
+ ruby? ( ${RUBY_DEPS} )
+ selinux? ( sys-libs/libselinux )
+"
+# Some OCaml is always required
+# Bug #729674
+DEPEND="
+ ${COMMON_DEPEND}
+ dev-lang/ocaml:=[ocamlopt]
+ dev-ml/findlib[ocamlopt]
+ dev-util/gperf
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ app-emulation/libguestfs-appliance
+"
+BDEPEND="
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( app-text/po4a )
+ lua? ( ${LUA_DEPS} )
+ perl? (
+ dev-perl/Module-Build
+ virtual/perl-ExtUtils-CBuilder
+ virtual/perl-Pod-Simple
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.52.1-disable-obsolete-lvmetad-in-tests.patch"
+ "${FILESDIR}/${PN}-1.56.2-bash-Remove-vestigial-bash-completions.patch"
+ "${FILESDIR}/${PN}-1.56.2-guestfs-bash-completion.m4-more-control.patch"
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+pkg_setup() {
+ CONFIG_CHECK="~KVM ~VIRTIO"
+ [[ -n "${CONFIG_CHECK}" ]] && check_extra_config
+
+ use lua && lua-single_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_configure() {
+ # Bug #794877
+ tc-export AR
+
+ if use ocaml || use static-libs; then
+ lto-guarantee-fat
+ fi
+
+ local myconf=(
+ --disable-appliance
+ --disable-daemon
+ --disable-haskell
+ --disable-golang
+ --disable-rust
+ $(use_enable ocaml)
+ --disable-php
+ --without-java
+ $(use_enable lua)
+ $(use_enable erlang)
+ --disable-vala
+ $(usex doc '' PO4A=no)
+ --with-extra="-gentoo"
+ $(use_with readline)
+ $(use_enable ruby)
+ $(use_enable fuse)
+ --disable-gobject
+ --disable-introspection
+ $(use_with libvirt)
+ --with-default-backend=$(usex libvirt libvirt direct)
+ --with-bash-completion
+ --with-bash-completion-dir=$(get_bashcompdir)
+ $(use_enable perl)
+ $(use_enable python)
+ $(use_enable static-libs static)
+ )
+
+ # Avoid automagic SELinux dependency
+ local -x ac_cv_header_selinux_selinux_h
+
+ if use selinux && use !libvirt; then
+ ewarn "USE=selinux has no effect without USE=libvirt"
+ ac_cv_header_selinux_selinux_h="no"
+ else
+ ac_cv_header_selinux_selinux_h=$(usex selinux)
+ fi
+
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ # app-shells/bash-completion may not be installed
+ # Bug #794874
+ local -x SKIP_TEST_COMPLETE_IN_SCRIPT_SH=1
+ # Upstream doesn't ship the test data
+ local -x SKIP_TEST_JOURNAL_PY=1
+ local -x SKIP_TEST_MOUNTABLE_INSPECT_SH=1
+ # Sandbox interferes with tests
+ local -x SKIP_TEST_BIG_HEAP=1
+ local -x SKIP_TEST_SELINUX_XATTRS_FUSE=1
+ local -x SKIP_TEST_GUESTUNMOUNT_FD=1
+ # Doesn't work correctly when --without-daemon is specified
+ local -x SKIP_TEST_NOEXEC_STACK_PL=1
+ # Socket pathname too long for libvirt backend
+ local -x LIBGUESTFS_BACKEND=direct
+
+ # Increase vebosity
+ local -x LIBGUESTFS_DEBUG=1
+ local -x LIBGUESTFS_TRACE=1
+
+ default
+}
+
+src_install() {
+ emake INSTALLDIRS=vendor DESTDIR="${D}" install "LINGUAS=""${LINGUAS}"""
+ # ocaml always installs a static lib even without USE=static-libs
+ strip-lto-bytecode "${ED}"
+
+ find "${ED}" -name '*.la' -delete || die
+
+ use perl && perl_delete_localpod
+ use python && python_optimize
+}
diff --git a/app-emulation/libguestfs/metadata.xml b/app-emulation/libguestfs/metadata.xml
new file mode 100644
index 000000000000..82f812ed15b7
--- /dev/null
+++ b/app-emulation/libguestfs/metadata.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="erlang">Build Erlang bindings</flag>
+ <flag name="fuse">Enable image mount support via <pkg>sys-fs/fuse</pkg>
+ </flag>
+ <flag name="libvirt">Use <pkg>app-emulation/libvirt</pkg> to manipulate VMs</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:libguestfs:libguestfs</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libspectrum/Manifest b/app-emulation/libspectrum/Manifest
new file mode 100644
index 000000000000..71e8872db3a8
--- /dev/null
+++ b/app-emulation/libspectrum/Manifest
@@ -0,0 +1,2 @@
+DIST libspectrum-1.5.0.tar.gz 602354 BLAKE2B fc62437ececfe2c86b475efa512bf7aa7c5af182e16a00f75f77f78656fca01d46a71ac90b38008ff46e5fd0710b1c671b283d65544b5556d98e8c5b66525c35 SHA512 55f4cf623bc6c469a0fd80751ada694259d834c19d98400ba244aabf2ac21fed7cdd6de069d9ed7326e099bd3bd62c42cfb8a669b64ae002f90a52563fa2dcd1
+DIST libspectrum-1.6.0.tar.gz 630698 BLAKE2B 6b210a1a71b4b3a65e3c4575061eeff1d891d9c8b2e53a5ef4d41e40b514dc6631671589dea232afc288b1476ecda7786b36fcc8486030d0fdfc93f5322833bd SHA512 f3bd1e35ba26c0230ba326a5765927ef237e1eee2ac77e656c18d1a285745e7f9720825a849ef763cfb27448e8cb1e8e95769ab5a194bf3c9d49a0e13e253d31
diff --git a/app-emulation/libspectrum/files/remove-local-prefix.patch b/app-emulation/libspectrum/files/remove-local-prefix.patch
new file mode 100644
index 000000000000..23e2b5dd041c
--- /dev/null
+++ b/app-emulation/libspectrum/files/remove-local-prefix.patch
@@ -0,0 +1,18 @@
+diff -Naur libspectrum-1.4.4/configure.ac libspectrum-1.4.4-patched/configure.ac
+--- libspectrum-1.4.4/configure.ac 2018-07-01 02:07:44.000000000 +0200
++++ libspectrum-1.4.4-patched/configure.ac 2020-07-28 16:38:22.636459194 +0200
+@@ -113,14 +113,6 @@
+ dnl Check for functions
+ AC_CHECK_FUNCS(_snprintf _stricmp _strnicmp snprintf strcasecmp strncasecmp)
+
+-dnl Allow the user to say that various libraries are in one place
+-AC_ARG_WITH(local-prefix,
+-[ --with-local-prefix=PFX local libraries installed in PFX (optional)],
+-CPPFLAGS="$CPPFLAGS -I$withval/include"; LDFLAGS="$LDFLAGS -L$withval/lib",
+-if test "$prefix" != "NONE"; then
+- CPPFLAGS="$CPPFLAGS -I$prefix/include"; LDFLAGS="$LDFLAGS -L$prefix/lib"
+-fi)
+-
+ dnl Check whether to use zlib (the UNIX version is called z, Win32 zdll)
+ AC_MSG_CHECKING(whether to use zlib)
+ AC_ARG_WITH(zlib,
diff --git a/app-emulation/libspectrum/libspectrum-1.5.0-r1.ebuild b/app-emulation/libspectrum/libspectrum-1.5.0-r1.ebuild
new file mode 100644
index 000000000000..8f5f1e655d41
--- /dev/null
+++ b/app-emulation/libspectrum/libspectrum-1.5.0-r1.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Spectrum emulation library"
+HOMEPAGE="https://fuse-emulator.sourceforge.net/libspectrum.php"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0/9"
+KEYWORDS="~amd64 ~ppc ~riscv ~x86"
+IUSE="audiofile bzip2 gcrypt zlib"
+
+RDEPEND="dev-libs/glib:2
+ audiofile? ( >=media-libs/audiofile-0.3.6 )
+ bzip2? ( >=app-arch/bzip2-1.0 )
+ gcrypt? ( dev-libs/libgcrypt:0 )
+ zlib? ( virtual/zlib:= )"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-lang/perl
+ virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ $(use_with audiofile libaudiofile)
+ $(use_with bzip2)
+ $(use_with gcrypt libgcrypt)
+ $(use_with zlib)
+ )
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ # check only builds test executable but doesn't run it
+ emake check
+ ./test/test || die
+}
+
+src_install() {
+ default
+ dodoc doc/*.txt *.txt
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/app-emulation/libspectrum/libspectrum-1.6.0.ebuild b/app-emulation/libspectrum/libspectrum-1.6.0.ebuild
new file mode 100644
index 000000000000..23345b7dd66c
--- /dev/null
+++ b/app-emulation/libspectrum/libspectrum-1.6.0.ebuild
@@ -0,0 +1,55 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="Spectrum emulation library"
+HOMEPAGE="https://fuse-emulator.sourceforge.net/libspectrum.php"
+SRC_URI="https://downloads.sourceforge.net/fuse-emulator/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0/18"
+KEYWORDS="~amd64 ~ppc ~riscv ~x86"
+IUSE="audiofile bzip2 gcrypt zlib"
+
+RDEPEND="dev-libs/glib:2
+ audiofile? ( >=media-libs/audiofile-0.3.6 )
+ bzip2? ( >=app-arch/bzip2-1.0 )
+ gcrypt? ( dev-libs/libgcrypt:0 )
+ zlib? ( virtual/zlib:= )"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-lang/perl
+ virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/remove-local-prefix.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ $(use_with audiofile libaudiofile)
+ $(use_with bzip2)
+ $(use_with gcrypt libgcrypt)
+ $(use_with zlib)
+ )
+ econf "${myconf[@]}"
+}
+
+src_test() {
+ # check only builds test executable but doesn't run it
+ emake check
+ ./test/test || die
+}
+
+src_install() {
+ default
+ dodoc doc/*.txt *.txt
+ find "${ED}" -type f -name "*.la" -delete || die
+}
diff --git a/app-emulation/libspectrum/metadata.xml b/app-emulation/libspectrum/metadata.xml
new file mode 100644
index 000000000000..6a08df72a6e7
--- /dev/null
+++ b/app-emulation/libspectrum/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <longdescription>
+libspectrum is a library designed to make the input and output of some ZX
+Spectrum emulator files slightly easier. It is intended to be usable on Unix
+variants, Win32 and Mac OS X. Currently, it is mainly (only?) used by Fuse,
+but other Spectrum emulator and utility authors are encouraged to use it.
+ </longdescription>
+ <use>
+ <flag name="gcrypt">Use <pkg>dev-libs/libgcrypt</pkg> for low-level crypto of some
+ features, including logfiles.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libvirt-glib/Manifest b/app-emulation/libvirt-glib/Manifest
new file mode 100644
index 000000000000..7d53986ff7c6
--- /dev/null
+++ b/app-emulation/libvirt-glib/Manifest
@@ -0,0 +1,2 @@
+DIST libvirt-glib-4.0.0.tar.xz 161836 BLAKE2B e196d1f02f6f202b1883500241bbfda963b34ee12bd945b3fa897f84f55a049f98e0429132ccfad7168e5ba2b41245e9e7e3817a7f057e0dc40b674ca6c9b661 SHA512 e1b99e80aa671fa5a4d7f7f7a4ea70ce7c5fdaf97574407f79aa11a75dd177e1e3f92027728a83ded62e305852bbda76eb90326aaa1f5f19b77272b008351810
+DIST libvirt-glib-5.0.0.tar.xz 169416 BLAKE2B e80ac0cd8d39432d554e566f4e1e045ada14e66917735c1c8a6306a65272216d095f21170e1b5294e09f41aaf2a3259ad395b134087a1bc13b176afd675dcc26 SHA512 bb09474c0d6d4bc00844e7a1ede882f0834d0810804b70b8f8607f2e764f72cc9da14883794e58dd53640433ffaecc13dd3c1c147b82e86fa2fdca6e5903933c
diff --git a/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-Make-xmlError-structs-constant.patch b/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-Make-xmlError-structs-constant.patch
new file mode 100644
index 000000000000..654436a65d99
--- /dev/null
+++ b/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-Make-xmlError-structs-constant.patch
@@ -0,0 +1,64 @@
+From 56acbe8a0765a02418f80fb3599b3cf7160ef446 Mon Sep 17 00:00:00 2001
+Message-ID: <56acbe8a0765a02418f80fb3599b3cf7160ef446.1701156704.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Sat, 25 Nov 2023 07:13:33 +0100
+Subject: [glib PATCH 1/2] Make xmlError structs constant
+
+In libxml2 commits v2.12.0~14 and v2.12.0~77 the API changed so
+that:
+
+1) xmlGetLastError() returns pointer to a constant xmlError
+ struct, and
+
+2) xmlSetStructuredErrorFunc() changed the signature of callback
+ (gvir_xml_structured_error_nop()), it too is passed pointer to
+ a constant xmlError struct.
+
+But of course, older libxml2 expects different callback
+signature. Therefore, we need to typecast it anyway.
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ libvirt-gconfig/libvirt-gconfig-helpers.c | 2 +-
+ libvirt-gconfig/libvirt-gconfig-object.c | 5 +++--
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/libvirt-gconfig/libvirt-gconfig-helpers.c b/libvirt-gconfig/libvirt-gconfig-helpers.c
+index e8f9664..37075e3 100644
+--- a/libvirt-gconfig/libvirt-gconfig-helpers.c
++++ b/libvirt-gconfig/libvirt-gconfig-helpers.c
+@@ -41,7 +41,7 @@ static GError *gvir_config_error_new_literal(GQuark domain,
+ gint code,
+ const gchar *message)
+ {
+- xmlErrorPtr xerr = xmlGetLastError();
++ const xmlError *xerr = xmlGetLastError();
+
+ if (!xerr)
+ return NULL;
+diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
+index eb8763e..1fcc667 100644
+--- a/libvirt-gconfig/libvirt-gconfig-object.c
++++ b/libvirt-gconfig/libvirt-gconfig-object.c
+@@ -59,7 +59,7 @@ static void gvir_xml_generic_error_nop(void *userData G_GNUC_UNUSED,
+ }
+
+ static void gvir_xml_structured_error_nop(void *userData G_GNUC_UNUSED,
+- xmlErrorPtr error G_GNUC_UNUSED)
++ const xmlError *error G_GNUC_UNUSED)
+ {
+ }
+
+@@ -197,7 +197,8 @@ void gvir_config_object_validate(GVirConfigObject *config,
+ priv = config->priv;
+
+ xmlSetGenericErrorFunc(NULL, gvir_xml_generic_error_nop);
+- xmlSetStructuredErrorFunc(NULL, gvir_xml_structured_error_nop);
++ /* Drop this typecast when >=libxml2-2.12.0 is required */
++ xmlSetStructuredErrorFunc(NULL, (xmlStructuredErrorFunc) gvir_xml_structured_error_nop);
+
+ if (!priv->node) {
+ gvir_config_set_error_literal(err,
+--
+2.41.0
+
diff --git a/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-libvirt-gconfig-Add-more-libxml-includes.patch b/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-libvirt-gconfig-Add-more-libxml-includes.patch
new file mode 100644
index 000000000000..7a13eb211e20
--- /dev/null
+++ b/app-emulation/libvirt-glib/files/libvirt-glib-4.0.0-libvirt-gconfig-Add-more-libxml-includes.patch
@@ -0,0 +1,50 @@
+From bcc82de1d74057f6d124c2eaff0ac97cbbf52657 Mon Sep 17 00:00:00 2001
+Message-ID: <bcc82de1d74057f6d124c2eaff0ac97cbbf52657.1701156704.git.mprivozn@redhat.com>
+In-Reply-To: <56acbe8a0765a02418f80fb3599b3cf7160ef446.1701156704.git.mprivozn@redhat.com>
+References: <56acbe8a0765a02418f80fb3599b3cf7160ef446.1701156704.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Sat, 25 Nov 2023 07:15:46 +0100
+Subject: [glib PATCH 2/2] libvirt-gconfig: Add more libxml/ includes
+
+In its 2.12.0 release, libxml reworked their header files (some
+might even call it cleaning up, I call it API incompatible
+change) and now we don't get all declarations we need by just
+including one file. Add missing includes.
+
+Resolves: https://gitlab.com/libvirt/libvirt-glib/-/issues/6
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ libvirt-gconfig/libvirt-gconfig-helpers.c | 1 +
+ libvirt-gconfig/libvirt-gconfig-object.c | 3 +++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/libvirt-gconfig/libvirt-gconfig-helpers.c b/libvirt-gconfig/libvirt-gconfig-helpers.c
+index 37075e3..4dbb177 100644
+--- a/libvirt-gconfig/libvirt-gconfig-helpers.c
++++ b/libvirt-gconfig/libvirt-gconfig-helpers.c
+@@ -25,6 +25,7 @@
+
+ #include <string.h>
+
++#include <libxml/parser.h>
+ #include <libxml/xmlerror.h>
+ #include <glib/gi18n-lib.h>
+
+diff --git a/libvirt-gconfig/libvirt-gconfig-object.c b/libvirt-gconfig/libvirt-gconfig-object.c
+index 1fcc667..4dd189d 100644
+--- a/libvirt-gconfig/libvirt-gconfig-object.c
++++ b/libvirt-gconfig/libvirt-gconfig-object.c
+@@ -25,7 +25,10 @@
+
+ #include <string.h>
+
++#include <libxml/tree.h>
++#include <libxml/entities.h>
+ #include <libxml/relaxng.h>
++
+ #include <glib/gi18n-lib.h>
+
+ #include "libvirt-gconfig/libvirt-gconfig.h"
+--
+2.41.0
+
diff --git a/app-emulation/libvirt-glib/libvirt-glib-4.0.0-r1.ebuild b/app-emulation/libvirt-glib/libvirt-glib-4.0.0-r1.ebuild
new file mode 100644
index 000000000000..a05259f92cba
--- /dev/null
+++ b/app-emulation/libvirt-glib/libvirt-glib-4.0.0-r1.ebuild
@@ -0,0 +1,53 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit meson vala
+
+DESCRIPTION="GLib and GObject mappings for libvirt"
+HOMEPAGE="https://libvirt.org/ https://gitlab.com/libvirt/libvirt-glib/"
+SRC_URI="https://download.libvirt.org/glib/${P}.tar.xz"
+LICENSE="LGPL-2.1+"
+SLOT="0"
+KEYWORDS="amd64 arm64 ppc64 x86"
+IUSE="gtk-doc +introspection test +vala"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="vala? ( introspection )"
+
+RDEPEND="
+ >=dev-libs/libxml2-2.9.1:=
+ >=app-emulation/libvirt-1.2.8:=
+ >=dev-libs/glib-2.48.0:2
+ introspection? ( >=dev-libs/gobject-introspection-1.82.0-r2:= )
+"
+DEPEND="${RDEPEND}"
+
+BDEPEND="
+ dev-util/glib-utils
+ virtual/pkgconfig
+ gtk-doc? ( dev-util/gtk-doc
+ app-text/docbook-xml-dtd:4.3 )
+ vala? ( $(vala_depend) )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-4.0.0-Make-xmlError-structs-constant.patch
+ "${FILESDIR}"/${PN}-4.0.0-libvirt-gconfig-Add-more-libxml-includes.patch
+)
+
+src_prepare() {
+ default
+ use vala && vala_src_prepare
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_feature gtk-doc docs)
+ $(meson_feature introspection)
+ $(meson_feature test tests)
+ $(meson_feature vala vapi)
+ )
+
+ meson_src_configure
+}
diff --git a/app-emulation/libvirt-glib/libvirt-glib-5.0.0-r1.ebuild b/app-emulation/libvirt-glib/libvirt-glib-5.0.0-r1.ebuild
new file mode 100644
index 000000000000..760302a5d841
--- /dev/null
+++ b/app-emulation/libvirt-glib/libvirt-glib-5.0.0-r1.ebuild
@@ -0,0 +1,48 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit meson vala
+
+DESCRIPTION="GLib and GObject mappings for libvirt"
+HOMEPAGE="https://libvirt.org/ https://gitlab.com/libvirt/libvirt-glib/"
+SRC_URI="https://download.libvirt.org/glib/${P}.tar.xz"
+LICENSE="LGPL-2.1+"
+SLOT="0"
+KEYWORDS="amd64 arm64 ppc64 x86"
+IUSE="gtk-doc +introspection test +vala"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="vala? ( introspection )"
+
+RDEPEND="
+ >=dev-libs/libxml2-2.9.1:=
+ >=app-emulation/libvirt-2.3.0:=
+ >=dev-libs/glib-2.48.0:2
+ introspection? ( >=dev-libs/gobject-introspection-1.82.0-r2:= )
+"
+DEPEND="${RDEPEND}"
+
+BDEPEND="
+ dev-util/glib-utils
+ virtual/pkgconfig
+ gtk-doc? ( dev-util/gtk-doc
+ app-text/docbook-xml-dtd:4.3 )
+ vala? ( $(vala_depend) )
+"
+
+src_prepare() {
+ default
+ use vala && vala_src_prepare
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_feature gtk-doc docs)
+ $(meson_feature introspection)
+ $(meson_feature test tests)
+ $(meson_feature vala vapi)
+ )
+
+ meson_src_configure
+}
diff --git a/app-emulation/libvirt-glib/metadata.xml b/app-emulation/libvirt-glib/metadata.xml
new file mode 100644
index 000000000000..f6b6cde5f785
--- /dev/null
+++ b/app-emulation/libvirt-glib/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>gnome@gentoo.org</email>
+ <name>Gentoo GNOME Desktop</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/libvirt/Manifest b/app-emulation/libvirt/Manifest
new file mode 100644
index 000000000000..c863ca42db33
--- /dev/null
+++ b/app-emulation/libvirt/Manifest
@@ -0,0 +1,8 @@
+DIST libvirt-11.10.0.tar.xz 10241776 BLAKE2B 1950b6d5e98e59f605ff5f5af84e71910fb9093b8c8416832d13223f03ef1dc2079ce061b81af2b3fe285bc8e07ceb14d3cdd91b0c76ae9c8e4cc05ef8dee465 SHA512 c494aa45c3989a36830d3c8b8d24ef04d5e747ea2187abb61bf72f00ab827847050da361fcf1b173bd3fa29183172798dfb2770ed04e33c2470a28bc4a976cd9
+DIST libvirt-11.10.0.tar.xz.asc 833 BLAKE2B c1c6ab903dd5273569eaa7ab30e4468fda557aa28b6f1a78e4a5190118a68af8e917b96f7734a4be3c9227b366313fd0a19d5fa9a40163c86c460e031f4db5f1 SHA512 448009097e2f86dcee9a8ada54ccad62693d721b0e0acbaf6eb18309c91899610cff38c7d089afe21a5f2d68803b7678851d87ab128db972db07369ac928c367
+DIST libvirt-12.0.0.tar.xz 10272864 BLAKE2B 63424ba5b341e5091ac7956797c9f1d5b7460457ea40e39c619a09da40f215f2a84e1cd93fb02d8153eaf031618129a58a28284cc9ba759e82224676be55b8f7 SHA512 5613e4e59865f688fe4cca2734c6de1cf68d0540c6e3013c9c21e583accd4f4fc21ec98e9c794036c5d6d0c8dd05ad1d22dab61f8c7d2934c8cb507b5bee76ad
+DIST libvirt-12.0.0.tar.xz.asc 833 BLAKE2B bad32ae4028d76a45c9a1101008d03e9fa5719453f08db40faf498e8f1d20b8f03c3e3b4d087a537a0adf1719ce2b394e44edf81f7cde1a82ac7a7f343be872e SHA512 e3f6e72a064c8711a305b22786ea759c1025e9ef60678b64736b2c44e492f9892fba7d3fff1d46fdcb0924bd5f71634336c473e668f3f3ea1acc5d003f22f43d
+DIST libvirt-12.1.0.tar.xz 10450056 BLAKE2B 3093d73049bf1cf6ba2f49eeecc9251f4c0c3338c4124970b821c47bdacb7388fdb0b0d01ef40bde28289a6a506e54d93c6ebdc042df9ef89a2f916bdf43c0ca SHA512 5969f50cb3709a8511add41da9a6d9c19d41c6394ec6f7048668deb6b31303fc5740252f3df49124be9149db50da6109d3b9ccc76a78ddaea3bb311358004b2d
+DIST libvirt-12.1.0.tar.xz.asc 833 BLAKE2B 321e3a75cb7b79619ab88add8a73c7482bb0d4fd17b262bff75bcedacc60c6a9103b9182f075055ea71b035bd9b463d4efe241274d26f8fc0237846bb3ab09f7 SHA512 cc2eb2cdada953a2e0b181478ac737828702a1c25e2b89dc99a5b4b153c92b63a04bdb67d5880866ff00caf837fe1f64d564288ea2ebbb4c54aa4a26f00fc872
+DIST libvirt-12.2.0.tar.xz 10481320 BLAKE2B 51cd252921f5b50ec7372a4c9a07c44afd8f120fc77e67f36148b62b765a90baa45f2ef179ac16b82903a3e39bcc3fc1f4d2ba8e1d87ba60e9d20eaab3eca8ae SHA512 ce3f877da86eeceebcc7a4f857a1be97fe18883ff0e2ae1bac774dd034105762be521b70905a048c5335163ba2a829a4385521df44541190149be0c5b5b645e0
+DIST libvirt-12.2.0.tar.xz.asc 833 BLAKE2B de1bfb33a6df9af96a0219ae232a8659d44b0904fc06e74fcc548b45f2b84b0064ea9ba4e55a0d1d046fe67f385e561b44be39cb3786b21521cd115b09eb36fd SHA512 465a03fedf0e65add382aff4242f6c1c887d5d8863911b009fbd9bc1a91ccbfc81ef4ba88d76fa87e30d68d3b2f7bb5850bb6377e021e6f3317423dea9abc720
diff --git a/app-emulation/libvirt/files/README.gentoo-r3 b/app-emulation/libvirt/files/README.gentoo-r3
new file mode 100644
index 000000000000..0eab21d3a006
--- /dev/null
+++ b/app-emulation/libvirt/files/README.gentoo-r3
@@ -0,0 +1,58 @@
+Important: The openrc libvirtd init script is now broken up into two
+separate services: libvirtd, that solely handles the daemon, and
+libvirt-guests, that takes care of clients during shutdown/restart of the
+host. In order to reenable client handling, edit /etc/conf.d/libvirt-guests
+and enable the service and start it:
+
+ $ rc-update add libvirt-guests
+ $ rc-service libvirt-guests start
+
+
+For the basic networking support (bridged and routed networks) you don't
+need any extra software. For more complex network modes including but not
+limited to NATed network, you can enable the 'virt-network' USE flag. It
+will pull in required runtime dependencies
+
+
+If you are using dnsmasq on your system, you will have to configure
+/etc/dnsmasq.conf to enable the following settings:
+
+ bind-interfaces
+ interface or except-interface
+
+Otherwise you might have issues with your existing DNS server.
+
+
+For openrc users:
+
+ Please use /etc/conf.d/libvirtd to control the '--listen' parameter for
+ libvirtd.
+
+ Use /etc/init.d/libvirt-guests to manage clients on restart/shutdown of
+ the host. The default configuration will suspend and resume running kvm
+ guests with 'managedsave'. This behavior can be changed under
+ /etc/conf.d/libvirt-guests
+
+
+For systemd users:
+
+ The '--listen' parameter is unavailable when libvirtd is run as a
+ systemd unit.
+
+ The configuration for the 'libvirt-guests.service' is found under
+ /etc/libvirt/libvirt-guests.conf"
+
+
+If you have built libvirt with policykit support, a new group "libvirt" has
+been created. Simply add a user to the libvirt group in order to grant
+administrative access to libvirtd. Alternatively, drop a custom policykit
+rule into /etc/polkit-1/rules.d.
+
+If you have built libvirt without policykit support (USE=-policykit), you
+must change the unix sock group and/or perms in /etc/libvirt/libvirtd.conf
+in order to allow normal users to connect to libvirtd.
+
+
+If libvirt is built with USE=caps, libvirt will now start qemu/kvm VMs
+with non-root privileges. Ensure any resources your VMs use are accessible
+by qemu:qemu.
diff --git a/app-emulation/libvirt/files/libvirt-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch b/app-emulation/libvirt/files/libvirt-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
new file mode 100644
index 000000000000..9797200d0a48
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
@@ -0,0 +1,29 @@
+From 879f22eea1ffac0053d7c3cc56cdcb03dd859bc7 Mon Sep 17 00:00:00 2001
+Message-ID: <879f22eea1ffac0053d7c3cc56cdcb03dd859bc7.1738928238.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Fri, 31 Jan 2020 09:42:14 +0100
+Subject: [PATCH] Fix paths in libvirt-guests.sh.in
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ tools/libvirt-guests.sh.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tools/libvirt-guests.sh.in b/tools/libvirt-guests.sh.in
+index f2db1282ad..f2c9d9b465 100644
+--- a/tools/libvirt-guests.sh.in
++++ b/tools/libvirt-guests.sh.in
+@@ -40,8 +40,8 @@ BYPASS_CACHE=0
+ SYNC_TIME=0
+ PERSISTENT_ONLY="default"
+
+-test -f "$initconfdir"/libvirt-guests &&
+- . "$initconfdir"/libvirt-guests
++test -f "$sysconfdir"/libvirt/libvirt-guests.conf &&
++ . "$sysconfdir"/libvirt/libvirt-guests.conf
+
+ LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
+ VAR_SUBSYS_LIBVIRT_GUESTS="$localstatedir"/lock/libvirt-guests
+--
+2.45.3
+
diff --git a/app-emulation/libvirt/files/libvirt-11.3.0-do-not-use-sysconfig.patch b/app-emulation/libvirt/files/libvirt-11.3.0-do-not-use-sysconfig.patch
new file mode 100644
index 000000000000..16e61c61b7c9
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-11.3.0-do-not-use-sysconfig.patch
@@ -0,0 +1,81 @@
+From ae24d3d483ef01f6cccffbd114571ffecc4fe80f Mon Sep 17 00:00:00 2001
+Message-ID: <ae24d3d483ef01f6cccffbd114571ffecc4fe80f.1743863726.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 2 Mar 2022 10:01:04 +0100
+Subject: [PATCH] libvirt-11.3.0-do-not-use-sysconfig.patch
+
+From: Michal Privoznik <mprivozn@redhat.com>
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/locking/virtlockd.service.in | 1 -
+ src/logging/virtlogd.service.in | 1 -
+ src/remote/libvirtd.service.in | 1 -
+ src/virtd.service.in | 1 -
+ tools/libvirt-guests.service.in | 2 +-
+ 5 files changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in
+index cd6c77c6af..1746f0e8c9 100644
+--- a/src/locking/virtlockd.service.in
++++ b/src/locking/virtlockd.service.in
+@@ -10,7 +10,6 @@ After=virtlockd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOCKD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlockd
+ ExecStart=@sbindir@/virtlockd $VIRTLOCKD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in
+index bcc356f9d1..94d3be9dee 100644
+--- a/src/logging/virtlogd.service.in
++++ b/src/logging/virtlogd.service.in
+@@ -10,7 +10,6 @@ After=virtlogd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOGD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlogd
+ ExecStart=@sbindir@/virtlogd $VIRTLOGD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in
+index b0a062e885..39a7a91a75 100644
+--- a/src/remote/libvirtd.service.in
++++ b/src/remote/libvirtd.service.in
+@@ -28,7 +28,6 @@ Conflicts=xendomains.service
+ [Service]
+ Type=notify-reload
+ Environment=LIBVIRTD_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/libvirtd
+ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
+ ExecReload=/bin/kill -HUP $MAINPID
+ KillMode=process
+diff --git a/src/virtd.service.in b/src/virtd.service.in
+index 7ffb77e339..92a48da90c 100644
+--- a/src/virtd.service.in
++++ b/src/virtd.service.in
+@@ -17,7 +17,6 @@ After=apparmor.service
+ [Service]
+ Type=notify-reload
+ Environment=@SERVICE@_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/@service@
+ ExecStart=@sbindir@/@service@ $@SERVICE@_ARGS
+ ExecReload=/bin/kill -HUP $MAINPID
+ Restart=on-failure
+diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
+index b044444298..24cfcf468c 100644
+--- a/tools/libvirt-guests.service.in
++++ b/tools/libvirt-guests.service.in
+@@ -14,7 +14,7 @@ After=virtxend.socket
+ After=virt-guest-shutdown.target
+
+ [Service]
+-EnvironmentFile=-@initconfdir@/libvirt-guests
++EnvironmentFile=-/etc/libvirt/libvirt-guests.conf
+ # Hack just call traditional service until we factor
+ # out the code
+ ExecStart=@libexecdir@/libvirt-guests.sh start
+--
+2.49.0
+
diff --git a/app-emulation/libvirt/files/libvirt-11.3.0-fix-paths-for-apparmor.patch b/app-emulation/libvirt/files/libvirt-11.3.0-fix-paths-for-apparmor.patch
new file mode 100644
index 000000000000..36dde03524ea
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-11.3.0-fix-paths-for-apparmor.patch
@@ -0,0 +1,74 @@
+From dd0a7e07f253248de4f0a5da5547e0534438f569 Mon Sep 17 00:00:00 2001
+Message-ID: <dd0a7e07f253248de4f0a5da5547e0534438f569.1743862811.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Tue, 15 Mar 2022 05:23:29 +0100
+Subject: [PATCH] libvirt-11.3.0-fix-paths-for-apparmor.patch
+
+From: Michal Privoznik <mprivozn@redhat.com>
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/security/apparmor/libvirt-qemu | 1 +
+ src/security/apparmor/meson.build | 2 +-
+ src/security/apparmor/usr.lib.libvirt.virt-aa-helper.local | 1 -
+ ....virt-aa-helper.in => usr.libexec.libvirt.virt-aa-helper.in} | 2 +-
+ src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.local | 1 +
+ 5 files changed, 4 insertions(+), 3 deletions(-)
+ delete mode 100644 src/security/apparmor/usr.lib.libvirt.virt-aa-helper.local
+ rename src/security/apparmor/{usr.lib.libvirt.virt-aa-helper.in => usr.libexec.libvirt.virt-aa-helper.in} (96%)
+ create mode 100644 src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.local
+
+diff --git a/src/security/apparmor/libvirt-qemu b/src/security/apparmor/libvirt-qemu
+index e4aceacd70..6ac5149baf 100644
+--- a/src/security/apparmor/libvirt-qemu
++++ b/src/security/apparmor/libvirt-qemu
+@@ -97,6 +97,7 @@
+ /usr/share/sgabios/** r,
+ /usr/share/slof/** r,
+ /usr/share/vgabios/** r,
++ /usr/share/seavgabios/** r,
+
+ # pki for libvirt-vnc and libvirt-spice (LP: #901272, #1690140)
+ /etc/pki/CA/ r,
+diff --git a/src/security/apparmor/meson.build b/src/security/apparmor/meson.build
+index 09d9fac02c..d4b168aaed 100644
+--- a/src/security/apparmor/meson.build
++++ b/src/security/apparmor/meson.build
+@@ -1,5 +1,5 @@
+ apparmor_gen_profiles = [
+- 'usr.lib.libvirt.virt-aa-helper',
++ 'usr.libexec.libvirt.virt-aa-helper',
+ 'usr.sbin.libvirtd',
+ 'usr.sbin.virtqemud',
+ 'usr.sbin.virtxend',
+diff --git a/src/security/apparmor/usr.lib.libvirt.virt-aa-helper.local b/src/security/apparmor/usr.lib.libvirt.virt-aa-helper.local
+deleted file mode 100644
+index c0990e51d0..0000000000
+--- a/src/security/apparmor/usr.lib.libvirt.virt-aa-helper.local
++++ /dev/null
+@@ -1 +0,0 @@
+-# Site-specific additions and overrides for 'usr.lib.libvirt.virt-aa-helper'
+diff --git a/src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in b/src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.in
+similarity index 96%
+rename from src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in
+rename to src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.in
+index e209a8bff7..cf129dde31 100644
+--- a/src/security/apparmor/usr.lib.libvirt.virt-aa-helper.in
++++ b/src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.in
+@@ -74,5 +74,5 @@ profile virt-aa-helper @libexecdir@/virt-aa-helper {
+ /**.[iI][sS][oO] r,
+ /**/disk{,.*} r,
+
+- include if exists <local/usr.lib.libvirt.virt-aa-helper>
++ include if exists <local/usr.libexec.libvirt.virt-aa-helper>
+ }
+diff --git a/src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.local b/src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.local
+new file mode 100644
+index 0000000000..974653d797
+--- /dev/null
++++ b/src/security/apparmor/usr.libexec.libvirt.virt-aa-helper.local
+@@ -0,0 +1 @@
++# Site-specific additions and overrides for 'usr.libexec.libvirt.virt-aa-helper'
+--
+2.49.0
+
diff --git a/app-emulation/libvirt/files/libvirt-12.1.0-do-not-use-sysconfig.patch b/app-emulation/libvirt/files/libvirt-12.1.0-do-not-use-sysconfig.patch
new file mode 100644
index 000000000000..cbe2ecd08630
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-12.1.0-do-not-use-sysconfig.patch
@@ -0,0 +1,81 @@
+From 797c16b42aa6cd73ef5e8624de1945893aee2366 Mon Sep 17 00:00:00 2001
+Message-ID: <797c16b42aa6cd73ef5e8624de1945893aee2366.1771336459.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 2 Mar 2022 10:01:04 +0100
+Subject: [PATCH] libvirt-12.1.0-do-not-use-sysconfig.patch
+
+From: Michal Privoznik <mprivozn@redhat.com>
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/locking/virtlockd.service.in | 1 -
+ src/logging/virtlogd.service.in | 1 -
+ src/remote/libvirtd.service.in | 1 -
+ src/virtd.service.in | 1 -
+ tools/libvirt-guests.service.in | 2 +-
+ 5 files changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in
+index cd6c77c6af..1746f0e8c9 100644
+--- a/src/locking/virtlockd.service.in
++++ b/src/locking/virtlockd.service.in
+@@ -10,7 +10,6 @@ After=virtlockd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOCKD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlockd
+ ExecStart=@sbindir@/virtlockd $VIRTLOCKD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in
+index bcc356f9d1..94d3be9dee 100644
+--- a/src/logging/virtlogd.service.in
++++ b/src/logging/virtlogd.service.in
+@@ -10,7 +10,6 @@ After=virtlogd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOGD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlogd
+ ExecStart=@sbindir@/virtlogd $VIRTLOGD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in
+index 7965010a0a..031199b76d 100644
+--- a/src/remote/libvirtd.service.in
++++ b/src/remote/libvirtd.service.in
+@@ -30,7 +30,6 @@ Conflicts=xendomains.service
+ [Service]
+ Type=notify-reload
+ Environment=LIBVIRTD_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/libvirtd
+ Environment=SECRETS_ENCRYPTION_KEY=%d/secrets-encryption-key
+ LoadCredentialEncrypted=secrets-encryption-key:@localstatedir@/lib/libvirt/secrets/secrets-encryption-key
+ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
+diff --git a/src/virtd.service.in b/src/virtd.service.in
+index 7ffb77e339..92a48da90c 100644
+--- a/src/virtd.service.in
++++ b/src/virtd.service.in
+@@ -17,7 +17,6 @@ After=apparmor.service
+ [Service]
+ Type=notify-reload
+ Environment=@SERVICE@_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/@service@
+ ExecStart=@sbindir@/@service@ $@SERVICE@_ARGS
+ ExecReload=/bin/kill -HUP $MAINPID
+ Restart=on-failure
+diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
+index c8e4d3d749..28f26e31ba 100644
+--- a/tools/libvirt-guests.service.in
++++ b/tools/libvirt-guests.service.in
+@@ -14,7 +14,7 @@ After=virtxend.socket
+ After=virt-guest-shutdown.target
+
+ [Service]
+-EnvironmentFile=-@initconfdir@/libvirt-guests
++EnvironmentFile=-/etc/libvirt/libvirt-guests.conf
+ # Hack just call traditional service until we factor
+ # out the code
+ ExecStart=@libexecdir@/libvirt-guests.sh start
+--
+2.52.0
+
diff --git a/app-emulation/libvirt/files/libvirt-12.2.0-do-not-use-sysconfig.patch b/app-emulation/libvirt/files/libvirt-12.2.0-do-not-use-sysconfig.patch
new file mode 100644
index 000000000000..ceb6ea70bac6
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-12.2.0-do-not-use-sysconfig.patch
@@ -0,0 +1,79 @@
+From 0553ca64ebf88f307853db881c51c0b73674cab1 Mon Sep 17 00:00:00 2001
+Message-ID: <0553ca64ebf88f307853db881c51c0b73674cab1.1775668386.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Wed, 2 Mar 2022 10:01:04 +0100
+Subject: [PATCH] libvirt-12.2.0-do-not-use-sysconfig.patch
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ src/locking/virtlockd.service.in | 1 -
+ src/logging/virtlogd.service.in | 1 -
+ src/remote/libvirtd.service.in | 1 -
+ src/virtd.service.in | 1 -
+ tools/libvirt-guests.service.in | 2 +-
+ 5 files changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in
+index cd6c77c6af..1746f0e8c9 100644
+--- a/src/locking/virtlockd.service.in
++++ b/src/locking/virtlockd.service.in
+@@ -10,7 +10,6 @@ After=virtlockd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOCKD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlockd
+ ExecStart=@sbindir@/virtlockd $VIRTLOCKD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in
+index bcc356f9d1..94d3be9dee 100644
+--- a/src/logging/virtlogd.service.in
++++ b/src/logging/virtlogd.service.in
+@@ -10,7 +10,6 @@ After=virtlogd-admin.socket
+ [Service]
+ Type=notify
+ Environment=VIRTLOGD_ARGS=
+-EnvironmentFile=-@initconfdir@/virtlogd
+ ExecStart=@sbindir@/virtlogd $VIRTLOGD_ARGS
+ ExecReload=/bin/kill -USR1 $MAINPID
+
+diff --git a/src/remote/libvirtd.service.in b/src/remote/libvirtd.service.in
+index b0a062e885..39a7a91a75 100644
+--- a/src/remote/libvirtd.service.in
++++ b/src/remote/libvirtd.service.in
+@@ -28,7 +28,6 @@ Conflicts=xendomains.service
+ [Service]
+ Type=notify-reload
+ Environment=LIBVIRTD_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/libvirtd
+ ExecStart=@sbindir@/libvirtd $LIBVIRTD_ARGS
+ ExecReload=/bin/kill -HUP $MAINPID
+ KillMode=process
+diff --git a/src/virtd.service.in b/src/virtd.service.in
+index 7ffb77e339..92a48da90c 100644
+--- a/src/virtd.service.in
++++ b/src/virtd.service.in
+@@ -17,7 +17,6 @@ After=apparmor.service
+ [Service]
+ Type=notify-reload
+ Environment=@SERVICE@_ARGS="--timeout 120"
+-EnvironmentFile=-@initconfdir@/@service@
+ ExecStart=@sbindir@/@service@ $@SERVICE@_ARGS
+ ExecReload=/bin/kill -HUP $MAINPID
+ Restart=on-failure
+diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
+index c8e4d3d749..28f26e31ba 100644
+--- a/tools/libvirt-guests.service.in
++++ b/tools/libvirt-guests.service.in
+@@ -14,7 +14,7 @@ After=virtxend.socket
+ After=virt-guest-shutdown.target
+
+ [Service]
+-EnvironmentFile=-@initconfdir@/libvirt-guests
++EnvironmentFile=-/etc/libvirt/libvirt-guests.conf
+ # Hack just call traditional service until we factor
+ # out the code
+ ExecStart=@libexecdir@/libvirt-guests.sh start
+--
+2.52.0
+
diff --git a/app-emulation/libvirt/files/libvirt-guests.confd b/app-emulation/libvirt/files/libvirt-guests.confd
new file mode 100644
index 000000000000..ed2ce58064a8
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-guests.confd
@@ -0,0 +1,68 @@
+# /etc/conf.d/libvirtd
+
+# LIBVIRT_URIS
+# space separated list of libvirt URIs to communicate with to start/stop guests
+# Valid values are anything that can be passed to 'virsh connect'
+
+#LIBVIRT_URIS="qemu:///system"
+
+
+# LIBVIRT_SHUTDOWN
+# Valid options:
+# * managedsave - Performs a state save external to the VM (for hypervisors
+# supporting this operation). qemu-kvm will stop the CPU
+# and save off all state to a separate file. When the
+# machine is started again, it will resume like nothing
+# ever happened. This is guarenteed to always successfully
+# stop your machine and restart it.
+#
+# * shutdown - Sends an ACPI shutdown (think of this as a request to
+# your guest to shutdown). There is no way to distinguish
+# between guests that are ignoring the shutdown request or
+# are stuck or are taking a long time to shutdown. We will
+# wait LIBVIRT_MAXWAIT seconds before yanking the power
+# out.
+#
+# * destroy - Immediately stop all running guests. Use with caution as
+# this can leave the guest in a corrupted state and might
+# lead to data loss.
+#
+
+#LIBVIRT_SHUTDOWN="managedsave"
+
+
+# LIBVIRT_MAXWAIT
+# Timeout in seconds until stopping a guest and "pulling the plug" on the
+# guest
+# Valid values are any integer over 0
+
+#LIBVIRT_MAXWAIT="500"
+
+
+# LIBVIRT_START
+# If this value is set to 'no', then guests and networks that were shutdown
+# by this script when it was stopped will not be started when it is started
+# back up.
+# Valid values are yes or no
+
+#LIBVIRT_START="yes"
+
+
+# LIBVIRT_IGNORE_AUTOSTART
+# If the VM is marked for autostart in its XML configuration then we won't
+# save its start when the init script is stopped. The result is that when
+# the init script starts back up, no attempt will be made to start the VM or
+# confirm it is started.
+# Valid values are yes or no
+
+#LIBVIRT_IGNORE_AUTOSTART="no"
+
+
+# LIBVIRT_NET_SHUTDOWN
+# If libvirtd created networks for you (e.g. NATed networks) then this init
+# script will shut them down for you if this is set to 'yes'. Otherwise,
+# the networks will be left running. For this option to be useful you must
+# have enabled the 'virt-network' USE flag and have had libvirt create a
+# NATed network for you. Valid values: 'yes' or 'no'
+
+#LIBVIRT_NET_SHUTDOWN="yes"
diff --git a/app-emulation/libvirt/files/libvirt-guests.init-r4 b/app-emulation/libvirt/files/libvirt-guests.init-r4
new file mode 100644
index 000000000000..b29f04c24a54
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirt-guests.init-r4
@@ -0,0 +1,237 @@
+#!/sbin/openrc-run
+
+description="Virtual Machine Management (libvirt) Guests"
+
+depend() {
+ use libvirtd
+}
+
+# set the default to QEMU
+[ -z "${LIBVIRT_URIS}" ] && LIBVIRT_URIS="qemu:///system"
+
+# default to suspending the VM via managedsave
+case "${LIBVIRT_SHUTDOWN}" in
+ managedsave|shutdown|destroy) ;;
+ *) LIBVIRT_SHUTDOWN="managedsave" ;;
+esac
+
+# default to 500 seconds
+[ -z ${LIBVIRT_MAXWAIT} ] && LIBVIRT_MAXWAIT=500
+
+gueststatefile="/var/lib/libvirt/libvirt-guests.state"
+netstatefile="/var/lib/libvirt/libvirt-net.state"
+
+do_virsh() {
+ local hvuri=$1
+ shift
+
+ # if unset, default to qemu
+ [ -z ${hvuri} ] && hvuri="qemu:///system"
+ # if only qemu was supplied then correct the value
+ [ "xqemu" = x${hvuri} ] && hvuri="qemu:///system"
+
+ # Silence errors because virsh always throws an error about
+ # not finding the hypervisor version when connecting to libvirtd
+ # lastly strip the blank line at the end
+ LC_ALL=C virsh -c ${hvuri} "$@" 2>/dev/null | head -n -1
+}
+
+libvirtd_dom_list() {
+ # Only work with domains by their UUIDs
+ local hvuri=$1
+ shift
+
+ # The grep is to remove dom0 for xen domains. Otherwise we never hit 0
+ do_virsh "${hvuri}" list --uuid $@ | grep -v 00000000-0000-0000-0000-000000000000
+}
+
+libvirtd_dom_count() {
+ local hvuri=$1
+ shift
+
+ libvirtd_dom_list "${hvuri}" $@ | wc -l
+}
+
+libvirtd_net_list() {
+ # Only work with networks by their UUIDs
+ local hvuri=$1
+ shift
+
+ do_virsh "${hvuri}" net-list --uuid $@
+}
+
+libvirtd_net_count() {
+ local hvuri=$1
+ shift
+
+ libvirtd_net_list "${hvuri}" $@ | wc -l
+}
+
+libvirtd_dom_stop() {
+ # stops all persistent or transient domains for a given URI
+ # $1 - uri
+ # $2 - persisent/transient
+
+ local uri=$1
+ local persist=$2
+ local shutdown_type=${LIBVIRT_SHUTDOWN}
+ local counter=${LIBVIRT_MAXWAIT}
+ local dom_name=
+ local dom_as=
+ local dom_ids=
+ local uuid=
+ local dom_count=
+
+ [ "${persist}" = "--transient" ] && shutdown_type="shutdown"
+ [ -n "${counter}" ] || counter=500
+
+ einfo " Shutting down domain(s) ..."
+
+ # grab all persistent or transient domains running
+ dom_ids=$(libvirtd_dom_list ${uri} ${persist})
+
+ for uuid in ${dom_ids}; do
+ # Get the name
+ dom_name=$(do_virsh ${uri} domname ${uuid})
+ einfo " ${dom_name}"
+ # Get autostart state
+ dom_as=$(do_virsh ${uri} dominfo ${uuid} | \
+ awk '$1 == "Autostart:" { print $2 }')
+
+ if [ "${persist}" = "--persistent" ]; then
+ # Save our running state only if LIBVIRT_IGNORE_AUTOSTART != yes
+ if [ "x${LIBVIRT_IGNORE_AUTOSTART}" = "xyes" ] && \
+ [ ${dom_as} = "enabled" ]; then
+ :
+ else
+ echo "${uri} ${uuid}" >> ${gueststatefile}
+ fi
+
+ fi
+
+ # Now let's stop it
+ do_virsh "${uri}" ${shutdown_type} ${uuid} > /dev/null
+
+ done
+
+ dom_count="$(libvirtd_dom_count ${uri} ${persist})"
+ while [ ${dom_count} -gt 0 ] && [ ${counter} -gt 0 ] ; do
+ dom_count="$(libvirtd_dom_count ${uri} ${persist})"
+ sleep 1
+ if [ "${shutdown_type}" = "shutdown" ]; then
+ counter=$((${counter} - 1))
+ fi
+ printf "."
+ done
+
+ if [ "${shutdown_type}" = "shutdown" ]; then
+ # grab all domains still running
+ dom_ids=$(libvirtd_dom_list ${uri} ${persist})
+ for uuid in ${dom_ids}; do
+ dom_name=$(do_virsh ${uri} domname ${uuid})
+ eerror " ${dom_name} forcibly stopped"
+ do_virsh "${uri}" destroy ${uuid} > /dev/null
+ done
+ fi
+}
+
+libvirtd_net_stop() {
+ # stops all persistent or transient domains for a given URI
+ # $1 - uri
+ # $2 - persisent/transient
+
+ local uri=$1
+ local persist=$2
+ local uuid=
+ local net_name=
+
+ if [ "${LIBVIRT_NET_SHUTDOWN}" != "no" ]; then
+
+ einfo " Shutting down network(s):"
+ for uuid in $(libvirtd_net_list ${uri} ${persist}); do
+ net_name=$(do_virsh ${uri} net-name ${uuid})
+ einfo " ${net_name}"
+
+ if [ "${persist}" = "--persistent" ]; then
+ # Save our running state
+ echo "${uri} ${uuid}" >> ${netstatefile}
+
+ fi
+
+ # Actually stop the network
+ do_virsh qemu net-destroy ${uuid} > /dev/null
+ done
+
+ fi
+}
+
+start() {
+ local uri=
+ local uuid=
+ local name=
+
+ for uri in ${LIBVIRT_URIS}; do
+ do_virsh "${uri}" connect
+ if [ $? -ne 0 ]; then
+ eerror "Failed to connect to '${uri}'. Domains may not start."
+ fi
+ done
+
+ [ ! -e "${netstatefile}" ] && touch "${netstatefile}"
+ [ ! -e "${gueststatefile}" ] && touch "${gueststatefile}"
+
+ # if the user didn't want to start any guests up then respect their wish
+ [ "x${LIBVIRT_START}" = "xno" ] && return 0
+
+ # start networks
+ ebegin "Starting libvirt networks"
+ while read -r uri uuid
+ do
+ # ignore trash
+ [ -z "${uri}" ] || [ -z "${uuid}" ] && continue
+
+ name=$(do_virsh "${uri}" net-name ${uuid})
+ einfo " ${name}"
+ do_virsh "${uri}" net-start ${uuid} > /dev/null
+ done <"${netstatefile}"
+ eend 0
+
+ # start domains
+ ebegin "Starting libvirt domains"
+ while read -r uri uuid
+ do
+ # ignore trash
+ [ -z "${uri}" ] || [ -z "${uuid}" ] && continue
+
+ name=$(do_virsh "${uri}" domname ${uuid})
+ einfo " ${name}"
+ do_virsh "${uri}" start ${uuid} > /dev/null
+ do_virsh "${uri}" domtime --sync ${uuid} > /dev/null
+ done <"${gueststatefile}"
+ eend 0
+}
+
+stop() {
+ local counter=
+ local dom_name=
+ local net_name=
+ local dom_ids=
+ local uuid=
+ local dom_count=
+
+ rm -f "${gueststatefile}"
+ [ $? -ne 0 ] && eerror "Unable to save domain state"
+ rm -f "${netstatefile}"
+ [ $? -ne 0 ] && eerror "Unable to save net state"
+
+ for uri in ${LIBVIRT_URIS}; do
+ einfo "Stopping libvirt domains and networks for ${uri}"
+
+ libvirtd_dom_stop "${uri}" "--persistent"
+ libvirtd_dom_stop "${uri}" "--transient"
+ libvirtd_net_stop "${uri}" "--persistent"
+ libvirtd_net_stop "${uri}" "--transient"
+
+ einfo "Done stopping domains and networks for ${uri}"
+ done
+}
diff --git a/app-emulation/libvirt/files/libvirtd.confd-r5 b/app-emulation/libvirt/files/libvirtd.confd-r5
new file mode 100644
index 000000000000..c326531d469f
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirtd.confd-r5
@@ -0,0 +1,18 @@
+# /etc/conf.d/libvirtd
+
+# Startup dependency
+# libvirtd typically requires all networks to be up and settled which
+# is what rc_need="net" provides. However if you only use specific networks
+# for libvirtd, you may override this. Or if you only use libvirtd locally.
+rc_need="net"
+
+# The termination timeout (start-stop-daemon parameter "retry") ensures
+# that the service will be terminated within a given time (25 + 5 seconds
+# per default) when you are stopping the service.
+#LIBVIRTD_TERMTIMEOUT="TERM/25/KILL/5"
+
+# LIBVIRTD_OPTS
+# You may want to add '--listen' to have libvirtd listen for tcp/ip connections
+# if you want to use libvirt for remote control
+# Please consult 'libvirtd --help' for more options
+#LIBVIRTD_OPTS="--listen"
diff --git a/app-emulation/libvirt/files/libvirtd.init-r19 b/app-emulation/libvirt/files/libvirtd.init-r19
new file mode 100644
index 000000000000..12bd1d34fa2b
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirtd.init-r19
@@ -0,0 +1,33 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+description="Virtual Machine Management daemon (libvirt)"
+
+LIBVIRTD_OPTS=${LIBVIRTD_OPTS:-"${LIBVIRTD_OPTS}"}
+LIBVIRTD_TIMEOUT=${LIBVIRTD_TERMTIMEOUT:-"TERM/25/KILL/5"}
+
+command="/usr/sbin/libvirtd"
+command_args="${LIBVIRTD_OPTS}"
+start_stop_daemon_args="-b --env KRB5_KTNAME=/etc/libvirt/krb5.tab"
+pidfile="/run/libvirtd.pid"
+retry="${LIBVIRTD_TERMTIMEOUT}"
+
+depend() {
+ need virtlogd
+ use ceph dbus iscsid virtlockd
+ after cgconfig corosync ebtables iptables ip6tables shorewall nfs ntp-client ntpdportmap rpc.statd sanlock xenconsoled
+ USE_FLAG_FIREWALLD
+}
+
+start_pre() {
+ # Test configuration directories in /etc/libvirt/ to be either not
+ # present or a directory, i.e. not a regular file, bug #532892
+
+ checkpath --directory /etc/libvirt/lxc || return 1
+ checkpath --directory /etc/libvirt/nwfilter || return 1
+ [ -L /etc/libvirt/qemu ] ||
+ checkpath --directory /etc/libvirt/qemu || return 1
+ [ -L /etc/libvirt/storage ] ||
+ checkpath --directory /etc/libvirt/storage || return 1
+}
diff --git a/app-emulation/libvirt/files/libvirtd.tmpfiles.conf b/app-emulation/libvirt/files/libvirtd.tmpfiles.conf
new file mode 100644
index 000000000000..ceda7af4c23e
--- /dev/null
+++ b/app-emulation/libvirt/files/libvirtd.tmpfiles.conf
@@ -0,0 +1,2 @@
+d /run/libvirt/lxc 0755 root root -
+d /var/lib/libvirt/secrets 0700 root root -
diff --git a/app-emulation/libvirt/files/virtlockd.init-r2 b/app-emulation/libvirt/files/virtlockd.init-r2
new file mode 100644
index 000000000000..0445b9d02261
--- /dev/null
+++ b/app-emulation/libvirt/files/virtlockd.init-r2
@@ -0,0 +1,23 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+description="libvirt virtual machine lock manager"
+command="/usr/sbin/virtlockd"
+start_stop_daemon_args="-b"
+pidfile="/run/virtlockd.pid"
+
+extra_started_commands="reload"
+description_reload="re-exec the daemon, while maintaining locks and clients"
+
+
+depend() {
+ after ntp-client ntpd nfs corosync
+}
+
+reload() {
+ ebegin "re-exec() virtlockd"
+
+ start-stop-daemon --signal SIGUSR1 \
+ --exec "${command}" --pidfile "${pidfile}"
+}
diff --git a/app-emulation/libvirt/files/virtlogd.init-r2 b/app-emulation/libvirt/files/virtlogd.init-r2
new file mode 100644
index 000000000000..abc293e13ae5
--- /dev/null
+++ b/app-emulation/libvirt/files/virtlogd.init-r2
@@ -0,0 +1,23 @@
+#!/sbin/openrc-run
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+description="libvirt virtual machine logging manager"
+command="/usr/sbin/virtlogd"
+start_stop_daemon_args="-b"
+pidfile="/run/virtlogd.pid"
+
+extra_started_commands="reload"
+description_reload="re-exec the daemon, while maintaining open connections"
+
+
+depend() {
+ after ntp-client ntpd nfs corosync
+}
+
+reload() {
+ ebegin "re-exec() virtlogd"
+
+ start-stop-daemon --signal SIGUSR1 \
+ --exec "${command}" --pidfile "${pidfile}"
+}
diff --git a/app-emulation/libvirt/libvirt-11.10.0.ebuild b/app-emulation/libvirt/libvirt-11.10.0.ebuild
new file mode 100644
index 000000000000..aadd76322b9c
--- /dev/null
+++ b/app-emulation/libvirt/libvirt-11.10.0.ebuild
@@ -0,0 +1,380 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Packages which get releases together:
+# app-emacs/nxml-libvirt-schemas
+# dev-python/libvirt-python
+# dev-perl/Sys-Virt
+# app-emulation/libvirt
+# Please bump them together!
+
+PYTHON_COMPAT=( python3_{13..14} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libvirt.org.asc
+inherit meson linux-info python-any-r1 readme.gentoo-r1 tmpfiles verify-sig
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/libvirt/libvirt.git"
+ EGIT_BRANCH="master"
+else
+ SRC_URI="https://download.libvirt.org/${P}.tar.xz
+ verify-sig? ( https://download.libvirt.org/${P}.tar.xz.asc )"
+ KEYWORDS="amd64 ~arm arm64 ppc64 x86"
+fi
+
+DESCRIPTION="C toolkit to manipulate virtual machines"
+HOMEPAGE="https://www.libvirt.org/ https://gitlab.com/libvirt/libvirt/"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+IUSE="
+ apparmor audit bash-completion +caps dtrace firewalld fuse glusterfs
+ iscsi iscsi-direct +libvirtd lvm libssh libssh2 lxc nbd nfs nls numa
+ parted pcap policykit +qemu rbd sasl selinux test +udev
+ virtiofsd virtualbox +virt-network wireshark-plugins xen zfs
+"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ firewalld? ( virt-network )
+ libvirtd? ( || ( lxc qemu virtualbox xen ) )
+ lxc? ( caps libvirtd )
+ qemu? ( libvirtd )
+ virt-network? ( libvirtd )
+ virtualbox? ( libvirtd )
+ xen? ( libvirtd )"
+
+BDEPEND="
+ app-text/xhtml1
+ dev-lang/perl
+ dev-libs/libxslt
+ dev-perl/XML-XPath
+ dev-python/docutils
+ virtual/pkgconfig
+ bash-completion? ( >=app-shells/bash-completion-2.0 )
+ verify-sig? ( sec-keys/openpgp-keys-libvirt )"
+
+# gettext.sh command is used by the libvirt command wrappers, and it's
+# non-optional, so put it into RDEPEND.
+# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
+# package will use 3 by default. Since we don't have slot pinning in an API,
+# we must go with the most recent.
+RDEPEND="
+ acct-user/qemu
+ app-misc/scrub
+ >=dev-libs/glib-2.66.0
+ dev-libs/libgcrypt
+ dev-libs/libnl:3
+ >=dev-libs/libxml2-2.9.1:=
+ >=net-analyzer/openbsd-netcat-1.105-r1
+ >=net-libs/gnutls-3.2.0:=
+ net-libs/libtirpc:=
+ >=net-misc/curl-7.18.0
+ sys-apps/dbus
+ sys-apps/dmidecode
+ sys-devel/gettext
+ >=sys-libs/readline-7.0:=
+ virtual/acl
+ apparmor? ( sys-libs/libapparmor )
+ audit? ( sys-process/audit )
+ caps? ( sys-libs/libcap-ng )
+ dtrace? ( dev-debug/systemtap )
+ firewalld? ( >=net-firewall/firewalld-0.6.3 )
+ fuse? ( sys-fs/fuse:= )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
+ iscsi? ( >=sys-block/open-iscsi-1.18.0 )
+ iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
+ libssh? ( >=net-libs/libssh-0.8.1:= )
+ libssh2? ( >=net-libs/libssh2-1.3 )
+ lvm? ( >=sys-fs/lvm2-2.02.48-r2[lvm] )
+ lxc? ( !sys-apps/systemd[cgroup-hybrid(-)] )
+ nbd? (
+ sys-block/nbdkit
+ sys-libs/libnbd
+ )
+ nfs? ( net-fs/nfs-utils )
+ numa? (
+ >sys-process/numactl-2.0.2
+ sys-process/numad
+ )
+ parted? (
+ >=sys-block/parted-1.8[device-mapper]
+ sys-fs/lvm2[lvm]
+ )
+ pcap? ( >=net-libs/libpcap-1.8.0 )
+ policykit? (
+ acct-group/libvirt
+ >=sys-auth/polkit-0.9
+ )
+ qemu? (
+ >=app-emulation/qemu-4.2
+ app-crypt/swtpm
+ dev-libs/json-c:=
+ )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( >=dev-libs/cyrus-sasl-2.1.26 )
+ selinux? ( >=sys-libs/libselinux-2.0.85 )
+ virt-network? (
+ net-dns/dnsmasq[dhcp,ipv6(+),script]
+ net-firewall/ebtables
+ || (
+ >=net-firewall/iptables-1.4.10[ipv6(+)]
+ net-firewall/nftables
+ )
+ net-misc/radvd
+ sys-apps/iproute2[-minimal]
+ )
+ virtiofsd? ( app-emulation/virtiofsd )
+ virtualbox? ( <app-emulation/virtualbox-7.1.0 )
+ wireshark-plugins? ( >=net-analyzer/wireshark-2.6.0:= )
+ xen? (
+ >=app-emulation/xen-4.9.0
+ app-emulation/xen-tools:=
+ )
+ udev? (
+ virtual/libudev:=
+ >=x11-libs/libpciaccess-0.10.9
+ )
+ zfs? ( sys-fs/zfs )
+ kernel_linux? ( sys-apps/util-linux )"
+DEPEND="
+ ${BDEPEND}
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_any_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+# The 'circular' dependency on dev-python/libvirt-python is because of
+# virt-qemu-qmp-proxy.
+PDEPEND="
+ qemu? ( dev-python/libvirt-python )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
+ "${FILESDIR}"/${PN}-11.3.0-do-not-use-sysconfig.patch
+ "${FILESDIR}"/${PN}-11.3.0-fix-paths-for-apparmor.patch
+)
+
+python_check_deps() {
+ if use test; then
+ python_has_version -d "dev-python/pytest[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check kernel configuration:
+ CONFIG_CHECK=""
+ use fuse && CONFIG_CHECK+="
+ ~FUSE_FS"
+
+ use lvm && CONFIG_CHECK+="
+ ~BLK_DEV_DM
+ ~DM_MULTIPATH
+ ~DM_SNAPSHOT"
+
+ use lxc && CONFIG_CHECK+="
+ ~BLK_CGROUP
+ ~CGROUP_CPUACCT
+ ~CGROUP_DEVICE
+ ~CGROUP_FREEZER
+ ~CGROUP_NET_PRIO
+ ~CGROUP_PERF
+ ~CGROUPS
+ ~CGROUP_SCHED
+ ~CPUSETS
+ ~IPC_NS
+ ~MACVLAN
+ ~NAMESPACES
+ ~NET_CLS_CGROUP
+ ~NET_NS
+ ~PID_NS
+ ~POSIX_MQUEUE
+ ~SECURITYFS
+ ~USER_NS
+ ~UTS_NS
+ ~VETH
+ ~!GRKERNSEC_CHROOT_MOUNT
+ ~!GRKERNSEC_CHROOT_DOUBLE
+ ~!GRKERNSEC_CHROOT_PIVOT
+ ~!GRKERNSEC_CHROOT_CHMOD
+ ~!GRKERNSEC_CHROOT_CAPS"
+
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_MARK_T
+ ~BRIDGE_NF_EBTABLES
+ ~NETFILTER_ADVANCED
+ ~NETFILTER_XT_CONNMARK
+ ~NETFILTER_XT_MARK
+ ~NETFILTER_XT_TARGET_CHECKSUM
+ ~NETFILTER_XT_TARGET_MASQUERADE
+ ~NET_ACT_CSUM
+ ~IP_NF_FILTER
+ ~IP_NF_MANGLE
+ ~IP_NF_NAT
+ ~IP6_NF_FILTER
+ ~IP6_NF_MANGLE
+ ~IP6_NF_NAT"
+
+ # Bandwidth Limiting Support
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_T_NAT
+ ~IP_NF_TARGET_REJECT
+ ~NET_ACT_POLICE
+ ~NET_CLS_FW
+ ~NET_CLS_U32
+ ~NET_SCH_HTB
+ ~NET_SCH_INGRESS
+ ~NET_SCH_SFQ"
+
+ ERROR_USER_NS="Optional depending on LXC configuration."
+
+ if [[ -n ${CONFIG_CHECK} ]]; then
+ linux-info_pkg_setup
+ fi
+
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ touch "${S}/.mailmap" || die
+
+ default
+ python_fix_shebang .
+
+ # Skip fragile tests which relies on pristine environment
+ # (Breaks because of sandbox environment variables)
+ # bug #802876
+ sed -i -e "/commandtest/d" tests/meson.build || die
+
+ # Tweak the init script:
+ cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
+ sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
+ -i "${S}/libvirtd.init" || die "sed failed"
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_feature apparmor)
+ $(meson_feature apparmor apparmor_profiles)
+ $(meson_feature audit)
+ $(meson_feature caps capng)
+ $(meson_feature dtrace)
+ $(meson_feature firewalld)
+ $(meson_feature fuse)
+ $(meson_feature glusterfs)
+ $(meson_feature glusterfs storage_gluster)
+ $(meson_feature iscsi storage_iscsi)
+ $(meson_feature iscsi-direct storage_iscsi_direct)
+ $(meson_feature libvirtd driver_libvirtd)
+ $(meson_feature libssh)
+ $(meson_feature libssh2)
+ $(meson_feature lvm storage_lvm)
+ $(meson_feature lvm storage_mpath)
+ $(meson_feature lxc driver_lxc)
+ $(meson_feature nbd nbdkit)
+ $(meson_feature nls)
+ $(meson_feature numa numactl)
+ $(meson_feature numa numad)
+ $(meson_feature parted storage_disk)
+ $(meson_feature pcap libpcap)
+ $(meson_feature policykit polkit)
+ $(meson_feature qemu driver_qemu)
+ $(meson_feature qemu json_c)
+ $(meson_feature rbd storage_rbd)
+ $(meson_feature sasl)
+ $(meson_feature selinux)
+ $(meson_feature test tests)
+ $(meson_feature udev)
+ $(meson_feature virt-network driver_network)
+ $(meson_feature virtualbox driver_vbox)
+ $(meson_feature wireshark-plugins wireshark_dissector)
+ $(meson_feature xen driver_libxl)
+ $(meson_feature zfs storage_zfs)
+
+ -Ddriver_openvz=disabled
+ -Dnetcf=disabled
+ -Dsanlock=disabled
+ -Dopenwsman=disabled
+
+ -Ddriver_esx=enabled
+ -Dinit_script=systemd
+ -Dqemu_user=$(usex caps qemu root)
+ -Dqemu_group=$(usex caps qemu root)
+ -Ddriver_remote=enabled
+ -Dstorage_fs=enabled
+ -Ddriver_vmware=enabled
+
+ --localstatedir="${EPREFIX}/var"
+ -Dinitconfdir="${EPREFIX}/etc/systemd"
+ -Drunstatedir="${EPREFIX}/run"
+ -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+ )
+
+ # Workaround for bug #938302
+ if use dtrace && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ local native_file="${T}"/meson.${CHOST}.ini.local
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ emesonargs+=( --native-file "${native_file}" )
+ fi
+
+ meson_src_configure
+}
+
+src_test() {
+ export VIR_TEST_DEBUG=1
+ # Don't run the syntax check tests, they're fragile and not relevant
+ # to us downstream anyway.
+ # We also crank up the timeout (as Fedora does) just to preempt failures
+ # on slower arches.
+ meson_src_test --no-suite syntax-check --timeout-multiplier 10
+}
+
+src_install() {
+ meson_src_install
+
+ # Depending on configuration option, libvirt will create some bogus
+ # directoreis. They are either not used, or libvirtd is able to create
+ # them on demand, so let's remove them.
+ #
+ # Note, we are using -f here so that rm does not fail or warn if the
+ # directory is nonexistent.
+ rm -rf "${D}"/etc/sysconfig
+ rm -rf "${D}"/var
+ rm -rf "${D}"/run
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+
+ newtmpfiles "${FILESDIR}"/libvirtd.tmpfiles.conf libvirtd.conf
+
+ newinitd "${S}/libvirtd.init" libvirtd
+ newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
+ newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
+ newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd
+
+ newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
+ newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests
+
+ DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
+ touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml || die
+ fi
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+ tmpfiles_process libvirtd.conf
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/libvirt/libvirt-12.0.0.ebuild b/app-emulation/libvirt/libvirt-12.0.0.ebuild
new file mode 100644
index 000000000000..814d7f96b1ef
--- /dev/null
+++ b/app-emulation/libvirt/libvirt-12.0.0.ebuild
@@ -0,0 +1,384 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Packages which get releases together:
+# app-emacs/nxml-libvirt-schemas
+# dev-python/libvirt-python
+# dev-perl/Sys-Virt
+# app-emulation/libvirt
+# Please bump them together!
+
+PYTHON_COMPAT=( python3_{13..14} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libvirt.org.asc
+inherit meson flag-o-matic linux-info python-any-r1 readme.gentoo-r1
+inherit tmpfiles verify-sig
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/libvirt/libvirt.git"
+ EGIT_BRANCH="master"
+else
+ SRC_URI="https://download.libvirt.org/${P}.tar.xz
+ verify-sig? ( https://download.libvirt.org/${P}.tar.xz.asc )"
+ KEYWORDS="amd64 ~arm arm64 ppc64 x86"
+fi
+
+DESCRIPTION="C toolkit to manipulate virtual machines"
+HOMEPAGE="https://www.libvirt.org/ https://gitlab.com/libvirt/libvirt/"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+IUSE="
+ apparmor audit bash-completion +caps dtrace firewalld fuse glusterfs
+ iscsi iscsi-direct +libvirtd lvm libssh libssh2 lxc nbd nfs nls numa
+ parted pcap policykit +qemu rbd sasl selinux test +udev
+ virtiofsd virtualbox +virt-network wireshark-plugins xen zfs
+"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ firewalld? ( virt-network )
+ libvirtd? ( || ( lxc qemu virtualbox xen ) )
+ lxc? ( caps libvirtd )
+ qemu? ( libvirtd )
+ virt-network? ( libvirtd )
+ virtualbox? ( libvirtd )
+ xen? ( libvirtd )"
+
+BDEPEND="
+ app-text/xhtml1
+ dev-lang/perl
+ dev-libs/libxslt
+ dev-perl/XML-XPath
+ dev-python/docutils
+ virtual/pkgconfig
+ bash-completion? ( >=app-shells/bash-completion-2.0 )
+ verify-sig? ( sec-keys/openpgp-keys-libvirt )"
+
+# gettext.sh command is used by the libvirt command wrappers, and it's
+# non-optional, so put it into RDEPEND.
+# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
+# package will use 3 by default. Since we don't have slot pinning in an API,
+# we must go with the most recent.
+RDEPEND="
+ acct-user/qemu
+ app-misc/scrub
+ >=dev-libs/glib-2.66.0
+ dev-libs/libgcrypt
+ dev-libs/libnl:3
+ >=dev-libs/libxml2-2.9.1:=
+ >=net-analyzer/openbsd-netcat-1.105-r1
+ >=net-libs/gnutls-3.2.0:=
+ net-libs/libtirpc:=
+ >=net-misc/curl-7.18.0
+ sys-apps/dbus
+ sys-apps/dmidecode
+ sys-devel/gettext
+ >=sys-libs/readline-7.0:=
+ virtual/acl
+ apparmor? ( sys-libs/libapparmor )
+ audit? ( sys-process/audit )
+ caps? ( sys-libs/libcap-ng )
+ dtrace? ( dev-debug/systemtap )
+ firewalld? ( >=net-firewall/firewalld-0.6.3 )
+ fuse? ( sys-fs/fuse:= )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
+ iscsi? ( >=sys-block/open-iscsi-1.18.0 )
+ iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
+ libssh? ( >=net-libs/libssh-0.8.1:= )
+ libssh2? ( >=net-libs/libssh2-1.3 )
+ lvm? ( >=sys-fs/lvm2-2.02.48-r2[lvm] )
+ lxc? ( !sys-apps/systemd[cgroup-hybrid(-)] )
+ nbd? (
+ sys-block/nbdkit
+ sys-libs/libnbd
+ )
+ nfs? ( net-fs/nfs-utils )
+ numa? (
+ >sys-process/numactl-2.0.2
+ sys-process/numad
+ )
+ parted? (
+ >=sys-block/parted-1.8[device-mapper]
+ sys-fs/lvm2[lvm]
+ )
+ pcap? ( >=net-libs/libpcap-1.8.0 )
+ policykit? (
+ acct-group/libvirt
+ >=sys-auth/polkit-0.9
+ )
+ qemu? (
+ >=app-emulation/qemu-4.2
+ app-crypt/swtpm
+ dev-libs/json-c:=
+ )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( >=dev-libs/cyrus-sasl-2.1.26 )
+ selinux? ( >=sys-libs/libselinux-2.0.85 )
+ virt-network? (
+ net-dns/dnsmasq[dhcp,ipv6(+),script]
+ net-firewall/ebtables
+ || (
+ >=net-firewall/iptables-1.4.10[ipv6(+)]
+ net-firewall/nftables
+ )
+ net-misc/radvd
+ sys-apps/iproute2[-minimal]
+ )
+ virtiofsd? ( app-emulation/virtiofsd )
+ virtualbox? ( <app-emulation/virtualbox-7.1.0 )
+ wireshark-plugins? ( >=net-analyzer/wireshark-2.6.0:= )
+ xen? (
+ >=app-emulation/xen-4.9.0
+ app-emulation/xen-tools:=
+ )
+ udev? (
+ virtual/libudev:=
+ >=x11-libs/libpciaccess-0.10.9
+ )
+ zfs? ( sys-fs/zfs )
+ kernel_linux? ( sys-apps/util-linux )"
+DEPEND="
+ ${BDEPEND}
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_any_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+# The 'circular' dependency on dev-python/libvirt-python is because of
+# virt-qemu-qmp-proxy.
+PDEPEND="
+ qemu? ( dev-python/libvirt-python )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
+ "${FILESDIR}"/${PN}-11.3.0-do-not-use-sysconfig.patch
+ "${FILESDIR}"/${PN}-11.3.0-fix-paths-for-apparmor.patch
+)
+
+python_check_deps() {
+ if use test; then
+ python_has_version -d "dev-python/pytest[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check kernel configuration:
+ CONFIG_CHECK=""
+ use fuse && CONFIG_CHECK+="
+ ~FUSE_FS"
+
+ use lvm && CONFIG_CHECK+="
+ ~BLK_DEV_DM
+ ~DM_MULTIPATH
+ ~DM_SNAPSHOT"
+
+ use lxc && CONFIG_CHECK+="
+ ~BLK_CGROUP
+ ~CGROUP_CPUACCT
+ ~CGROUP_DEVICE
+ ~CGROUP_FREEZER
+ ~CGROUP_NET_PRIO
+ ~CGROUP_PERF
+ ~CGROUPS
+ ~CGROUP_SCHED
+ ~CPUSETS
+ ~IPC_NS
+ ~MACVLAN
+ ~NAMESPACES
+ ~NET_CLS_CGROUP
+ ~NET_NS
+ ~PID_NS
+ ~POSIX_MQUEUE
+ ~SECURITYFS
+ ~USER_NS
+ ~UTS_NS
+ ~VETH
+ ~!GRKERNSEC_CHROOT_MOUNT
+ ~!GRKERNSEC_CHROOT_DOUBLE
+ ~!GRKERNSEC_CHROOT_PIVOT
+ ~!GRKERNSEC_CHROOT_CHMOD
+ ~!GRKERNSEC_CHROOT_CAPS"
+
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_MARK_T
+ ~BRIDGE_NF_EBTABLES
+ ~NETFILTER_ADVANCED
+ ~NETFILTER_XT_CONNMARK
+ ~NETFILTER_XT_MARK
+ ~NETFILTER_XT_TARGET_CHECKSUM
+ ~NETFILTER_XT_TARGET_MASQUERADE
+ ~NET_ACT_CSUM
+ ~IP_NF_FILTER
+ ~IP_NF_MANGLE
+ ~IP_NF_NAT
+ ~IP6_NF_FILTER
+ ~IP6_NF_MANGLE
+ ~IP6_NF_NAT"
+
+ # Bandwidth Limiting Support
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_T_NAT
+ ~IP_NF_TARGET_REJECT
+ ~NET_ACT_POLICE
+ ~NET_CLS_FW
+ ~NET_CLS_U32
+ ~NET_SCH_HTB
+ ~NET_SCH_INGRESS
+ ~NET_SCH_SFQ"
+
+ ERROR_USER_NS="Optional depending on LXC configuration."
+
+ if [[ -n ${CONFIG_CHECK} ]]; then
+ linux-info_pkg_setup
+ fi
+
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ touch "${S}/.mailmap" || die
+
+ default
+ python_fix_shebang .
+
+ # Skip fragile tests which relies on pristine environment
+ # (Breaks because of sandbox environment variables)
+ # bug #802876
+ sed -i -e "/commandtest/d" tests/meson.build || die
+
+ # Tweak the init script:
+ cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
+ sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
+ -i "${S}/libvirtd.init" || die "sed failed"
+}
+
+src_configure() {
+ # Breaks with always_inline
+ filter-flags -fno-semantic-interposition
+
+ local emesonargs=(
+ $(meson_feature apparmor)
+ $(meson_feature apparmor apparmor_profiles)
+ $(meson_feature audit)
+ $(meson_feature caps capng)
+ $(meson_feature dtrace)
+ $(meson_feature firewalld)
+ $(meson_feature fuse)
+ $(meson_feature glusterfs)
+ $(meson_feature glusterfs storage_gluster)
+ $(meson_feature iscsi storage_iscsi)
+ $(meson_feature iscsi-direct storage_iscsi_direct)
+ $(meson_feature libvirtd driver_libvirtd)
+ $(meson_feature libssh)
+ $(meson_feature libssh2)
+ $(meson_feature lvm storage_lvm)
+ $(meson_feature lvm storage_mpath)
+ $(meson_feature lxc driver_lxc)
+ $(meson_feature nbd nbdkit)
+ $(meson_feature nls)
+ $(meson_feature numa numactl)
+ $(meson_feature numa numad)
+ $(meson_feature parted storage_disk)
+ $(meson_feature pcap libpcap)
+ $(meson_feature policykit polkit)
+ $(meson_feature qemu driver_qemu)
+ $(meson_feature qemu json_c)
+ $(meson_feature rbd storage_rbd)
+ $(meson_feature sasl)
+ $(meson_feature selinux)
+ $(meson_feature test tests)
+ $(meson_feature udev)
+ $(meson_feature virt-network driver_network)
+ $(meson_feature virtualbox driver_vbox)
+ $(meson_feature wireshark-plugins wireshark_dissector)
+ $(meson_feature xen driver_libxl)
+ $(meson_feature zfs storage_zfs)
+
+ -Ddriver_openvz=disabled
+ -Dnetcf=disabled
+ -Dsanlock=disabled
+ -Dopenwsman=disabled
+
+ -Ddriver_esx=enabled
+ -Dinit_script=systemd
+ -Dqemu_user=$(usex caps qemu root)
+ -Dqemu_group=$(usex caps qemu root)
+ -Ddriver_remote=enabled
+ -Dstorage_fs=enabled
+ -Ddriver_vmware=enabled
+
+ --localstatedir="${EPREFIX}/var"
+ -Dinitconfdir="${EPREFIX}/etc/systemd"
+ -Drunstatedir="${EPREFIX}/run"
+ -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+ )
+
+ # Workaround for bug #938302
+ if use dtrace && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ local native_file="${T}"/meson.${CHOST}.ini.local
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ emesonargs+=( --native-file "${native_file}" )
+ fi
+
+ meson_src_configure
+}
+
+src_test() {
+ export VIR_TEST_DEBUG=1
+ # Don't run the syntax check tests, they're fragile and not relevant
+ # to us downstream anyway.
+ # We also crank up the timeout (as Fedora does) just to preempt failures
+ # on slower arches.
+ meson_src_test --no-suite syntax-check --timeout-multiplier 10
+}
+
+src_install() {
+ meson_src_install
+
+ # Depending on configuration option, libvirt will create some bogus
+ # directoreis. They are either not used, or libvirtd is able to create
+ # them on demand, so let's remove them.
+ #
+ # Note, we are using -f here so that rm does not fail or warn if the
+ # directory is nonexistent.
+ rm -rf "${D}"/etc/sysconfig
+ rm -rf "${D}"/var
+ rm -rf "${D}"/run
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+
+ newtmpfiles "${FILESDIR}"/libvirtd.tmpfiles.conf libvirtd.conf
+
+ newinitd "${S}/libvirtd.init" libvirtd
+ newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
+ newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
+ newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd
+
+ newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
+ newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests
+
+ DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
+ touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml || die
+ fi
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+ tmpfiles_process libvirtd.conf
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/libvirt/libvirt-12.1.0-r1.ebuild b/app-emulation/libvirt/libvirt-12.1.0-r1.ebuild
new file mode 100644
index 000000000000..56b7cd21e17d
--- /dev/null
+++ b/app-emulation/libvirt/libvirt-12.1.0-r1.ebuild
@@ -0,0 +1,384 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Packages which get releases together:
+# app-emacs/nxml-libvirt-schemas
+# dev-python/libvirt-python
+# dev-perl/Sys-Virt
+# app-emulation/libvirt
+# Please bump them together!
+
+PYTHON_COMPAT=( python3_{13..14} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libvirt.org.asc
+inherit meson flag-o-matic linux-info python-any-r1 readme.gentoo-r1
+inherit tmpfiles verify-sig
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/libvirt/libvirt.git"
+ EGIT_BRANCH="master"
+else
+ SRC_URI="https://download.libvirt.org/${P}.tar.xz
+ verify-sig? ( https://download.libvirt.org/${P}.tar.xz.asc )"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
+fi
+
+DESCRIPTION="C toolkit to manipulate virtual machines"
+HOMEPAGE="https://www.libvirt.org/ https://gitlab.com/libvirt/libvirt/"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+IUSE="
+ apparmor audit bash-completion +caps dtrace firewalld fuse glusterfs
+ iscsi iscsi-direct +libvirtd lvm libssh libssh2 lxc nbd nfs nls numa
+ parted pcap policykit +qemu rbd sasl selinux test +udev
+ virtiofsd virtualbox +virt-network wireshark-plugins xen zfs
+"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ firewalld? ( virt-network )
+ libvirtd? ( || ( lxc qemu virtualbox xen ) )
+ lxc? ( caps libvirtd )
+ qemu? ( libvirtd )
+ virt-network? ( libvirtd )
+ virtualbox? ( libvirtd )
+ xen? ( libvirtd )"
+
+BDEPEND="
+ app-text/xhtml1
+ dev-lang/perl
+ dev-libs/libxslt
+ dev-perl/XML-XPath
+ dev-python/docutils
+ virtual/pkgconfig
+ bash-completion? ( >=app-shells/bash-completion-2.0 )
+ verify-sig? ( sec-keys/openpgp-keys-libvirt )"
+
+# gettext.sh command is used by the libvirt command wrappers, and it's
+# non-optional, so put it into RDEPEND.
+# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
+# package will use 3 by default. Since we don't have slot pinning in an API,
+# we must go with the most recent.
+RDEPEND="
+ acct-user/qemu
+ app-misc/scrub
+ >=dev-libs/glib-2.66.0
+ dev-libs/libgcrypt
+ dev-libs/libnl:3
+ >=dev-libs/libxml2-2.9.1:=
+ >=net-analyzer/openbsd-netcat-1.105-r1
+ >=net-libs/gnutls-3.2.0:=
+ net-libs/libtirpc:=
+ >=net-misc/curl-7.18.0
+ sys-apps/dbus
+ sys-apps/dmidecode
+ sys-devel/gettext
+ >=sys-libs/readline-7.0:=
+ virtual/acl
+ apparmor? ( sys-libs/libapparmor )
+ audit? ( sys-process/audit )
+ caps? ( sys-libs/libcap-ng )
+ dtrace? ( dev-debug/systemtap )
+ firewalld? ( >=net-firewall/firewalld-0.6.3 )
+ fuse? ( sys-fs/fuse:= )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
+ iscsi? ( >=sys-block/open-iscsi-1.18.0 )
+ iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
+ libssh? ( >=net-libs/libssh-0.8.1:= )
+ libssh2? ( >=net-libs/libssh2-1.3 )
+ lvm? ( >=sys-fs/lvm2-2.02.48-r2[lvm] )
+ lxc? ( !sys-apps/systemd[cgroup-hybrid(-)] )
+ nbd? (
+ sys-block/nbdkit
+ sys-libs/libnbd
+ )
+ nfs? ( net-fs/nfs-utils )
+ numa? (
+ >sys-process/numactl-2.0.2
+ sys-process/numad
+ )
+ parted? (
+ >=sys-block/parted-1.8[device-mapper]
+ sys-fs/lvm2[lvm]
+ )
+ pcap? ( >=net-libs/libpcap-1.8.0 )
+ policykit? (
+ acct-group/libvirt
+ >=sys-auth/polkit-0.9
+ )
+ qemu? (
+ >=app-emulation/qemu-4.2
+ app-crypt/swtpm
+ dev-libs/json-c:=
+ )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( >=dev-libs/cyrus-sasl-2.1.26 )
+ selinux? ( >=sys-libs/libselinux-2.0.85 )
+ virt-network? (
+ net-dns/dnsmasq[dhcp,ipv6(+),script]
+ net-firewall/ebtables
+ || (
+ >=net-firewall/iptables-1.4.10[ipv6(+)]
+ net-firewall/nftables
+ )
+ net-misc/radvd
+ sys-apps/iproute2[-minimal]
+ )
+ virtiofsd? ( app-emulation/virtiofsd )
+ virtualbox? ( <app-emulation/virtualbox-7.1.0 )
+ wireshark-plugins? ( >=net-analyzer/wireshark-2.6.0:= )
+ xen? (
+ >=app-emulation/xen-4.9.0
+ app-emulation/xen-tools:=
+ )
+ udev? (
+ virtual/libudev:=
+ >=x11-libs/libpciaccess-0.10.9
+ )
+ zfs? ( sys-fs/zfs )
+ kernel_linux? ( sys-apps/util-linux )"
+DEPEND="
+ ${BDEPEND}
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_any_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+# The 'circular' dependency on dev-python/libvirt-python is because of
+# virt-qemu-qmp-proxy.
+PDEPEND="
+ qemu? ( dev-python/libvirt-python )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
+ "${FILESDIR}"/${PN}-11.3.0-fix-paths-for-apparmor.patch
+ "${FILESDIR}"/${PN}-12.1.0-do-not-use-sysconfig.patch
+)
+
+python_check_deps() {
+ if use test; then
+ python_has_version -d "dev-python/pytest[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check kernel configuration:
+ CONFIG_CHECK=""
+ use fuse && CONFIG_CHECK+="
+ ~FUSE_FS"
+
+ use lvm && CONFIG_CHECK+="
+ ~BLK_DEV_DM
+ ~DM_MULTIPATH
+ ~DM_SNAPSHOT"
+
+ use lxc && CONFIG_CHECK+="
+ ~BLK_CGROUP
+ ~CGROUP_CPUACCT
+ ~CGROUP_DEVICE
+ ~CGROUP_FREEZER
+ ~CGROUP_NET_PRIO
+ ~CGROUP_PERF
+ ~CGROUPS
+ ~CGROUP_SCHED
+ ~CPUSETS
+ ~IPC_NS
+ ~MACVLAN
+ ~NAMESPACES
+ ~NET_CLS_CGROUP
+ ~NET_NS
+ ~PID_NS
+ ~POSIX_MQUEUE
+ ~SECURITYFS
+ ~USER_NS
+ ~UTS_NS
+ ~VETH
+ ~!GRKERNSEC_CHROOT_MOUNT
+ ~!GRKERNSEC_CHROOT_DOUBLE
+ ~!GRKERNSEC_CHROOT_PIVOT
+ ~!GRKERNSEC_CHROOT_CHMOD
+ ~!GRKERNSEC_CHROOT_CAPS"
+
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_MARK_T
+ ~BRIDGE_NF_EBTABLES
+ ~NETFILTER_ADVANCED
+ ~NETFILTER_XT_CONNMARK
+ ~NETFILTER_XT_MARK
+ ~NETFILTER_XT_TARGET_CHECKSUM
+ ~NETFILTER_XT_TARGET_MASQUERADE
+ ~NET_ACT_CSUM
+ ~IP_NF_FILTER
+ ~IP_NF_MANGLE
+ ~IP_NF_NAT
+ ~IP6_NF_FILTER
+ ~IP6_NF_MANGLE
+ ~IP6_NF_NAT"
+
+ # Bandwidth Limiting Support
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_T_NAT
+ ~IP_NF_TARGET_REJECT
+ ~NET_ACT_POLICE
+ ~NET_CLS_FW
+ ~NET_CLS_U32
+ ~NET_SCH_HTB
+ ~NET_SCH_INGRESS
+ ~NET_SCH_SFQ"
+
+ ERROR_USER_NS="Optional depending on LXC configuration."
+
+ if [[ -n ${CONFIG_CHECK} ]]; then
+ linux-info_pkg_setup
+ fi
+
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ touch "${S}/.mailmap" || die
+
+ default
+ python_fix_shebang .
+
+ # Skip fragile tests which relies on pristine environment
+ # (Breaks because of sandbox environment variables)
+ # bug #802876
+ sed -i -e "/commandtest/d" tests/meson.build || die
+
+ # Tweak the init script:
+ cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
+ sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
+ -i "${S}/libvirtd.init" || die "sed failed"
+}
+
+src_configure() {
+ # Breaks with always_inline
+ filter-flags -fno-semantic-interposition
+
+ local emesonargs=(
+ $(meson_feature apparmor)
+ $(meson_feature apparmor apparmor_profiles)
+ $(meson_feature audit)
+ $(meson_feature caps capng)
+ $(meson_feature dtrace)
+ $(meson_feature firewalld)
+ $(meson_feature fuse)
+ $(meson_feature glusterfs)
+ $(meson_feature glusterfs storage_gluster)
+ $(meson_feature iscsi storage_iscsi)
+ $(meson_feature iscsi-direct storage_iscsi_direct)
+ $(meson_feature libvirtd driver_libvirtd)
+ $(meson_feature libssh)
+ $(meson_feature libssh2)
+ $(meson_feature lvm storage_lvm)
+ $(meson_feature lvm storage_mpath)
+ $(meson_feature lxc driver_lxc)
+ $(meson_feature nbd nbdkit)
+ $(meson_feature nls)
+ $(meson_feature numa numactl)
+ $(meson_feature numa numad)
+ $(meson_feature parted storage_disk)
+ $(meson_feature pcap libpcap)
+ $(meson_feature policykit polkit)
+ $(meson_feature qemu driver_qemu)
+ $(meson_feature qemu json_c)
+ $(meson_feature rbd storage_rbd)
+ $(meson_feature sasl)
+ $(meson_feature selinux)
+ $(meson_feature test tests)
+ $(meson_feature udev)
+ $(meson_feature virt-network driver_network)
+ $(meson_feature virtualbox driver_vbox)
+ $(meson_feature wireshark-plugins wireshark_dissector)
+ $(meson_feature xen driver_libxl)
+ $(meson_feature zfs storage_zfs)
+
+ -Ddriver_openvz=disabled
+ -Dnetcf=disabled
+ -Dsanlock=disabled
+ -Dopenwsman=disabled
+
+ -Ddriver_esx=enabled
+ -Dinit_script=systemd
+ -Dqemu_user=$(usex caps qemu root)
+ -Dqemu_group=$(usex caps qemu root)
+ -Ddriver_remote=enabled
+ -Dstorage_fs=enabled
+ -Ddriver_vmware=enabled
+
+ --localstatedir="${EPREFIX}/var"
+ -Dinitconfdir="${EPREFIX}/etc/systemd"
+ -Drunstatedir="${EPREFIX}/run"
+ -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+ )
+
+ # Workaround for bug #938302
+ if use dtrace && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ local native_file="${T}"/meson.${CHOST}.ini.local
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ emesonargs+=( --native-file "${native_file}" )
+ fi
+
+ meson_src_configure
+}
+
+src_test() {
+ export VIR_TEST_DEBUG=1
+ # Don't run the syntax check tests, they're fragile and not relevant
+ # to us downstream anyway.
+ # We also crank up the timeout (as Fedora does) just to preempt failures
+ # on slower arches.
+ meson_src_test --no-suite syntax-check --timeout-multiplier 10
+}
+
+src_install() {
+ meson_src_install
+
+ # Depending on configuration option, libvirt will create some bogus
+ # directoreis. They are either not used, or libvirtd is able to create
+ # them on demand, so let's remove them.
+ #
+ # Note, we are using -f here so that rm does not fail or warn if the
+ # directory is nonexistent.
+ rm -rf "${D}"/etc/sysconfig
+ rm -rf "${D}"/var
+ rm -rf "${D}"/run
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+
+ newtmpfiles "${FILESDIR}"/libvirtd.tmpfiles.conf libvirtd.conf
+
+ newinitd "${S}/libvirtd.init" libvirtd
+ newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
+ newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
+ newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd
+
+ newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
+ newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests
+
+ DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
+ touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml || die
+ fi
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+ tmpfiles_process libvirtd.conf
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/libvirt/libvirt-12.2.0.ebuild b/app-emulation/libvirt/libvirt-12.2.0.ebuild
new file mode 100644
index 000000000000..56b7cd21e17d
--- /dev/null
+++ b/app-emulation/libvirt/libvirt-12.2.0.ebuild
@@ -0,0 +1,384 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Packages which get releases together:
+# app-emacs/nxml-libvirt-schemas
+# dev-python/libvirt-python
+# dev-perl/Sys-Virt
+# app-emulation/libvirt
+# Please bump them together!
+
+PYTHON_COMPAT=( python3_{13..14} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libvirt.org.asc
+inherit meson flag-o-matic linux-info python-any-r1 readme.gentoo-r1
+inherit tmpfiles verify-sig
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/libvirt/libvirt.git"
+ EGIT_BRANCH="master"
+else
+ SRC_URI="https://download.libvirt.org/${P}.tar.xz
+ verify-sig? ( https://download.libvirt.org/${P}.tar.xz.asc )"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
+fi
+
+DESCRIPTION="C toolkit to manipulate virtual machines"
+HOMEPAGE="https://www.libvirt.org/ https://gitlab.com/libvirt/libvirt/"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+IUSE="
+ apparmor audit bash-completion +caps dtrace firewalld fuse glusterfs
+ iscsi iscsi-direct +libvirtd lvm libssh libssh2 lxc nbd nfs nls numa
+ parted pcap policykit +qemu rbd sasl selinux test +udev
+ virtiofsd virtualbox +virt-network wireshark-plugins xen zfs
+"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ firewalld? ( virt-network )
+ libvirtd? ( || ( lxc qemu virtualbox xen ) )
+ lxc? ( caps libvirtd )
+ qemu? ( libvirtd )
+ virt-network? ( libvirtd )
+ virtualbox? ( libvirtd )
+ xen? ( libvirtd )"
+
+BDEPEND="
+ app-text/xhtml1
+ dev-lang/perl
+ dev-libs/libxslt
+ dev-perl/XML-XPath
+ dev-python/docutils
+ virtual/pkgconfig
+ bash-completion? ( >=app-shells/bash-completion-2.0 )
+ verify-sig? ( sec-keys/openpgp-keys-libvirt )"
+
+# gettext.sh command is used by the libvirt command wrappers, and it's
+# non-optional, so put it into RDEPEND.
+# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
+# package will use 3 by default. Since we don't have slot pinning in an API,
+# we must go with the most recent.
+RDEPEND="
+ acct-user/qemu
+ app-misc/scrub
+ >=dev-libs/glib-2.66.0
+ dev-libs/libgcrypt
+ dev-libs/libnl:3
+ >=dev-libs/libxml2-2.9.1:=
+ >=net-analyzer/openbsd-netcat-1.105-r1
+ >=net-libs/gnutls-3.2.0:=
+ net-libs/libtirpc:=
+ >=net-misc/curl-7.18.0
+ sys-apps/dbus
+ sys-apps/dmidecode
+ sys-devel/gettext
+ >=sys-libs/readline-7.0:=
+ virtual/acl
+ apparmor? ( sys-libs/libapparmor )
+ audit? ( sys-process/audit )
+ caps? ( sys-libs/libcap-ng )
+ dtrace? ( dev-debug/systemtap )
+ firewalld? ( >=net-firewall/firewalld-0.6.3 )
+ fuse? ( sys-fs/fuse:= )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
+ iscsi? ( >=sys-block/open-iscsi-1.18.0 )
+ iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
+ libssh? ( >=net-libs/libssh-0.8.1:= )
+ libssh2? ( >=net-libs/libssh2-1.3 )
+ lvm? ( >=sys-fs/lvm2-2.02.48-r2[lvm] )
+ lxc? ( !sys-apps/systemd[cgroup-hybrid(-)] )
+ nbd? (
+ sys-block/nbdkit
+ sys-libs/libnbd
+ )
+ nfs? ( net-fs/nfs-utils )
+ numa? (
+ >sys-process/numactl-2.0.2
+ sys-process/numad
+ )
+ parted? (
+ >=sys-block/parted-1.8[device-mapper]
+ sys-fs/lvm2[lvm]
+ )
+ pcap? ( >=net-libs/libpcap-1.8.0 )
+ policykit? (
+ acct-group/libvirt
+ >=sys-auth/polkit-0.9
+ )
+ qemu? (
+ >=app-emulation/qemu-4.2
+ app-crypt/swtpm
+ dev-libs/json-c:=
+ )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( >=dev-libs/cyrus-sasl-2.1.26 )
+ selinux? ( >=sys-libs/libselinux-2.0.85 )
+ virt-network? (
+ net-dns/dnsmasq[dhcp,ipv6(+),script]
+ net-firewall/ebtables
+ || (
+ >=net-firewall/iptables-1.4.10[ipv6(+)]
+ net-firewall/nftables
+ )
+ net-misc/radvd
+ sys-apps/iproute2[-minimal]
+ )
+ virtiofsd? ( app-emulation/virtiofsd )
+ virtualbox? ( <app-emulation/virtualbox-7.1.0 )
+ wireshark-plugins? ( >=net-analyzer/wireshark-2.6.0:= )
+ xen? (
+ >=app-emulation/xen-4.9.0
+ app-emulation/xen-tools:=
+ )
+ udev? (
+ virtual/libudev:=
+ >=x11-libs/libpciaccess-0.10.9
+ )
+ zfs? ( sys-fs/zfs )
+ kernel_linux? ( sys-apps/util-linux )"
+DEPEND="
+ ${BDEPEND}
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_any_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+# The 'circular' dependency on dev-python/libvirt-python is because of
+# virt-qemu-qmp-proxy.
+PDEPEND="
+ qemu? ( dev-python/libvirt-python )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
+ "${FILESDIR}"/${PN}-11.3.0-fix-paths-for-apparmor.patch
+ "${FILESDIR}"/${PN}-12.1.0-do-not-use-sysconfig.patch
+)
+
+python_check_deps() {
+ if use test; then
+ python_has_version -d "dev-python/pytest[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check kernel configuration:
+ CONFIG_CHECK=""
+ use fuse && CONFIG_CHECK+="
+ ~FUSE_FS"
+
+ use lvm && CONFIG_CHECK+="
+ ~BLK_DEV_DM
+ ~DM_MULTIPATH
+ ~DM_SNAPSHOT"
+
+ use lxc && CONFIG_CHECK+="
+ ~BLK_CGROUP
+ ~CGROUP_CPUACCT
+ ~CGROUP_DEVICE
+ ~CGROUP_FREEZER
+ ~CGROUP_NET_PRIO
+ ~CGROUP_PERF
+ ~CGROUPS
+ ~CGROUP_SCHED
+ ~CPUSETS
+ ~IPC_NS
+ ~MACVLAN
+ ~NAMESPACES
+ ~NET_CLS_CGROUP
+ ~NET_NS
+ ~PID_NS
+ ~POSIX_MQUEUE
+ ~SECURITYFS
+ ~USER_NS
+ ~UTS_NS
+ ~VETH
+ ~!GRKERNSEC_CHROOT_MOUNT
+ ~!GRKERNSEC_CHROOT_DOUBLE
+ ~!GRKERNSEC_CHROOT_PIVOT
+ ~!GRKERNSEC_CHROOT_CHMOD
+ ~!GRKERNSEC_CHROOT_CAPS"
+
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_MARK_T
+ ~BRIDGE_NF_EBTABLES
+ ~NETFILTER_ADVANCED
+ ~NETFILTER_XT_CONNMARK
+ ~NETFILTER_XT_MARK
+ ~NETFILTER_XT_TARGET_CHECKSUM
+ ~NETFILTER_XT_TARGET_MASQUERADE
+ ~NET_ACT_CSUM
+ ~IP_NF_FILTER
+ ~IP_NF_MANGLE
+ ~IP_NF_NAT
+ ~IP6_NF_FILTER
+ ~IP6_NF_MANGLE
+ ~IP6_NF_NAT"
+
+ # Bandwidth Limiting Support
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_T_NAT
+ ~IP_NF_TARGET_REJECT
+ ~NET_ACT_POLICE
+ ~NET_CLS_FW
+ ~NET_CLS_U32
+ ~NET_SCH_HTB
+ ~NET_SCH_INGRESS
+ ~NET_SCH_SFQ"
+
+ ERROR_USER_NS="Optional depending on LXC configuration."
+
+ if [[ -n ${CONFIG_CHECK} ]]; then
+ linux-info_pkg_setup
+ fi
+
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ touch "${S}/.mailmap" || die
+
+ default
+ python_fix_shebang .
+
+ # Skip fragile tests which relies on pristine environment
+ # (Breaks because of sandbox environment variables)
+ # bug #802876
+ sed -i -e "/commandtest/d" tests/meson.build || die
+
+ # Tweak the init script:
+ cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
+ sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
+ -i "${S}/libvirtd.init" || die "sed failed"
+}
+
+src_configure() {
+ # Breaks with always_inline
+ filter-flags -fno-semantic-interposition
+
+ local emesonargs=(
+ $(meson_feature apparmor)
+ $(meson_feature apparmor apparmor_profiles)
+ $(meson_feature audit)
+ $(meson_feature caps capng)
+ $(meson_feature dtrace)
+ $(meson_feature firewalld)
+ $(meson_feature fuse)
+ $(meson_feature glusterfs)
+ $(meson_feature glusterfs storage_gluster)
+ $(meson_feature iscsi storage_iscsi)
+ $(meson_feature iscsi-direct storage_iscsi_direct)
+ $(meson_feature libvirtd driver_libvirtd)
+ $(meson_feature libssh)
+ $(meson_feature libssh2)
+ $(meson_feature lvm storage_lvm)
+ $(meson_feature lvm storage_mpath)
+ $(meson_feature lxc driver_lxc)
+ $(meson_feature nbd nbdkit)
+ $(meson_feature nls)
+ $(meson_feature numa numactl)
+ $(meson_feature numa numad)
+ $(meson_feature parted storage_disk)
+ $(meson_feature pcap libpcap)
+ $(meson_feature policykit polkit)
+ $(meson_feature qemu driver_qemu)
+ $(meson_feature qemu json_c)
+ $(meson_feature rbd storage_rbd)
+ $(meson_feature sasl)
+ $(meson_feature selinux)
+ $(meson_feature test tests)
+ $(meson_feature udev)
+ $(meson_feature virt-network driver_network)
+ $(meson_feature virtualbox driver_vbox)
+ $(meson_feature wireshark-plugins wireshark_dissector)
+ $(meson_feature xen driver_libxl)
+ $(meson_feature zfs storage_zfs)
+
+ -Ddriver_openvz=disabled
+ -Dnetcf=disabled
+ -Dsanlock=disabled
+ -Dopenwsman=disabled
+
+ -Ddriver_esx=enabled
+ -Dinit_script=systemd
+ -Dqemu_user=$(usex caps qemu root)
+ -Dqemu_group=$(usex caps qemu root)
+ -Ddriver_remote=enabled
+ -Dstorage_fs=enabled
+ -Ddriver_vmware=enabled
+
+ --localstatedir="${EPREFIX}/var"
+ -Dinitconfdir="${EPREFIX}/etc/systemd"
+ -Drunstatedir="${EPREFIX}/run"
+ -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+ )
+
+ # Workaround for bug #938302
+ if use dtrace && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ local native_file="${T}"/meson.${CHOST}.ini.local
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ emesonargs+=( --native-file "${native_file}" )
+ fi
+
+ meson_src_configure
+}
+
+src_test() {
+ export VIR_TEST_DEBUG=1
+ # Don't run the syntax check tests, they're fragile and not relevant
+ # to us downstream anyway.
+ # We also crank up the timeout (as Fedora does) just to preempt failures
+ # on slower arches.
+ meson_src_test --no-suite syntax-check --timeout-multiplier 10
+}
+
+src_install() {
+ meson_src_install
+
+ # Depending on configuration option, libvirt will create some bogus
+ # directoreis. They are either not used, or libvirtd is able to create
+ # them on demand, so let's remove them.
+ #
+ # Note, we are using -f here so that rm does not fail or warn if the
+ # directory is nonexistent.
+ rm -rf "${D}"/etc/sysconfig
+ rm -rf "${D}"/var
+ rm -rf "${D}"/run
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+
+ newtmpfiles "${FILESDIR}"/libvirtd.tmpfiles.conf libvirtd.conf
+
+ newinitd "${S}/libvirtd.init" libvirtd
+ newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
+ newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
+ newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd
+
+ newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
+ newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests
+
+ DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
+ touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml || die
+ fi
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+ tmpfiles_process libvirtd.conf
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/libvirt/libvirt-9999.ebuild b/app-emulation/libvirt/libvirt-9999.ebuild
new file mode 100644
index 000000000000..0e22fda09e29
--- /dev/null
+++ b/app-emulation/libvirt/libvirt-9999.ebuild
@@ -0,0 +1,384 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Packages which get releases together:
+# app-emacs/nxml-libvirt-schemas
+# dev-python/libvirt-python
+# dev-perl/Sys-Virt
+# app-emulation/libvirt
+# Please bump them together!
+
+PYTHON_COMPAT=( python3_{13..14} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libvirt.org.asc
+inherit meson flag-o-matic linux-info python-any-r1 readme.gentoo-r1
+inherit tmpfiles verify-sig
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/libvirt/libvirt.git"
+ EGIT_BRANCH="master"
+else
+ SRC_URI="https://download.libvirt.org/${P}.tar.xz
+ verify-sig? ( https://download.libvirt.org/${P}.tar.xz.asc )"
+ KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
+fi
+
+DESCRIPTION="C toolkit to manipulate virtual machines"
+HOMEPAGE="https://www.libvirt.org/ https://gitlab.com/libvirt/libvirt/"
+LICENSE="LGPL-2.1"
+SLOT="0/${PV}"
+IUSE="
+ apparmor audit bash-completion +caps dtrace firewalld fuse glusterfs
+ iscsi iscsi-direct +libvirtd lvm libssh libssh2 lxc nbd nfs nls numa
+ parted pcap policykit +qemu rbd sasl selinux test +udev
+ virtiofsd virtualbox +virt-network wireshark-plugins xen zfs
+"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ firewalld? ( virt-network )
+ libvirtd? ( || ( lxc qemu virtualbox xen ) )
+ lxc? ( caps libvirtd )
+ qemu? ( libvirtd )
+ virt-network? ( libvirtd )
+ virtualbox? ( libvirtd )
+ xen? ( libvirtd )"
+
+BDEPEND="
+ app-text/xhtml1
+ dev-lang/perl
+ dev-libs/libxslt
+ dev-perl/XML-XPath
+ dev-python/docutils
+ virtual/pkgconfig
+ bash-completion? ( >=app-shells/bash-completion-2.0 )
+ verify-sig? ( sec-keys/openpgp-keys-libvirt )"
+
+# gettext.sh command is used by the libvirt command wrappers, and it's
+# non-optional, so put it into RDEPEND.
+# We can use both libnl:1.1 and libnl:3, but if you have both installed, the
+# package will use 3 by default. Since we don't have slot pinning in an API,
+# we must go with the most recent.
+RDEPEND="
+ acct-user/qemu
+ app-misc/scrub
+ >=dev-libs/glib-2.66.0
+ dev-libs/libgcrypt
+ dev-libs/libnl:3
+ >=dev-libs/libxml2-2.9.1:=
+ >=net-analyzer/openbsd-netcat-1.105-r1
+ >=net-libs/gnutls-3.2.0:=
+ net-libs/libtirpc:=
+ >=net-misc/curl-7.18.0
+ sys-apps/dbus
+ sys-apps/dmidecode
+ sys-devel/gettext
+ >=sys-libs/readline-7.0:=
+ virtual/acl
+ apparmor? ( sys-libs/libapparmor )
+ audit? ( sys-process/audit )
+ caps? ( sys-libs/libcap-ng )
+ dtrace? ( dev-debug/systemtap )
+ firewalld? ( >=net-firewall/firewalld-0.6.3 )
+ fuse? ( sys-fs/fuse:= )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.1 )
+ iscsi? ( >=sys-block/open-iscsi-1.18.0 )
+ iscsi-direct? ( >=net-libs/libiscsi-1.18.0 )
+ libssh? ( >=net-libs/libssh-0.8.1:= )
+ libssh2? ( >=net-libs/libssh2-1.3 )
+ lvm? ( >=sys-fs/lvm2-2.02.48-r2[lvm] )
+ lxc? ( !sys-apps/systemd[cgroup-hybrid(-)] )
+ nbd? (
+ sys-block/nbdkit
+ sys-libs/libnbd
+ )
+ nfs? ( net-fs/nfs-utils )
+ numa? (
+ >sys-process/numactl-2.0.2
+ sys-process/numad
+ )
+ parted? (
+ >=sys-block/parted-1.8[device-mapper]
+ sys-fs/lvm2[lvm]
+ )
+ pcap? ( >=net-libs/libpcap-1.8.0 )
+ policykit? (
+ acct-group/libvirt
+ >=sys-auth/polkit-0.9
+ )
+ qemu? (
+ >=app-emulation/qemu-4.2
+ app-crypt/swtpm
+ dev-libs/json-c:=
+ )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( >=dev-libs/cyrus-sasl-2.1.26 )
+ selinux? ( >=sys-libs/libselinux-2.0.85 )
+ virt-network? (
+ net-dns/dnsmasq[dhcp,ipv6(+),script]
+ net-firewall/ebtables
+ || (
+ >=net-firewall/iptables-1.4.10[ipv6(+)]
+ net-firewall/nftables
+ )
+ net-misc/radvd
+ sys-apps/iproute2[-minimal]
+ )
+ virtiofsd? ( app-emulation/virtiofsd )
+ virtualbox? ( <app-emulation/virtualbox-7.1.0 )
+ wireshark-plugins? ( >=net-analyzer/wireshark-2.6.0:= )
+ xen? (
+ >=app-emulation/xen-4.9.0
+ app-emulation/xen-tools:=
+ )
+ udev? (
+ virtual/libudev:=
+ >=x11-libs/libpciaccess-0.10.9
+ )
+ zfs? ( sys-fs/zfs )
+ kernel_linux? ( sys-apps/util-linux )"
+DEPEND="
+ ${BDEPEND}
+ ${RDEPEND}
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_any_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+# The 'circular' dependency on dev-python/libvirt-python is because of
+# virt-qemu-qmp-proxy.
+PDEPEND="
+ qemu? ( dev-python/libvirt-python )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-11.0.0-Fix-paths-in-libvirt-guests.sh.in.patch
+ "${FILESDIR}"/${PN}-11.3.0-fix-paths-for-apparmor.patch
+ "${FILESDIR}"/${PN}-12.2.0-do-not-use-sysconfig.patch
+)
+
+python_check_deps() {
+ if use test; then
+ python_has_version -d "dev-python/pytest[${PYTHON_USEDEP}]"
+ fi
+}
+
+pkg_setup() {
+ # Check kernel configuration:
+ CONFIG_CHECK=""
+ use fuse && CONFIG_CHECK+="
+ ~FUSE_FS"
+
+ use lvm && CONFIG_CHECK+="
+ ~BLK_DEV_DM
+ ~DM_MULTIPATH
+ ~DM_SNAPSHOT"
+
+ use lxc && CONFIG_CHECK+="
+ ~BLK_CGROUP
+ ~CGROUP_CPUACCT
+ ~CGROUP_DEVICE
+ ~CGROUP_FREEZER
+ ~CGROUP_NET_PRIO
+ ~CGROUP_PERF
+ ~CGROUPS
+ ~CGROUP_SCHED
+ ~CPUSETS
+ ~IPC_NS
+ ~MACVLAN
+ ~NAMESPACES
+ ~NET_CLS_CGROUP
+ ~NET_NS
+ ~PID_NS
+ ~POSIX_MQUEUE
+ ~SECURITYFS
+ ~USER_NS
+ ~UTS_NS
+ ~VETH
+ ~!GRKERNSEC_CHROOT_MOUNT
+ ~!GRKERNSEC_CHROOT_DOUBLE
+ ~!GRKERNSEC_CHROOT_PIVOT
+ ~!GRKERNSEC_CHROOT_CHMOD
+ ~!GRKERNSEC_CHROOT_CAPS"
+
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_MARK_T
+ ~BRIDGE_NF_EBTABLES
+ ~NETFILTER_ADVANCED
+ ~NETFILTER_XT_CONNMARK
+ ~NETFILTER_XT_MARK
+ ~NETFILTER_XT_TARGET_CHECKSUM
+ ~NETFILTER_XT_TARGET_MASQUERADE
+ ~NET_ACT_CSUM
+ ~IP_NF_FILTER
+ ~IP_NF_MANGLE
+ ~IP_NF_NAT
+ ~IP6_NF_FILTER
+ ~IP6_NF_MANGLE
+ ~IP6_NF_NAT"
+
+ # Bandwidth Limiting Support
+ use virt-network && CONFIG_CHECK+="
+ ~BRIDGE_EBT_T_NAT
+ ~IP_NF_TARGET_REJECT
+ ~NET_ACT_POLICE
+ ~NET_CLS_FW
+ ~NET_CLS_U32
+ ~NET_SCH_HTB
+ ~NET_SCH_INGRESS
+ ~NET_SCH_SFQ"
+
+ ERROR_USER_NS="Optional depending on LXC configuration."
+
+ if [[ -n ${CONFIG_CHECK} ]]; then
+ linux-info_pkg_setup
+ fi
+
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ touch "${S}/.mailmap" || die
+
+ default
+ python_fix_shebang .
+
+ # Skip fragile tests which relies on pristine environment
+ # (Breaks because of sandbox environment variables)
+ # bug #802876
+ sed -i -e "/commandtest/d" tests/meson.build || die
+
+ # Tweak the init script:
+ cp "${FILESDIR}/libvirtd.init-r19" "${S}/libvirtd.init" || die
+ sed -e "s/USE_FLAG_FIREWALLD/$(usex firewalld 'need firewalld' '')/" \
+ -i "${S}/libvirtd.init" || die "sed failed"
+}
+
+src_configure() {
+ # Breaks with always_inline
+ filter-flags -fno-semantic-interposition
+
+ local emesonargs=(
+ $(meson_feature apparmor)
+ $(meson_feature apparmor apparmor_profiles)
+ $(meson_feature audit)
+ $(meson_feature caps capng)
+ $(meson_feature dtrace)
+ $(meson_feature firewalld)
+ $(meson_feature fuse)
+ $(meson_feature glusterfs)
+ $(meson_feature glusterfs storage_gluster)
+ $(meson_feature iscsi storage_iscsi)
+ $(meson_feature iscsi-direct storage_iscsi_direct)
+ $(meson_feature libvirtd driver_libvirtd)
+ $(meson_feature libssh)
+ $(meson_feature libssh2)
+ $(meson_feature lvm storage_lvm)
+ $(meson_feature lvm storage_mpath)
+ $(meson_feature lxc driver_lxc)
+ $(meson_feature nbd nbdkit)
+ $(meson_feature nls)
+ $(meson_feature numa numactl)
+ $(meson_feature numa numad)
+ $(meson_feature parted storage_disk)
+ $(meson_feature pcap libpcap)
+ $(meson_feature policykit polkit)
+ $(meson_feature qemu driver_qemu)
+ $(meson_feature qemu json_c)
+ $(meson_feature rbd storage_rbd)
+ $(meson_feature sasl)
+ $(meson_feature selinux)
+ $(meson_feature test tests)
+ $(meson_feature udev)
+ $(meson_feature virt-network driver_network)
+ $(meson_feature virtualbox driver_vbox)
+ $(meson_feature wireshark-plugins wireshark_dissector)
+ $(meson_feature xen driver_libxl)
+ $(meson_feature zfs storage_zfs)
+
+ -Ddriver_openvz=disabled
+ -Dnetcf=disabled
+ -Dsanlock=disabled
+ -Dopenwsman=disabled
+
+ -Ddriver_esx=enabled
+ -Dinit_script=systemd
+ -Dqemu_user=$(usex caps qemu root)
+ -Dqemu_group=$(usex caps qemu root)
+ -Ddriver_remote=enabled
+ -Dstorage_fs=enabled
+ -Ddriver_vmware=enabled
+
+ --localstatedir="${EPREFIX}/var"
+ -Dinitconfdir="${EPREFIX}/etc/systemd"
+ -Drunstatedir="${EPREFIX}/run"
+ -Ddocdir="${EPREFIX}/usr/share/doc/${PF}"
+ )
+
+ # Workaround for bug #938302
+ if use dtrace && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ local native_file="${T}"/meson.${CHOST}.ini.local
+ cat >> ${native_file} <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ emesonargs+=( --native-file "${native_file}" )
+ fi
+
+ meson_src_configure
+}
+
+src_test() {
+ export VIR_TEST_DEBUG=1
+ # Don't run the syntax check tests, they're fragile and not relevant
+ # to us downstream anyway.
+ # We also crank up the timeout (as Fedora does) just to preempt failures
+ # on slower arches.
+ meson_src_test --no-suite syntax-check --timeout-multiplier 10
+}
+
+src_install() {
+ meson_src_install
+
+ # Depending on configuration option, libvirt will create some bogus
+ # directoreis. They are either not used, or libvirtd is able to create
+ # them on demand, so let's remove them.
+ #
+ # Note, we are using -f here so that rm does not fail or warn if the
+ # directory is nonexistent.
+ rm -rf "${D}"/etc/sysconfig
+ rm -rf "${D}"/var
+ rm -rf "${D}"/run
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+
+ newtmpfiles "${FILESDIR}"/libvirtd.tmpfiles.conf libvirtd.conf
+
+ newinitd "${S}/libvirtd.init" libvirtd
+ newinitd "${FILESDIR}/libvirt-guests.init-r4" libvirt-guests
+ newinitd "${FILESDIR}/virtlockd.init-r2" virtlockd
+ newinitd "${FILESDIR}/virtlogd.init-r2" virtlogd
+
+ newconfd "${FILESDIR}/libvirtd.confd-r5" libvirtd
+ newconfd "${FILESDIR}/libvirt-guests.confd" libvirt-guests
+
+ DOC_CONTENTS=$(<"${FILESDIR}/README.gentoo-r3")
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -e "${ROOT}"/etc/libvirt/qemu/networks/default.xml ]]; then
+ touch "${ROOT}"/etc/libvirt/qemu/networks/default.xml || die
+ fi
+
+ use libvirtd || return 0
+ # From here, only libvirtd-related instructions, be warned!
+ tmpfiles_process libvirtd.conf
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/libvirt/metadata.xml b/app-emulation/libvirt/metadata.xml
new file mode 100644
index 000000000000..861f3021e8d7
--- /dev/null
+++ b/app-emulation/libvirt/metadata.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <maintainer type="person" proxied="yes">
+ <email>michal.privoznik@gmail.com</email>
+ <name>Michal Prívozník</name>
+ </maintainer>
+ <use>
+ <flag name="iscsi-direct">
+ Allow using libiscsi for iSCSI storage pool backend
+ </flag>
+ <flag name="iscsi">
+ Allow using an iSCSI remote storage server as pool for disk image storage
+ </flag>
+ <flag name="lvm">
+ Allow using the Logical Volume Manager (<pkg>sys-fs/lvm2</pkg>) as pool for disk image
+ storage
+ </flag>
+ <flag name="nbd">
+ Allow using <pkg>sys-block/nbdkit</pkg> to access network disks
+ </flag>
+ <flag name="nfs">
+ Allow using Network File System mounts as pool for disk image storage
+ </flag>
+ <flag name="parted">
+ Allow using real disk partitions as pool for disk image storage, using
+ <pkg>sys-block/parted</pkg> to create, resize and delete them.
+ </flag>
+ <flag name="rbd">
+ Enable rados block device support via <pkg>sys-cluster/ceph</pkg>
+ </flag>
+ <flag name="lxc">
+ Support management of Linux Containers virtualisation (<pkg>app-containers/lxc</pkg>)
+ </flag>
+ <flag name="qemu">
+ Support management of QEMU virtualisation (<pkg>app-emulation/qemu</pkg>)
+ </flag>
+ <flag name="xen">
+ Support management of Xen virtualisation (<pkg>app-emulation/xen</pkg>)
+ </flag>
+ <flag name="virtualbox">
+ Support management of VirtualBox virtualisation (<pkg>app-emulation/virtualbox</pkg>)
+ </flag>
+ <flag name="dtrace">Enable dtrace support via <pkg>dev-debug/systemtap</pkg>
+ </flag>
+ <flag name="fuse">Allow LXC to use <pkg>sys-fs/fuse</pkg> for mountpoints</flag>
+ <flag name="numa">
+ Use NUMA for memory segmenting via <pkg>sys-process/numactl</pkg> and
+ <pkg>sys-process/numad</pkg>
+ </flag>
+ <flag name="libvirtd">
+ Builds the libvirtd daemon as well as the client utilities instead of just the client
+ utilities
+ </flag>
+ <flag name="libssh">
+ Use <pkg>net-libs/libssh</pkg> to communicate with remote libvirtd hosts,
+ for example: qemu+libssh://server/system
+ </flag>
+ <flag name="libssh2">
+ Use <pkg>net-libs/libssh2</pkg> to communicate with remote libvirtd hosts,
+ for example: qemu+libssh2://server/system
+ </flag>
+ <flag name="pcap">
+ Support auto learning IP addreses for routing
+ </flag>
+ <flag name="virt-network">
+ Enable virtual networking (NAT) support for guests. Includes all
+ the dependencies for NATed network mode. Effectively any network
+ setup that relies on libvirt to setup and configure network
+ interfaces on your host. This can include bridged and routed
+ networks ONLY if you are allowing libvirt to create and manage
+ the underlying devices for you. In some cases this requires
+ enabling the 'netcf' USE flag (currently unavailable).
+ </flag>
+ <flag name="firewalld">DBus interface to iptables/ebtables allowing
+ for better runtime management of your firewall.</flag>
+ <flag name="wireshark-plugins">
+ Build the <pkg>net-analyzer/wireshark</pkg> plugin for the Libvirt RPC protocol
+ </flag>
+ <flag name="glusterfs">
+ Enable GlusterFS support via <pkg>sys-cluster/glusterfs</pkg>
+ </flag>
+ <flag name="zfs">
+ Enable ZFS backend storage <pkg>sys-fs/zfs</pkg>
+ </flag>
+ <flag name="virtiofsd">
+ Drag in virtiofsd dependency <pkg>app-emulation/virtiofsd</pkg>
+ </flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:libvirt:libvirt</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/nemu/Manifest b/app-emulation/nemu/Manifest
new file mode 100644
index 000000000000..79242f7f3905
--- /dev/null
+++ b/app-emulation/nemu/Manifest
@@ -0,0 +1,2 @@
+DIST nemu-3.3.0.tar.gz 174431 BLAKE2B 62f69bb4789d8b1ce369bca5f82f11e4fc41813ae2732d61f6ae1819bc8e3e052420e6f1a2582c5460dfccd9dd3b98c350968c5a732aad654493f7b03bcacec2 SHA512 3b497d3edccb41ca9b34d6c51079caadc893effd2c026d9b199538574fad173d1c3fe5e5db36b60f07debc774473082b338553e269d1d462203470dee292e107
+DIST nemu-3.4.0.tar.gz 177146 BLAKE2B ac72c9d17b8085d83404e01f532fd2346f35b428f988b5aa1defe669f06be57edd733353996e5e1470c9c99e0d5564d09c5fa9d0df6d9c2d07b4daceb7e0bdb4 SHA512 a76092fa0aeca6a08830658588993f0b8c46f04afaf0b400741df79b2c15eac92e857571d2da2139e646d787611f3b3a2588fa701f943fe7a845e63fe17853bb
diff --git a/app-emulation/nemu/files/nemu-3.4.0-remove-workaround.patch b/app-emulation/nemu/files/nemu-3.4.0-remove-workaround.patch
new file mode 100644
index 000000000000..6356b3e5b16b
--- /dev/null
+++ b/app-emulation/nemu/files/nemu-3.4.0-remove-workaround.patch
@@ -0,0 +1,31 @@
+This workaroud turns on when compiled with LLVM and breaks compilation
+--- a/src/nm_network.c
++++ b/src/nm_network.c
+@@ -6,27 +6,8 @@
+
+ #if defined(NM_OS_LINUX)
+
+-#ifdef NM_NET_IF_FIX
+-/* Temporary work-around for broken glibc vs. linux kernel header definitions
+- * This is already fixed upstream, remove this when distributions have updated.
+- * net/if.h fuckup should be removed someday in future, when kernels <= 4.2
+- * will not be supported
+- * https://github.com/systemd/systemd/commit/ \
+- * 08ce521fb2546921f2642bef067d2cc02158b121
+- * https://github.com/systemd/systemd/commit/ \
+- * 6f270e6bd8b78aedf9f77534d6d11141ea0bf8ca
+- */
+-#define _NET_IF_H 1
+-#include <net/if.h>
+-#ifndef IFNAMSIZ
+-#define IFNAMSIZ 16
+-extern unsigned int if_nametoindex(const char *__ifname) __THROW;
+-#endif
+-#include <linux/if.h>
+-#else
+ #include <net/if.h>
+ #include <linux/if.h>
+-#endif
+
+ #include <time.h>
+ #include <sys/socket.h>
diff --git a/app-emulation/nemu/metadata.xml b/app-emulation/nemu/metadata.xml
new file mode 100644
index 000000000000..e5a5d20ec553
--- /dev/null
+++ b/app-emulation/nemu/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>mail@void.so</email>
+ <name>Pavel Balaev</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <use>
+ <flag name="ovf">Adds support for OVA/OVF import</flag>
+ <flag name="network-map">Adds possibility of exporting network map to SVG</flag>
+ <flag name="remote-api">Adds API for remote control</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/nemu/nemu-3.3.0-r1.ebuild b/app-emulation/nemu/nemu-3.3.0-r1.ebuild
new file mode 100644
index 000000000000..8ac53392e166
--- /dev/null
+++ b/app-emulation/nemu/nemu-3.3.0-r1.ebuild
@@ -0,0 +1,80 @@
+# Copyright 2019-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake linux-info
+
+MY_PV="${PV/_rc/-RC}"
+
+DESCRIPTION="Ncurses interface for QEMU"
+HOMEPAGE="https://github.com/nemuTUI/nemu"
+SRC_URI="https://github.com/nemuTUI/${PN}/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${MY_PV}/"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="dbus network-map +ovf remote-api +usb"
+
+RDEPEND="
+ >=app-emulation/qemu-6.0.0-r3[vnc,virtfs,spice]
+ dev-db/sqlite:3=
+ dev-libs/json-c
+ sys-libs/ncurses:=[unicode(+)]
+ usb? (
+ virtual/libusb:1
+ virtual/libudev:=
+ )
+ dbus? ( sys-apps/dbus )
+ network-map? ( media-gfx/graphviz[svg] )
+ ovf? (
+ dev-libs/libxml2:2=
+ app-arch/libarchive:=
+ )
+ remote-api? ( dev-libs/openssl )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="sys-devel/gettext"
+
+pkg_pretend() {
+ if use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel"
+ else
+ CONFIG_CHECK="~VETH ~MACVTAP"
+ ERROR_VETH="You will need the Virtual ethernet pair device driver compiled"
+ ERROR_VETH+=" into your kernel or loaded as a module to use the"
+ ERROR_VETH+=" local network settings feature."
+ ERROR_MACVTAP="You will also need support for MAC-VLAN based tap driver."
+ check_extra_config
+ fi
+ fi
+}
+
+src_configure() {
+ # -DNM_WITH_QEMU: Do not embbed qemu.
+ local mycmakeargs=(
+ -DNM_WITH_DBUS=$(usex dbus)
+ -DNM_WITH_NETWORK_MAP=$(usex network-map)
+ -DNM_WITH_REMOTE=$(usex remote-api)
+ -DNM_WITH_OVF_SUPPORT=$(usex ovf)
+ -DNM_WITH_QEMU=off
+ -DNM_WITH_USB=$(usex usb)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ docompress -x /usr/share/man/man1/nemu.1.gz
+}
+
+pkg_postinst() {
+ elog "For non-root usage execute script:"
+ elog "/usr/share/nemu/scripts/setup_nemu_nonroot.sh linux <username>"
+ elog "and add udev rule:"
+ elog "cp /usr/share/nemu/scripts/42-net-macvtap-perm.rules /etc/udev/rules.d"
+ elog "Afterwards reboot or reload udev with"
+ elog "udevadm control --reload-rules && udevadm trigger"
+}
diff --git a/app-emulation/nemu/nemu-3.4.0.ebuild b/app-emulation/nemu/nemu-3.4.0.ebuild
new file mode 100644
index 000000000000..9bd2363bf29d
--- /dev/null
+++ b/app-emulation/nemu/nemu-3.4.0.ebuild
@@ -0,0 +1,83 @@
+# Copyright 2019-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake linux-info flag-o-matic
+
+MY_PV="${PV/_rc/-RC}"
+
+DESCRIPTION="Ncurses interface for QEMU"
+HOMEPAGE="https://github.com/nemuTUI/nemu"
+SRC_URI="https://github.com/nemuTUI/${PN}/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${MY_PV}/"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="dbus network-map +ovf remote-api +usb"
+
+RDEPEND="
+ >=app-emulation/qemu-6.0.0-r3[vnc,virtfs,spice]
+ dev-db/sqlite:3=
+ dev-libs/json-c
+ sys-libs/ncurses:=[unicode(+)]
+ usb? (
+ virtual/libusb:1
+ virtual/libudev:=
+ )
+ dbus? ( sys-apps/dbus )
+ network-map? ( media-gfx/graphviz[svg] )
+ ovf? (
+ dev-libs/libxml2:2=
+ app-arch/libarchive:=
+ )
+ remote-api? ( dev-libs/openssl )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="sys-devel/gettext"
+
+PATCHES=( "${FILESDIR}/${P}-remove-workaround.patch" )
+
+pkg_pretend() {
+ if use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel"
+ else
+ CONFIG_CHECK="~VETH ~MACVTAP"
+ ERROR_VETH="You will need the Virtual ethernet pair device driver compiled"
+ ERROR_VETH+=" into your kernel or loaded as a module to use the"
+ ERROR_VETH+=" local network settings feature."
+ ERROR_MACVTAP="You will also need support for MAC-VLAN based tap driver."
+ check_extra_config
+ fi
+ fi
+}
+
+src_configure() {
+ append-cflags -std=gnu17
+ # -DNM_WITH_QEMU: Do not embbed qemu.
+ local mycmakeargs=(
+ -DNM_WITH_DBUS=$(usex dbus)
+ -DNM_WITH_NETWORK_MAP=$(usex network-map)
+ -DNM_WITH_REMOTE=$(usex remote-api)
+ -DNM_WITH_OVF_SUPPORT=$(usex ovf)
+ -DNM_WITH_QEMU=off
+ -DNM_WITH_USB=$(usex usb)
+ )
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ docompress -x /usr/share/man/man1/nemu.1.gz
+}
+
+pkg_postinst() {
+ elog "For non-root usage execute script:"
+ elog "/usr/share/nemu/scripts/setup_nemu_nonroot.sh linux <username>"
+ elog "and add udev rule:"
+ elog "cp /usr/share/nemu/scripts/42-net-macvtap-perm.rules /etc/udev/rules.d"
+ elog "Afterwards reboot or reload udev with"
+ elog "udevadm control --reload-rules && udevadm trigger"
+}
diff --git a/app-emulation/open-vm-tools/Manifest b/app-emulation/open-vm-tools/Manifest
new file mode 100644
index 000000000000..3830a9d6a9b0
--- /dev/null
+++ b/app-emulation/open-vm-tools/Manifest
@@ -0,0 +1 @@
+DIST open-vm-tools-13.0.10-25056151.tar.gz 4341374 BLAKE2B e1198567f598ebae28a0a165b4bccc079db43e53ffd707368f2d16cef35a938fbe9c36ba0363f2315252bc1409bc2544b8ed29aa88e3a8a860a233fb6b7ad6b2 SHA512 c332fd2efb3bc16f2fbb77b7b0d0f4a5bb251b5b4828260bb6cbd96903a38d492f90727dad54ef95e442cf3dcc043032e5581e64e3aee4afb55b9db568a29259
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-Werror.patch b/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-Werror.patch
new file mode 100644
index 000000000000..2593ddb80e5f
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-Werror.patch
@@ -0,0 +1,24 @@
+From fdf599994d58ef47b73dc94d21d3556a2ec5d9da Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Sat, 26 Nov 2016 11:54:33 -0500
+Subject: [PATCH] build: drop -Werror
+
+---
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8d4604e8..4d925f22 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1137,7 +1137,6 @@ AC_C_VOLATILE
+
+ ### General flags / actions
+ CFLAGS="$CFLAGS -Wall"
+-CFLAGS="$CFLAGS -Werror"
+
+ # -Wno-unknown-pragmas is due to gcc not understanding '#pragma ident'
+ # in Xlib.h on OpenSolaris.
+--
+2.11.0.rc2
+
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-icu.patch b/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-icu.patch
new file mode 100644
index 000000000000..ff2731de9481
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools-12.4.5-icu.patch
@@ -0,0 +1,26 @@
+From 08caf83eaa0e66cee8f3e49479cd201a10bb3919 Mon Sep 17 00:00:00 2001
+From: Mike Gilbert <floppym@gentoo.org>
+Date: Sat, 25 Sep 2021 21:14:25 -0400
+Subject: [PATCH] lib/unicode: add ICU_LIBS to LDADD
+
+---
+ lib/unicode/Makefile.am | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lib/unicode/Makefile.am b/lib/unicode/Makefile.am
+index 4284c51c..40261fba 100644
+--- a/lib/unicode/Makefile.am
++++ b/lib/unicode/Makefile.am
+@@ -25,7 +25,9 @@ libUnicode_la_SOURCES += unicodeSimpleTypes.c
+ libUnicode_la_SOURCES += unicodeSimpleOperations.c
+ libUnicode_la_SOURCES += unicodeSimpleTransforms.c
+ libUnicode_la_SOURCES += unicodeStatic.c
++libUnicode_la_LIBADD =
+
+ if HAVE_ICU
+ libUnicode_la_SOURCES += unicodeICU.c
++libUnicode_la_LIBADD += @ICU_LIBS@
+ endif
+--
+2.33.0
+
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch
new file mode 100644
index 000000000000..f49d9248f13a
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glib-with-glibc-2.43-c23.patch
@@ -0,0 +1,37 @@
+glib changes how it provides g_free depending on the glibc version.
+
+https://bugs.gentoo.org/969697
+https://github.com/vmware/open-vm-tools/pull/779
+
+From bfd12cf73d81919843383598e4a9e64c6e5fd97a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 21 Nov 2025 00:29:10 -0800
+Subject: [PATCH] glib_stubs: avoid GLib g_free macro redefinition error
+
+glib 2.78+ defines g_free as an object-size checking macro.
+open-vm-tools overrides g_free(), leading to preprocessor expansion
+inside the function signature and breaking the build.
+
+Undefine the macro before defining the stub.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ open-vm-tools/lib/rpcChannel/glib_stubs.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/lib/rpcChannel/glib_stubs.c b/lib/rpcChannel/glib_stubs.c
+index c32deb073..cb89c6a87 100644
+--- a/lib/rpcChannel/glib_stubs.c
++++ b/lib/rpcChannel/glib_stubs.c
+@@ -35,6 +35,9 @@
+
+ void *g_malloc0(size_t s) { return Util_SafeCalloc(1, s); }
+ void *g_malloc0_n(size_t n, size_t s) { return Util_SafeCalloc(n, s); }
++/* GLib defines g_free as a macro, so undefine it before providing
++ * our own stub implementation. */
++#undef g_free
+ void g_free(void *p) { free(p); }
+
+ void g_mutex_init(GMutex *mutex) { }
+
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch
new file mode 100644
index 000000000000..89589d9e45cf
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools-13.0.10-glibc-2.43-c23.patch
@@ -0,0 +1,145 @@
+https://bugs.gentoo.org/969697
+https://github.com/vmware/open-vm-tools/pull/779
+
+From b309f5d40619f033bbddef5c95682beed31659ac Mon Sep 17 00:00:00 2001
+From: Rudi Heitbaum <rudi@heitbaum.com>
+Date: Mon, 26 Jan 2026 11:55:03 +0000
+Subject: [PATCH] fix initialization discards 'const' qualifier from pointer
+ target type
+
+Since glibc-2.43:
+
+For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr,
+strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return
+pointers into their input arrays now have definitions as macros that
+return a pointer to a const-qualified type when the input argument is
+a pointer to a const-qualified type.
+
+https://lists.gnu.org/archive/html/info-gnu/2026-01/msg00005.html
+
+Signed-off-by: Rudi Heitbaum <rudi@heitbaum.com>
+---
+ open-vm-tools/lib/hgfs/hgfsEscape.c | 6 +++---
+ open-vm-tools/lib/hgfsServer/hgfsServerLinux.c | 2 +-
+ open-vm-tools/lib/misc/strutil.c | 7 ++++---
+ open-vm-tools/lib/nicInfo/nicInfoPosix.c | 2 +-
+ open-vm-tools/libvmtools/i18n.c | 2 +-
+ open-vm-tools/services/plugins/vix/vixTools.c | 2 +-
+ 6 files changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/lib/hgfs/hgfsEscape.c b/lib/hgfs/hgfsEscape.c
+index c4d39b12d..212ea1c79 100644
+--- a/lib/hgfs/hgfsEscape.c
++++ b/lib/hgfs/hgfsEscape.c
+@@ -175,7 +175,7 @@ HgfsAddEscapeCharacter(char const * bufIn, // IN: input name
+ HgfsEscapeContext *escapeContext = (HgfsEscapeContext *)context;
+ uint32 charactersToCopy;
+ uint32 outputSpace;
+- char* illegal;
++ const char* illegal;
+ Bool result = TRUE;
+
+ ASSERT(offset >= escapeContext->processedOffset); // Scanning forward
+@@ -573,7 +573,7 @@ HgfsIsEscapeSequence(char const *bufIn, // IN: input name
+ uint32 length) // IN: length of the name in characters
+ {
+ if (bufIn[offset] == HGFS_ESCAPE_CHAR && offset > 0) {
+- char *substitute;
++ const char *substitute;
+ if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR && offset > 1) {
+ /*
+ * Possibly a valid sequence, check it must be preceded with a substitute
+@@ -887,7 +887,7 @@ HgfsEscapeUndoComponent(char *bufIn, // IN: Characters to be unesc
+ size_t offset = escapePointer - bufIn;
+
+ if (HgfsIsEscapeSequence(bufIn, offset, sizeIn)) {
+- char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]);
++ const char* substitute = strchr(HGFS_SUBSTITUTE_CHARS, bufIn[offset - 1]);
+ if (substitute != NULL) {
+ bufIn[offset - 1] = HGFS_ILLEGAL_CHARS[substitute - HGFS_SUBSTITUTE_CHARS];
+ } else if (bufIn[offset - 1] == HGFS_ESCAPE_SUBSTITUE_CHAR) {
+diff --git a/lib/hgfsServer/hgfsServerLinux.c b/lib/hgfsServer/hgfsServerLinux.c
+index 4a0bc9378..fd1db4a29 100644
+--- a/lib/hgfsServer/hgfsServerLinux.c
++++ b/lib/hgfsServer/hgfsServerLinux.c
+@@ -1364,7 +1364,7 @@ static void
+ HgfsGetHiddenAttr(char const *fileName, // IN: Input filename
+ HgfsFileAttrInfo *attr) // OUT: Struct to copy into
+ {
+- char *baseName;
++ const char *baseName;
+
+ ASSERT(fileName);
+ ASSERT(attr);
+diff --git a/lib/misc/strutil.c b/lib/misc/strutil.c
+index 4fc6502e4..4be63b7b8 100644
+--- a/lib/misc/strutil.c
++++ b/lib/misc/strutil.c
+@@ -1454,6 +1454,7 @@ StrUtil_ReplaceAll(const char *orig, // IN
+ char *result;
+ const char *current;
+ char *tmp;
++ const char *tmp2;
+ size_t lenWhat;
+ size_t lenWith;
+ size_t occurrences = 0;
+@@ -1467,8 +1468,8 @@ StrUtil_ReplaceAll(const char *orig, // IN
+ lenWith = strlen(with);
+
+ current = orig;
+- while ((tmp = strstr(current, what)) != NULL) {
+- current = tmp + lenWhat;
++ while ((tmp2 = strstr(current, what)) != NULL) {
++ current = tmp2 + lenWhat;
+ ++occurrences;
+ }
+
+@@ -1695,7 +1696,7 @@ StrUtilHasListItem(char const *list, // IN:
+ char const *item, // IN:
+ int (*ncmp)(char const *, char const*, size_t)) // IN:
+ {
+- char *foundDelim;
++ const char *foundDelim;
+ int itemLen = strlen(item);
+
+ if (list == NULL) {
+diff --git a/lib/nicInfo/nicInfoPosix.c b/lib/nicInfo/nicInfoPosix.c
+index 0135e6a09..922b4efe2 100644
+--- a/lib/nicInfo/nicInfoPosix.c
++++ b/lib/nicInfo/nicInfoPosix.c
+@@ -263,7 +263,7 @@ static Bool
+ IpEntryMatchesDevice(const char *devName,
+ const char *label)
+ {
+- char *p;
++ const char *p;
+ size_t n;
+
+ if ((p = strchr(label, ':')) != NULL) {
+diff --git a/libvmtools/i18n.c b/libvmtools/i18n.c
+index 3085f72d7..f61406d14 100644
+--- a/libvmtools/i18n.c
++++ b/libvmtools/i18n.c
+@@ -698,7 +698,7 @@ VMTools_BindTextDomain(const char *domain,
+ * If we couldn't find the catalog file for the user's language, see if
+ * we can find a more generic language (e.g., for "en_US", also try "en").
+ */
+- char *sep = Str_Strrchr(lang, '_');
++ const char *sep = Str_Strrchr(lang, '_');
+ if (sep != NULL) {
+ if (usrlang == NULL) {
+ usrlang = Util_SafeStrdup(lang);
+diff --git a/services/plugins/vix/vixTools.c b/services/plugins/vix/vixTools.c
+index 654512c5e..5c79ca12a 100644
+--- a/services/plugins/vix/vixTools.c
++++ b/services/plugins/vix/vixTools.c
+@@ -930,7 +930,7 @@ VixToolsBuildUserEnvironmentTable(const char * const *envp) // IN: optional
+ for (; NULL != *envp; envp++) {
+ char *name;
+ char *value;
+- char *whereToSplit;
++ const char *whereToSplit;
+ size_t nameLen;
+
+ whereToSplit = strchr(*envp, '=');
+
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools.confd b/app-emulation/open-vm-tools/files/open-vm-tools.confd
new file mode 100644
index 000000000000..4414fabdb46e
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools.confd
@@ -0,0 +1,2 @@
+# Set this to no to disable drag and drop (and vmblock) loading.
+VM_DRAG_AND_DROP="yes"
diff --git a/app-emulation/open-vm-tools/files/open-vm-tools.initd b/app-emulation/open-vm-tools/files/open-vm-tools.initd
new file mode 100644
index 000000000000..8b91e4fb4c0a
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/open-vm-tools.initd
@@ -0,0 +1,59 @@
+#!/sbin/openrc-run
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/run/vmtoolsd.pid"
+command="/usr/bin/vmtoolsd"
+command_args="-b ${pidfile}"
+
+vmblockmntpt="/proc/fs/vmblock/mountPoint"
+vmblockfusemntpt="/run/vmblock-fuse"
+
+depend() {
+ before checkfs fsck net X
+}
+
+start_vmblock() {
+ checkpath -d -m 1777 /tmp/VMwareDnD
+ if command -v vmware-vmblock-fuse > /dev/null; then
+ modprobe fuse > /dev/null 2>&1
+ checkpath -d "${vmblockfusemntpt}"
+ ebegin "Mounting vmblock-fuse"
+ vmware-vmblock-fuse \
+ -o subtype=vmware-vmblock,default_permissions,allow_other \
+ "${vmblockfusemntpt}"
+ eend $?
+ else
+ modprobe vmblock > /dev/null 2>&1
+ checkpath -d "${vmblockmntpt}"
+ ebegin "Mounting vmblock"
+ mount -t vmblock vmblock "${vmblockmntpt}"
+ eend $?
+ fi
+}
+
+stop_vmblock() {
+ if [ -d "${vmblockfusemntpt}" ]; then
+ ebegin "Unmounting vmblock-fuse"
+ umount "${vmblockfusemntpt}"
+ eend $?
+ else
+ ebegin "Unmounting vmblock"
+ umount "${vmblockmntpt}"
+ eend $?
+ fi
+}
+
+start_pre() {
+ if [ x"${VM_DRAG_AND_DROP}" = xyes ]; then
+ start_vmblock
+ fi
+ return 0
+}
+
+stop_post() {
+ if [ x"${VM_DRAG_AND_DROP}" = xyes ]; then
+ stop_vmblock
+ fi
+ return 0
+}
diff --git a/app-emulation/open-vm-tools/files/vgauthd.service b/app-emulation/open-vm-tools/files/vgauthd.service
new file mode 100644
index 000000000000..db27bd56ef51
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/vgauthd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=VGAuth Service for open-vm-tools
+Documentation=https://github.com/vmware/open-vm-tools
+ConditionVirtualization=vmware
+PartOf=vmtoolsd.service
+
+[Service]
+# For dev-libs/xerces-c[iconv,-icu]
+EnvironmentFile=-/etc/env.d/50xerces-c
+ExecStart=/usr/bin/VGAuthService -s
+TimeoutStopSec=5
+
+[Install]
+RequiredBy=vmtoolsd.service
diff --git a/app-emulation/open-vm-tools/files/vmtoolsd.service b/app-emulation/open-vm-tools/files/vmtoolsd.service
new file mode 100644
index 000000000000..1226291bc8da
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/vmtoolsd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Service for virtual machines hosted on VMware
+Documentation=https://github.com/vmware/open-vm-tools
+ConditionVirtualization=vmware
+
+[Service]
+ExecStart=/usr/bin/vmtoolsd
+TimeoutStopSec=5
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app-emulation/open-vm-tools/files/vmtoolsd.vgauth.service b/app-emulation/open-vm-tools/files/vmtoolsd.vgauth.service
new file mode 100644
index 000000000000..1cb6e00ecf51
--- /dev/null
+++ b/app-emulation/open-vm-tools/files/vmtoolsd.vgauth.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Service for virtual machines hosted on VMware
+Documentation=https://github.com/vmware/open-vm-tools
+ConditionVirtualization=vmware
+Requires=vgauthd.service
+After=vgauthd.service
+
+[Service]
+ExecStart=/usr/bin/vmtoolsd
+TimeoutStopSec=5
+
+[Install]
+WantedBy=multi-user.target
+Also=vgauthd.service
diff --git a/app-emulation/open-vm-tools/metadata.xml b/app-emulation/open-vm-tools/metadata.xml
new file mode 100644
index 000000000000..5ee89dd0b7a3
--- /dev/null
+++ b/app-emulation/open-vm-tools/metadata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>soap@gentoo.org</email>
+ <name>David Seifert</name>
+ </maintainer>
+ <longdescription>
+ The Open Virtual Machine Tools (open-vm-tools) are the open source
+ implementation of VMware Tools. They are a set of guest operating system
+ virtualization components that enhance performance and user experience
+ of virtual machines.
+ </longdescription>
+ <use>
+ <flag name="deploypkg">Build deploypkg plugin</flag>
+ <flag name="dnet">Enable support for nicinfo</flag>
+ <flag name="doc">Generate API documentation</flag>
+ <flag name="fuse">Enable vmblock-fuse/vmhgfs-fuse</flag>
+ <flag name="gtkmm">Compile with Gtkmm and sigc++ (Recommended)</flag>
+ <flag name="multimon">Enable multimon (Requires X)</flag>
+ <flag name="resolutionkms">Build the linux/unix resolutionkms module</flag>
+ <flag name="vgauth">Build vgauth</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:vmware:tools</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild b/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild
new file mode 100644
index 000000000000..919662c83de1
--- /dev/null
+++ b/app-emulation/open-vm-tools/open-vm-tools-13.0.10-r1.ebuild
@@ -0,0 +1,171 @@
+# Copyright 2007-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools linux-info pam systemd udev
+
+MY_P="${P}-25056151"
+
+DESCRIPTION="Tools for VMware guests"
+HOMEPAGE="https://github.com/vmware/open-vm-tools"
+SRC_URI="https://github.com/vmware/open-vm-tools/releases/download/stable-${PV}/${MY_P}.tar.gz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="amd64 arm64 x86"
+IUSE="X +deploypkg +dnet doc +fuse gtkmm +icu multimon pam +resolutionkms selinux +ssl +vgauth"
+REQUIRED_USE="
+ multimon? ( X )
+ vgauth? ( ssl )"
+
+RDEPEND="
+ dev-libs/glib
+ net-libs/libtirpc
+ deploypkg? ( dev-libs/libmspack )
+ fuse? ( sys-fs/fuse:3= )
+ pam? ( sys-libs/pam )
+ !pam? ( virtual/libcrypt:= )
+ ssl? ( dev-libs/openssl:= )
+ vgauth? (
+ dev-libs/libxml2:=
+ dev-libs/xmlsec:=
+ )
+ X? (
+ x11-libs/gtk+:3[X]
+ x11-libs/libSM
+ x11-libs/libXcomposite
+ x11-libs/libXext
+ x11-libs/libXi
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ x11-libs/libXtst
+ gtkmm? (
+ dev-cpp/gtkmm:3.0
+ dev-libs/libsigc++:2
+ )
+ multimon? ( x11-libs/libXinerama )
+ )
+ dnet? ( dev-libs/libdnet )
+ icu? ( dev-libs/icu:= )
+ resolutionkms? (
+ virtual/libudev
+ || (
+ (
+ >=media-libs/mesa-25.2[-video_cards_vmware]
+ x11-base/xorg-server[xorg]
+ x11-libs/libdrm[-video_cards_vmware]
+ )
+ (
+ <media-libs/mesa-25.2[video_cards_vmware,xa]
+ x11-libs/libdrm[video_cards_vmware]
+ )
+ )
+ )"
+DEPEND="${RDEPEND}
+ net-libs/rpcsvc-proto"
+BDEPEND="
+ dev-util/glib-utils
+ virtual/pkgconfig
+ doc? ( app-text/doxygen )"
+RDEPEND+=" selinux? ( sec-policy/selinux-vmware )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-12.4.5-Werror.patch
+ "${FILESDIR}"/${PN}-12.4.5-icu.patch
+ "${FILESDIR}"/${PN}-13.0.10-glibc-2.43-c23.patch
+ "${FILESDIR}"/${PN}-13.0.10-glib-with-glibc-2.43-c23.patch
+)
+
+pkg_setup() {
+ local CONFIG_CHECK="~VMWARE_BALLOON ~VMWARE_PVSCSI ~VMXNET3 ~VMWARE_VMCI ~VMWARE_VMCI_VSOCKETS ~FUSE_FS"
+ use X && CONFIG_CHECK+=" ~DRM_VMWGFX"
+ kernel_is -lt 5 5 || CONFIG_CHECK+=" ~X86_IOPL_IOPERM"
+ linux-info_pkg_setup
+}
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myeconfargs=(
+ --disable-glibc-check
+ --disable-tests
+ --without-root-privileges
+ $(use_enable multimon)
+ $(use_with X x)
+ $(use_with X gtk3)
+ $(use_with gtkmm gtkmm3)
+ $(use_enable doc docs)
+ $(use_enable resolutionkms)
+ $(use_enable deploypkg)
+ $(use_with pam)
+ $(use_enable vgauth)
+ $(use_with dnet)
+ $(use_with icu)
+ --with-udev-rules-dir="$(get_udevdir)"/rules.d
+ $(use_with fuse fuse 3)
+ # Disable it explicitly, we do not yet list the
+ # containerinfo dependencies in the ebuild
+ --disable-containerinfo
+ # Disable it explicitly, gtk2 is obsolete
+ --without-gtk2
+ # Possibly add a separate USE flag for the utility, or
+ # merge it into resolutionkms
+ --disable-vmwgfxctrl
+ )
+ # Avoid a bug in configure.ac
+ use ssl || myeconfargs+=( --without-ssl )
+
+ # Avoid relying on dnet-config script, which breaks cross-compiling. This
+ # library has no pkg-config file.
+ export CUSTOM_DNET_LIBS="-ldnet"
+
+ econf "${myeconfargs[@]}"
+}
+
+src_install() {
+ default
+ find "${ED}" -name '*.la' -delete || die
+
+ if use pam; then
+ rm "${ED}"/etc/pam.d/vmtoolsd || die
+ pamd_mimic_system vmtoolsd auth account
+ fi
+
+ newinitd "${FILESDIR}/open-vm-tools.initd" vmware-tools
+ newconfd "${FILESDIR}/open-vm-tools.confd" vmware-tools
+
+ if use vgauth; then
+ systemd_newunit "${FILESDIR}"/vmtoolsd.vgauth.service vmtoolsd.service
+ systemd_dounit "${FILESDIR}"/vgauthd.service
+ else
+ systemd_dounit "${FILESDIR}"/vmtoolsd.service
+ fi
+
+ # vmhgfs-fuse is built only when fuse is enabled
+ if use fuse; then
+ # Make fstype = vmhgfs-fuse work in fstab
+ dosym vmhgfs-fuse /usr/bin/mount.vmhgfs-fuse
+ fi
+
+ if use X; then
+ fperms 4711 /usr/bin/vmware-user-suid-wrapper
+ dobin scripts/common/vmware-xdg-detect-de
+ fi
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if has_version ">=media-libs/mesa-25.2" && has_version "x11-drivers/xf86-video-vmware"; then
+ elog "You need to remove x11-drivers/xf86-video-vmware to use the modesetting video driver."
+ fi
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/open-vmdk/Manifest b/app-emulation/open-vmdk/Manifest
new file mode 100644
index 000000000000..89a5ff8627b4
--- /dev/null
+++ b/app-emulation/open-vmdk/Manifest
@@ -0,0 +1,2 @@
+DIST open-vmdk-0.3.12.tar.gz 72452 BLAKE2B 36600b454c45b8ac1c5fda3f4fde982baf02f4883f454d817eb0a5f7e388df7daefce148bd4d5baee1a6b97c90b29d70ef09c4de1db06342ad92c2583ae2df7f SHA512 4a038c899a9e3c013b830dab6514260e72d6905d6e5c2da864bdcc71f125639dc2aba68e9a4a27e96037a0200bd04d0ca2cc17306e8eaf2bf2913f9eaa0afb41
+DIST open-vmdk-0.3.13.tar.gz 85587 BLAKE2B b55e16c33eb2ac8f2700ff96f0e4008164df31c24a1f4f8ebd9f73d7343977a245cf15893830e9c1c9268714cefc5f82e858f12667281c5d24d1b6b7a9ad00d6 SHA512 ec729f4975d7d6c7206f1d4694abda9278a6203210415c9bcd0c17eb7174f947e5d0b841f33a6f211de42ec32f58937065edeb2e9e901f0c5f23f01a87ddbfea
diff --git a/app-emulation/open-vmdk/metadata.xml b/app-emulation/open-vmdk/metadata.xml
new file mode 100644
index 000000000000..b40bfffa8fdc
--- /dev/null
+++ b/app-emulation/open-vmdk/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chewi@gentoo.org</email>
+ <name>James Le Cuirot</name>
+ </maintainer>
+ <use>
+ <flag name="fuse">Install the vmdk-fuse tool</flag>
+ <flag name="python">Install Python-based tools</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/open-vmdk/open-vmdk-0.3.12.ebuild b/app-emulation/open-vmdk/open-vmdk-0.3.12.ebuild
new file mode 100644
index 000000000000..c17133cebbcf
--- /dev/null
+++ b/app-emulation/open-vmdk/open-vmdk-0.3.12.ebuild
@@ -0,0 +1,73 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit python-single-r1 toolchain-funcs
+
+DESCRIPTION="Tools for creating and converting OVA virtual appliance files"
+HOMEPAGE="https://github.com/vmware/open-vmdk"
+SRC_URI="https://github.com/vmware/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="+python test"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="
+ python? ( ${PYTHON_REQUIRED_USE} )
+ test? ( ${PYTHON_REQUIRED_USE} )
+"
+
+PYDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-libs/libxml2[python,${PYTHON_USEDEP}]
+ dev-python/lxml[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/xmltodict[${PYTHON_USEDEP}]
+ ')
+"
+DEPEND="
+ virtual/zlib
+"
+RDEPEND="
+ ${DEPEND}
+ python? ( ${PYDEPEND} )
+"
+BDEPEND="
+ test? (
+ python? ( ${PYDEPEND} )
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+
+pkg_setup() {
+ if use python || use test; then
+ python-single-r1_pkg_setup
+ fi
+}
+
+my_emake() {
+ emake \
+ "$(use python || echo DIRS='vmdk ova templates')" \
+ PREFIX="${EPREFIX}/usr" \
+ "${@}"
+}
+
+src_compile() {
+ my_emake CC="$(tc-getCC)"
+}
+
+src_test() {
+ epytest $(use python || echo pytest/test_{info_options,vmdk}.py)
+}
+
+src_install() {
+ my_emake install DESTDIR="${D}"
+ use python && python_fix_shebang "${ED}"/usr/bin
+}
diff --git a/app-emulation/open-vmdk/open-vmdk-0.3.13.ebuild b/app-emulation/open-vmdk/open-vmdk-0.3.13.ebuild
new file mode 100644
index 000000000000..32fbb2ec3b0c
--- /dev/null
+++ b/app-emulation/open-vmdk/open-vmdk-0.3.13.ebuild
@@ -0,0 +1,81 @@
+# Copyright 2025-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit python-single-r1 toolchain-funcs
+
+DESCRIPTION="Tools for creating and converting OVA virtual appliance files"
+HOMEPAGE="https://github.com/vmware/open-vmdk"
+SRC_URI="https://github.com/vmware/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="fuse +python test"
+RESTRICT="!test? ( test )"
+PROPERTIES="test_network fuse? ( test_privileged )"
+
+REQUIRED_USE="
+ python? ( ${PYTHON_REQUIRED_USE} )
+ test? ( ${PYTHON_REQUIRED_USE} )
+"
+
+PYDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_cond_dep '
+ dev-libs/libxml2[python,${PYTHON_USEDEP}]
+ dev-python/lxml[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+ dev-python/xmltodict[${PYTHON_USEDEP}]
+ ')
+"
+DEPEND="
+ virtual/zlib
+ fuse? ( sys-fs/fuse:3= )
+"
+RDEPEND="
+ ${DEPEND}
+ python? ( ${PYDEPEND} )
+"
+BDEPEND="
+ fuse? ( virtual/pkgconfig )
+ test? (
+ fuse? ( sys-fs/e2fsprogs[fuse] )
+ python? ( ${PYDEPEND} )
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+"
+
+pkg_setup() {
+ if use python || use test; then
+ python-single-r1_pkg_setup
+ fi
+}
+
+my_emake() {
+ emake \
+ "$(use python || echo DIRS='vmdk ova templates')" \
+ PREFIX="${EPREFIX}/usr" \
+ "${@}"
+}
+
+src_compile() {
+ my_emake all $(usev fuse) CC="$(tc-getCC)"
+}
+
+src_test() {
+ local ignore=()
+ use python || ignore+=( pytest/test_*configs.py $(grep -Flr .py pytest) )
+ use fuse || ignore+=( pytest/test_fuse.py )
+ use fuse && addwrite /dev/fuse
+ epytest "${ignore[@]/#/--ignore=}"
+}
+
+src_install() {
+ my_emake install $(usex fuse install-fuse "") DESTDIR="${D}"
+ use python && python_fix_shebang "${ED}"/usr/bin
+}
diff --git a/app-emulation/pcem/Manifest b/app-emulation/pcem/Manifest
new file mode 100644
index 000000000000..e30539c0bd91
--- /dev/null
+++ b/app-emulation/pcem/Manifest
@@ -0,0 +1 @@
+DIST pcem-17_p20241210.tar.gz 1668232 BLAKE2B 5fdf4e0067dfe3924be1ee4a22055e4f5f2dfdfcf3494d0f0ee9e6b3f1641ccc7f1767524416b0fe39daaccab6e805f839c35ca9a178ad4355a0100784ab31dc SHA512 78353704529d7f333d5fc5513be34cc895423418242642e3b7a35e008700a444b1f8b0d477dbd26a84081112eaba2829248c0506cd333e22479751e9e99252e0
diff --git a/app-emulation/pcem/metadata.xml b/app-emulation/pcem/metadata.xml
new file mode 100644
index 000000000000..381717d8fc46
--- /dev/null
+++ b/app-emulation/pcem/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>conikost@gentoo.org</email>
+ <name>Conrad Kostecki</name>
+ </maintainer>
+ <longdescription>
+ PCem (an acronym for Personal Computer emulator) is an open-source,
+ low-level PC emulator developed for Windows and Linux by Sarah Walker.
+
+ It focuses on PC hardware from the 1980's and 1990's.
+ A variety of operating systems can be installed in the emulator,
+ which can then be used to launch programs.
+ </longdescription>
+ <use>
+ <flag name="experimental">Enable experimental devices like printers.</flag>
+ <flag name="networking">Enable support for emulation of network cards.</flag>
+ <flag name="plugins">Enable support for dynamic plugins, which can add additional features.</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://pcem-emulator.co.uk/phpBB3/viewforum.php?f=2</bugs-to>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/pcem/pcem-17_p20241210-r2.ebuild b/app-emulation/pcem/pcem-17_p20241210-r2.ebuild
new file mode 100644
index 000000000000..a1fd7fa7ce8f
--- /dev/null
+++ b/app-emulation/pcem/pcem-17_p20241210-r2.ebuild
@@ -0,0 +1,82 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+EGIT_COMMIT="bd1283b91282d522617ac6d29eb0f271ded83ffc"
+WX_GTK_VER="3.2-gtk3"
+
+inherit cmake desktop flag-o-matic wxwidgets
+
+DESCRIPTION="A PC emulator that specializes in running old operating systems and software"
+HOMEPAGE="https://github.com/sarah-walker-pcem/pcem/"
+SRC_URI="https://github.com/sarah-walker-pcem/${PN}/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/${PN}-${EGIT_COMMIT}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="alsa experimental networking plugins wayland"
+
+RDEPEND="
+ media-libs/libsdl2
+ media-libs/libglvnd
+ media-libs/openal
+ x11-libs/wxGTK:${WX_GTK_VER}=[tiff,X]
+ alsa? ( media-libs/alsa-lib )
+ experimental? ( media-libs/freetype )
+ networking? ( net-libs/libpcap )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+DOCS=( "README.md" "TESTED.md" )
+
+src_prepare() {
+ default
+ cmake_src_prepare
+}
+
+src_configure() {
+ setup-wxwidgets
+
+ # Using RelWithDebInfo bypasses upstream's default (bug #948388)
+ append-flags -fno-strict-aliasing
+ # Workaround for bug #953466
+ append-cflags -std=gnu17
+
+ local mycmakeargs=(
+ -DFORCE_X11=$(usex !wayland)
+ -DPCEM_LIB_DIR="$(get_libdir)"
+ -DPLUGIN_ENGINE=$(usex plugins)
+ -DUSE_ALSA=$(usex alsa)
+ -DUSE_EXPERIMENTAL=$(usex experimental)
+ $(usex experimental '-DUSE_EXPERIMENTAL_PGC=ON')
+ $(usex experimental '-DUSE_EXPERIMENTAL_PRINTER=ON')
+ -DUSE_NETWORKING=$(usex networking)
+ $(usex networking '-DUSE_PCAP_NETWORKING=ON')
+ )
+
+ cmake_src_configure
+}
+
+src_install() {
+ default
+ cmake_src_install
+
+ insinto /usr/share/pcem
+ doins -r nvr
+
+ newicon src/wx-ui/icons/16x16/motherboard.png pcem.png
+ make_desktop_entry "pcem" "PCem" pcem "Development;Utility"
+
+ einstalldocs
+}
+
+pkg_postinst() {
+ elog "In order to use PCem, you will need some roms for various emulated systems."
+ elog "You can either install globally for all users or locally for yourself."
+ elog ""
+ elog "To install globally, put your ROM files into '${ROOT}/usr/share/pcem/roms/<system>'."
+ elog "To install locally, put your ROM files into '~/.pcem/roms/<system>'."
+}
diff --git a/app-emulation/plus42/Manifest b/app-emulation/plus42/Manifest
new file mode 100644
index 000000000000..94b3533202b3
--- /dev/null
+++ b/app-emulation/plus42/Manifest
@@ -0,0 +1,2 @@
+DIST plus42-upstream-1.3.13.tgz 7650256 BLAKE2B f51c8cb58c3d88bdc7f3e57756498e07398e89730f0a1bc47f6b181c2e29b348475ba8d24d730b63140ec19ba54cdb37a507b2ebc7d6c9c32888fbe35bbdf5e6 SHA512 5260ff487b211cbc4a02a73ccb60b95eb092b5c3ad31769f186cd78ec97398a5fa827e6b750a1c63b48db9f3eeeb8dc0f6ed7e200919335c2d03be265508adc0
+DIST plus42-upstream-1.3.15.tgz 7650390 BLAKE2B d69c1dca1237a8ae4c4a6cc8e4d9eb995eb07fea89a15725e92d73d2c204a52fffe79c28ba3d70578529e08c7f8dea611a5a404495c0e3d61e128c4a6e944298 SHA512 48eeda81c8305b2400fe947f61598e8c2fb4c99977b85fe320e1d72635ddd7f90081a7e661b7e204df7968c6b2dbeb8f9901f04a7481352b08e5bd6f38f34581
diff --git a/app-emulation/plus42/files/plus42-1.0.12-fix-build-intel-lib.patch b/app-emulation/plus42/files/plus42-1.0.12-fix-build-intel-lib.patch
new file mode 100644
index 000000000000..c9cde2fbda2c
--- /dev/null
+++ b/app-emulation/plus42/files/plus42-1.0.12-fix-build-intel-lib.patch
@@ -0,0 +1,64 @@
+diff -Naur free42-nologo-3.0.16.orig/gtk/build-intel-lib.sh free42-nologo-3.0.16/gtk/build-intel-lib.sh
+--- free42-nologo-3.0.16.orig/gtk/build-intel-lib.sh 2022-10-29 17:03:11.000000000 +0200
++++ free42-nologo-3.0.16/gtk/build-intel-lib.sh 2022-11-06 22:09:42.384802729 +0100
+@@ -10,13 +10,6 @@
+ fi
+ fi
+
+-which gcc >/dev/null
+-if [ $? -eq 0 ]; then
+- CC=gcc
+-else
+- CC=cc
+-fi
+-
+ # Hack to support FreeBSD; not 100% sure what this does, but it produces a
+ # library that passes all tests.
+
+@@ -64,8 +57,10 @@
+ ;;
+ esac
+
++patch -p0 <../intel-lib-custom-cc.patch
++
+ cd LIBRARY
+-$MK $OS_ARG CC=$CC CALL_BY_REF=1 GLOBAL_RND=1 GLOBAL_FLAGS=1 UNCHANGED_BINARY_FLAGS=0 $ENDIAN_ARG
++$MK $OS_ARG A=a AR_CMD="${AR:-ar} rv" CC=$CC CALL_BY_REF=1 GLOBAL_RND=1 GLOBAL_FLAGS=1 UNCHANGED_BINARY_FLAGS=0 $ENDIAN_ARG
+ mv libbid.a ../../gcc111libbid.a
+ cd ../..
+ ( echo '#ifdef FREE42_FPTEST'; echo 'const char *readtest_lines[] = {'; tr -d '\r' < IntelRDFPMathLib20U1/TESTS/readtest.in | sed 's/^\(.*\)$/"\1",/'; echo '0 };'; echo '#endif' ) > readtest_lines.cc
+diff -Naur free42-nologo-3.0.16.orig/gtk/intel-lib-custom-cc.patch free42-nologo-3.0.16/gtk/intel-lib-custom-cc.patch
+--- free42-nologo-3.0.16.orig/gtk/intel-lib-custom-cc.patch 1970-01-01 01:00:00.000000000 +0100
++++ free42-nologo-3.0.16/gtk/intel-lib-custom-cc.patch 2022-11-06 22:18:35.428433045 +0100
+@@ -0,0 +1,31 @@
++diff -Naur orig/LIBRARY/makefile.iml_head LIBRARY/makefile.iml_head
++--- orig/LIBRARY/makefile.iml_head 2011-07-12 17:26:21.000000000 +0200
+++++ LIBRARY/makefile.iml_head 2022-11-06 22:18:17.048411637 +0100
++@@ -527,12 +527,8 @@
++ CC_TYPES := gcc cl
++ INTEL_CC_LIST := icc icl
++
++-CC_NAME_INDEX := $(call GetIndex,$(CC_NAME),$(CC_NAME_LIST))
++-ifeq ($(CC_NAME_INDEX),)
++- $(error "Unknown CC_NAME ($(CC_NAME)). Must be one of $(CC_NAME_LIST))
++-endif
++
++-CC_INDEX := $(call GetIndex,$(CC_NAME),$(CC_NAME_LIST))
+++CC_INDEX := 3
++ CC_TYPE := $(word $(CC_INDEX),$(CC_TYPE_LIST))
++ CC_TYPE_INDEX := $(call GetIndex,$(CC_TYPE),$(CC_TYPES))
++
++@@ -543,13 +539,6 @@
++ _CPP := $(CC_NAME) $(call CcNameSelect,-EP,-EP,-E -P,-EP)
++ _CC := $(CC_NAME) $(call CcNameSelect,, -nologo,, -nologo)
++
++-ifeq ($(origin CC),default)
++- CC := $(_CC)
++-endif
++-ifeq ($(origin CPP),default)
++- CPP := $(_CPP)
++-endif
++-
++ CselCc = $(call Cset,$1,$(call CcTypeSelect,$2,$3))
++
++ QOPT := $(call CselCc, QOPT, -, /Q )
diff --git a/app-emulation/plus42/files/plus42-1.0.9-fix-makefile.patch b/app-emulation/plus42/files/plus42-1.0.9-fix-makefile.patch
new file mode 100644
index 000000000000..b66c15b89b5a
--- /dev/null
+++ b/app-emulation/plus42/files/plus42-1.0.9-fix-makefile.patch
@@ -0,0 +1,25 @@
+diff -Naur plus42-upstream-1.0.9.orig/gtk/Makefile plus42-upstream-1.0.9/gtk/Makefile
+--- plus42-upstream-1.0.9.orig/gtk/Makefile 2022-06-19 14:44:32.000000000 +0200
++++ plus42-upstream-1.0.9/gtk/Makefile 2022-07-04 19:37:35.533799322 +0200
+@@ -40,9 +40,10 @@
+ -DDECIMAL_GLOBAL_EXCEPTION_FLAGS=1 \
+ -DDECIMAL_GLOBAL_EXCEPTION_FLAGS_ACCESS_FUNCTIONS=1
+
+-CXXFLAGS = $(CFLAGS) \
++CXXFLAGS := $(CFLAGS) \
+ -fno-rtti \
+- -D_WCHAR_T_DEFINED
++ -D_WCHAR_T_DEFINED \
++ ${CXXFLAGS}
+
+ LIBS = gcc111libbid.a $(shell $(PKG_CONFIG) --libs gtk+-3.0)
+
+@@ -121,7 +122,7 @@
+ ./keymap2cc
+
+ gcc111libbid.a:
+- sh ./build-intel-lib.sh
++ +sh ./build-intel-lib.sh
+ ln -s IntelRDFPMathLib20U1/TESTS/readtest.c
+
+ symlinks:
diff --git a/app-emulation/plus42/metadata.xml b/app-emulation/plus42/metadata.xml
new file mode 100644
index 000000000000..e7778ddc74c3
--- /dev/null
+++ b/app-emulation/plus42/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>voyageur@gentoo.org</email>
+ <name>Bernard Cafarelli</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/plus42/plus42-1.3.13.ebuild b/app-emulation/plus42/plus42-1.3.13.ebuild
new file mode 100644
index 000000000000..cd3eded57331
--- /dev/null
+++ b/app-emulation/plus42/plus42-1.3.13.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_PV="${PN}-upstream-${PV}"
+
+DESCRIPTION="An Enhanced HP-42S Calculator Simulator"
+HOMEPAGE="https://thomasokken.com/plus42/"
+SRC_URI="https://thomasokken.com/plus42/upstream/${MY_PV}.tgz"
+S=${WORKDIR}/${MY_PV}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+alsa"
+
+DEPEND="app-accessibility/at-spi2-core
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf
+ x11-libs/gtk+:3
+ alsa? ( media-libs/alsa-lib )"
+RDEPEND="${DEPEND}"
+
+DOCS=( CREDITS HISTORY README )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.0.9-fix-makefile.patch"
+ "${FILESDIR}/${PN}-1.0.12-fix-build-intel-lib.patch"
+)
+
+src_prepare() {
+ default
+}
+
+src_compile() {
+ local myconf
+ use alsa && myconf="AUDIO_ALSA=yes"
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" ${myconf} -C gtk
+ emake -C gtk clean
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" BCD_MATH=1 ${myconf} -C gtk
+}
+
+src_install() {
+ default
+ dobin gtk/plus42bin gtk/plus42dec
+}
diff --git a/app-emulation/plus42/plus42-1.3.15.ebuild b/app-emulation/plus42/plus42-1.3.15.ebuild
new file mode 100644
index 000000000000..cd3eded57331
--- /dev/null
+++ b/app-emulation/plus42/plus42-1.3.15.ebuild
@@ -0,0 +1,49 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+MY_PV="${PN}-upstream-${PV}"
+
+DESCRIPTION="An Enhanced HP-42S Calculator Simulator"
+HOMEPAGE="https://thomasokken.com/plus42/"
+SRC_URI="https://thomasokken.com/plus42/upstream/${MY_PV}.tgz"
+S=${WORKDIR}/${MY_PV}
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="+alsa"
+
+DEPEND="app-accessibility/at-spi2-core
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf
+ x11-libs/gtk+:3
+ alsa? ( media-libs/alsa-lib )"
+RDEPEND="${DEPEND}"
+
+DOCS=( CREDITS HISTORY README )
+
+PATCHES=(
+ "${FILESDIR}/${PN}-1.0.9-fix-makefile.patch"
+ "${FILESDIR}/${PN}-1.0.12-fix-build-intel-lib.patch"
+)
+
+src_prepare() {
+ default
+}
+
+src_compile() {
+ local myconf
+ use alsa && myconf="AUDIO_ALSA=yes"
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" ${myconf} -C gtk
+ emake -C gtk clean
+ emake CC="$(tc-getCC)" CXX="$(tc-getCXX)" BCD_MATH=1 ${myconf} -C gtk
+}
+
+src_install() {
+ default
+ dobin gtk/plus42bin gtk/plus42dec
+}
diff --git a/app-emulation/protontricks/Manifest b/app-emulation/protontricks/Manifest
new file mode 100644
index 000000000000..046ae3182d35
--- /dev/null
+++ b/app-emulation/protontricks/Manifest
@@ -0,0 +1,2 @@
+DIST protontricks-1.13.1.tar.gz 182965 BLAKE2B 61d80914b89e17cb2eade6265676dde35d85a18836467bf8c177c03c4935c50e9200bc41f50fc826e6a287b6c30d88c3dba597eb885ad9e1333c6140c4794309 SHA512 8f50ea609ffff37b82adbcbdd8ed5a2c305e25300b253fc072b0a22d10bd88c71e3756d215e7d462b59be1c251aa6220f9e9f1c5fc72a18f47edfd456a744ecc
+DIST protontricks-1.14.1.tar.gz 187504 BLAKE2B c0cd58543131ae4bcb71c858d9c0d34337e4de4a6b978c9336bc0350bbf441bce808aa6f6addbac7d7ea1b473d9c294c6441b3c4dd9fe83390b5e549f7965380 SHA512 b02317f77b225297eae4c25b30369ef349e6242ba07c4a145da586736c4e2737adf2d61b81a99bf58d7b096eaa7dbe6d704218583b4862fa9ecf262b831b02d7
diff --git a/app-emulation/protontricks/metadata.xml b/app-emulation/protontricks/metadata.xml
new file mode 100644
index 000000000000..19ff99eef985
--- /dev/null
+++ b/app-emulation/protontricks/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chewi@gentoo.org</email>
+ <name>James Le Cuirot</name>
+ </maintainer>
+ <stabilize-allarches />
+ <longdescription lang="en">
+ A simple wrapper script that allows you to easily run Winetricks commands for Steam Play/Proton
+ games. This is often useful when a game requires closed-source runtime libraries that are not
+ included with Proton, or to activate Gallium Nine (native Direct3D 9 support) for a Proton game,
+ without all the tedious messing around with Wine prefixes.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/protontricks/protontricks-1.13.1.ebuild b/app-emulation/protontricks/protontricks-1.13.1.ebuild
new file mode 100644
index 000000000000..dc40c4977464
--- /dev/null
+++ b/app-emulation/protontricks/protontricks-1.13.1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 pypi xdg-utils
+
+DESCRIPTION="app-emulation/winetricks wrapper for Proton (Steam Play) games"
+HOMEPAGE="https://github.com/Matoking/protontricks"
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="+gui"
+
+RDEPEND="
+ app-emulation/winetricks[gui?]
+ $(python_gen_cond_dep '
+ dev-python/pillow[${PYTHON_USEDEP}]
+ >=dev-python/vdf-3.4_p20240630[${PYTHON_USEDEP}]
+ ')
+ gui? ( gnome-extra/zenity )"
+BDEPEND="$(python_gen_cond_dep '
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+')"
+
+DOCS=( CHANGELOG.md README.md )
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ default
+ sed -i "/^from /s/\._vdf/vdf/g" src/protontricks/steam.py || die
+ rm -r src/protontricks/_vdf || die
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+
+ elog
+
+ if ! use gui; then
+ ewarn "Please note that disabling USE=gui does *not* presently remove the --gui command-line option,"
+ ewarn "it just means using this option will fail unless gnome-extra/zenity happens to be installed."
+ ewarn
+ fi
+
+ elog "Protontricks can only find games for which a Proton prefix already exists."
+ elog "Make sure to run a Proton game at least once before trying to use protontricks on it."
+ elog
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+}
diff --git a/app-emulation/protontricks/protontricks-1.14.1.ebuild b/app-emulation/protontricks/protontricks-1.14.1.ebuild
new file mode 100644
index 000000000000..705e651c523f
--- /dev/null
+++ b/app-emulation/protontricks/protontricks-1.14.1.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_SINGLE_IMPL=1
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 pypi xdg-utils
+
+DESCRIPTION="app-emulation/winetricks wrapper for Proton (Steam Play) games"
+HOMEPAGE="https://github.com/Matoking/protontricks"
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="+gui"
+
+RDEPEND="
+ app-emulation/winetricks[gui?]
+ sys-apps/bubblewrap
+ $(python_gen_cond_dep '
+ dev-python/pillow[${PYTHON_USEDEP}]
+ >=dev-python/vdf-3.4_p20240630[${PYTHON_USEDEP}]
+ ')
+ gui? ( gnome-extra/zenity )"
+BDEPEND="$(python_gen_cond_dep '
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+')"
+
+DOCS=( CHANGELOG.md README.md )
+
+distutils_enable_tests pytest
+
+src_prepare() {
+ default
+ sed -i "/^from /s/\._vdf/vdf/g" src/protontricks/steam.py || die
+ rm -r src/protontricks/_vdf || die
+}
+
+pkg_postinst() {
+ xdg_desktop_database_update
+
+ elog
+
+ if ! use gui; then
+ ewarn "Please note that disabling USE=gui does *not* presently remove the --gui command-line option,"
+ ewarn "it just means using this option will fail unless gnome-extra/zenity happens to be installed."
+ ewarn
+ fi
+
+ elog "Protontricks can only find games for which a Proton prefix already exists."
+ elog "Make sure to run a Proton game at least once before trying to use protontricks on it."
+ elog
+}
+
+pkg_postrm() {
+ xdg_desktop_database_update
+}
diff --git a/app-emulation/punes/Manifest b/app-emulation/punes/Manifest
new file mode 100644
index 000000000000..8161798f4ed7
--- /dev/null
+++ b/app-emulation/punes/Manifest
@@ -0,0 +1 @@
+DIST punes-0.111.tar.gz 57538299 BLAKE2B a900fe2bc9117e6739e58a43e457bfa466053d5a96ae5ad1333d7e0bc11eafb2408a96dc7e35ddf1a3cee50cafe99549a43d2abb629b106bbb1082878a845cc6 SHA512 6388cdf2b303e217adfe43b1b3b1ef66a75b6adfdb0363b213c47fc129b5815f3e96814ee25a3637147dc184203cef0438930c280f0c6249085ecac1220b435c
diff --git a/app-emulation/punes/files/punes-0.111-FULLSCREEN_RESFREQ-fix.patch b/app-emulation/punes/files/punes-0.111-FULLSCREEN_RESFREQ-fix.patch
new file mode 100644
index 000000000000..065483ad058f
--- /dev/null
+++ b/app-emulation/punes/files/punes-0.111-FULLSCREEN_RESFREQ-fix.patch
@@ -0,0 +1,33 @@
+From e1516fcefe3dcc9710ae85cce0f536fd2d9fdcd6 Mon Sep 17 00:00:00 2001
+From: Fabio Cavallo <punes.development@gmail.com>
+Date: Sat, 23 Mar 2024 10:34:34 +0100
+Subject: [PATCH] Fixed compilation with FULLSCREEN_RESFREQ disabled (#388).
+
+--- a/src/core/emu.c
++++ b/src/core/emu.c
+@@ -43,11 +43,11 @@
+ #include "recent_roms.h"
+ #include "../../c++/crc/crc.h"
+ #include "gui.h"
++#include "nes20db.h"
+ #include "video/effects/pause.h"
+ #include "video/effects/tv_noise.h"
+ #if defined (FULLSCREEN_RESFREQ)
+ #include "video/gfx_monitor.h"
+-#include "nes20db.h"
+ #endif
+
+ #define RS_SCALE (1.0f / (1.0f + (float)RAND_MAX))
+--- a/src/gui/wdgOverlayUi.cpp
++++ b/src/gui/wdgOverlayUi.cpp
+@@ -34,9 +34,9 @@
+ #include "rewind.h"
+ #include "version.h"
+ #include "nes.h"
++#include "input/standard_controller.h"
+ #if defined (FULLSCREEN_RESFREQ)
+ #include "video/gfx_monitor.h"
+-#include "input/standard_controller.h"
+ #endif
+
+ void overlay_info_append_qstring(BYTE alignment, const QString &msg);
diff --git a/app-emulation/punes/files/punes-0.111-ffmpeg8.patch b/app-emulation/punes/files/punes-0.111-ffmpeg8.patch
new file mode 100644
index 000000000000..b0abc470cbb1
--- /dev/null
+++ b/app-emulation/punes/files/punes-0.111-ffmpeg8.patch
@@ -0,0 +1,141 @@
+From https://github.com/punesemu/puNES/commit/49f86fcf0fab37d4761b713b0a9e7dc342b8f594
+From https://github.com/punesemu/puNES/commit/094686fc806c51b105167080fad093f830a9bc04
+From https://github.com/punesemu/puNES/commit/057f49044ec547de1ace03911a317a99e31f25cc
+--- a/src/core/recording.c
++++ b/src/core/recording.c
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (C) 2010-2024 Fabio Cavallo (aka FHorse)
++ * Copyright (C) 2010-2026 Fabio Cavallo (aka FHorse)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -204,8 +204,10 @@ void recording_init(void) {
+ }
+ av_dict_free(&opts);
+ opts = NULL;
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 0, 0)
+ avcodec_close(test);
+- av_free(test);
++#endif
++ avcodec_free_context(&test);
+ if (finded) {
+ break;
+ }
+@@ -487,7 +489,9 @@ static void ffmpeg_fstream_close(_ffmpeg_stream *fs) {
+ fs->encode = FALSE;
+ fs->avc = NULL;
+ if (fs->avcc) {
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 0, 0)
+ avcodec_close(fs->avcc);
++#endif
+ avcodec_free_context(&fs->avcc);
+ }
+ if (fs->avf) {
+@@ -1054,7 +1058,11 @@ static BYTE ffmpeg_video_add_stream_format_h264(void) {
+ if (vbr < 4000) {
+ vbr = 4000;
+ }
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 31, 102)
++ video->avcc->profile = AV_PROFILE_H264_HIGH;
++#else
+ video->avcc->profile = FF_PROFILE_H264_HIGH;
++#endif
+ video->avcc->bit_rate = (int64_t)vbr;
+ }
+ video->avcc->thread_count = FFMIN(8, gui_hardware_concurrency());
+@@ -1453,8 +1461,16 @@ INLINE static BYTE ffmpeg_audio_write_frame(SWORD *data) {
+ }
+
+ static enum AVSampleFormat ffmpeg_audio_select_sample_fmt(const AVCodec *codec) {
+- const enum AVSampleFormat *p = codec->sample_fmts;
++ const enum AVSampleFormat *sample_fmts = NULL;
++ const enum AVSampleFormat *p = NULL;
+
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100)
++ sample_fmts = codec->sample_fmts;
++#else
++ avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, (const void **)&sample_fmts, NULL);
++#endif
++
++ p = sample_fmts;
+ if (!p) {
+ return (AV_SAMPLE_FMT_S16);
+ }
+@@ -1465,13 +1481,20 @@ static enum AVSampleFormat ffmpeg_audio_select_sample_fmt(const AVCodec *codec)
+ }
+ p++;
+ }
+- return (codec->sample_fmts[0]);
++ return (sample_fmts[0]);
+ }
+ static int ffmpeg_audio_select_samplerate(const AVCodec *codec) {
+ int snd_sample_rate = (snd.samplerate ? snd.samplerate : 44100), best_samplerate = 0;
++ const int *supported_samplerates = NULL;
+ const int *p = NULL;
+
+- if (!codec->supported_samplerates) {
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100)
++ supported_samplerates = codec->supported_samplerates;
++#else
++ avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_RATE, 0, (const void **)&supported_samplerates, NULL);
++#endif
++
++ if (supported_samplerates == NULL) {
+ switch (codec->id) {
+ case AV_CODEC_ID_PCM_S16LE:
+ case AV_CODEC_ID_PCM_S16BE:
+@@ -1488,13 +1511,13 @@ static int ffmpeg_audio_select_samplerate(const AVCodec *codec) {
+ }
+ }
+
+- p = codec->supported_samplerates;
++ p = supported_samplerates;
+ while (*p) {
+ best_samplerate = FFMAX(*p, best_samplerate);
+ p++;
+ }
+
+- p = codec->supported_samplerates;
++ p = supported_samplerates;
+ while (*p) {
+ if ((*p) == snd_sample_rate) {
+ best_samplerate = snd_sample_rate;
+@@ -1605,10 +1628,17 @@ static AVFrame *ffmpeg_audio_alloc_frame(enum AVSampleFormat sample_fmt, const A
+ return (avframe);
+ }
+ static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLayout *dst) {
+- const AVChannelLayout *p = NULL, *best_ch_layout = NULL;
++ const AVChannelLayout *best_ch_layout = NULL;
++ const AVChannelLayout *ch_layouts = NULL;
++ const AVChannelLayout *p = NULL;
+ int best_nb_channels = 0;
+
+- if (!codec->ch_layouts) {
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100)
++ ch_layouts = codec->ch_layouts;
++#else
++ avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, (const void **)&ch_layouts, NULL);
++#endif
++ if (ch_layouts == NULL) {
+ switch (codec->id) {
+ case AV_CODEC_ID_PCM_S16LE:
+ case AV_CODEC_ID_PCM_S16BE:
+@@ -1628,7 +1658,7 @@ static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLay
+ }
+ }
+
+- p = codec->ch_layouts;
++ p = ch_layouts;
+ while (p->nb_channels) {
+ int nb_channels = p->nb_channels;
+
+@@ -1639,7 +1669,7 @@ static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLay
+ p++;
+ }
+
+- p = codec->ch_layouts;
++ p = ch_layouts;
+ while (p->nb_channels) {
+ int nb_channels = p->nb_channels;
+
diff --git a/app-emulation/punes/files/punes-0.111-qt6.7_Q_OBJECT.patch b/app-emulation/punes/files/punes-0.111-qt6.7_Q_OBJECT.patch
new file mode 100644
index 000000000000..4b368c980112
--- /dev/null
+++ b/app-emulation/punes/files/punes-0.111-qt6.7_Q_OBJECT.patch
@@ -0,0 +1,17 @@
+https://github.com/punesemu/puNES/commit/6e51b1a6107ad3de97edd40ae4ec2d41b32d804f.patch
+From: Cosima Neidahl <opna2608@protonmail.com>
+Date: Fri, 31 May 2024 14:48:50 +0200
+Subject: [PATCH] Fix compatibility with Qt 6.7.1 (#403)
+
+Upstream QTBUG-105023 fix made it mandatory that arguments to QObject::findChild[ren] calls must be Q_OBJECTs.
+--- a/src/gui/dlgStdPad.hpp
++++ b/src/gui/dlgStdPad.hpp
+@@ -47,6 +47,8 @@ typedef struct _joy_list {
+ extern _joy_list joy_list;
+
+ class pixmapButton: public QPushButton {
++ Q_OBJECT
++
+ private:
+ QPixmap pixmap;
+
diff --git a/app-emulation/punes/files/punes-0.111-qt6.9-compatibility.patch b/app-emulation/punes/files/punes-0.111-qt6.9-compatibility.patch
new file mode 100644
index 000000000000..a9befea9bb35
--- /dev/null
+++ b/app-emulation/punes/files/punes-0.111-qt6.9-compatibility.patch
@@ -0,0 +1,50 @@
+From https://github.com/punesemu/puNES/commit/ff906e0a79eeac9a2d16783e0accf65748bb275e
+From: Fabio Cavallo <punes.development@gmail.com>
+Date: Fri, 9 May 2025 16:24:54 +0200
+Subject: [PATCH] Updated code for Qt 6.9.0 compatibility (#423).
+
+--- a/src/gui/qt.cpp
++++ b/src/gui/qt.cpp
+@@ -1137,8 +1137,8 @@ BYTE gui_load_lut(void *l, const uTCHAR *path) {
+ return (EXIT_OK);
+ }
+ void gui_save_screenshot(int w, int h, int stride, char *buffer, BYTE flip) {
+- QString basename = QString(uQString(gui_data_folder())) + QString(SCRSHT_FOLDER) + "/"
+- + QFileInfo(uQString(info.rom.file)).completeBaseName();
++ QString basename = QString(uQString(gui_data_folder())) + QString(SCRSHT_FOLDER) + "/" +
++ QFileInfo(uQString(info.rom.file)).completeBaseName();
+ QImage screenshot = QImage((uchar *)buffer, w, h, stride, QImage::Format_RGB32);
+ QFile file;
+ uint count = 0;
+@@ -1148,7 +1148,7 @@ void gui_save_screenshot(int w, int h, int stride, char *buffer, BYTE flip) {
+ }
+
+ for (count = 1; count < 999999; count++) {
+- QString final = basename + QString("_%1.png").arg(count, 6, 'd', 0, '0');
++ QString final = basename + QString("_%1.png").arg(count, 6, 10, QChar(u'0'));
+
+ if (!QFileInfo::exists(final)) {
+ file.setFileName(final);
+@@ -1157,7 +1157,11 @@ void gui_save_screenshot(int w, int h, int stride, char *buffer, BYTE flip) {
+ }
+
+ if (flip) {
++#if QT_VERSION < QT_VERSION_CHECK(6, 9, 0)
+ screenshot = screenshot.mirrored(false, true);
++#else
++ screenshot = screenshot.flipped(Qt::Vertical);
++#endif
+ }
+
+ file.open(QIODevice::WriteOnly);
+--- a/src/gui/wdgStatusBar.cpp
++++ b/src/gui/wdgStatusBar.cpp
+@@ -137,7 +137,7 @@ void alignmentStatusBar::update_label(void) {
+ if (cfg->ppu_alignment == PPU_ALIGMENT_DEFAULT) {
+ hide();
+ } else {
+- label->setText(QString("c%0p%1").arg(ppu_alignment.cpu, 2, 'd', 0, '0').arg(ppu_alignment.ppu));
++ label->setText(QString("c%0p%1").arg(ppu_alignment.cpu, 2, 10, QChar(u'0')).arg(ppu_alignment.ppu));
+ show();
+ }
+ }
diff --git a/app-emulation/punes/metadata.xml b/app-emulation/punes/metadata.xml
new file mode 100644
index 000000000000..ca3b89e57d9b
--- /dev/null
+++ b/app-emulation/punes/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>azamat.hackimov@gmail.com</email>
+ <name>Azamat H. Hackimov</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <use>
+ <flag name="cg">Add support for Nvidia CG Toolkit</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/punes/punes-0.111-r2.ebuild b/app-emulation/punes/punes-0.111-r2.ebuild
new file mode 100644
index 000000000000..31e697ff4318
--- /dev/null
+++ b/app-emulation/punes/punes-0.111-r2.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Bundled sources without direct including as cmake sub-project, #957577
+CMAKE_QA_COMPAT_SKIP=1
+
+inherit cmake xdg
+
+DESCRIPTION="Nintendo Entertainment System (NES) emulator"
+HOMEPAGE="https://github.com/punesemu/puNES"
+SRC_URI="https://github.com/punesemu/puNES/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+S="${WORKDIR}/puNES-${PV}"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~x86"
+IUSE="X cg ffmpeg"
+
+RDEPEND="
+ dev-qt/qtbase:6[gui,network,opengl,widgets]
+ dev-qt/qtsvg:6
+ media-libs/alsa-lib
+ media-libs/libglvnd[X?]
+ virtual/glu
+ virtual/udev
+ X? (
+ x11-libs/libX11
+ x11-libs/libXrandr
+ )
+ cg? ( media-gfx/nvidia-cg-toolkit )
+ ffmpeg? ( media-video/ffmpeg:= )
+"
+
+DEPEND="
+ ${RDEPEND}
+ X? ( x11-base/xorg-proto )"
+BDEPEND="
+ virtual/pkgconfig
+ dev-qt/qttools[linguist]
+"
+
+PATCHES=(
+ "${FILESDIR}/punes-0.111-FULLSCREEN_RESFREQ-fix.patch"
+ "${FILESDIR}/punes-0.111-qt6.7_Q_OBJECT.patch"
+ "${FILESDIR}/punes-0.111-qt6.9-compatibility.patch"
+ "${FILESDIR}/punes-0.111-ffmpeg8.patch"
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DENABLE_GIT_INFO=OFF
+ -DENABLE_QT6_LIBS=ON
+ -DDISABLE_PORTABLE_MODE=OFF
+ -DENABLE_FFMPEG=$(usex ffmpeg)
+ -DENABLE_FULLSCREEN_RESFREQ=$(usex X)
+ -DENABLE_OPENGL_CG=$(usex cg)
+ )
+ cmake_src_configure
+}
diff --git a/app-emulation/q4wine/Manifest b/app-emulation/q4wine/Manifest
new file mode 100644
index 000000000000..2a19a218a769
--- /dev/null
+++ b/app-emulation/q4wine/Manifest
@@ -0,0 +1 @@
+DIST q4wine-1.4.2.tar.gz 3196971 BLAKE2B c5b6f5fd34e1fe0e87e823d60b8cf5285d126b8c118ddce78e4bff544cc6b844874b92a77ace22a58beed839e498e2de33d0ae59c3488747f7133932011394f8 SHA512 a30b9bb33b6bf702fa24d10d52e844c9403790a4c98d34a84e7fc47325383fec6a165b48c05a215bcfc68fbb328cc15b5b3836c4ad58e575721e2157b00ec18d
diff --git a/app-emulation/q4wine/metadata.xml b/app-emulation/q4wine/metadata.xml
new file mode 100644
index 000000000000..942e365162f6
--- /dev/null
+++ b/app-emulation/q4wine/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="ico">Enable ico support via <pkg>media-gfx/icoutils</pkg>
+ </flag>
+ <flag name="iso">Support unprivileged mounting of ISO9660 images via <pkg>sys-fs/fuseiso</pkg>
+ </flag>
+ <flag name="wineappdb">Enable Wine AppDB browser support</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/q4wine/q4wine-1.4.2.ebuild b/app-emulation/q4wine/q4wine-1.4.2.ebuild
new file mode 100644
index 000000000000..ce080fe04efc
--- /dev/null
+++ b/app-emulation/q4wine/q4wine-1.4.2.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake xdg
+
+DESCRIPTION="Qt GUI configuration tool for Wine"
+HOMEPAGE="https://q4wine.brezblock.org.ua/"
+SRC_URI="https://github.com/brezerk/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug +ico +iso +wineappdb"
+
+DEPEND="
+ dev-qt/qtbase:6[dbus,gui,network,sql,sqlite,ssl,widgets,xml]
+ dev-qt/qtsvg:6
+ ico? ( >=media-gfx/icoutils-0.26.0 )
+"
+RDEPEND="${DEPEND}
+ app-admin/sudo
+ >=sys-apps/which-2.19
+ iso? ( sys-fs/fuseiso )
+"
+BDEPEND="dev-qt/qttools:6[linguist]"
+
+DOCS=( {AUTHORS,Changelog,README}.md )
+
+src_configure() {
+ local mycmakeargs=(
+ -DDEBUG=$(usex debug ON OFF)
+ -DWITH_ICOUTILS=$(usex ico ON OFF)
+ -DWITH_SYSTEM_SINGLEAPP=OFF
+ -DWITH_WINEAPPDB=$(usex wineappdb ON OFF)
+ -DUSE_BZIP2=OFF
+ -DUSE_GZIP=OFF
+ -DWITH_DBUS=ON
+ )
+ cmake_src_configure
+}
diff --git a/app-emulation/qemu-guest-agent/Manifest b/app-emulation/qemu-guest-agent/Manifest
new file mode 100644
index 000000000000..2a52565e751d
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/Manifest
@@ -0,0 +1,3 @@
+DIST qemu-10.2.2.tar.xz 141119364 BLAKE2B 810efae886e5ba56900882455cc8714923378e34995dceaec8177ba5cc7f922547b7cbf68f7ac3804e498b3b4b3895165646c81ff9ad50b09c8286e8b2293a72 SHA512 c5409530505c2d1e69a80f1750e377261cea8fee42516a0a89d0343b19d55f9d33579cef181d7cc04d51519e50a55dff1b89175e7685bb803468c8ce03929591
+DIST qemu-8.2.0.tar.xz 130008888 BLAKE2B a63667042e1e19c635568072d8dcc117320117e81e374a93cfb79e2363ebf505df3217fb098638e53c899eb6f83435221e8031f2aae003c27ec25af8654683b3 SHA512 92ec41196ff145cdbb98948f6b6e43214fa4b4419554a8a1927fb4527080c8212ccb703e184baf8ee0bdfa50ad7a84689e8f5a69eba1bd7bbbdfd69e3b91256c
+DIST qemu-9.2.0.tar.xz 135188800 BLAKE2B 5800556f356e4324124e250c02a07857eef3a6f22995a819fe972061fa750ebf7233da64ae4c0a3e775b1639c870be4b7312d86d9866fedf2bc99074aad0a10a SHA512 f92548623e4e31400c823a2d78417a8a4ecfccb07f3ee4883e2f2ad33054539d2a37d076dbc64df42c6c86c08fa7c2c975cd6e823aa14d5f20cef83348006813
diff --git a/app-emulation/qemu-guest-agent/files/qemu-8.1.0-find-sphinx.patch b/app-emulation/qemu-guest-agent/files/qemu-8.1.0-find-sphinx.patch
new file mode 100644
index 000000000000..b6ef6214af55
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-8.1.0-find-sphinx.patch
@@ -0,0 +1,10 @@
+This gets confused by python-any-r1 and tries to find sphinx-build in ${T}.
+--- a/docs/meson.build
++++ b/docs/meson.build
+@@ -1,5 +1,4 @@
+-sphinx_build = find_program(fs.parent(python.full_path()) / 'sphinx-build',
+- required: get_option('docs'))
++sphinx_build = find_program('sphinx-build', required: get_option('docs'))
+
+ # Check if tools are available to build documentation.
+ build_docs = false
diff --git a/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.service b/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.service
new file mode 100644
index 000000000000..51cd7b37ff79
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=QEMU Guest Agent
+BindTo=dev-virtio\x2dports-org.qemu.guest_agent.0.device
+After=dev-virtio\x2dports-org.qemu.guest_agent.0.device
+
+[Service]
+ExecStart=-/usr/bin/qemu-ga
+Restart=always
+RestartSec=0
+
+[Install]
diff --git a/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.udev b/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.udev
new file mode 100644
index 000000000000..8a290abbd3e3
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-ga-systemd.udev
@@ -0,0 +1,2 @@
+SUBSYSTEM=="virtio-ports", ATTR{name}=="org.qemu.guest_agent.0", \
+ TAG+="systemd" ENV{SYSTEMD_WANTS}="qemu-guest-agent.service"
diff --git a/app-emulation/qemu-guest-agent/files/qemu-ga.conf-r1 b/app-emulation/qemu-guest-agent/files/qemu-ga.conf-r1
new file mode 100644
index 000000000000..a1a78df3dea0
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-ga.conf-r1
@@ -0,0 +1,11 @@
+# Specifies the transport method used to communicate to QEMU on the host side
+# Default: virtio-serial
+#GA_METHOD="virtio-serial"
+
+# Specifies the device path for the communications back to QEMU on the host
+# Default: /dev/virtio-ports/org.qemu.guest_agent.0
+#GA_PATH="/dev/virtio-ports/org.qemu.guest_agent.0"
+
+# Additional options to qemu-guest-agent such as --fsfreeze-hook
+# See qemu-ga --help for more info
+#GA_OPTIONS="-F/etc/qemu/fsfreeze-hook"
diff --git a/app-emulation/qemu-guest-agent/files/qemu-ga.init-r2 b/app-emulation/qemu-guest-agent/files/qemu-ga.init-r2
new file mode 100644
index 000000000000..29cf9859083e
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-ga.init-r2
@@ -0,0 +1,11 @@
+#!/sbin/openrc-run
+# Copyright 1999-2024 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+GA_METHOD=${GA_METHOD:-virtio-serial}
+GA_PATH=${GA_PATH:-/dev/virtio-ports/org.qemu.guest_agent.0}
+
+description="QEMU Guest Agent (qemu-ga) for use when running inside a VM"
+command="/usr/bin/qemu-ga"
+pidfile="/run/qemu-ga.pid"
+command_args="-m ${GA_METHOD} -p ${GA_PATH} -l /var/log/qemu-ga.log -d -f ${pidfile} -t /run ${GA_OPTIONS}"
diff --git a/app-emulation/qemu-guest-agent/files/qemu-ga.logrotate b/app-emulation/qemu-guest-agent/files/qemu-ga.logrotate
new file mode 100644
index 000000000000..ffcc477d3358
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/files/qemu-ga.logrotate
@@ -0,0 +1,9 @@
+/var/log/qemu-ga.log {
+ weekly
+ missingok
+ rotate 4
+ compress
+ delaycompress
+ copytruncate
+ minsize 100k
+}
diff --git a/app-emulation/qemu-guest-agent/metadata.xml b/app-emulation/qemu-guest-agent/metadata.xml
new file mode 100644
index 000000000000..13baa11ee161
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ajak@gentoo.org</email>
+ <name>John Helmert III</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>sam@gentoo.org</email>
+ <name>Sam James</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:qemu:qemu</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/qemu-guest-agent/qemu-guest-agent-10.2.2.ebuild b/app-emulation/qemu-guest-agent/qemu-guest-agent-10.2.2.ebuild
new file mode 100644
index 000000000000..626d4e2c3158
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/qemu-guest-agent-10.2.2.ebuild
@@ -0,0 +1,114 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit edo linux-info python-any-r1 systemd toolchain-funcs udev
+
+MY_PN="qemu"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="QEMU Guest Agent (qemu-ga) for use when running inside a VM"
+HOMEPAGE="https://wiki.qemu.org/Features/GuestAgent"
+SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2 BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~x86"
+
+RDEPEND="dev-libs/glib"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/distlib[${PYTHON_USEDEP}]
+ ')
+ dev-lang/perl
+ app-alternatives/ninja
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # FreeBSD & OpenBSD
+ elf_aux_info
+)
+
+PATCHES=(
+ "${FILESDIR}"/qemu-8.1.0-find-sphinx.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/distlib[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ # While qemu-ga supports multiple modes, virtio-serial is the
+ # default. Make sure it's enabled in kernel.
+ CONFIG_CHECK="~VIRTIO_CONSOLE"
+ linux-info_pkg_setup
+ python-any-r1_pkg_setup
+}
+
+src_configure() {
+ tc-export AR LD OBJCOPY RANLIB
+
+ local myconf=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --libdir="/usr/$(get_libdir)"
+ --localstatedir=/
+ --disable-bsd-user
+ --disable-linux-user
+ --disable-system
+ --disable-strip
+ --enable-tools
+ --disable-werror
+ --without-default-features
+ --enable-guest-agent
+ --python="${PYTHON}"
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --host-cc="$(tc-getBUILD_CC)"
+ )
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && myconf+=( --cross-prefix="${CHOST}-" )
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_test() {
+ # qga only uses generic code covered by qobject tests,
+ # the full test suite requires at least one softmmu binary
+ emake check-unit
+}
+
+src_install() {
+ dobin build/qga/qemu-ga
+
+ # Normal init stuff
+ newinitd "${FILESDIR}/qemu-ga.init-r2" qemu-guest-agent
+ newconfd "${FILESDIR}/qemu-ga.conf-r1" qemu-guest-agent
+
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/qemu-ga.logrotate" qemu-guest-agent
+
+ # systemd stuff
+ udev_newrules "${FILESDIR}/qemu-ga-systemd.udev" 99-qemu-guest-agent.rules
+
+ systemd_newunit "${FILESDIR}/qemu-ga-systemd.service" \
+ qemu-guest-agent.service
+}
+
+pkg_postinst() {
+ elog "You should add 'qemu-guest-agent' to the default runlevel."
+ elog "e.g. rc-update add qemu-guest-agent default"
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/qemu-guest-agent/qemu-guest-agent-8.2.0.ebuild b/app-emulation/qemu-guest-agent/qemu-guest-agent-8.2.0.ebuild
new file mode 100644
index 000000000000..1c70df60df28
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/qemu-guest-agent-8.2.0.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit edo linux-info python-any-r1 systemd toolchain-funcs udev
+
+MY_PN="qemu"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="QEMU Guest Agent (qemu-ga) for use when running inside a VM"
+HOMEPAGE="https://wiki.qemu.org/Features/GuestAgent"
+SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2 BSD-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 ~ppc ~ppc64 x86"
+
+RDEPEND="dev-libs/glib"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/distlib[${PYTHON_USEDEP}]
+ ')
+ dev-lang/perl
+ app-alternatives/ninja
+"
+
+PATCHES=(
+ "${FILESDIR}"/qemu-8.1.0-find-sphinx.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/distlib[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ # While qemu-ga supports multiple modes, virtio-serial is the
+ # default. Make sure it's enabled in kernel.
+ CONFIG_CHECK="~VIRTIO_CONSOLE"
+ linux-info_pkg_setup
+ python-any-r1_pkg_setup
+}
+
+src_configure() {
+ tc-export AR LD OBJCOPY RANLIB
+
+ local myconf=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --libdir="/usr/$(get_libdir)"
+ --localstatedir=/
+ --disable-bsd-user
+ --disable-linux-user
+ --disable-system
+ --disable-strip
+ --enable-tools
+ --disable-werror
+ --without-default-features
+ --enable-guest-agent
+ --python="${PYTHON}"
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --host-cc="$(tc-getBUILD_CC)"
+ )
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && myconf+=( --cross-prefix="${CHOST}-" )
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_test() {
+ # qga only uses generic code covered by qobject tests,
+ # the full test suite requires at least one softmmu binary
+ emake check-unit
+}
+
+src_install() {
+ dobin build/qga/qemu-ga
+
+ # Normal init stuff
+ newinitd "${FILESDIR}/qemu-ga.init-r2" qemu-guest-agent
+ newconfd "${FILESDIR}/qemu-ga.conf-r1" qemu-guest-agent
+
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/qemu-ga.logrotate" qemu-guest-agent
+
+ # systemd stuff
+ udev_newrules "${FILESDIR}/qemu-ga-systemd.udev" 99-qemu-guest-agent.rules
+
+ systemd_newunit "${FILESDIR}/qemu-ga-systemd.service" \
+ qemu-guest-agent.service
+}
+
+pkg_postinst() {
+ elog "You should add 'qemu-guest-agent' to the default runlevel."
+ elog "e.g. rc-update add qemu-guest-agent default"
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/qemu-guest-agent/qemu-guest-agent-9.2.0.ebuild b/app-emulation/qemu-guest-agent/qemu-guest-agent-9.2.0.ebuild
new file mode 100644
index 000000000000..688db3a31de4
--- /dev/null
+++ b/app-emulation/qemu-guest-agent/qemu-guest-agent-9.2.0.ebuild
@@ -0,0 +1,114 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit edo linux-info python-any-r1 systemd toolchain-funcs udev
+
+MY_PN="qemu"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="QEMU Guest Agent (qemu-ga) for use when running inside a VM"
+HOMEPAGE="https://wiki.qemu.org/Features/GuestAgent"
+SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="GPL-2 BSD-2"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 ~ppc ~ppc64 x86"
+
+RDEPEND="dev-libs/glib"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/distlib[${PYTHON_USEDEP}]
+ ')
+ dev-lang/perl
+ app-alternatives/ninja
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ # FreeBSD & OpenBSD
+ elf_aux_info
+)
+
+PATCHES=(
+ "${FILESDIR}"/qemu-8.1.0-find-sphinx.patch
+)
+
+python_check_deps() {
+ python_has_version "dev-python/distlib[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ # While qemu-ga supports multiple modes, virtio-serial is the
+ # default. Make sure it's enabled in kernel.
+ CONFIG_CHECK="~VIRTIO_CONSOLE"
+ linux-info_pkg_setup
+ python-any-r1_pkg_setup
+}
+
+src_configure() {
+ tc-export AR LD OBJCOPY RANLIB
+
+ local myconf=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --libdir="/usr/$(get_libdir)"
+ --localstatedir=/
+ --disable-bsd-user
+ --disable-linux-user
+ --disable-system
+ --disable-strip
+ --enable-tools
+ --disable-werror
+ --without-default-features
+ --enable-guest-agent
+ --python="${PYTHON}"
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --host-cc="$(tc-getBUILD_CC)"
+ )
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && myconf+=( --cross-prefix="${CHOST}-" )
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_test() {
+ # qga only uses generic code covered by qobject tests,
+ # the full test suite requires at least one softmmu binary
+ emake check-unit
+}
+
+src_install() {
+ dobin build/qga/qemu-ga
+
+ # Normal init stuff
+ newinitd "${FILESDIR}/qemu-ga.init-r2" qemu-guest-agent
+ newconfd "${FILESDIR}/qemu-ga.conf-r1" qemu-guest-agent
+
+ insinto /etc/logrotate.d
+ newins "${FILESDIR}/qemu-ga.logrotate" qemu-guest-agent
+
+ # systemd stuff
+ udev_newrules "${FILESDIR}/qemu-ga-systemd.udev" 99-qemu-guest-agent.rules
+
+ systemd_newunit "${FILESDIR}/qemu-ga-systemd.service" \
+ qemu-guest-agent.service
+}
+
+pkg_postinst() {
+ elog "You should add 'qemu-guest-agent' to the default runlevel."
+ elog "e.g. rc-update add qemu-guest-agent default"
+ udev_reload
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/qemu-init-scripts/Manifest b/app-emulation/qemu-init-scripts/Manifest
new file mode 100644
index 000000000000..7a55781b4102
--- /dev/null
+++ b/app-emulation/qemu-init-scripts/Manifest
@@ -0,0 +1 @@
+DIST qemu-init-scripts-0.3.0.tar.xz 4584 BLAKE2B 836cdf49b5c85333a18fb9c18efb012598474617ffa35d2ff2eea717546da0f1f0374b98b315ad67a1fedc32bd65f3879f6553915aec2f3e230644a93862909b SHA512 49427572ce0636400ad3e389ed143fa9b1d637a7a89649cd5e265e409d3d745babe28f6af8cac3d9a249a8d5cc6554b321c0613f35824d604dcd814a44033c51
diff --git a/app-emulation/qemu-init-scripts/files/openrc-run.patch b/app-emulation/qemu-init-scripts/files/openrc-run.patch
new file mode 100644
index 000000000000..5592ff2e1151
--- /dev/null
+++ b/app-emulation/qemu-init-scripts/files/openrc-run.patch
@@ -0,0 +1,10 @@
+diff --git a/qemu-init-script b/qemu-init-script
+index 937ddfe..b2c060f 100755
+--- a/qemu-init-script
++++ b/qemu-init-script
+@@ -1,4 +1,4 @@
+-#!/sbin/runscript
++#!/sbin/openrc-run
+ # Copyright 2009-2013 Gentoo Foundation
+ # Distributed under the terms of the GNU General Public License v2
+
diff --git a/app-emulation/qemu-init-scripts/metadata.xml b/app-emulation/qemu-init-scripts/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/app-emulation/qemu-init-scripts/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/qemu-init-scripts/qemu-init-scripts-0.3.0-r1.ebuild b/app-emulation/qemu-init-scripts/qemu-init-scripts-0.3.0-r1.ebuild
new file mode 100644
index 000000000000..b953a36d13ca
--- /dev/null
+++ b/app-emulation/qemu-init-scripts/qemu-init-scripts-0.3.0-r1.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+DESCRIPTION="Kvm and qemu init scripts"
+HOMEPAGE="https://gitweb.gentoo.org/proj/kvm-tools.git/"
+
+SRC_URI="https://dev.gentoo.org/~dolsen/releases/${PN}/${P}.tar.xz"
+LICENSE="GPL-2"
+SLOT=0
+KEYWORDS="~amd64 ~x86"
+
+RDEPEND="
+ app-emulation/qemu
+ net-misc/socat"
+
+S="${WORKDIR}/${PN}"
+PATCHES=( "${FILESDIR}"/openrc-run.patch )
+
+src_install() {
+ newinitd "${S}/"qemu-init-script qemu
+ newconfd "${S}/"qemu-conf.example qemu.conf.example
+ newsbin "${S}/"qtap-manipulate qtap-manipulate
+ dosym qemu /etc/init.d/kvm
+}
+
+pkg_postinst() {
+ elog "For bridging networking systems, you need these run time utilities:"
+ elog " net-misc/bridge-utils"
+ elog " sys-apps/usermode-utilities"
+ elog ""
+ elog "We will be updating these scripts to use"
+ elog "iptables exclusively in the future"
+}
diff --git a/app-emulation/qemu/Manifest b/app-emulation/qemu/Manifest
new file mode 100644
index 000000000000..07870a7f9694
--- /dev/null
+++ b/app-emulation/qemu/Manifest
@@ -0,0 +1,11 @@
+DIST berkeley-softfloat-3-b64af41c3276f97f0e181920400ee056b9c88037.tar.bz2 84094 BLAKE2B 396f9df2e6ad559545054e89916915c3a3c8ff80e5e409498fec497b564d8b3ac9dd3cb966e26dce232ddff82af18a0e84e864ca18a80c2a2f4fe47e320249c2 SHA512 93c20d50a356c90f4293d8c7593611b2e0a9bc7567b6d946319f8ae06962ae1e297c8788f66fd38a1d3a0d44661bff9a07a63eaa84c8bb40ae01a45476be446c
+DIST berkeley-testfloat-3-e7af9751d9f9fd3b47911f51a5cfd08af256a9ab.tar.bz2 90020 BLAKE2B 3dda1ba90c4a5ad5cbce2acf35e93f7adbd387ae0e0f929b2cd4cbdf263f95183103118f32be38e8c80de49d7df44c26319ee2f465061d004ae7e64e43eeeb3e SHA512 65f41f42ea563b2cdceb6c71633f41e6694a79ffd02afed4540353a8e73668ae40118dfc108163aae751acbaa7c49630ed99f423465089503c03aee76b07f221
+DIST keycodemapdb-f5772a62ec52591ff6870b7e8ef32482371f22c6.tar.bz2 27971 BLAKE2B 0ed69ad24c53bd459c8753565814bcc1cd858f20d3a046c38912a35bcb0ba6d388ef5d2b93157cd028959284b330caf5467d82071c3df56a405dd8e08fd177c7 SHA512 8f2cc14e8bd46cb045e3ebfe32e463793ab7472ebda9b57b8ea0b06fa107a1a99c3ebcacb9c4548e30698d8ec154c0e56f789385201182b680819b8068a103f2
+DIST qemu-10.0.0-docs.tar.xz 2651472 BLAKE2B 38be083c0c046e975a829df28089428425904cf66a3ea99cebc99b6f51eebdedf10a60be0c4f6bfb9e6f6cbc5dff1724dcd3b8d0982b5c421158258d869db4f3 SHA512 5f9332340bf68b3c0da4b48174330674f5235b98c3e275792fcbeec4bacca2faa84865c01c0cdd1e95388d9656a5dbf1d6baca2d1c8b2996c42511c966d9edd7
+DIST qemu-10.0.7.tar.xz 141766020 BLAKE2B 13016dfe09da81417f3359f980b2b62a857a28e6acce2b01eba3f397b985c422e52f3c68724bfad73ce6fbeec65cabb02d2df09f08340f9dad68578d5e3f801e SHA512 6def50d5ed08fde787e982a5ae668f97323d40f1996bc299c4c79fbd2944eb14c3f4d1ceab977a0fe6f80298825a5285decc20afca1966a738900932fbfeb31d
+DIST qemu-10.1.0-docs.tar.xz 2788092 BLAKE2B c9f1138e6eb19966da05b5be6e28640cabf698cb7c4247e0a69b29ed71d462423ba356efc8c0f26a727a58b4adc84edc3eefbff12a35e0c93e475f0ab51e6ff7 SHA512 96d9133d83991014c3ce9a57273a017f45bf29ae3f7029c5b926c8c5fbfd0e8da80dbbecca038b981312cec68b931a0471837a0aebd3e5dbc1648eb49e28ecc9
+DIST qemu-10.1.3.tar.xz 142006316 BLAKE2B d0e3781a7fe84190eb96e9dd34860222b74fd73da182684f289c359c2555e8b02c0f3e77d3342837fe2ff5c5ce3ad81dac642fae9eab1d9e52f2bcac28ffe6c0 SHA512 67608a5a422c93c494159d649a0afb296231ec2d96a6fc03b119375da4180162ba25a74bb6204a8cb36375709c1f682ef56c42961816dc2107f4d67bb8e10db4
+DIST qemu-10.2.0-docs.tar.xz 2858324 BLAKE2B 0c7a66f401ace63568cb9bb09fbfa4a456037f2d9712576211c57674d3aa6dacf9c22e92f1b92bc92794b61f0bc674fa4e1c415fd4873330df4befc492395382 SHA512 f078f0a219a52a3bcb18d046b3b0b297cfba5dc1181ee67db45919fede46db2c0d83288ab430bff1673fca8ae39cb99d10d9b770b52970e324f4b6d94374c937
+DIST qemu-10.2.2.tar.xz 141119364 BLAKE2B 810efae886e5ba56900882455cc8714923378e34995dceaec8177ba5cc7f922547b7cbf68f7ac3804e498b3b4b3895165646c81ff9ad50b09c8286e8b2293a72 SHA512 c5409530505c2d1e69a80f1750e377261cea8fee42516a0a89d0343b19d55f9d33579cef181d7cc04d51519e50a55dff1b89175e7685bb803468c8ce03929591
+DIST qemu-9.2.0-docs.tar.xz 2431076 BLAKE2B 420148b9d7cafbdc9aea21b0d0a84a53ca0d17fb99fc34ae4c0786fa7d4ce40838f4b3173508b90742d6dfbfd4b58dda25b2e5cd1394241b0b56a64fe5705d9b SHA512 88816e326e9eac9acf0a1c73e677552845d6885e220b55e795241c40d2c1bd1b1994a22e56f95046e420225e0b7dc839d459f1c1e5318c8c36392727a86b3008
+DIST qemu-9.2.4.tar.xz 134782772 BLAKE2B 40b85e1204da263da16031dd9edd833062d632e437c0699ac582a641e7a7f85525b800649591d57930eafd01b799cde306f62a236e1ff3b54648f3d28f7924b2 SHA512 5aa2ea23d234dd896de73f778defde93f3b490bd22947c396091fdd2231ce5ccd17767c910170a952be88a5593725f1c31b15a6d19b3d30637465d17fb69651c
diff --git a/app-emulation/qemu/files/65-kvm.rules-r2 b/app-emulation/qemu/files/65-kvm.rules-r2
new file mode 100644
index 000000000000..15c89b201879
--- /dev/null
+++ b/app-emulation/qemu/files/65-kvm.rules-r2
@@ -0,0 +1,3 @@
+KERNEL=="kvm", GROUP="kvm", MODE="0660"
+KERNEL=="vhost-net", GROUP="kvm", MODE="0660", OPTIONS+="static_node=vhost-net"
+KERNEL=="vhost-vsock", GROUP="kvm", MODE="0660", OPTIONS+="static_node=vhost-vsock"
diff --git a/app-emulation/qemu/files/bridge.conf b/app-emulation/qemu/files/bridge.conf
new file mode 100644
index 000000000000..2bde37e2efc9
--- /dev/null
+++ b/app-emulation/qemu/files/bridge.conf
@@ -0,0 +1,14 @@
+# This should have the following permissions: root:qemu 0640
+
+# allow br0
+# Uncommenting the above would allow users in the 'qemu' group
+# to add devices to 'br0'
+
+# allow virbr0
+# Uncommenting the above would allow users in the 'qemu' group
+# to add devices to 'virbr0'
+
+# include /etc/qemu/bob.conf
+# Uncommenting the above would allow users in the 'bob' group
+# to have permissions defined in it, iff it has the following
+# permissions: root:bob 0640
diff --git a/app-emulation/qemu/files/qemu-10.1.2-fix_passt.patch b/app-emulation/qemu/files/qemu-10.1.2-fix_passt.patch
new file mode 100644
index 000000000000..9af9454eaf8e
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-10.1.2-fix_passt.patch
@@ -0,0 +1,18 @@
+see https://bugs.gentoo.org/964165, patch sent to qemu-devel ml
+passt needs gio but not gdbus-codegen. Make gdbus-codegen optional,
+dbus_display which requires it will still fail as expected.
+--- a/meson.build
++++ b/meson.build
+@@ -1126,8 +1126,7 @@ if not get_option('gio').auto() or have_system
+ gio = not_found
+ endif
+ if gio.found()
+- gdbus_codegen = find_program('gdbus-codegen',
+- required: get_option('gio'))
++ gdbus_codegen = find_program('gdbus-codegen', required: false)
+ gio_unix = dependency('gio-unix-2.0', required: get_option('gio'),
+ method: 'pkg-config')
+ gio = declare_dependency(dependencies: [gio, gio_unix],
+--
+2.51.0
+
diff --git a/app-emulation/qemu/files/qemu-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch b/app-emulation/qemu/files/qemu-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch
new file mode 100644
index 000000000000..7fbdb637f4d7
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch
@@ -0,0 +1,31 @@
+https://mail.gnu.org/archive/html/qemu-devel/2025-02/msg04327.html
+
+From eca5286f01652fd5801ba89b7752a7895620a852 Mon Sep 17 00:00:00 2001
+Message-ID: <eca5286f01652fd5801ba89b7752a7895620a852.1740071281.git.sam@gentoo.org>
+From: Sam James <sam@gentoo.org>
+Date: Thu, 20 Feb 2025 17:05:59 +0000
+Subject: [PATCH] optionrom: pass -Wl,--no-error-rwx-segments
+
+If GNU Binutils is configured with --enable-error-rwx-segments=yes, one
+gets the following for optionrom:
+```
+.../bin/ld: error: pvh.img has a LOAD segment with RWX permissions
+.../bin/ld: final link faile
+```
+
+Pass -Wl,--no-error-rwx-segments to suppress that.
+--- a/pc-bios/optionrom/Makefile
++++ b/pc-bios/optionrom/Makefile
+@@ -37,6 +37,7 @@ config-cc.mak: Makefile
+ -include config-cc.mak
+
+ override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds,-m,elf_i386
++override LDFLAGS += -Wl,--no-error-rwx-segments
+
+ pvh.img: pvh.o pvh_main.o
+
+
+base-commit: 40efe733e10cc00e4fb4f9f5790a28e744e63c62
+--
+2.48.1
+
diff --git a/app-emulation/qemu/files/qemu-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch b/app-emulation/qemu/files/qemu-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch
new file mode 100644
index 000000000000..a81302f4cdf8
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch
@@ -0,0 +1,37 @@
+https://mail.gnu.org/archive/html/qemu-devel/2025-02/msg04327.html
+
+From eca5286f01652fd5801ba89b7752a7895620a852 Mon Sep 17 00:00:00 2001
+Message-ID: <eca5286f01652fd5801ba89b7752a7895620a852.1740071281.git.sam@gentoo.org>
+From: Sam James <sam@gentoo.org>
+Date: Thu, 20 Feb 2025 17:05:59 +0000
+Subject: [PATCH] optionrom: pass -Wl,--no-error-rwx-segments
+
+If GNU Binutils is configured with --enable-error-rwx-segments=yes, one
+gets the following for optionrom:
+```
+.../bin/ld: error: pvh.img has a LOAD segment with RWX permissions
+.../bin/ld: final link faile
+```
+
+Pass -Wl,--no-error-rwx-segments to suppress that.
+---
+ pc-bios/optionrom/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
+index 30d07026c7..4d3ce75af3 100644
+--- a/pc-bios/optionrom/Makefile
++++ b/pc-bios/optionrom/Makefile
+@@ -37,6 +37,7 @@ config-cc.mak: Makefile
+ -include config-cc.mak
+
+ override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds
++override LDFLAGS += -Wl,--no-error-rwx-segments
+
+ pvh.img: pvh.o pvh_main.o
+
+
+base-commit: 40efe733e10cc00e4fb4f9f5790a28e744e63c62
+--
+2.48.1
+
diff --git a/app-emulation/qemu/files/qemu-8.1.0-find-sphinx.patch b/app-emulation/qemu/files/qemu-8.1.0-find-sphinx.patch
new file mode 100644
index 000000000000..b6ef6214af55
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-8.1.0-find-sphinx.patch
@@ -0,0 +1,10 @@
+This gets confused by python-any-r1 and tries to find sphinx-build in ${T}.
+--- a/docs/meson.build
++++ b/docs/meson.build
+@@ -1,5 +1,4 @@
+-sphinx_build = find_program(fs.parent(python.full_path()) / 'sphinx-build',
+- required: get_option('docs'))
++sphinx_build = find_program('sphinx-build', required: get_option('docs'))
+
+ # Check if tools are available to build documentation.
+ build_docs = false
diff --git a/app-emulation/qemu/files/qemu-8.1.0-skip-tests.patch b/app-emulation/qemu/files/qemu-8.1.0-skip-tests.patch
new file mode 100644
index 000000000000..f668584e8d4b
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-8.1.0-skip-tests.patch
@@ -0,0 +1,64 @@
+* netdev-socket.c
+qtest-i386/netdev-socket fails with:
+```
+stderr:
+qemu-system-i386: -netdev dgram,id=st0,remote.type=inet,remote.host=230.0.0.1,remote.port=1234: can't add socket to multicast group 230.0.0.1: No such device
+Broken pipe
+../tests/qtest/libqtest.c:191: kill_qemu() tried to terminate QEMU process but encountered exit status 1 (expected 0)
+```
+
+* vhost-user-test.c
+qtest-x86_64/qos-test fails with a timeout:
+```
+qemu-system-x86_64: Failed to set msg fds.
+qemu-system-x86_64: vhost VQ 0 ring restore failed: -22: Invalid argument (22)
+qemu-system-x86_64: Failed to set msg fds.
+qemu-system-x86_64: vhost VQ 1 ring restore failed: -22: Invalid argument (22)
+**
+ERROR:../tests/qtest/vhost-user-test.c:892:wait_for_rings_started: assertion failed (ctpop64(s->rings) == count): (1 == 2)
+**
+ERROR:../tests/qtest/qos-test.c:191:subprocess_run_one_test: child process (/x86_64/pc/i440FX-pcihost/pci-bus-pc/pci-bus/virtio-net-pci/virtio-net/virtio-net-tests/vhost-user/reconnect/subprocess [6082]) failed unexpectedl
+```
+
+--- a/tests/qtest/netdev-socket.c
++++ b/tests/qtest/netdev-socket.c
+@@ -498,6 +498,10 @@ int main(int argc, char **argv)
+ socket_init();
+ g_test_init(&argc, &argv, NULL);
+
++ /* XXX: Skip test for now on Gentoo, fails with "No such device" */
++ g_test_skip("Skipping test known to fail on Gentoo");
++ return 0;
++
+ if (socket_check_protocol_support(&has_ipv4, &has_ipv6) < 0) {
+ g_error("socket_check_protocol_support() failed\n");
+ }
+--- a/tests/qtest/vhost-user-test.c
++++ b/tests/qtest/vhost-user-test.c
+@@ -243,7 +243,7 @@ static bool wait_for_fds(TestServer *s)
+
+ g_mutex_lock(&s->data_mutex);
+
+- end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
++ end_time = g_get_monotonic_time() + 30 * G_TIME_SPAN_SECOND;
+ while (!s->fds_num) {
+ if (!g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
+ /* timeout has passed */
+@@ -672,7 +672,7 @@ static void wait_for_log_fd(TestServer *s)
+ gint64 end_time;
+
+ g_mutex_lock(&s->data_mutex);
+- end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
++ end_time = g_get_monotonic_time() + 30 * G_TIME_SPAN_SECOND;
+ while (s->log_fd == -1) {
+ if (!g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
+ /* timeout has passed */
+@@ -885,7 +885,7 @@ static void wait_for_rings_started(TestServer *s, size_t count)
+ gint64 end_time;
+
+ g_mutex_lock(&s->data_mutex);
+- end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
++ end_time = g_get_monotonic_time() + 30 * G_TIME_SPAN_SECOND;
+ while (ctpop64(s->rings) != count) {
+ if (!g_cond_wait_until(&s->data_cond, &s->data_mutex, end_time)) {
+ /* timeout has passed */
diff --git a/app-emulation/qemu/files/qemu-9.0.0-disable-keymap.patch b/app-emulation/qemu/files/qemu-9.0.0-disable-keymap.patch
new file mode 100644
index 000000000000..c85d213626e2
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-9.0.0-disable-keymap.patch
@@ -0,0 +1,44 @@
+From 8cca781563e89facd312d622a69af124eb2757c6 Mon Sep 17 00:00:00 2001
+Message-ID: <8cca781563e89facd312d622a69af124eb2757c6.1714317553.git.mprivozn@redhat.com>
+From: Michal Privoznik <mprivozn@redhat.com>
+Date: Sun, 28 Apr 2024 17:10:13 +0200
+Subject: [PATCH] 8.0.0-disable-keymap.patch
+
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ meson.build | 2 ++
+ pc-bios/keymaps/meson.build | 4 +++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 5db2dbc12e..ea3ccff968 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1098,6 +1098,8 @@ endif
+
+ if get_option('xkbcommon').auto() and not have_system and not have_tools
+ xkbcommon = not_found
++elif get_option('xkbcommon').disabled()
++ xkbcommon = not_found
+ else
+ xkbcommon = dependency('xkbcommon', required: get_option('xkbcommon'),
+ method: 'pkg-config')
+diff --git a/pc-bios/keymaps/meson.build b/pc-bios/keymaps/meson.build
+index 0bd8ce0077..3888f4c64f 100644
+--- a/pc-bios/keymaps/meson.build
++++ b/pc-bios/keymaps/meson.build
+@@ -33,8 +33,10 @@ keymaps = {
+ 'tr': '-l tr',
+ }
+
+-if meson.is_cross_build() or not xkbcommon.found()
++if meson.is_cross_build()
+ native_qemu_keymap = find_program('qemu-keymap', required: false, disabler: true)
++elif get_option('xkbcommon').disabled()
++ native_qemu_keymap = not_found
+ else
+ native_qemu_keymap = qemu_keymap
+ endif
+--
+2.43.2
+
diff --git a/app-emulation/qemu/files/qemu-9.2.0-capstone-include-path.patch b/app-emulation/qemu/files/qemu-9.2.0-capstone-include-path.patch
new file mode 100644
index 000000000000..8cb557b59bce
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-9.2.0-capstone-include-path.patch
@@ -0,0 +1,41 @@
+From: Sam James <sam@gentoo.org>
+Date: Sun, 6 Oct 2024 09:47:03 +0100
+Subject: [PATCH] Forward ported from qemu-7.1.0-capstone-include-path.patch.
+
+Bug: https://bugs.gentoo.org/873157
+Signed-off-by: Sam James <sam@gentoo.org>
+Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
+---
+ include/disas/capstone.h | 2 +-
+ meson.build | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/include/disas/capstone.h b/include/disas/capstone.h
+index c43033f7f6..02bc067cd8 100644
+--- a/include/disas/capstone.h
++++ b/include/disas/capstone.h
+@@ -5,7 +5,7 @@
+
+ #define CAPSTONE_AARCH64_COMPAT_HEADER
+ #define CAPSTONE_SYSTEMZ_COMPAT_HEADER
+-#include <capstone.h>
++#include <capstone/capstone.h>
+
+ #else
+
+diff --git a/meson.build b/meson.build
+index 2c924f8f10..86858a325b 100644
+--- a/meson.build
++++ b/meson.build
+@@ -1892,7 +1892,7 @@ if not get_option('capstone').auto() or have_system or have_user
+ # that reports a wrong -I path, causing the #include to
+ # fail later. If the system has such a broken version
+ # do not use it.
+- if capstone.found() and not cc.compiles('#include <capstone.h>',
++ if capstone.found() and not cc.compiles('#include <capstone/capstone.h>',
+ dependencies: [capstone])
+ capstone = not_found
+ if get_option('capstone').enabled()
+--
+2.45.2
+
diff --git a/app-emulation/qemu/files/qemu-binfmt.initd.head b/app-emulation/qemu/files/qemu-binfmt.initd.head
new file mode 100644
index 000000000000..832ddb0b8e57
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-binfmt.initd.head
@@ -0,0 +1,64 @@
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Enable automatic non-native program execution by the kernel.
+
+# Defaulting to OC should be safe because it comes down to:
+# - do we trust the interp itself to not be malicious? yes; we built it.
+# - do we trust the programs we're running? ish; same permission as native
+# binaries apply. so if user can do bad stuff natively, cross isn't worse.
+: ${QEMU_BINFMT_FLAGS:=OC}
+
+depend() {
+ after procfs
+}
+
+start() {
+ ebegin "Registering qemu-user binaries (flags: ${QEMU_BINFMT_FLAGS})"
+
+ if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
+ modprobe -q binfmt_misc
+ fi
+
+ if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
+ eend 1 "You need support for 'misc binaries' in your kernel!"
+ return
+ fi
+
+ if [ ! -f /proc/sys/fs/binfmt_misc/register ] ; then
+ mount -t binfmt_misc -o nodev,noexec,nosuid \
+ binfmt_misc /proc/sys/fs/binfmt_misc >/dev/null 2>&1
+ eend $? || return
+ fi
+
+ # Probe the native cpu type so we don't try registering them.
+ local cpu="$(uname -m)"
+ case "${cpu}" in
+ armv[4-9]*)
+ cpu="arm"
+ ;;
+ i386|i486|i586|i686|i86pc|BePC|x86_64)
+ cpu="i386"
+ ;;
+ m68k)
+ cpu="m68k"
+ ;;
+ mips*)
+ cpu="mips"
+ ;;
+ "Power Macintosh"|ppc|ppc64)
+ cpu="ppc"
+ ;;
+ s390*)
+ cpu="s390"
+ ;;
+ sh*)
+ cpu="sh"
+ ;;
+ sparc*)
+ cpu="sparc"
+ ;;
+ esac
+
+ # Register the interpreter for each cpu except for the native one.
diff --git a/app-emulation/qemu/files/qemu-binfmt.initd.tail b/app-emulation/qemu/files/qemu-binfmt.initd.tail
new file mode 100644
index 000000000000..7679481929ae
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-binfmt.initd.tail
@@ -0,0 +1,14 @@
+ eend 0
+}
+
+stop() {
+ # We unregister everything in the "qemu-xxx" namespace.
+ ebegin "Unregistering qemu-user binaries"
+ local f
+ for f in /proc/sys/fs/binfmt_misc/qemu-* ; do
+ if [ -f "${f}" ] ; then
+ echo '-1' > "${f}"
+ fi
+ done
+ eend 0
+}
diff --git a/app-emulation/qemu/metadata.xml b/app-emulation/qemu/metadata.xml
new file mode 100644
index 000000000000..e05b46018312
--- /dev/null
+++ b/app-emulation/qemu/metadata.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>dilfridge@gentoo.org</email>
+ <name>Andreas K. Hüttel</name>
+ </maintainer>
+ <use>
+ <flag name="accessibility">Adds support for braille displays using brltty</flag>
+ <flag name="aio">Enables support for Linux's Async IO</flag>
+ <flag name="alsa">Enable alsa output for sound emulation</flag>
+ <flag name="bpf">Enable eBPF support for RSS implementation.</flag>
+ <flag name="capstone">Enable disassembly support with <pkg>dev-libs/capstone</pkg>
+ </flag>
+ <flag name="curl">Support ISOs / -cdrom directives via HTTP or HTTPS.</flag>
+ <flag name="fdt">Enables firmware device tree support</flag>
+ <flag name="fuse">Enables FUSE block device export</flag>
+ <flag name="glusterfs">Enables GlusterFS cluster fileystem via
+ <pkg>sys-cluster/glusterfs</pkg>
+ </flag>
+ <flag name="gnutls">Enable TLS support for the VNC console server.
+ For 1.4 and newer this also enables WebSocket support.
+ For 2.0 through 2.3 also enables disk quorum support.</flag>
+ <flag name="iscsi">Enable direct iSCSI support via
+ <pkg>net-libs/libiscsi</pkg> instead of indirectly via the Linux
+ block layer that <pkg>sys-block/open-iscsi</pkg> does.</flag>
+ <flag name="keyutils">Support Linux keyrings via <pkg>sys-apps/keyutils</pkg>
+ </flag>
+ <flag name="multipath">Enable multipath persistent reservation passthrough via
+ <pkg>sys-fs/multipath-tools</pkg>.</flag>
+ <flag name="ncurses">Enable the ncurses-based console</flag>
+ <flag name="nfs">Enable NFS support</flag>
+ <flag name="numa">Enable NUMA support</flag>
+ <flag name="passt">Enable TCP/IP in hypervisor via <pkg>net-misc/passt</pkg>
+ </flag>
+ <flag name="pin-upstream-blobs">Pin the versions of BIOS firmware to the version included in the upstream release.
+ This is needed to sanely support migration/suspend/resume/snapshotting/etc... of instances.
+ When the blobs are different, random corruption/bugs/crashes/etc... may be observed.</flag>
+ <flag name="pipewire">Enable pipewire output for sound emulation</flag>
+ <flag name="plugins">Enable qemu plugin API via shared library loading.</flag>
+ <flag name="pulseaudio">Enable pulseaudio output for sound emulation</flag>
+ <flag name="rbd">Enable rados block device backend support, see https://docs.ceph.com/en/mimic/rbd/qemu-rbd/</flag>
+ <flag name="sdl">Enable the SDL-based console</flag>
+ <flag name="sdl-image">SDL Image support for icons</flag>
+ <flag name="slirp">Enable TCP/IP in hypervisor via <pkg>net-libs/libslirp</pkg>
+ </flag>
+ <flag name="spice">Enable Spice protocol support via <pkg>app-emulation/spice</pkg>
+ </flag>
+ <flag name="ssh">Enable SSH based block device support via <pkg>net-libs/libssh2</pkg>
+ </flag>
+ <flag name="static-user">Build the User targets as static binaries</flag>
+ <flag name="systemtap">Enable SystemTap/DTrace tracing</flag>
+ <flag name="jpeg">Enable jpeg image support for the VNC console server</flag>
+ <flag name="png">Enable png image support for the VNC console server</flag>
+ <flag name="usb">Enable USB passthrough via <pkg>dev-libs/libusb</pkg>
+ </flag>
+ <flag name="usbredir">Use <pkg>sys-apps/usbredir</pkg> to redirect USB devices to another machine over TCP</flag>
+ <flag name="vde">Enable VDE-based networking</flag>
+ <flag name="vhost-net">Enable accelerated networking using vhost-net, see https://www.linux-kvm.org/page/VhostNet</flag>
+ <flag name="virgl">Enable experimental Virgil 3d (virtual software GPU)</flag>
+ <flag name="virtfs">Enable VirtFS via virtio-9p-pci / fsdev. See https://wiki.qemu.org/Documentation/9psetup</flag>
+ <flag name="vte">Enable terminal support (<pkg>x11-libs/vte</pkg>) in the GTK+ interface</flag>
+ <flag name="xattr">Add support for getting and setting POSIX extended attributes, through
+ <pkg>sys-apps/attr</pkg>. Requisite for the virtfs backend.</flag>
+ <flag name="xdp">Enable support for XDP through <pkg>net-libs/xdp-tools</pkg>
+ </flag>
+ <flag name="xen">Enables support for Xen backends</flag>
+ </use>
+ <upstream>
+ <bugs-to>https://gitlab.com/qemu-project/qemu/-/issues</bugs-to>
+ <changelog>https://wiki.qemu.org/ChangeLog</changelog>
+ <doc>https://www.qemu.org/docs/master</doc>
+ <remote-id type="cpe">cpe:/a:qemu:qemu</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/qemu/qemu-10.0.7.ebuild b/app-emulation/qemu/qemu-10.0.7.ebuild
new file mode 100644
index 000000000000..688dfd40fbff
--- /dev/null
+++ b/app-emulation/qemu/qemu-10.0.7.ebuild
@@ -0,0 +1,1014 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-1}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-2).0
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit eapi9-ver flag-o-matic linux-info toolchain-funcs python-r1 udev fcaps \
+ readme.gentoo-r1 pax-utils xdg-utils
+
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
+
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
+ inherit git-r3
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
+else
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv x86"
+fi
+
+DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
+
+LICENSE="GPL-2 LGPL-2 BSD-2"
+SLOT="0"
+
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs pipewire
+ plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+ +slirp
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir vde +vhost-net virgl virtfs +vnc vte wayland X xattr xdp xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ microblazeel
+ mips
+ mips64
+ mips64el
+ mipsel
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
+
+use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
+use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
+IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
+
+RESTRICT="!test? ( test )"
+
+# Allow no targets to be built so that people can get a tools-only build.
+# Block USE flag configurations known to not work.
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ qemu_softmmu_targets_arm? ( fdt )
+ qemu_softmmu_targets_microblaze? ( fdt )
+ qemu_softmmu_targets_mips64el? ( fdt )
+ qemu_softmmu_targets_ppc64? ( fdt )
+ qemu_softmmu_targets_ppc? ( fdt )
+ qemu_softmmu_targets_riscv32? ( fdt )
+ qemu_softmmu_targets_riscv64? ( fdt )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
+ static-user? ( !plugins )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
+ vte? ( gtk )
+ multipath? ( udev )
+ plugins? ( !static-user )
+ xdp? ( bpf )
+"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
+# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
+#
+# The attr lib isn't always linked in (although the USE flag is always
+# respected). This is because qemu supports using the C library's API
+# when available rather than always using the external library.
+ALL_DEPEND="
+ dev-libs/glib:2[static-libs(+)]
+ virtual/zlib:=[static-libs(+)]
+ python? ( ${PYTHON_DEPS} )
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# softmmu targets (qemu-system-*).
+SOFTMMU_TOOLS_DEPEND="
+ >=x11-libs/pixman-0.28.0[static-libs(+)]
+ accessibility? (
+ app-accessibility/brltty[api]
+ app-accessibility/brltty[static-libs(+)]
+ )
+ aio? ( dev-libs/libaio[static-libs(+)] )
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( >=dev-libs/libbpf-1.1.0:= )
+ bzip2? ( app-arch/bzip2[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
+ curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3=[static-libs(+)] )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
+ gnutls? (
+ >=net-libs/gnutls-3.0:=[static-libs(+)]
+ dev-libs/nettle:=[static-libs(+)]
+ )
+ gtk? (
+ x11-libs/gtk+:3[wayland?,X?]
+ vte? ( x11-libs/vte:2.91 )
+ )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
+ iscsi? ( net-libs/libiscsi )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+ jack? ( virtual/jack )
+ jemalloc? ( dev-libs/jemalloc )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
+ lzo? ( dev-libs/lzo:2[static-libs(+)] )
+ multipath? ( sys-fs/multipath-tools )
+ ncurses? (
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
+ )
+ nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ opengl? (
+ virtual/opengl
+ media-libs/libepoxy[static-libs(+)]
+ media-libs/mesa[static-libs(+)]
+ media-libs/mesa[egl(+),gbm(+)]
+ )
+ pam? ( sys-libs/pam )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/libsdl2[static-libs(+)]
+ )
+ sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
+ seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+ slirp? ( net-libs/libslirp[static-libs(+)] )
+ smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
+ snappy? ( app-arch/snappy:= )
+ spice? (
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
+ )
+ ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
+ usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+ vde? ( net-misc/vde[static-libs(+)] )
+ virgl? ( media-libs/virglrenderer[static-libs(+)] )
+ virtfs? ( sys-libs/libcap )
+ xdp? ( net-libs/xdp-tools )
+ xen? ( app-emulation/xen-tools:= )
+ zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
+
+#
+# With USE=+pin-upstream-blobs we pin firmware versions to known good
+# version in order to minimize the frequency of disruptive changes. This
+# avoids unnecessary frustration on user side because changing the firmware
+# version can break resume of hibernated guest, inhibit live migrations,
+# and might have other unwanted consequences. For now, let us try to
+# synchronize firmware blobs with the ones bundled in upstream qemu. Simply
+# check the upstream git repository for any changes, for example:
+# https://github.com/qemu/qemu/tree/v10.0.2/roms for the 10.0.2 release.
+#
+# When changing pinned firmware versions
+# - create a separate ebuild with revision -r50
+# - update the FIRMWARE_ABI_VERSION to the current package version
+#
+
+FIRMWARE_ABI_VERSION="10.0.2"
+EDK2_OVMF_VERSION="202408"
+SEABIOS_VERSION="1.16.3"
+
+X86_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ ~sys-firmware/ipxe-1.21.1_p20230601[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/edk2-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ sys-firmware/sgabios
+ )
+"
+PPC_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ )
+"
+
+# See bug #913084 for pip dep
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-lang/perl
+ >=dev-build/meson-0.63.0
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ app-alternatives/ninja
+ virtual/pkgconfig
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
+ gtk? ( nls? ( sys-devel/gettext ) )
+ test? (
+ app-alternatives/bc
+ dev-libs/glib[utils]
+ dev-python/pycotap[${PYTHON_USEDEP}]
+ )
+"
+CDEPEND="
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
+ qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
+"
+DEPEND="
+ ${CDEPEND}
+ kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
+ static-user? ( ${ALL_DEPEND} )
+"
+RDEPEND="
+ ${CDEPEND}
+ acct-group/kvm
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-9.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-9.2.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
+ "${FILESDIR}"/${PN}-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch
+)
+
+QA_PREBUILT="
+ usr/share/qemu/hppa-firmware.img
+ usr/share/qemu/hppa-firmware64.img
+ usr/share/qemu/openbios-ppc
+ usr/share/qemu/openbios-sparc64
+ usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu/palcode-clipper
+ usr/share/qemu/s390-ccw.img
+ usr/share/qemu/s390-netboot.img
+ usr/share/qemu/u-boot.e500
+"
+
+QA_WX_LOAD="
+ usr/bin/qemu-i386
+ usr/bin/qemu-x86_64
+ usr/bin/qemu-alpha
+ usr/bin/qemu-arm
+ usr/bin/qemu-cris
+ usr/bin/qemu-m68k
+ usr/bin/qemu-microblaze
+ usr/bin/qemu-microblazeel
+ usr/bin/qemu-mips
+ usr/bin/qemu-mipsel
+ usr/bin/qemu-or1k
+ usr/bin/qemu-ppc
+ usr/bin/qemu-ppc64
+ usr/bin/qemu-sh4
+ usr/bin/qemu-sh4eb
+ usr/bin/qemu-sparc
+ usr/bin/qemu-sparc64
+ usr/bin/qemu-armeb
+ usr/bin/qemu-sparc32plus
+ usr/bin/qemu-s390x
+ usr/bin/qemu-unicore32
+"
+
+DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
+kernel module loaded before running kvm. The easiest way to ensure that the
+kernel module is loaded is to load it on boot.
+ For AMD CPUs the module is called 'kvm-amd'.
+ For Intel CPUs the module is called 'kvm-intel'.
+Please review /etc/conf.d/modules for how to load these.
+
+Make sure your user is in the 'kvm' group. Just run
+ # gpasswd -a <USER> kvm
+then have <USER> re-login.
+
+For brand new installs, the default permissions on /dev/kvm might not let
+you access it. You can tell udev to reset ownership/perms:
+ # udevadm trigger -c add /dev/kvm
+
+If you want to register binfmt handlers for qemu user targets:
+For openrc:
+ # rc-update add qemu-binfmt
+For systemd:
+ # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 2 6 25; then
+ eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use the"
+ ERROR_TUN+=" virtual network device if using -net tap."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+ use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
+ ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
+ ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
+
+ if use amd64 || use x86; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ use python && CONFIG_CHECK+=" ~DEBUG_FS"
+ ERROR_DEBUG_FS="debugFS support required for kvm_stat"
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+
+ if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
+ eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
+ eerror "instances are still pointing to it. Please update your"
+ eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
+ eerror "and the right system binary (e.g. qemu-system-x86_64)."
+ die "update your virt configs to not use qemu-kvm"
+ fi
+}
+
+# Sanity check to make sure target lists are kept up-to-date.
+check_targets() {
+ local var=$1 mak=$2
+ local detected sorted
+
+ pushd "${S}"/configs/targets/ >/dev/null || die
+
+ # Force C locale until glibc is updated. #564936
+ detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
+ sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
+ if [[ ${sorted} != "${detected}" ]] ; then
+ eerror "The ebuild needs to be kept in sync."
+ eerror "${var}: ${sorted}"
+ eerror "$(printf '%-*s' ${#var} configure): ${detected}"
+ die "sync ${var} to the list of targets"
+ fi
+
+ popd >/dev/null
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ check_targets IUSE_SOFTMMU_TARGETS softmmu
+ check_targets IUSE_USER_TARGETS linux-user
+
+ default
+
+ # Use correct toolchain to fix cross-compiling
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
+ export WINDRES=${CHOST}-windres
+
+ # defang automagic dependencies
+ use X || append-flags -DGENTOO_GTK_HIDE_X11
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ # Workaround for bug #938302
+ if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ cat >> "${S}"/configs/meson/linux.txt <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ fi
+
+ # Verbose builds
+ MAKEOPTS+=" V=1"
+
+ # Remove bundled modules
+ rm -r roms/*/ || die
+}
+
+##
+# configures qemu based on the build directory and the build type
+# we are using.
+#
+qemu_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local buildtype=$1
+ local builddir="${S}/${buildtype}-build"
+
+ mkdir "${builddir}" || die
+
+ local conf_opts=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --bindir=/usr/bin
+ --libdir=/usr/$(get_libdir)
+ --datadir=/usr/share
+ --docdir=/usr/share/doc/${PF}/html
+ --mandir=/usr/share/man
+ --localstatedir=/var
+ --disable-bsd-user
+ --disable-containers # bug #732972
+ --disable-guest-agent
+ --disable-strip
+ --disable-download
+ --python="${PYTHON}"
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
+ --disable-werror
+ # We support gnutls/nettle for crypto operations. It is possible
+ # to use gcrypt when gnutls/nettle are disabled (but not when they
+ # are enabled), but it's not really worth the hassle. Disable it
+ # all the time to avoid automatically detecting it. #568856
+ --disable-gcrypt
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
+ --host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
+ $(use_enable debug debug-info)
+ $(use_enable debug debug-tcg)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
+ $(use_enable plugins)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
+ $(use_enable xattr attr)
+ )
+
+ # Disable options not used by user targets. This simplifies building
+ # static user targets (USE=static-user) considerably.
+ conf_notuser() {
+ if [[ ${buildtype} == "user" ]] ; then
+ echo "--disable-${2:-$1}"
+ else
+ use_enable "$@"
+ fi
+ }
+ # Enable option only for softmmu build, but not 'user' or 'tools'
+ conf_softmmu() {
+ if [[ ${buildtype} == "softmmu" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
+ conf_opts+=(
+ $(conf_notuser accessibility brlapi)
+ $(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
+ $(conf_notuser bzip2)
+ $(conf_notuser capstone)
+ $(conf_notuser curl)
+ $(conf_tools doc docs)
+ $(conf_notuser fdt)
+ $(conf_notuser fuse)
+ $(conf_notuser glusterfs)
+ $(conf_notuser gnutls)
+ $(conf_notuser gnutls nettle)
+ $(conf_notuser gtk)
+ $(conf_notuser infiniband rdma)
+ $(conf_notuser iscsi libiscsi)
+ $(conf_notuser io-uring linux-io-uring)
+ $(conf_malloc jemalloc)
+ $(conf_notuser jpeg vnc-jpeg)
+ $(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
+ $(conf_notuser lzo)
+ $(conf_notuser multipath mpath)
+ $(conf_notuser ncurses curses)
+ $(conf_notuser nfs libnfs)
+ $(conf_notuser numa)
+ $(conf_notuser opengl)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser png)
+ $(conf_notuser rbd)
+ $(conf_notuser sasl vnc-sasl)
+ $(conf_notuser sdl)
+ $(conf_softmmu sdl-image)
+ $(conf_notuser seccomp)
+ $(conf_notuser slirp)
+ $(conf_notuser smartcard)
+ $(conf_notuser snappy)
+ $(conf_notuser spice)
+ $(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
+ $(conf_notuser usb libusb)
+ $(conf_notuser usbredir usb-redir)
+ $(conf_notuser vde)
+ $(conf_notuser vhost-net)
+ $(conf_notuser virgl virglrenderer)
+ $(conf_softmmu virtfs)
+ $(conf_notuser vnc)
+ $(conf_notuser vte)
+ $(conf_softmmu xdp af-xdp)
+ $(conf_notuser xen)
+ $(conf_notuser xen xen-pci-passthrough)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
+ $(conf_notuser zstd)
+ )
+
+ if [[ ! ${buildtype} == "user" ]] ; then
+ # audio options
+ local audio_opts=(
+ # Note: backend order matters here: #716202
+ # We iterate from higher-level to lower level.
+ $(usex pulseaudio pa "")
+ $(usev pipewire)
+ $(usev jack)
+ $(usev sdl)
+ $(usev alsa)
+ $(usev oss)
+ )
+ conf_opts+=(
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
+ )
+ fi
+
+ case ${buildtype} in
+ user)
+ conf_opts+=(
+ --enable-linux-user
+ --disable-system
+ --disable-tools
+ --disable-cap-ng
+ --disable-seccomp
+ )
+ local static_flag="static-user"
+ ;;
+ softmmu)
+ conf_opts+=(
+ --disable-linux-user
+ --enable-system
+ --disable-tools
+ --enable-cap-ng
+ --enable-seccomp
+ --disable-libcbor
+ )
+ local static_flag="none"
+ ;;
+ tools)
+ conf_opts+=(
+ --disable-linux-user
+ --disable-system
+ --enable-tools
+ --enable-cap-ng
+ )
+ local static_flag="none"
+ ;;
+ esac
+
+ local targets="${buildtype}_targets"
+ [[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
+
+ # Add support for SystemTap
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
+
+ # We always want to attempt to build with PIE support as it results
+ # in a more secure binary. But it doesn't work with static or if
+ # the current GCC doesn't have PIE support.
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
+ conf_opts+=( --static --disable-pie )
+ else
+ tc-enables-pie && conf_opts+=( --enable-pie )
+ fi
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
+ echo "../configure ${conf_opts[*]}"
+ cd "${builddir}"
+ ../configure "${conf_opts[@]}" || die "configure failed"
+}
+
+src_configure() {
+ local target
+
+ python_setup
+
+ softmmu_targets= softmmu_bins=()
+ user_targets= user_bins=()
+
+ for target in ${IUSE_SOFTMMU_TARGETS} ; do
+ if use "qemu_softmmu_targets_${target}"; then
+ softmmu_targets+=",${target}-softmmu"
+ softmmu_bins+=( "qemu-system-${target}" )
+ fi
+ done
+
+ for target in ${IUSE_USER_TARGETS} ; do
+ if use "qemu_user_targets_${target}"; then
+ user_targets+=",${target}-linux-user"
+ user_bins+=( "qemu-${target}" )
+ fi
+ done
+
+ softmmu_targets=${softmmu_targets#,}
+ user_targets=${user_targets#,}
+
+ [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
+ [[ -n ${user_targets} ]] && qemu_src_configure "user"
+ qemu_src_configure "tools"
+}
+
+src_compile() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build" || die
+ default
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ default
+ fi
+
+ cd "${S}/tools-build" || die
+ default
+}
+
+src_test() {
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ pax-mark m */qemu-system-* #515550
+ emake check
+ fi
+}
+
+qemu_python_install() {
+ python_domodule "${S}/python/qemu"
+
+ python_doscript "${S}/scripts/kvm/vmxcap"
+ python_doscript "${S}/scripts/qmp/qmp-shell"
+ python_doscript "${S}/scripts/qmp/qemu-ga-client"
+}
+
+# Generate binfmt support files.
+# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
+# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
+generate_initd() {
+ local out="${T}/qemu-binfmt"
+ local out_systemd="${T}/qemu.conf"
+ local d="${T}/binfmt.d"
+
+ einfo "Generating qemu binfmt scripts and configuration files"
+
+ # Generate the debian fragments first.
+ mkdir -p "${d}"
+ "${S}"/scripts/qemu-binfmt-conf.sh \
+ --debian \
+ --exportdir "${d}" \
+ --qemu-path "${EPREFIX}/usr/bin" \
+ || die
+ # Then turn the fragments into a shell script we can source.
+ sed -E -i \
+ -e 's:^([^ ]+) (.*)$:\1="\2":' \
+ "${d}"/* || die
+
+ # Generate the init.d script by assembling the fragments from above.
+ local f qcpu package interpreter magic mask
+ cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+ for f in "${d}"/qemu-* ; do
+ source "${f}"
+
+ # Normalize the cpu logic like we do in the init.d for the native cpu.
+ qcpu=${package#qemu-}
+ case ${qcpu} in
+ arm*) qcpu="arm";;
+ mips*) qcpu="mips";;
+ ppc*) qcpu="ppc";;
+ s390*) qcpu="s390";;
+ sh*) qcpu="sh";;
+ sparc*) qcpu="sparc";;
+ esac
+
+ # we use 'printf' here to be portable across 'sh'
+ # implementations: #679168
+ cat <<EOF >>"${out}"
+ if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+ printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+ fi
+EOF
+
+ echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
+
+ done
+ cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
+src_install() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build"
+ emake DESTDIR="${ED}" install
+
+ # Install binfmt handler init script for user targets.
+ generate_initd
+ doinitd "${T}/qemu-binfmt"
+
+ # Install binfmt/qemu.conf.
+ insinto "/usr/share/qemu/binfmt.d"
+ doins "${T}/qemu.conf"
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build"
+ emake DESTDIR="${ED}" install
+
+ # This might not exist if the test failed. #512010
+ [[ -e check-report.html ]] && dodoc check-report.html
+
+ if use kernel_linux; then
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
+ fi
+
+ if use python; then
+ python_foreach_impl qemu_python_install
+ fi
+ fi
+
+ cd "${S}/tools-build" || die
+ emake DESTDIR="${ED}" install
+
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
+ # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
+ pushd "${ED}"/usr/bin >/dev/null || die
+ pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
+ popd >/dev/null || die
+
+ # Install config file example for qemu-bridge-helper
+ insinto "/etc/qemu"
+ doins "${FILESDIR}/bridge.conf"
+
+ cd "${S}" || die
+ dodoc MAINTAINERS
+ newdoc pc-bios/README README.pc-bios
+
+ # Disallow stripping of prebuilt firmware files.
+ dostrip -x ${QA_PREBUILT}
+
+ if [[ -n ${softmmu_targets} ]]; then
+ # Remove SeaBIOS since we're using the SeaBIOS packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
+ fi
+
+ # Remove vgabios since we're using the seavgabios packaged one
+ rm "${ED}/usr/share/qemu/vgabios.bin"
+ rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
+ rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
+ rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
+ rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
+ rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
+ dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
+ dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
+ dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
+ dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
+ dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
+ dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
+ fi
+
+ # Remove sgabios since we're using the sgabios packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
+ fi
+
+ # Remove iPXE since we're using the iPXE packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
+ dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
+ dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
+ dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
+ dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
+ dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
+ fi
+ fi
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
+ udev_reload
+ fi
+
+ xdg_icon_cache_update
+
+ [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
+ fcaps -m u+s cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_print_elog
+
+ if use pin-upstream-blobs && ver_replacing -lt ${FIRMWARE_ABI_VERSION}; then
+ ewarn "This version of qemu pins new versions of firmware blobs:"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
+ ewarn " $(best_version sys-firmware/ipxe)"
+ ewarn " $(best_version sys-firmware/sgabios)"
+ ewarn "This might break resume of hibernated guests (started with a different"
+ ewarn "firmware version) and live migration to/from qemu versions with different"
+ ewarn "firmware. Please (cold) restart all running guests. For functional"
+ ewarn "guest migration ensure that all hosts run at least"
+ ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
+ fi
+}
+
+pkg_info() {
+ echo "Using:"
+ echo " $(best_version app-emulation/spice-protocol)"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ echo " $(best_version sys-firmware/edk2-bin)"
+ else
+ echo " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
+ else
+ echo " $(best_version sys-firmware/seabios)"
+ fi
+
+ echo " $(best_version sys-firmware/ipxe)"
+ echo " $(best_version sys-firmware/sgabios)"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ udev_reload
+}
diff --git a/app-emulation/qemu/qemu-10.1.3-r1.ebuild b/app-emulation/qemu/qemu-10.1.3-r1.ebuild
new file mode 100644
index 000000000000..51a630885fbf
--- /dev/null
+++ b/app-emulation/qemu/qemu-10.1.3-r1.ebuild
@@ -0,0 +1,1026 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-1}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-2).0
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit eapi9-ver flag-o-matic linux-info toolchain-funcs python-r1 udev fcaps \
+ readme.gentoo-r1 pax-utils xdg-utils
+
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
+
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
+ inherit git-r3
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
+else
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
+
+LICENSE="GPL-2 LGPL-2 BSD-2"
+SLOT="0"
+
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam passt +pin-upstream-blobs pipewire
+ plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+ +slirp
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir valgrind vde +vhost-net virgl virtfs +vnc vte wayland X xattr xdp xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ microblazeel
+ mips
+ mips64
+ mips64el
+ mipsel
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
+
+use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
+use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
+IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
+
+RESTRICT="!test? ( test )"
+
+# Allow no targets to be built so that people can get a tools-only build.
+# Block USE flag configurations known to not work.
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ qemu_softmmu_targets_arm? ( fdt )
+ qemu_softmmu_targets_microblaze? ( fdt )
+ qemu_softmmu_targets_mips64el? ( fdt )
+ qemu_softmmu_targets_ppc64? ( fdt )
+ qemu_softmmu_targets_ppc? ( fdt )
+ qemu_softmmu_targets_riscv32? ( fdt )
+ qemu_softmmu_targets_riscv64? ( fdt )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
+ static-user? ( !plugins )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
+ vte? ( gtk )
+ multipath? ( udev )
+ plugins? ( !static-user )
+ xdp? ( bpf )
+"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
+# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
+#
+# The attr lib isn't always linked in (although the USE flag is always
+# respected). This is because qemu supports using the C library's API
+# when available rather than always using the external library.
+ALL_DEPEND="
+ dev-libs/glib:2[static-libs(+)]
+ virtual/zlib:=[static-libs(+)]
+ python? ( ${PYTHON_DEPS} )
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# softmmu targets (qemu-system-*).
+SOFTMMU_TOOLS_DEPEND="
+ >=x11-libs/pixman-0.28.0[static-libs(+)]
+ accessibility? (
+ app-accessibility/brltty[api]
+ app-accessibility/brltty[static-libs(+)]
+ )
+ aio? ( dev-libs/libaio[static-libs(+)] )
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( >=dev-libs/libbpf-1.1.0:= )
+ bzip2? ( app-arch/bzip2[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
+ curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3=[static-libs(+)] )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
+ gnutls? (
+ >=net-libs/gnutls-3.0:=[static-libs(+)]
+ dev-libs/nettle:=[static-libs(+)]
+ )
+ gtk? (
+ x11-libs/gtk+:3[wayland?,X?]
+ vte? ( x11-libs/vte:2.91 )
+ )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
+ iscsi? ( net-libs/libiscsi )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+ jack? ( virtual/jack )
+ jemalloc? ( dev-libs/jemalloc )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
+ lzo? ( dev-libs/lzo:2[static-libs(+)] )
+ multipath? ( sys-fs/multipath-tools )
+ ncurses? (
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
+ )
+ nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ opengl? (
+ virtual/opengl
+ media-libs/libepoxy[static-libs(+)]
+ media-libs/mesa[static-libs(+)]
+ media-libs/mesa[egl(+),gbm(+)]
+ )
+ pam? ( sys-libs/pam )
+ passt? ( net-misc/passt )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/libsdl2[static-libs(+)]
+ )
+ sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
+ seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+ slirp? ( net-libs/libslirp[static-libs(+)] )
+ smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
+ snappy? ( app-arch/snappy:= )
+ spice? (
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
+ )
+ ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
+ usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+ vde? ( net-misc/vde[static-libs(+)] )
+ virgl? ( media-libs/virglrenderer[static-libs(+)] )
+ virtfs? ( sys-libs/libcap )
+ xdp? ( net-libs/xdp-tools )
+ xen? ( app-emulation/xen-tools:= )
+ zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
+
+#
+# With USE=+pin-upstream-blobs we pin firmware versions to known good
+# version in order to minimize the frequency of disruptive changes. This
+# avoids unnecessary frustration on user side because changing the firmware
+# version can break resume of hibernated guest, inhibit live migrations,
+# and might have other unwanted consequences. For now, let us try to
+# synchronize firmware blobs with the ones bundled in upstream qemu. Simply
+# check the upstream git repository for any changes, for example:
+# https://github.com/qemu/qemu/tree/v10.0.2/roms for the 10.0.2 release.
+#
+# When changing pinned firmware versions
+# - create a separate ebuild with revision -r50
+# - update the FIRMWARE_ABI_VERSION to the current package version
+#
+
+FIRMWARE_ABI_VERSION="10.0.2"
+EDK2_OVMF_VERSION="202408"
+SEABIOS_VERSION="1.16.3"
+
+X86_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ ~sys-firmware/ipxe-1.21.1_p20230601[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/edk2-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ sys-firmware/sgabios
+ )
+"
+PPC_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ )
+"
+
+# See bug #913084 for pip dep
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-lang/perl
+ >=dev-build/meson-0.63.0
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ app-alternatives/ninja
+ virtual/pkgconfig
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
+ gtk? ( nls? ( sys-devel/gettext ) )
+ test? (
+ app-alternatives/bc
+ dev-libs/glib[utils]
+ dev-python/pycotap[${PYTHON_USEDEP}]
+ )
+"
+CDEPEND="
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
+ qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
+"
+DEPEND="
+ ${CDEPEND}
+ kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
+ static-user? ( ${ALL_DEPEND} )
+ valgrind? ( dev-debug/valgrind )
+"
+RDEPEND="
+ ${CDEPEND}
+ acct-group/kvm
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-10.1.2-fix_passt.patch
+ "${FILESDIR}"/${PN}-9.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-9.2.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
+ "${FILESDIR}"/${PN}-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch
+)
+
+QA_PREBUILT="
+ usr/share/qemu/hppa-firmware.img
+ usr/share/qemu/hppa-firmware64.img
+ usr/share/qemu/openbios-ppc
+ usr/share/qemu/openbios-sparc64
+ usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu/palcode-clipper
+ usr/share/qemu/s390-ccw.img
+ usr/share/qemu/s390-netboot.img
+ usr/share/qemu/u-boot.e500
+"
+
+QA_WX_LOAD="
+ usr/bin/qemu-i386
+ usr/bin/qemu-x86_64
+ usr/bin/qemu-alpha
+ usr/bin/qemu-arm
+ usr/bin/qemu-cris
+ usr/bin/qemu-m68k
+ usr/bin/qemu-microblaze
+ usr/bin/qemu-microblazeel
+ usr/bin/qemu-mips
+ usr/bin/qemu-mipsel
+ usr/bin/qemu-or1k
+ usr/bin/qemu-ppc
+ usr/bin/qemu-ppc64
+ usr/bin/qemu-sh4
+ usr/bin/qemu-sh4eb
+ usr/bin/qemu-sparc
+ usr/bin/qemu-sparc64
+ usr/bin/qemu-armeb
+ usr/bin/qemu-sparc32plus
+ usr/bin/qemu-s390x
+ usr/bin/qemu-unicore32
+"
+
+DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
+kernel module loaded before running kvm. The easiest way to ensure that the
+kernel module is loaded is to load it on boot.
+ For AMD CPUs the module is called 'kvm-amd'.
+ For Intel CPUs the module is called 'kvm-intel'.
+Please review /etc/conf.d/modules for how to load these.
+
+Make sure your user is in the 'kvm' group. Just run
+ # gpasswd -a <USER> kvm
+then have <USER> re-login.
+
+For brand new installs, the default permissions on /dev/kvm might not let
+you access it. You can tell udev to reset ownership/perms:
+ # udevadm trigger -c add /dev/kvm
+
+If you want to register binfmt handlers for qemu user targets:
+For openrc:
+ # rc-update add qemu-binfmt
+For systemd:
+ # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 2 6 25; then
+ eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use the"
+ ERROR_TUN+=" virtual network device if using -net tap."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+ use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
+ ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
+ ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
+
+ if use amd64 || use x86; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ use python && CONFIG_CHECK+=" ~DEBUG_FS"
+ ERROR_DEBUG_FS="debugFS support required for kvm_stat"
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+
+ if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
+ eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
+ eerror "instances are still pointing to it. Please update your"
+ eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
+ eerror "and the right system binary (e.g. qemu-system-x86_64)."
+ die "update your virt configs to not use qemu-kvm"
+ fi
+}
+
+# Sanity check to make sure target lists are kept up-to-date.
+check_targets() {
+ local var=$1 mak=$2
+ local detected sorted
+
+ pushd "${S}"/configs/targets/ >/dev/null || die
+
+ # Force C locale until glibc is updated. #564936
+ detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
+ sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
+ if [[ ${sorted} != "${detected}" ]] ; then
+ eerror "The ebuild needs to be kept in sync."
+ eerror "${var}: ${sorted}"
+ eerror "$(printf '%-*s' ${#var} configure): ${detected}"
+ die "sync ${var} to the list of targets"
+ fi
+
+ popd >/dev/null
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ check_targets IUSE_SOFTMMU_TARGETS softmmu
+ check_targets IUSE_USER_TARGETS linux-user
+
+ default
+
+ # Use correct toolchain to fix cross-compiling
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
+ export WINDRES=${CHOST}-windres
+
+ # defang automagic dependencies
+ use X || append-flags -DGENTOO_GTK_HIDE_X11
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ # Workaround for bug #938302
+ if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ cat >> "${S}"/configs/meson/linux.txt <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ fi
+
+ # Verbose builds
+ MAKEOPTS+=" V=1"
+
+ # Remove bundled modules
+ rm -r roms/*/ || die
+}
+
+##
+# configures qemu based on the build directory and the build type
+# we are using.
+#
+qemu_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local buildtype=$1
+ local builddir="${S}/${buildtype}-build"
+
+ mkdir "${builddir}" || die
+
+ local conf_opts=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --bindir=/usr/bin
+ --libdir=/usr/$(get_libdir)
+ --datadir=/usr/share
+ --docdir=/usr/share/doc/${PF}/html
+ --mandir=/usr/share/man
+ --localstatedir=/var
+ --disable-bsd-user
+ --disable-containers # bug #732972
+ --disable-guest-agent
+ --disable-strip
+ --disable-download
+ --python="${PYTHON}"
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
+ --disable-werror
+ # We support gnutls/nettle for crypto operations. It is possible
+ # to use gcrypt when gnutls/nettle are disabled (but not when they
+ # are enabled), but it's not really worth the hassle. Disable it
+ # all the time to avoid automatically detecting it. #568856
+ --disable-gcrypt
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
+ --host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
+ $(use_enable debug debug-info)
+ $(use_enable debug debug-tcg)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
+ $(use_enable plugins)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
+ $(use_enable xattr attr)
+ $(use_enable valgrind)
+ )
+
+ # Disable options not used by user targets. This simplifies building
+ # static user targets (USE=static-user) considerably.
+ conf_notuser() {
+ if [[ ${buildtype} == "user" ]] ; then
+ echo "--disable-${2:-$1}"
+ else
+ use_enable "$@"
+ fi
+ }
+ # Enable option only for softmmu build, but not 'user' or 'tools'
+ conf_softmmu() {
+ if [[ ${buildtype} == "softmmu" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
+ conf_opts+=(
+ $(conf_notuser accessibility brlapi)
+ $(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
+ $(conf_notuser bzip2)
+ $(conf_notuser capstone)
+ $(conf_notuser curl)
+ $(conf_tools doc docs)
+ $(conf_notuser fdt)
+ $(conf_notuser fuse)
+ $(conf_notuser glusterfs)
+ $(conf_notuser gnutls)
+ $(conf_notuser gnutls nettle)
+ $(conf_notuser gtk)
+ $(conf_notuser infiniband rdma)
+ $(conf_notuser iscsi libiscsi)
+ $(conf_notuser io-uring linux-io-uring)
+ $(conf_malloc jemalloc)
+ $(conf_notuser jpeg vnc-jpeg)
+ $(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
+ $(conf_notuser lzo)
+ $(conf_notuser multipath mpath)
+ $(conf_notuser ncurses curses)
+ $(conf_notuser nfs libnfs)
+ $(conf_notuser numa)
+ $(conf_notuser opengl)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser passt)
+ $(conf_notuser png)
+ $(conf_notuser rbd)
+ $(conf_notuser sasl vnc-sasl)
+ $(conf_notuser sdl)
+ $(conf_softmmu sdl-image)
+ $(conf_notuser seccomp)
+ $(conf_notuser slirp)
+ $(conf_notuser smartcard)
+ $(conf_notuser snappy)
+ $(conf_notuser spice)
+ $(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
+ $(conf_notuser usb libusb)
+ $(conf_notuser usbredir usb-redir)
+ $(conf_notuser vde)
+ $(conf_notuser vhost-net)
+ $(conf_notuser virgl virglrenderer)
+ $(conf_softmmu virtfs)
+ $(conf_notuser vnc)
+ $(conf_notuser vte)
+ $(conf_softmmu xdp af-xdp)
+ $(conf_notuser xen)
+ $(conf_notuser xen xen-pci-passthrough)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
+ $(conf_notuser zstd)
+ )
+
+ if [[ ! ${buildtype} == "user" ]] ; then
+ # used by passt and spice, enable it because glib is required anyway
+ conf_opts+=(
+ --enable-gio
+ )
+ # audio options
+ local audio_opts=(
+ # Note: backend order matters here: #716202
+ # We iterate from higher-level to lower level.
+ $(usex pulseaudio pa "")
+ $(usev pipewire)
+ $(usev jack)
+ $(usev sdl)
+ $(usev alsa)
+ $(usev oss)
+ )
+ conf_opts+=(
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
+ )
+ fi
+
+ case ${buildtype} in
+ user)
+ conf_opts+=(
+ --enable-linux-user
+ --disable-system
+ --disable-tools
+ --disable-cap-ng
+ --disable-seccomp
+ )
+ local static_flag="static-user"
+ ;;
+ softmmu)
+ conf_opts+=(
+ --disable-linux-user
+ --enable-system
+ --disable-tools
+ --enable-cap-ng
+ --enable-seccomp
+ --disable-libcbor
+ )
+ local static_flag="none"
+ ;;
+ tools)
+ conf_opts+=(
+ --disable-linux-user
+ --disable-system
+ --enable-tools
+ --enable-cap-ng
+ )
+ local static_flag="none"
+ ;;
+ esac
+
+ local targets="${buildtype}_targets"
+ [[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
+
+ # Add support for SystemTap
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
+
+ # We always want to attempt to build with PIE support as it results
+ # in a more secure binary. But it doesn't work with static or if
+ # the current GCC doesn't have PIE support.
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
+ conf_opts+=( --static --disable-pie )
+ else
+ tc-enables-pie && conf_opts+=( --enable-pie )
+ fi
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
+ echo "../configure ${conf_opts[*]}"
+ cd "${builddir}"
+ ../configure "${conf_opts[@]}" || die "configure failed"
+}
+
+src_configure() {
+ local target
+
+ python_setup
+
+ softmmu_targets= softmmu_bins=()
+ user_targets= user_bins=()
+
+ for target in ${IUSE_SOFTMMU_TARGETS} ; do
+ if use "qemu_softmmu_targets_${target}"; then
+ softmmu_targets+=",${target}-softmmu"
+ softmmu_bins+=( "qemu-system-${target}" )
+ fi
+ done
+
+ for target in ${IUSE_USER_TARGETS} ; do
+ if use "qemu_user_targets_${target}"; then
+ user_targets+=",${target}-linux-user"
+ user_bins+=( "qemu-${target}" )
+ fi
+ done
+
+ softmmu_targets=${softmmu_targets#,}
+ user_targets=${user_targets#,}
+
+ [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
+ [[ -n ${user_targets} ]] && qemu_src_configure "user"
+ qemu_src_configure "tools"
+}
+
+src_compile() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build" || die
+ default
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ default
+ fi
+
+ cd "${S}/tools-build" || die
+ default
+}
+
+src_test() {
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ pax-mark m */qemu-system-* #515550
+ emake check
+ fi
+}
+
+qemu_python_install() {
+ python_domodule "${S}/python/qemu"
+
+ python_doscript "${S}/scripts/kvm/vmxcap"
+ python_doscript "${S}/scripts/qmp/qmp-shell"
+ python_doscript "${S}/scripts/qmp/qemu-ga-client"
+}
+
+# Generate binfmt support files.
+# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
+# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
+generate_initd() {
+ local out="${T}/qemu-binfmt"
+ local out_systemd="${T}/qemu.conf"
+ local d="${T}/binfmt.d"
+
+ einfo "Generating qemu binfmt scripts and configuration files"
+
+ # Generate the debian fragments first.
+ mkdir -p "${d}"
+ "${S}"/scripts/qemu-binfmt-conf.sh \
+ --debian \
+ --exportdir "${d}" \
+ --qemu-path "${EPREFIX}/usr/bin" \
+ || die
+ # Then turn the fragments into a shell script we can source.
+ sed -E -i \
+ -e 's:^([^ ]+) (.*)$:\1="\2":' \
+ "${d}"/* || die
+
+ # Generate the init.d script by assembling the fragments from above.
+ local f qcpu package interpreter magic mask
+ cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+ for f in "${d}"/qemu-* ; do
+ source "${f}"
+
+ # Normalize the cpu logic like we do in the init.d for the native cpu.
+ qcpu=${package#qemu-}
+ case ${qcpu} in
+ arm*) qcpu="arm";;
+ mips*) qcpu="mips";;
+ ppc*) qcpu="ppc";;
+ s390*) qcpu="s390";;
+ sh*) qcpu="sh";;
+ sparc*) qcpu="sparc";;
+ esac
+
+ # we use 'printf' here to be portable across 'sh'
+ # implementations: #679168
+ cat <<EOF >>"${out}"
+ if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+ printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+ fi
+EOF
+
+ echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
+
+ done
+ cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
+src_install() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build"
+ emake DESTDIR="${ED}" install
+
+ # Install binfmt handler init script for user targets.
+ generate_initd
+ doinitd "${T}/qemu-binfmt"
+
+ # Install binfmt/qemu.conf.
+ insinto "/usr/share/qemu/binfmt.d"
+ doins "${T}/qemu.conf"
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build"
+ emake DESTDIR="${ED}" install
+
+ # This might not exist if the test failed. #512010
+ [[ -e check-report.html ]] && dodoc check-report.html
+
+ if use kernel_linux; then
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
+ fi
+
+ if use python; then
+ python_foreach_impl qemu_python_install
+ fi
+ fi
+
+ cd "${S}/tools-build" || die
+ emake DESTDIR="${ED}" install
+
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
+ # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
+ pushd "${ED}"/usr/bin >/dev/null || die
+ pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
+ popd >/dev/null || die
+
+ # suid in src_install to allow FEATURES=suidctl to work properly
+ fperms u+s /usr/libexec/qemu-bridge-helper
+
+ # Install config file example for qemu-bridge-helper
+ insinto "/etc/qemu"
+ doins "${FILESDIR}/bridge.conf"
+
+ cd "${S}" || die
+ dodoc MAINTAINERS
+ newdoc pc-bios/README README.pc-bios
+
+ # Disallow stripping of prebuilt firmware files.
+ dostrip -x ${QA_PREBUILT}
+
+ if [[ -n ${softmmu_targets} ]]; then
+ # Remove SeaBIOS since we're using the SeaBIOS packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
+ fi
+
+ # Remove vgabios since we're using the seavgabios packaged one
+ rm "${ED}/usr/share/qemu/vgabios.bin"
+ rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
+ rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
+ rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
+ rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
+ rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
+ dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
+ dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
+ dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
+ dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
+ dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
+ dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
+ fi
+
+ # Remove sgabios since we're using the sgabios packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
+ fi
+
+ # Remove iPXE since we're using the iPXE packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
+ dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
+ dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
+ dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
+ dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
+ dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
+ fi
+ fi
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
+ udev_reload
+ fi
+
+ xdg_icon_cache_update
+
+ [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
+ fcaps -M u-s cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_print_elog
+
+ if use pin-upstream-blobs && ver_replacing -lt ${FIRMWARE_ABI_VERSION}; then
+ ewarn "This version of qemu pins new versions of firmware blobs:"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
+ ewarn " $(best_version sys-firmware/ipxe)"
+ ewarn " $(best_version sys-firmware/sgabios)"
+ ewarn "This might break resume of hibernated guests (started with a different"
+ ewarn "firmware version) and live migration to/from qemu versions with different"
+ ewarn "firmware. Please (cold) restart all running guests. For functional"
+ ewarn "guest migration ensure that all hosts run at least"
+ ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
+ fi
+}
+
+pkg_info() {
+ echo "Using:"
+ echo " $(best_version app-emulation/spice-protocol)"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ echo " $(best_version sys-firmware/edk2-bin)"
+ else
+ echo " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
+ else
+ echo " $(best_version sys-firmware/seabios)"
+ fi
+
+ echo " $(best_version sys-firmware/ipxe)"
+ echo " $(best_version sys-firmware/sgabios)"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ udev_reload
+}
diff --git a/app-emulation/qemu/qemu-10.2.2.ebuild b/app-emulation/qemu/qemu-10.2.2.ebuild
new file mode 100644
index 000000000000..a2469a9403ed
--- /dev/null
+++ b/app-emulation/qemu/qemu-10.2.2.ebuild
@@ -0,0 +1,1026 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-1}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-2).0
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit eapi9-ver flag-o-matic linux-info toolchain-funcs python-r1 udev fcaps \
+ readme.gentoo-r1 pax-utils xdg-utils
+
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
+
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
+ inherit git-r3
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
+else
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv x86"
+fi
+
+DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
+
+LICENSE="GPL-2 LGPL-2 BSD-2"
+SLOT="0"
+
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam passt +pin-upstream-blobs pipewire
+ plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+ +slirp
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir valgrind vde +vhost-net virgl virtfs +vnc vte wayland X xattr xdp xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ microblazeel
+ mips
+ mips64
+ mips64el
+ mipsel
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
+
+use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
+use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
+IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
+
+RESTRICT="!test? ( test )"
+
+# Allow no targets to be built so that people can get a tools-only build.
+# Block USE flag configurations known to not work.
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ qemu_softmmu_targets_arm? ( fdt )
+ qemu_softmmu_targets_microblaze? ( fdt )
+ qemu_softmmu_targets_mips64el? ( fdt )
+ qemu_softmmu_targets_ppc64? ( fdt )
+ qemu_softmmu_targets_ppc? ( fdt )
+ qemu_softmmu_targets_riscv32? ( fdt )
+ qemu_softmmu_targets_riscv64? ( fdt )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
+ static-user? ( !plugins )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
+ vte? ( gtk )
+ multipath? ( udev )
+ plugins? ( !static-user )
+ xdp? ( bpf )
+"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
+# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
+#
+# The attr lib isn't always linked in (although the USE flag is always
+# respected). This is because qemu supports using the C library's API
+# when available rather than always using the external library.
+ALL_DEPEND="
+ dev-libs/glib:2[static-libs(+)]
+ virtual/zlib:=[static-libs(+)]
+ python? ( ${PYTHON_DEPS} )
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# softmmu targets (qemu-system-*).
+SOFTMMU_TOOLS_DEPEND="
+ >=x11-libs/pixman-0.28.0[static-libs(+)]
+ accessibility? (
+ app-accessibility/brltty[api]
+ app-accessibility/brltty[static-libs(+)]
+ )
+ aio? ( dev-libs/libaio[static-libs(+)] )
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( >=dev-libs/libbpf-1.1.0:= )
+ bzip2? ( app-arch/bzip2[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
+ curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3=[static-libs(+)] )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
+ gnutls? (
+ >=net-libs/gnutls-3.7.5:=[static-libs(+)]
+ >=dev-libs/nettle-3.7.3:=[static-libs(+)]
+ )
+ gtk? (
+ x11-libs/gtk+:3[wayland?,X?]
+ vte? ( x11-libs/vte:2.91 )
+ )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
+ iscsi? ( net-libs/libiscsi )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+ jack? ( virtual/jack )
+ jemalloc? ( dev-libs/jemalloc )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
+ lzo? ( dev-libs/lzo:2[static-libs(+)] )
+ multipath? ( sys-fs/multipath-tools )
+ ncurses? (
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
+ )
+ nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ opengl? (
+ virtual/opengl
+ media-libs/libepoxy[static-libs(+)]
+ media-libs/mesa[static-libs(+)]
+ media-libs/mesa[egl(+),gbm(+)]
+ )
+ pam? ( sys-libs/pam )
+ passt? ( net-misc/passt )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/libsdl2[static-libs(+)]
+ )
+ sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
+ seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+ slirp? ( net-libs/libslirp[static-libs(+)] )
+ smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
+ snappy? ( app-arch/snappy:= )
+ spice? (
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
+ )
+ ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
+ usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+ vde? ( net-misc/vde[static-libs(+)] )
+ virgl? ( media-libs/virglrenderer[static-libs(+)] )
+ virtfs? ( sys-libs/libcap )
+ xdp? ( net-libs/xdp-tools )
+ xen? ( app-emulation/xen-tools:= )
+ zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
+
+#
+# With USE=+pin-upstream-blobs we pin firmware versions to known good
+# version in order to minimize the frequency of disruptive changes. This
+# avoids unnecessary frustration on user side because changing the firmware
+# version can break resume of hibernated guest, inhibit live migrations,
+# and might have other unwanted consequences. For now, let us try to
+# synchronize firmware blobs with the ones bundled in upstream qemu. Simply
+# check the upstream git repository for any changes, for example:
+# https://github.com/qemu/qemu/tree/v10.0.2/roms for the 10.0.2 release.
+#
+# When changing pinned firmware versions
+# - create a separate ebuild with revision -r50
+# - update the FIRMWARE_ABI_VERSION to the current package version
+#
+
+FIRMWARE_ABI_VERSION="10.0.2"
+EDK2_OVMF_VERSION="202408"
+SEABIOS_VERSION="1.16.3"
+
+X86_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ ~sys-firmware/ipxe-1.21.1_p20230601[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/edk2-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ sys-firmware/sgabios
+ )
+"
+PPC_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ )
+"
+
+# See bug #913084 for pip dep
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-lang/perl
+ >=dev-build/meson-0.63.0
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ app-alternatives/ninja
+ virtual/pkgconfig
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
+ gtk? ( nls? ( sys-devel/gettext ) )
+ test? (
+ app-alternatives/bc
+ dev-libs/glib[utils]
+ dev-python/pycotap[${PYTHON_USEDEP}]
+ )
+"
+CDEPEND="
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
+ qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
+"
+DEPEND="
+ ${CDEPEND}
+ kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
+ static-user? ( ${ALL_DEPEND} )
+ valgrind? ( dev-debug/valgrind )
+"
+RDEPEND="
+ ${CDEPEND}
+ acct-group/kvm
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-10.1.2-fix_passt.patch
+ "${FILESDIR}"/${PN}-9.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-9.2.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
+ "${FILESDIR}"/${PN}-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch
+)
+
+QA_PREBUILT="
+ usr/share/qemu/hppa-firmware.img
+ usr/share/qemu/hppa-firmware64.img
+ usr/share/qemu/openbios-ppc
+ usr/share/qemu/openbios-sparc64
+ usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu/palcode-clipper
+ usr/share/qemu/s390-ccw.img
+ usr/share/qemu/s390-netboot.img
+ usr/share/qemu/u-boot.e500
+"
+
+QA_WX_LOAD="
+ usr/bin/qemu-i386
+ usr/bin/qemu-x86_64
+ usr/bin/qemu-alpha
+ usr/bin/qemu-arm
+ usr/bin/qemu-cris
+ usr/bin/qemu-m68k
+ usr/bin/qemu-microblaze
+ usr/bin/qemu-microblazeel
+ usr/bin/qemu-mips
+ usr/bin/qemu-mipsel
+ usr/bin/qemu-or1k
+ usr/bin/qemu-ppc
+ usr/bin/qemu-ppc64
+ usr/bin/qemu-sh4
+ usr/bin/qemu-sh4eb
+ usr/bin/qemu-sparc
+ usr/bin/qemu-sparc64
+ usr/bin/qemu-armeb
+ usr/bin/qemu-sparc32plus
+ usr/bin/qemu-s390x
+ usr/bin/qemu-unicore32
+"
+
+DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
+kernel module loaded before running kvm. The easiest way to ensure that the
+kernel module is loaded is to load it on boot.
+ For AMD CPUs the module is called 'kvm-amd'.
+ For Intel CPUs the module is called 'kvm-intel'.
+Please review /etc/conf.d/modules for how to load these.
+
+Make sure your user is in the 'kvm' group. Just run
+ # gpasswd -a <USER> kvm
+then have <USER> re-login.
+
+For brand new installs, the default permissions on /dev/kvm might not let
+you access it. You can tell udev to reset ownership/perms:
+ # udevadm trigger -c add /dev/kvm
+
+If you want to register binfmt handlers for qemu user targets:
+For openrc:
+ # rc-update add qemu-binfmt
+For systemd:
+ # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 2 6 25; then
+ eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use the"
+ ERROR_TUN+=" virtual network device if using -net tap."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+ use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
+ ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
+ ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
+
+ if use amd64 || use x86; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ use python && CONFIG_CHECK+=" ~DEBUG_FS"
+ ERROR_DEBUG_FS="debugFS support required for kvm_stat"
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+
+ if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
+ eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
+ eerror "instances are still pointing to it. Please update your"
+ eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
+ eerror "and the right system binary (e.g. qemu-system-x86_64)."
+ die "update your virt configs to not use qemu-kvm"
+ fi
+}
+
+# Sanity check to make sure target lists are kept up-to-date.
+check_targets() {
+ local var=$1 mak=$2
+ local detected sorted
+
+ pushd "${S}"/configs/targets/ >/dev/null || die
+
+ # Force C locale until glibc is updated. #564936
+ detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
+ sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
+ if [[ ${sorted} != "${detected}" ]] ; then
+ eerror "The ebuild needs to be kept in sync."
+ eerror "${var}: ${sorted}"
+ eerror "$(printf '%-*s' ${#var} configure): ${detected}"
+ die "sync ${var} to the list of targets"
+ fi
+
+ popd >/dev/null
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ check_targets IUSE_SOFTMMU_TARGETS softmmu
+ check_targets IUSE_USER_TARGETS linux-user
+
+ default
+
+ # Use correct toolchain to fix cross-compiling
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
+ export WINDRES=${CHOST}-windres
+
+ # defang automagic dependencies
+ use X || append-flags -DGENTOO_GTK_HIDE_X11
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ # Workaround for bug #938302
+ if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ cat >> "${S}"/configs/meson/linux.txt <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ fi
+
+ # Verbose builds
+ MAKEOPTS+=" V=1"
+
+ # Remove bundled modules
+ rm -r roms/*/ || die
+}
+
+##
+# configures qemu based on the build directory and the build type
+# we are using.
+#
+qemu_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local buildtype=$1
+ local builddir="${S}/${buildtype}-build"
+
+ mkdir "${builddir}" || die
+
+ local conf_opts=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --bindir=/usr/bin
+ --libdir=/usr/$(get_libdir)
+ --datadir=/usr/share
+ --docdir=/usr/share/doc/${PF}/html
+ --mandir=/usr/share/man
+ --localstatedir=/var
+ --disable-bsd-user
+ --disable-containers # bug #732972
+ --disable-guest-agent
+ --disable-strip
+ --disable-download
+ --python="${PYTHON}"
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
+ --disable-werror
+ # We support gnutls/nettle for crypto operations. It is possible
+ # to use gcrypt when gnutls/nettle are disabled (but not when they
+ # are enabled), but it's not really worth the hassle. Disable it
+ # all the time to avoid automatically detecting it. #568856
+ --disable-gcrypt
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
+ --host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
+ $(use_enable debug debug-info)
+ $(use_enable debug debug-tcg)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
+ $(use_enable plugins)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
+ $(use_enable xattr attr)
+ $(use_enable valgrind)
+ )
+
+ # Disable options not used by user targets. This simplifies building
+ # static user targets (USE=static-user) considerably.
+ conf_notuser() {
+ if [[ ${buildtype} == "user" ]] ; then
+ echo "--disable-${2:-$1}"
+ else
+ use_enable "$@"
+ fi
+ }
+ # Enable option only for softmmu build, but not 'user' or 'tools'
+ conf_softmmu() {
+ if [[ ${buildtype} == "softmmu" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
+ conf_opts+=(
+ $(conf_notuser accessibility brlapi)
+ $(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
+ $(conf_notuser bzip2)
+ $(conf_notuser capstone)
+ $(conf_notuser curl)
+ $(conf_tools doc docs)
+ $(conf_notuser fdt)
+ $(conf_notuser fuse)
+ $(conf_notuser glusterfs)
+ $(conf_notuser gnutls)
+ $(conf_notuser gnutls nettle)
+ $(conf_notuser gtk)
+ $(conf_notuser infiniband rdma)
+ $(conf_notuser iscsi libiscsi)
+ $(conf_notuser io-uring linux-io-uring)
+ $(conf_malloc jemalloc)
+ $(conf_notuser jpeg vnc-jpeg)
+ $(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
+ $(conf_notuser lzo)
+ $(conf_notuser multipath mpath)
+ $(conf_notuser ncurses curses)
+ $(conf_notuser nfs libnfs)
+ $(conf_notuser numa)
+ $(conf_notuser opengl)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser passt)
+ $(conf_notuser png)
+ $(conf_notuser rbd)
+ $(conf_notuser sasl vnc-sasl)
+ $(conf_notuser sdl)
+ $(conf_softmmu sdl-image)
+ $(conf_notuser seccomp)
+ $(conf_notuser slirp)
+ $(conf_notuser smartcard)
+ $(conf_notuser snappy)
+ $(conf_notuser spice)
+ $(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
+ $(conf_notuser usb libusb)
+ $(conf_notuser usbredir usb-redir)
+ $(conf_notuser vde)
+ $(conf_notuser vhost-net)
+ $(conf_notuser virgl virglrenderer)
+ $(conf_softmmu virtfs)
+ $(conf_notuser vnc)
+ $(conf_notuser vte)
+ $(conf_softmmu xdp af-xdp)
+ $(conf_notuser xen)
+ $(conf_notuser xen xen-pci-passthrough)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
+ $(conf_notuser zstd)
+ )
+
+ if [[ ! ${buildtype} == "user" ]] ; then
+ # used by passt and spice, enable it because glib is required anyway
+ conf_opts+=(
+ --enable-gio
+ )
+ # audio options
+ local audio_opts=(
+ # Note: backend order matters here: #716202
+ # We iterate from higher-level to lower level.
+ $(usex pulseaudio pa "")
+ $(usev pipewire)
+ $(usev jack)
+ $(usev sdl)
+ $(usev alsa)
+ $(usev oss)
+ )
+ conf_opts+=(
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
+ )
+ fi
+
+ case ${buildtype} in
+ user)
+ conf_opts+=(
+ --enable-linux-user
+ --disable-system
+ --disable-tools
+ --disable-cap-ng
+ --disable-seccomp
+ )
+ local static_flag="static-user"
+ ;;
+ softmmu)
+ conf_opts+=(
+ --disable-linux-user
+ --enable-system
+ --disable-tools
+ --enable-cap-ng
+ --enable-seccomp
+ --disable-libcbor
+ )
+ local static_flag="none"
+ ;;
+ tools)
+ conf_opts+=(
+ --disable-linux-user
+ --disable-system
+ --enable-tools
+ --enable-cap-ng
+ )
+ local static_flag="none"
+ ;;
+ esac
+
+ local targets="${buildtype}_targets"
+ [[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
+
+ # Add support for SystemTap
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
+
+ # We always want to attempt to build with PIE support as it results
+ # in a more secure binary. But it doesn't work with static or if
+ # the current GCC doesn't have PIE support.
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
+ conf_opts+=( --static --disable-pie )
+ else
+ tc-enables-pie && conf_opts+=( --enable-pie )
+ fi
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
+ echo "../configure ${conf_opts[*]}"
+ cd "${builddir}"
+ ../configure "${conf_opts[@]}" || die "configure failed"
+}
+
+src_configure() {
+ local target
+
+ python_setup
+
+ softmmu_targets= softmmu_bins=()
+ user_targets= user_bins=()
+
+ for target in ${IUSE_SOFTMMU_TARGETS} ; do
+ if use "qemu_softmmu_targets_${target}"; then
+ softmmu_targets+=",${target}-softmmu"
+ softmmu_bins+=( "qemu-system-${target}" )
+ fi
+ done
+
+ for target in ${IUSE_USER_TARGETS} ; do
+ if use "qemu_user_targets_${target}"; then
+ user_targets+=",${target}-linux-user"
+ user_bins+=( "qemu-${target}" )
+ fi
+ done
+
+ softmmu_targets=${softmmu_targets#,}
+ user_targets=${user_targets#,}
+
+ [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
+ [[ -n ${user_targets} ]] && qemu_src_configure "user"
+ qemu_src_configure "tools"
+}
+
+src_compile() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build" || die
+ default
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ default
+ fi
+
+ cd "${S}/tools-build" || die
+ default
+}
+
+src_test() {
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ pax-mark m */qemu-system-* #515550
+ emake check
+ fi
+}
+
+qemu_python_install() {
+ python_domodule "${S}/python/qemu"
+
+ python_doscript "${S}/scripts/kvm/vmxcap"
+ python_doscript "${S}/scripts/qmp/qmp-shell"
+ python_doscript "${S}/scripts/qmp/qemu-ga-client"
+}
+
+# Generate binfmt support files.
+# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
+# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
+generate_initd() {
+ local out="${T}/qemu-binfmt"
+ local out_systemd="${T}/qemu.conf"
+ local d="${T}/binfmt.d"
+
+ einfo "Generating qemu binfmt scripts and configuration files"
+
+ # Generate the debian fragments first.
+ mkdir -p "${d}"
+ "${S}"/scripts/qemu-binfmt-conf.sh \
+ --debian \
+ --exportdir "${d}" \
+ --qemu-path "${EPREFIX}/usr/bin" \
+ || die
+ # Then turn the fragments into a shell script we can source.
+ sed -E -i \
+ -e 's:^([^ ]+) (.*)$:\1="\2":' \
+ "${d}"/* || die
+
+ # Generate the init.d script by assembling the fragments from above.
+ local f qcpu package interpreter magic mask
+ cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+ for f in "${d}"/qemu-* ; do
+ source "${f}"
+
+ # Normalize the cpu logic like we do in the init.d for the native cpu.
+ qcpu=${package#qemu-}
+ case ${qcpu} in
+ arm*) qcpu="arm";;
+ mips*) qcpu="mips";;
+ ppc*) qcpu="ppc";;
+ s390*) qcpu="s390";;
+ sh*) qcpu="sh";;
+ sparc*) qcpu="sparc";;
+ esac
+
+ # we use 'printf' here to be portable across 'sh'
+ # implementations: #679168
+ cat <<EOF >>"${out}"
+ if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+ printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+ fi
+EOF
+
+ echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
+
+ done
+ cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
+src_install() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build"
+ emake DESTDIR="${ED}" install
+
+ # Install binfmt handler init script for user targets.
+ generate_initd
+ doinitd "${T}/qemu-binfmt"
+
+ # Install binfmt/qemu.conf.
+ insinto "/usr/share/qemu/binfmt.d"
+ doins "${T}/qemu.conf"
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build"
+ emake DESTDIR="${ED}" install
+
+ # This might not exist if the test failed. #512010
+ [[ -e check-report.html ]] && dodoc check-report.html
+
+ if use kernel_linux; then
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
+ fi
+
+ if use python; then
+ python_foreach_impl qemu_python_install
+ fi
+ fi
+
+ cd "${S}/tools-build" || die
+ emake DESTDIR="${ED}" install
+
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
+ # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
+ pushd "${ED}"/usr/bin >/dev/null || die
+ pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
+ popd >/dev/null || die
+
+ # suid in src_install to allow FEATURES=suidctl to work properly
+ fperms u+s /usr/libexec/qemu-bridge-helper
+
+ # Install config file example for qemu-bridge-helper
+ insinto "/etc/qemu"
+ doins "${FILESDIR}/bridge.conf"
+
+ cd "${S}" || die
+ dodoc MAINTAINERS
+ newdoc pc-bios/README README.pc-bios
+
+ # Disallow stripping of prebuilt firmware files.
+ dostrip -x ${QA_PREBUILT}
+
+ if [[ -n ${softmmu_targets} ]]; then
+ # Remove SeaBIOS since we're using the SeaBIOS packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
+ fi
+
+ # Remove vgabios since we're using the seavgabios packaged one
+ rm "${ED}/usr/share/qemu/vgabios.bin"
+ rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
+ rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
+ rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
+ rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
+ rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
+ dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
+ dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
+ dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
+ dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
+ dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
+ dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
+ fi
+
+ # Remove sgabios since we're using the sgabios packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
+ fi
+
+ # Remove iPXE since we're using the iPXE packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
+ dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
+ dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
+ dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
+ dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
+ dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
+ fi
+ fi
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
+ udev_reload
+ fi
+
+ xdg_icon_cache_update
+
+ [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
+ fcaps -M u-s cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_print_elog
+
+ if use pin-upstream-blobs && ver_replacing -lt ${FIRMWARE_ABI_VERSION}; then
+ ewarn "This version of qemu pins new versions of firmware blobs:"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
+ ewarn " $(best_version sys-firmware/ipxe)"
+ ewarn " $(best_version sys-firmware/sgabios)"
+ ewarn "This might break resume of hibernated guests (started with a different"
+ ewarn "firmware version) and live migration to/from qemu versions with different"
+ ewarn "firmware. Please (cold) restart all running guests. For functional"
+ ewarn "guest migration ensure that all hosts run at least"
+ ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
+ fi
+}
+
+pkg_info() {
+ echo "Using:"
+ echo " $(best_version app-emulation/spice-protocol)"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ echo " $(best_version sys-firmware/edk2-bin)"
+ else
+ echo " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
+ else
+ echo " $(best_version sys-firmware/seabios)"
+ fi
+
+ echo " $(best_version sys-firmware/ipxe)"
+ echo " $(best_version sys-firmware/sgabios)"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ udev_reload
+}
diff --git a/app-emulation/qemu/qemu-9.2.4.ebuild b/app-emulation/qemu/qemu-9.2.4.ebuild
new file mode 100644
index 000000000000..ba2a91fea421
--- /dev/null
+++ b/app-emulation/qemu/qemu-9.2.4.ebuild
@@ -0,0 +1,1001 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-1}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-2).0
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+FIRMWARE_ABI_VERSION="7.2.0"
+
+inherit eapi9-ver flag-o-matic linux-info toolchain-funcs python-r1 udev fcaps \
+ readme.gentoo-r1 pax-utils xdg-utils
+
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
+
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
+ inherit git-r3
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
+else
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv x86"
+fi
+
+DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
+
+LICENSE="GPL-2 LGPL-2 BSD-2"
+SLOT="0"
+
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam +pin-upstream-blobs pipewire
+ plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+ +slirp
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir vde +vhost-net virgl virtfs +vnc vte wayland X xattr xdp xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ microblazeel
+ mips
+ mips64
+ mips64el
+ mipsel
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
+
+use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
+use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
+IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
+
+RESTRICT="!test? ( test )"
+
+# Allow no targets to be built so that people can get a tools-only build.
+# Block USE flag configurations known to not work.
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ qemu_softmmu_targets_arm? ( fdt )
+ qemu_softmmu_targets_microblaze? ( fdt )
+ qemu_softmmu_targets_mips64el? ( fdt )
+ qemu_softmmu_targets_ppc64? ( fdt )
+ qemu_softmmu_targets_ppc? ( fdt )
+ qemu_softmmu_targets_riscv32? ( fdt )
+ qemu_softmmu_targets_riscv64? ( fdt )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
+ static-user? ( !plugins )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
+ vte? ( gtk )
+ multipath? ( udev )
+ plugins? ( !static-user )
+ xdp? ( bpf )
+"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
+# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
+#
+# The attr lib isn't always linked in (although the USE flag is always
+# respected). This is because qemu supports using the C library's API
+# when available rather than always using the external library.
+ALL_DEPEND="
+ dev-libs/glib:2[static-libs(+)]
+ virtual/zlib:=[static-libs(+)]
+ python? ( ${PYTHON_DEPS} )
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# softmmu targets (qemu-system-*).
+SOFTMMU_TOOLS_DEPEND="
+ >=x11-libs/pixman-0.28.0[static-libs(+)]
+ accessibility? (
+ app-accessibility/brltty[api]
+ app-accessibility/brltty[static-libs(+)]
+ )
+ aio? ( dev-libs/libaio[static-libs(+)] )
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( >=dev-libs/libbpf-1.1.0:= )
+ bzip2? ( app-arch/bzip2[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
+ curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3=[static-libs(+)] )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
+ gnutls? (
+ >=net-libs/gnutls-3.0:=[static-libs(+)]
+ dev-libs/nettle:=[static-libs(+)]
+ )
+ gtk? (
+ x11-libs/gtk+:3[wayland?,X?]
+ vte? ( x11-libs/vte:2.91 )
+ )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
+ iscsi? ( net-libs/libiscsi )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+ jack? ( virtual/jack )
+ jemalloc? ( dev-libs/jemalloc )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
+ lzo? ( dev-libs/lzo:2[static-libs(+)] )
+ multipath? ( sys-fs/multipath-tools )
+ ncurses? (
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
+ )
+ nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ opengl? (
+ virtual/opengl
+ media-libs/libepoxy[static-libs(+)]
+ media-libs/mesa[static-libs(+)]
+ media-libs/mesa[egl(+),gbm(+)]
+ )
+ pam? ( sys-libs/pam )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/libsdl2[static-libs(+)]
+ )
+ sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
+ seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+ slirp? ( net-libs/libslirp[static-libs(+)] )
+ smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
+ snappy? ( app-arch/snappy:= )
+ spice? (
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
+ )
+ ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
+ usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+ vde? ( net-misc/vde[static-libs(+)] )
+ virgl? ( media-libs/virglrenderer[static-libs(+)] )
+ virtfs? ( sys-libs/libcap )
+ xdp? ( net-libs/xdp-tools )
+ xen? ( app-emulation/xen-tools:= )
+ zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
+
+EDK2_OVMF_VERSION="202202"
+SEABIOS_VERSION="1.16.3"
+
+X86_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ ~sys-firmware/ipxe-1.21.1[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/edk2-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ sys-firmware/sgabios
+ )
+"
+PPC_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ )
+"
+
+# See bug #913084 for pip dep
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-lang/perl
+ >=dev-build/meson-0.63.0
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ app-alternatives/ninja
+ virtual/pkgconfig
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
+ gtk? ( nls? ( sys-devel/gettext ) )
+ test? (
+ app-alternatives/bc
+ dev-libs/glib[utils]
+ dev-python/pycotap[${PYTHON_USEDEP}]
+ )
+"
+CDEPEND="
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
+ qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
+"
+DEPEND="
+ ${CDEPEND}
+ kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
+ static-user? ( ${ALL_DEPEND} )
+"
+RDEPEND="
+ ${CDEPEND}
+ acct-group/kvm
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-9.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-9.2.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
+ "${FILESDIR}"/${PN}-7.2.16-optionrom-pass-Wl-no-error-rwx-segments.patch
+)
+
+QA_PREBUILT="
+ usr/share/qemu/hppa-firmware.img
+ usr/share/qemu/hppa-firmware64.img
+ usr/share/qemu/openbios-ppc
+ usr/share/qemu/openbios-sparc64
+ usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu/palcode-clipper
+ usr/share/qemu/s390-ccw.img
+ usr/share/qemu/s390-netboot.img
+ usr/share/qemu/u-boot.e500
+"
+
+QA_WX_LOAD="
+ usr/bin/qemu-i386
+ usr/bin/qemu-x86_64
+ usr/bin/qemu-alpha
+ usr/bin/qemu-arm
+ usr/bin/qemu-cris
+ usr/bin/qemu-m68k
+ usr/bin/qemu-microblaze
+ usr/bin/qemu-microblazeel
+ usr/bin/qemu-mips
+ usr/bin/qemu-mipsel
+ usr/bin/qemu-or1k
+ usr/bin/qemu-ppc
+ usr/bin/qemu-ppc64
+ usr/bin/qemu-sh4
+ usr/bin/qemu-sh4eb
+ usr/bin/qemu-sparc
+ usr/bin/qemu-sparc64
+ usr/bin/qemu-armeb
+ usr/bin/qemu-sparc32plus
+ usr/bin/qemu-s390x
+ usr/bin/qemu-unicore32
+"
+
+DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
+kernel module loaded before running kvm. The easiest way to ensure that the
+kernel module is loaded is to load it on boot.
+ For AMD CPUs the module is called 'kvm-amd'.
+ For Intel CPUs the module is called 'kvm-intel'.
+Please review /etc/conf.d/modules for how to load these.
+
+Make sure your user is in the 'kvm' group. Just run
+ $ gpasswd -a <USER> kvm
+then have <USER> re-login.
+
+For brand new installs, the default permissions on /dev/kvm might not let
+you access it. You can tell udev to reset ownership/perms:
+ $ udevadm trigger -c add /dev/kvm
+
+If you want to register binfmt handlers for qemu user targets:
+For openrc:
+ # rc-update add qemu-binfmt
+For systemd:
+ # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 2 6 25; then
+ eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use the"
+ ERROR_TUN+=" virtual network device if using -net tap."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+ use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
+ ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
+ ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
+
+ if use amd64 || use x86; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ use python && CONFIG_CHECK+=" ~DEBUG_FS"
+ ERROR_DEBUG_FS="debugFS support required for kvm_stat"
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+
+ if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
+ eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
+ eerror "instances are still pointing to it. Please update your"
+ eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
+ eerror "and the right system binary (e.g. qemu-system-x86_64)."
+ die "update your virt configs to not use qemu-kvm"
+ fi
+}
+
+# Sanity check to make sure target lists are kept up-to-date.
+check_targets() {
+ local var=$1 mak=$2
+ local detected sorted
+
+ pushd "${S}"/configs/targets/ >/dev/null || die
+
+ # Force C locale until glibc is updated. #564936
+ detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
+ sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
+ if [[ ${sorted} != "${detected}" ]] ; then
+ eerror "The ebuild needs to be kept in sync."
+ eerror "${var}: ${sorted}"
+ eerror "$(printf '%-*s' ${#var} configure): ${detected}"
+ die "sync ${var} to the list of targets"
+ fi
+
+ popd >/dev/null
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ check_targets IUSE_SOFTMMU_TARGETS softmmu
+ check_targets IUSE_USER_TARGETS linux-user
+
+ default
+
+ # Use correct toolchain to fix cross-compiling
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
+ export WINDRES=${CHOST}-windres
+
+ # defang automagic dependencies
+ use X || append-flags -DGENTOO_GTK_HIDE_X11
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ # Workaround for bug #938302
+ if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ cat >> "${S}"/configs/meson/linux.txt <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ fi
+
+ # Verbose builds
+ MAKEOPTS+=" V=1"
+
+ # Remove bundled modules
+ rm -r roms/*/ || die
+}
+
+##
+# configures qemu based on the build directory and the build type
+# we are using.
+#
+qemu_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local buildtype=$1
+ local builddir="${S}/${buildtype}-build"
+
+ mkdir "${builddir}" || die
+
+ local conf_opts=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --bindir=/usr/bin
+ --libdir=/usr/$(get_libdir)
+ --datadir=/usr/share
+ --docdir=/usr/share/doc/${PF}/html
+ --mandir=/usr/share/man
+ --localstatedir=/var
+ --disable-bsd-user
+ --disable-containers # bug #732972
+ --disable-guest-agent
+ --disable-strip
+ --disable-download
+ --python="${PYTHON}"
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
+ --disable-werror
+ # We support gnutls/nettle for crypto operations. It is possible
+ # to use gcrypt when gnutls/nettle are disabled (but not when they
+ # are enabled), but it's not really worth the hassle. Disable it
+ # all the time to avoid automatically detecting it. #568856
+ --disable-gcrypt
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
+ --host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
+ $(use_enable debug debug-info)
+ $(use_enable debug debug-tcg)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
+ $(use_enable plugins)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
+ $(use_enable xattr attr)
+ )
+
+ # Disable options not used by user targets. This simplifies building
+ # static user targets (USE=static-user) considerably.
+ conf_notuser() {
+ if [[ ${buildtype} == "user" ]] ; then
+ echo "--disable-${2:-$1}"
+ else
+ use_enable "$@"
+ fi
+ }
+ # Enable option only for softmmu build, but not 'user' or 'tools'
+ conf_softmmu() {
+ if [[ ${buildtype} == "softmmu" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
+ conf_opts+=(
+ $(conf_notuser accessibility brlapi)
+ $(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
+ $(conf_notuser bzip2)
+ $(conf_notuser capstone)
+ $(conf_notuser curl)
+ $(conf_tools doc docs)
+ $(conf_notuser fdt)
+ $(conf_notuser fuse)
+ $(conf_notuser glusterfs)
+ $(conf_notuser gnutls)
+ $(conf_notuser gnutls nettle)
+ $(conf_notuser gtk)
+ $(conf_notuser infiniband rdma)
+ $(conf_notuser iscsi libiscsi)
+ $(conf_notuser io-uring linux-io-uring)
+ $(conf_malloc jemalloc)
+ $(conf_notuser jpeg vnc-jpeg)
+ $(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
+ $(conf_notuser lzo)
+ $(conf_notuser multipath mpath)
+ $(conf_notuser ncurses curses)
+ $(conf_notuser nfs libnfs)
+ $(conf_notuser numa)
+ $(conf_notuser opengl)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser png)
+ $(conf_notuser rbd)
+ $(conf_notuser sasl vnc-sasl)
+ $(conf_notuser sdl)
+ $(conf_softmmu sdl-image)
+ $(conf_notuser seccomp)
+ $(conf_notuser slirp)
+ $(conf_notuser smartcard)
+ $(conf_notuser snappy)
+ $(conf_notuser spice)
+ $(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
+ $(conf_notuser usb libusb)
+ $(conf_notuser usbredir usb-redir)
+ $(conf_notuser vde)
+ $(conf_notuser vhost-net)
+ $(conf_notuser virgl virglrenderer)
+ $(conf_softmmu virtfs)
+ $(conf_notuser vnc)
+ $(conf_notuser vte)
+ $(conf_softmmu xdp af-xdp)
+ $(conf_notuser xen)
+ $(conf_notuser xen xen-pci-passthrough)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
+ $(conf_notuser zstd)
+ )
+
+ if [[ ! ${buildtype} == "user" ]] ; then
+ # audio options
+ local audio_opts=(
+ # Note: backend order matters here: #716202
+ # We iterate from higher-level to lower level.
+ $(usex pulseaudio pa "")
+ $(usev pipewire)
+ $(usev jack)
+ $(usev sdl)
+ $(usev alsa)
+ $(usev oss)
+ )
+ conf_opts+=(
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
+ )
+ fi
+
+ case ${buildtype} in
+ user)
+ conf_opts+=(
+ --enable-linux-user
+ --disable-system
+ --disable-tools
+ --disable-cap-ng
+ --disable-seccomp
+ )
+ local static_flag="static-user"
+ ;;
+ softmmu)
+ conf_opts+=(
+ --disable-linux-user
+ --enable-system
+ --disable-tools
+ --enable-cap-ng
+ --enable-seccomp
+ --disable-libcbor
+ )
+ local static_flag="none"
+ ;;
+ tools)
+ conf_opts+=(
+ --disable-linux-user
+ --disable-system
+ --enable-tools
+ --enable-cap-ng
+ )
+ local static_flag="none"
+ ;;
+ esac
+
+ local targets="${buildtype}_targets"
+ [[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
+
+ # Add support for SystemTap
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
+
+ # We always want to attempt to build with PIE support as it results
+ # in a more secure binary. But it doesn't work with static or if
+ # the current GCC doesn't have PIE support.
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
+ conf_opts+=( --static --disable-pie )
+ else
+ tc-enables-pie && conf_opts+=( --enable-pie )
+ fi
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
+ echo "../configure ${conf_opts[*]}"
+ cd "${builddir}"
+ ../configure "${conf_opts[@]}" || die "configure failed"
+}
+
+src_configure() {
+ local target
+
+ python_setup
+
+ softmmu_targets= softmmu_bins=()
+ user_targets= user_bins=()
+
+ for target in ${IUSE_SOFTMMU_TARGETS} ; do
+ if use "qemu_softmmu_targets_${target}"; then
+ softmmu_targets+=",${target}-softmmu"
+ softmmu_bins+=( "qemu-system-${target}" )
+ fi
+ done
+
+ for target in ${IUSE_USER_TARGETS} ; do
+ if use "qemu_user_targets_${target}"; then
+ user_targets+=",${target}-linux-user"
+ user_bins+=( "qemu-${target}" )
+ fi
+ done
+
+ softmmu_targets=${softmmu_targets#,}
+ user_targets=${user_targets#,}
+
+ [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
+ [[ -n ${user_targets} ]] && qemu_src_configure "user"
+ qemu_src_configure "tools"
+}
+
+src_compile() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build" || die
+ default
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ default
+ fi
+
+ cd "${S}/tools-build" || die
+ default
+}
+
+src_test() {
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ pax-mark m */qemu-system-* #515550
+ emake check
+ fi
+}
+
+qemu_python_install() {
+ python_domodule "${S}/python/qemu"
+
+ python_doscript "${S}/scripts/kvm/vmxcap"
+ python_doscript "${S}/scripts/qmp/qmp-shell"
+ python_doscript "${S}/scripts/qmp/qemu-ga-client"
+}
+
+# Generate binfmt support files.
+# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
+# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
+generate_initd() {
+ local out="${T}/qemu-binfmt"
+ local out_systemd="${T}/qemu.conf"
+ local d="${T}/binfmt.d"
+
+ einfo "Generating qemu binfmt scripts and configuration files"
+
+ # Generate the debian fragments first.
+ mkdir -p "${d}"
+ "${S}"/scripts/qemu-binfmt-conf.sh \
+ --debian \
+ --exportdir "${d}" \
+ --qemu-path "${EPREFIX}/usr/bin" \
+ || die
+ # Then turn the fragments into a shell script we can source.
+ sed -E -i \
+ -e 's:^([^ ]+) (.*)$:\1="\2":' \
+ "${d}"/* || die
+
+ # Generate the init.d script by assembling the fragments from above.
+ local f qcpu package interpreter magic mask
+ cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+ for f in "${d}"/qemu-* ; do
+ source "${f}"
+
+ # Normalize the cpu logic like we do in the init.d for the native cpu.
+ qcpu=${package#qemu-}
+ case ${qcpu} in
+ arm*) qcpu="arm";;
+ mips*) qcpu="mips";;
+ ppc*) qcpu="ppc";;
+ s390*) qcpu="s390";;
+ sh*) qcpu="sh";;
+ sparc*) qcpu="sparc";;
+ esac
+
+ # we use 'printf' here to be portable across 'sh'
+ # implementations: #679168
+ cat <<EOF >>"${out}"
+ if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+ printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+ fi
+EOF
+
+ echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
+
+ done
+ cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
+src_install() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build"
+ emake DESTDIR="${ED}" install
+
+ # Install binfmt handler init script for user targets.
+ generate_initd
+ doinitd "${T}/qemu-binfmt"
+
+ # Install binfmt/qemu.conf.
+ insinto "/usr/share/qemu/binfmt.d"
+ doins "${T}/qemu.conf"
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build"
+ emake DESTDIR="${ED}" install
+
+ # This might not exist if the test failed. #512010
+ [[ -e check-report.html ]] && dodoc check-report.html
+
+ if use kernel_linux; then
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
+ fi
+
+ if use python; then
+ python_foreach_impl qemu_python_install
+ fi
+ fi
+
+ cd "${S}/tools-build" || die
+ emake DESTDIR="${ED}" install
+
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
+ # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
+ pushd "${ED}"/usr/bin >/dev/null || die
+ pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
+ popd >/dev/null || die
+
+ # Install config file example for qemu-bridge-helper
+ insinto "/etc/qemu"
+ doins "${FILESDIR}/bridge.conf"
+
+ cd "${S}" || die
+ dodoc MAINTAINERS
+ newdoc pc-bios/README README.pc-bios
+
+ # Disallow stripping of prebuilt firmware files.
+ dostrip -x ${QA_PREBUILT}
+
+ if [[ -n ${softmmu_targets} ]]; then
+ # Remove SeaBIOS since we're using the SeaBIOS packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
+ fi
+
+ # Remove vgabios since we're using the seavgabios packaged one
+ rm "${ED}/usr/share/qemu/vgabios.bin"
+ rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
+ rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
+ rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
+ rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
+ rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
+ dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
+ dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
+ dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
+ dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
+ dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
+ dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
+ fi
+
+ # Remove sgabios since we're using the sgabios packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
+ fi
+
+ # Remove iPXE since we're using the iPXE packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
+ dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
+ dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
+ dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
+ dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
+ dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
+ fi
+ fi
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
+ udev_reload
+ fi
+
+ xdg_icon_cache_update
+
+ [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
+ fcaps -m u+s cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_print_elog
+
+ if use pin-upstream-blobs && ver_replacing -lt ${FIRMWARE_ABI_VERSION}; then
+ ewarn "This version of qemu pins new versions of firmware blobs:"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
+ ewarn " $(best_version sys-firmware/ipxe)"
+ ewarn " $(best_version sys-firmware/sgabios)"
+ ewarn "This might break resume of hibernated guests (started with a different"
+ ewarn "firmware version) and live migration to/from qemu versions with different"
+ ewarn "firmware. Please (cold) restart all running guests. For functional"
+ ewarn "guest migration ensure that all"
+ ewarn "hosts run at least"
+ ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
+ fi
+}
+
+pkg_info() {
+ echo "Using:"
+ echo " $(best_version app-emulation/spice-protocol)"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ echo " $(best_version sys-firmware/edk2-bin)"
+ else
+ echo " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
+ else
+ echo " $(best_version sys-firmware/seabios)"
+ fi
+
+ echo " $(best_version sys-firmware/ipxe)"
+ echo " $(best_version sys-firmware/sgabios)"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ udev_reload
+}
diff --git a/app-emulation/qemu/qemu-9999.ebuild b/app-emulation/qemu/qemu-9999.ebuild
new file mode 100644
index 000000000000..9c1055d1db83
--- /dev/null
+++ b/app-emulation/qemu/qemu-9999.ebuild
@@ -0,0 +1,1026 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Generate using https://github.com/thesamesam/sam-gentoo-scripts/blob/main/niche/generate-qemu-docs
+# Set to 1 if prebuilt, 0 if not
+# (the construct below is to allow overriding from env for script)
+QEMU_DOCS_PREBUILT=${QEMU_DOCS_PREBUILT:-1}
+QEMU_DOCS_PREBUILT_DEV=sam
+QEMU_DOCS_VERSION=$(ver_cut 1-2).0
+# Default to generating docs (inc. man pages) if no prebuilt; overridden later
+# bug #830088
+QEMU_DOC_USEFLAG="+doc"
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE="ensurepip(-),ncurses,readline"
+
+inherit eapi9-ver flag-o-matic linux-info toolchain-funcs python-r1 udev fcaps \
+ readme.gentoo-r1 pax-utils xdg-utils
+
+if [[ ${PV} == *9999* ]]; then
+ QEMU_DOCS_PREBUILT=0
+
+ EGIT_REPO_URI="https://gitlab.com/qemu-project/qemu.git/"
+ EGIT_SUBMODULES=()
+ inherit git-r3
+ declare -A SUBPROJECTS=(
+ [keycodemapdb]="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ [berkeley-softfloat-3]="b64af41c3276f97f0e181920400ee056b9c88037"
+ [berkeley-testfloat-3]="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ )
+
+ for proj in "${!SUBPROJECTS[@]}"; do
+ c=${SUBPROJECTS[${proj}]}
+ SRC_URI+=" https://gitlab.com/qemu-project/${proj}/-/archive/${c}/${proj}-${c}.tar.bz2"
+ done
+else
+ MY_P="${PN}-${PV/_rc/-rc}"
+ SRC_URI="https://download.qemu.org/${MY_P}.tar.xz"
+
+ if [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ SRC_URI+=" !doc? ( https://dev.gentoo.org/~${QEMU_DOCS_PREBUILT_DEV}/distfiles/${CATEGORY}/${PN}/${PN}-${QEMU_DOCS_VERSION}-docs.tar.xz )"
+ fi
+
+ S="${WORKDIR}/${MY_P}"
+ [[ "${PV}" != *_rc* ]] && KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"
+fi
+
+DESCRIPTION="QEMU + Kernel-based Virtual Machine userland tools"
+HOMEPAGE="https://www.qemu.org https://www.linux-kvm.org"
+
+LICENSE="GPL-2 LGPL-2 BSD-2"
+SLOT="0"
+
+[[ ${QEMU_DOCS_PREBUILT} == 1 ]] && QEMU_DOC_USEFLAG="doc"
+
+IUSE="accessibility +aio alsa bpf bzip2 capstone +curl debug ${QEMU_DOC_USEFLAG}
+ +fdt fuse glusterfs +gnutls gtk infiniband iscsi io-uring
+ jack jemalloc +jpeg keyutils
+ lzo multipath
+ ncurses nfs nls numa opengl +oss pam passt +pin-upstream-blobs pipewire
+ plugins +png pulseaudio python rbd sasl +seccomp sdl sdl-image selinux
+ +slirp
+ smartcard snappy spice ssh static-user systemtap test udev usb
+ usbredir valgrind vde +vhost-net virgl virtfs +vnc vte wayland X xattr xdp xen
+ zstd"
+
+COMMON_TARGETS="
+ aarch64
+ alpha
+ arm
+ hppa
+ i386
+ loongarch64
+ m68k
+ microblaze
+ mips
+ mips64
+ mips64el
+ mipsel
+ or1k
+ ppc
+ ppc64
+ riscv32
+ riscv64
+ s390x
+ sh4
+ sh4eb
+ sparc
+ sparc64
+ x86_64
+ xtensa
+ xtensaeb
+"
+IUSE_SOFTMMU_TARGETS="
+ ${COMMON_TARGETS}
+ avr
+ rx
+ tricore
+"
+IUSE_USER_TARGETS="
+ ${COMMON_TARGETS}
+ aarch64_be
+ armeb
+ hexagon
+ microblazeel
+ mipsn32
+ mipsn32el
+ ppc64le
+ sparc32plus
+"
+
+use_softmmu_targets=$(printf ' qemu_softmmu_targets_%s' ${IUSE_SOFTMMU_TARGETS})
+use_user_targets=$(printf ' qemu_user_targets_%s' ${IUSE_USER_TARGETS})
+IUSE+=" ${use_softmmu_targets} ${use_user_targets}"
+
+RESTRICT="!test? ( test )"
+
+# Allow no targets to be built so that people can get a tools-only build.
+# Block USE flag configurations known to not work.
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ qemu_softmmu_targets_arm? ( fdt )
+ qemu_softmmu_targets_microblaze? ( fdt )
+ qemu_softmmu_targets_mips64el? ( fdt )
+ qemu_softmmu_targets_ppc64? ( fdt )
+ qemu_softmmu_targets_ppc? ( fdt )
+ qemu_softmmu_targets_riscv32? ( fdt )
+ qemu_softmmu_targets_riscv64? ( fdt )
+ qemu_softmmu_targets_x86_64? ( fdt )
+ sdl-image? ( sdl )
+ static-user? ( !plugins )
+ virgl? ( opengl )
+ virtfs? ( xattr )
+ vnc? ( gnutls )
+ vte? ( gtk )
+ multipath? ( udev )
+ plugins? ( !static-user )
+ xdp? ( bpf )
+"
+for smname in ${IUSE_SOFTMMU_TARGETS} ; do
+ REQUIRED_USE+=" qemu_softmmu_targets_${smname}? ( kernel_linux? ( seccomp ) )"
+done
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# and user/softmmu targets (qemu-*, qemu-system-*).
+#
+# Yep, you need both libcap and libcap-ng since virtfs only uses libcap.
+#
+# The attr lib isn't always linked in (although the USE flag is always
+# respected). This is because qemu supports using the C library's API
+# when available rather than always using the external library.
+ALL_DEPEND="
+ dev-libs/glib:2[static-libs(+)]
+ virtual/zlib:=[static-libs(+)]
+ python? ( ${PYTHON_DEPS} )
+ systemtap? ( dev-debug/systemtap )
+ xattr? ( sys-apps/attr[static-libs(+)] )
+"
+
+# Dependencies required for qemu tools (qemu-nbd, qemu-img, qemu-io, ...)
+# softmmu targets (qemu-system-*).
+SOFTMMU_TOOLS_DEPEND="
+ >=x11-libs/pixman-0.28.0[static-libs(+)]
+ accessibility? (
+ app-accessibility/brltty[api]
+ app-accessibility/brltty[static-libs(+)]
+ )
+ aio? ( dev-libs/libaio[static-libs(+)] )
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ bpf? ( >=dev-libs/libbpf-1.1.0:= )
+ bzip2? ( app-arch/bzip2[static-libs(+)] )
+ capstone? ( dev-libs/capstone:=[static-libs(+)] )
+ curl? ( >=net-misc/curl-7.15.4[static-libs(+)] )
+ fdt? ( >=sys-apps/dtc-1.5.1[static-libs(+)] )
+ fuse? ( >=sys-fs/fuse-3.1:3=[static-libs(+)] )
+ glusterfs? ( >=sys-cluster/glusterfs-3.4.0[static-libs(+)] )
+ gnutls? (
+ >=net-libs/gnutls-3.7.5:=[static-libs(+)]
+ >=dev-libs/nettle-3.7.3:=[static-libs(+)]
+ )
+ gtk? (
+ x11-libs/gtk+:3[wayland?,X?]
+ vte? ( x11-libs/vte:2.91 )
+ )
+ infiniband? ( sys-cluster/rdma-core[static-libs(+)] )
+ iscsi? ( net-libs/libiscsi )
+ io-uring? ( sys-libs/liburing:=[static-libs(+)] )
+ jack? ( virtual/jack )
+ jemalloc? ( dev-libs/jemalloc )
+ jpeg? ( media-libs/libjpeg-turbo:=[static-libs(+)] )
+ kernel_linux? ( sys-libs/libcap-ng[static-libs(+)] )
+ keyutils? ( sys-apps/keyutils[static-libs(+)] )
+ lzo? ( dev-libs/lzo:2[static-libs(+)] )
+ multipath? ( sys-fs/multipath-tools )
+ ncurses? (
+ sys-libs/ncurses:=[unicode(+)]
+ sys-libs/ncurses:=[static-libs(+)]
+ )
+ nfs? ( >=net-fs/libnfs-1.9.3:=[static-libs(+)] )
+ numa? ( sys-process/numactl[static-libs(+)] )
+ opengl? (
+ virtual/opengl
+ media-libs/libepoxy[static-libs(+)]
+ media-libs/mesa[static-libs(+)]
+ media-libs/mesa[egl(+),gbm(+)]
+ )
+ pam? ( sys-libs/pam )
+ passt? ( net-misc/passt )
+ pipewire? ( >=media-video/pipewire-0.3.60 )
+ png? ( >=media-libs/libpng-1.6.34:=[static-libs(+)] )
+ pulseaudio? ( media-libs/libpulse )
+ rbd? ( sys-cluster/ceph )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)] )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/libsdl2[static-libs(+)]
+ )
+ sdl-image? ( media-libs/sdl2-image[static-libs(+)] )
+ seccomp? ( >=sys-libs/libseccomp-2.1.0[static-libs(+)] )
+ slirp? ( net-libs/libslirp[static-libs(+)] )
+ smartcard? ( >=app-emulation/libcacard-2.5.0[static-libs(+)] )
+ snappy? ( app-arch/snappy:= )
+ spice? (
+ >=app-emulation/spice-protocol-0.14.0
+ >=app-emulation/spice-0.14.0[static-libs(+)]
+ )
+ ssh? ( >=net-libs/libssh-0.8.6[static-libs(+)] )
+ udev? ( virtual/libudev:= )
+ usb? ( >=virtual/libusb-1-r2:1[static-libs(+)] )
+ usbredir? ( >=sys-apps/usbredir-0.6[static-libs(+)] )
+ vde? ( net-misc/vde[static-libs(+)] )
+ virgl? ( media-libs/virglrenderer[static-libs(+)] )
+ virtfs? ( sys-libs/libcap )
+ xdp? ( net-libs/xdp-tools )
+ xen? ( app-emulation/xen-tools:= )
+ zstd? ( >=app-arch/zstd-1.4.0[static-libs(+)] )
+"
+
+#
+# With USE=+pin-upstream-blobs we pin firmware versions to known good
+# version in order to minimize the frequency of disruptive changes. This
+# avoids unnecessary frustration on user side because changing the firmware
+# version can break resume of hibernated guest, inhibit live migrations,
+# and might have other unwanted consequences. For now, let us try to
+# synchronize firmware blobs with the ones bundled in upstream qemu. Simply
+# check the upstream git repository for any changes, for example:
+# https://github.com/qemu/qemu/tree/v10.0.2/roms for the 10.0.2 release.
+#
+# When changing pinned firmware versions
+# - create a separate ebuild with revision -r50
+# - update the FIRMWARE_ABI_VERSION to the current package version
+#
+
+FIRMWARE_ABI_VERSION="10.0.2"
+EDK2_OVMF_VERSION="202408"
+SEABIOS_VERSION="1.16.3"
+
+X86_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ ~sys-firmware/ipxe-1.21.1_p20230601[binary,qemu]
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ ~sys-firmware/sgabios-0.1_pre10[binary]
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/edk2-${EDK2_OVMF_VERSION}
+ >=sys-firmware/edk2-bin-${EDK2_OVMF_VERSION}[qemu_softmmu_targets_x86_64(+)]
+ )
+ sys-firmware/ipxe[qemu]
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ sys-firmware/sgabios
+ )
+"
+PPC_FIRMWARE_DEPEND="
+ pin-upstream-blobs? (
+ ~sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ !pin-upstream-blobs? (
+ || (
+ >=sys-firmware/seabios-${SEABIOS_VERSION}[seavgabios]
+ >=sys-firmware/seabios-bin-${SEABIOS_VERSION}
+ )
+ )
+"
+
+# See bug #913084 for pip dep
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/distlib[${PYTHON_USEDEP}]
+ dev-lang/perl
+ >=dev-build/meson-0.63.0
+ >=dev-util/gdbus-codegen-2.80.5-r1
+ app-alternatives/ninja
+ virtual/pkgconfig
+ doc? (
+ >=dev-python/sphinx-1.6.0[${PYTHON_USEDEP}]
+ dev-python/sphinx-rtd-theme[${PYTHON_USEDEP}]
+ )
+ gtk? ( nls? ( sys-devel/gettext ) )
+ test? (
+ app-alternatives/bc
+ dev-libs/glib[utils]
+ dev-python/pycotap[${PYTHON_USEDEP}]
+ )
+"
+CDEPEND="
+ ${ALL_DEPEND//\[static-libs(+)]}
+ ${SOFTMMU_TOOLS_DEPEND//\[static-libs(+)]}
+ qemu_softmmu_targets_i386? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_x86_64? ( ${X86_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc? ( ${PPC_FIRMWARE_DEPEND} )
+ qemu_softmmu_targets_ppc64? ( ${PPC_FIRMWARE_DEPEND} )
+"
+DEPEND="
+ ${CDEPEND}
+ kernel_linux? ( >=sys-kernel/linux-headers-2.6.35 )
+ static-user? ( ${ALL_DEPEND} )
+ valgrind? ( dev-debug/valgrind )
+"
+RDEPEND="
+ ${CDEPEND}
+ acct-group/kvm
+ selinux? (
+ sec-policy/selinux-qemu
+ sys-libs/libselinux
+ )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-10.1.2-fix_passt.patch
+ "${FILESDIR}"/${PN}-9.0.0-disable-keymap.patch
+ "${FILESDIR}"/${PN}-9.2.0-capstone-include-path.patch
+ "${FILESDIR}"/${PN}-8.1.0-skip-tests.patch
+ "${FILESDIR}"/${PN}-8.1.0-find-sphinx.patch
+ "${FILESDIR}"/${PN}-10.2.2-optionrom-pass-Wl-no-error-rwx-segments.patch
+)
+
+QA_PREBUILT="
+ usr/share/qemu/hppa-firmware.img
+ usr/share/qemu/hppa-firmware64.img
+ usr/share/qemu/openbios-ppc
+ usr/share/qemu/openbios-sparc64
+ usr/share/qemu/openbios-sparc32
+ usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu/palcode-clipper
+ usr/share/qemu/s390-ccw.img
+ usr/share/qemu/s390-netboot.img
+ usr/share/qemu/u-boot.e500
+"
+
+QA_WX_LOAD="
+ usr/bin/qemu-i386
+ usr/bin/qemu-x86_64
+ usr/bin/qemu-alpha
+ usr/bin/qemu-arm
+ usr/bin/qemu-cris
+ usr/bin/qemu-m68k
+ usr/bin/qemu-microblaze
+ usr/bin/qemu-microblazeel
+ usr/bin/qemu-mips
+ usr/bin/qemu-mipsel
+ usr/bin/qemu-or1k
+ usr/bin/qemu-ppc
+ usr/bin/qemu-ppc64
+ usr/bin/qemu-sh4
+ usr/bin/qemu-sh4eb
+ usr/bin/qemu-sparc
+ usr/bin/qemu-sparc64
+ usr/bin/qemu-armeb
+ usr/bin/qemu-sparc32plus
+ usr/bin/qemu-s390x
+ usr/bin/qemu-unicore32
+"
+
+DOC_CONTENTS="If you don't have kvm compiled into the kernel, make sure you have the
+kernel module loaded before running kvm. The easiest way to ensure that the
+kernel module is loaded is to load it on boot.
+ For AMD CPUs the module is called 'kvm-amd'.
+ For Intel CPUs the module is called 'kvm-intel'.
+Please review /etc/conf.d/modules for how to load these.
+
+Make sure your user is in the 'kvm' group. Just run
+ # gpasswd -a <USER> kvm
+then have <USER> re-login.
+
+For brand new installs, the default permissions on /dev/kvm might not let
+you access it. You can tell udev to reset ownership/perms:
+ # udevadm trigger -c add /dev/kvm
+
+If you want to register binfmt handlers for qemu user targets:
+For openrc:
+ # rc-update add qemu-binfmt
+For systemd:
+ # ln -s /usr/share/qemu/binfmt.d/qemu.conf /etc/binfmt.d/qemu.conf"
+
+pkg_pretend() {
+ if use kernel_linux && kernel_is lt 2 6 25; then
+ eerror "This version of KVM requires a host kernel of 2.6.25 or higher."
+ elif use kernel_linux; then
+ if ! linux_config_exists; then
+ eerror "Unable to check your kernel for KVM support"
+ else
+ CONFIG_CHECK="~KVM ~TUN ~BRIDGE"
+ ERROR_KVM="You must enable KVM in your kernel to continue"
+ ERROR_KVM_AMD="If you have an AMD CPU, you must enable KVM_AMD in"
+ ERROR_KVM_AMD+=" your kernel configuration."
+ ERROR_KVM_INTEL="If you have an Intel CPU, you must enable"
+ ERROR_KVM_INTEL+=" KVM_INTEL in your kernel configuration."
+ ERROR_TUN="You will need the Universal TUN/TAP driver compiled"
+ ERROR_TUN+=" into your kernel or loaded as a module to use the"
+ ERROR_TUN+=" virtual network device if using -net tap."
+ ERROR_BRIDGE="You will also need support for 802.1d"
+ ERROR_BRIDGE+=" Ethernet Bridging for some network configurations."
+ use vhost-net && CONFIG_CHECK+=" ~VHOST_NET"
+ ERROR_VHOST_NET="You must enable VHOST_NET to have vhost-net"
+ ERROR_VHOST_NET+=" support"
+ use test && CONFIG_CHECK+=" IP_MULTICAST"
+ ERROR_IP_MULTICAST="Test suite requires IP_MULTICAST"
+
+ if use amd64 || use x86; then
+ if grep -q AuthenticAMD /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_AMD"
+ elif grep -q GenuineIntel /proc/cpuinfo; then
+ CONFIG_CHECK+=" ~KVM_INTEL"
+ fi
+ fi
+
+ use python && CONFIG_CHECK+=" ~DEBUG_FS"
+ ERROR_DEBUG_FS="debugFS support required for kvm_stat"
+
+ # Now do the actual checks setup above
+ check_extra_config
+ fi
+ fi
+
+ if grep -qs '/usr/bin/qemu-kvm' "${EROOT}"/etc/libvirt/qemu/*.xml; then
+ eerror "The kvm/qemu-kvm wrappers no longer exist, but your libvirt"
+ eerror "instances are still pointing to it. Please update your"
+ eerror "configs in /etc/libvirt/qemu/ to use the -enable-kvm flag"
+ eerror "and the right system binary (e.g. qemu-system-x86_64)."
+ die "update your virt configs to not use qemu-kvm"
+ fi
+}
+
+# Sanity check to make sure target lists are kept up-to-date.
+check_targets() {
+ local var=$1 mak=$2
+ local detected sorted
+
+ pushd "${S}"/configs/targets/ >/dev/null || die
+
+ # Force C locale until glibc is updated. #564936
+ detected=$(echo $(printf '%s\n' *-${mak}.mak | sed "s:-${mak}.mak::" | LC_COLLATE=C sort -u))
+ sorted=$(echo $(printf '%s\n' ${!var} | LC_COLLATE=C sort -u))
+ if [[ ${sorted} != "${detected}" ]] ; then
+ eerror "The ebuild needs to be kept in sync."
+ eerror "${var}: ${sorted}"
+ eerror "$(printf '%-*s' ${#var} configure): ${detected}"
+ die "sync ${var} to the list of targets"
+ fi
+
+ popd >/dev/null
+}
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]] ; then
+ git-r3_src_unpack
+ for file in ${A}; do
+ unpack "${file}"
+ done
+ cd "${WORKDIR}" || die
+ for proj in "${!SUBPROJECTS[@]}"; do
+ mv "${proj}-${SUBPROJECTS[${proj}]}" "${S}/subprojects/${proj}" || die
+ done
+ cd "${S}" || die
+ meson subprojects packagefiles --apply || die
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ check_targets IUSE_SOFTMMU_TARGETS softmmu
+ check_targets IUSE_USER_TARGETS linux-user
+
+ default
+
+ # Use correct toolchain to fix cross-compiling
+ tc-export AR AS LD NM OBJCOPY PKG_CONFIG RANLIB STRINGS
+ export WINDRES=${CHOST}-windres
+
+ # defang automagic dependencies
+ use X || append-flags -DGENTOO_GTK_HIDE_X11
+ use wayland || append-flags -DGENTOO_GTK_HIDE_WAYLAND
+
+ # Workaround for bug #938302
+ if use systemtap && has_version "dev-debug/systemtap[-dtrace-symlink(+)]" ; then
+ cat >> "${S}"/configs/meson/linux.txt <<-EOF || die
+ [binaries]
+ dtrace='stap-dtrace'
+ EOF
+ fi
+
+ # Verbose builds
+ MAKEOPTS+=" V=1"
+
+ # Remove bundled modules
+ rm -r roms/*/ || die
+}
+
+##
+# configures qemu based on the build directory and the build type
+# we are using.
+#
+qemu_src_configure() {
+ debug-print-function ${FUNCNAME} "$@"
+
+ local buildtype=$1
+ local builddir="${S}/${buildtype}-build"
+
+ mkdir "${builddir}" || die
+
+ local conf_opts=(
+ --prefix=/usr
+ --sysconfdir=/etc
+ --bindir=/usr/bin
+ --libdir=/usr/$(get_libdir)
+ --datadir=/usr/share
+ --docdir=/usr/share/doc/${PF}/html
+ --mandir=/usr/share/man
+ --localstatedir=/var
+ --disable-bsd-user
+ --disable-containers # bug #732972
+ --disable-guest-agent
+ --disable-strip
+ --disable-download
+ --python="${PYTHON}"
+
+ # bug #746752: TCG interpreter has a few limitations:
+ # - it does not support FPU
+ # - it's generally slower on non-self-modifying code
+ # It's advantage is support for host architectures
+ # where native codegeneration is not implemented.
+ # Gentoo has qemu keyworded only on targets with
+ # native code generation available. Avoid the interpreter.
+ --disable-tcg-interpreter
+
+ --disable-werror
+ # We support gnutls/nettle for crypto operations. It is possible
+ # to use gcrypt when gnutls/nettle are disabled (but not when they
+ # are enabled), but it's not really worth the hassle. Disable it
+ # all the time to avoid automatically detecting it. #568856
+ --disable-gcrypt
+ --cc="$(tc-getCC)"
+ --cxx="$(tc-getCXX)"
+ --objcc="$(tc-getCC)"
+ --host-cc="$(tc-getBUILD_CC)"
+
+ $(use_enable alsa)
+ $(use_enable debug debug-info)
+ $(use_enable debug debug-tcg)
+ $(use_enable jack)
+ $(use_enable nls gettext)
+ $(use_enable oss)
+ $(use_enable pipewire)
+ $(use_enable plugins)
+ $(use_enable pulseaudio pa)
+ $(use_enable selinux)
+ $(use_enable xattr attr)
+ $(use_enable valgrind)
+ )
+
+ # Disable options not used by user targets. This simplifies building
+ # static user targets (USE=static-user) considerably.
+ conf_notuser() {
+ if [[ ${buildtype} == "user" ]] ; then
+ echo "--disable-${2:-$1}"
+ else
+ use_enable "$@"
+ fi
+ }
+ # Enable option only for softmmu build, but not 'user' or 'tools'
+ conf_softmmu() {
+ if [[ ${buildtype} == "softmmu" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Enable option only for tools build, but not 'user' or 'softmmu'
+ conf_tools() {
+ if [[ ${buildtype} == "tools" ]] ; then
+ use_enable "$@"
+ else
+ echo "--disable-${2:-$1}"
+ fi
+ }
+ # Special case for the malloc flag, because the --disable flag does
+ # not exist and trying like above will break configuring.
+ conf_malloc() {
+ if [[ ! ${buildtype} == "user" ]] ; then
+ usex "${1}" "--enable-malloc=${1}" ""
+ fi
+ }
+ conf_opts+=(
+ $(conf_notuser accessibility brlapi)
+ $(conf_notuser aio linux-aio)
+ $(conf_softmmu bpf)
+ $(conf_notuser bzip2)
+ $(conf_notuser capstone)
+ $(conf_notuser curl)
+ $(conf_tools doc docs)
+ $(conf_notuser fdt)
+ $(conf_notuser fuse)
+ $(conf_notuser glusterfs)
+ $(conf_notuser gnutls)
+ $(conf_notuser gnutls nettle)
+ $(conf_notuser gtk)
+ $(conf_notuser infiniband rdma)
+ $(conf_notuser iscsi libiscsi)
+ $(conf_notuser io-uring linux-io-uring)
+ $(conf_malloc jemalloc)
+ $(conf_notuser jpeg vnc-jpeg)
+ $(conf_notuser kernel_linux kvm)
+ $(conf_notuser keyutils libkeyutils)
+ $(conf_notuser lzo)
+ $(conf_notuser multipath mpath)
+ $(conf_notuser ncurses curses)
+ $(conf_notuser nfs libnfs)
+ $(conf_notuser numa)
+ $(conf_notuser opengl)
+ $(conf_notuser pam auth-pam)
+ $(conf_notuser passt)
+ $(conf_notuser png)
+ $(conf_notuser rbd)
+ $(conf_notuser sasl vnc-sasl)
+ $(conf_notuser sdl)
+ $(conf_softmmu sdl-image)
+ $(conf_notuser seccomp)
+ $(conf_notuser slirp)
+ $(conf_notuser smartcard)
+ $(conf_notuser snappy)
+ $(conf_notuser spice)
+ $(conf_notuser ssh libssh)
+ $(conf_notuser udev libudev)
+ $(conf_notuser usb libusb)
+ $(conf_notuser usbredir usb-redir)
+ $(conf_notuser vde)
+ $(conf_notuser vhost-net)
+ $(conf_notuser virgl virglrenderer)
+ $(conf_softmmu virtfs)
+ $(conf_notuser vnc)
+ $(conf_notuser vte)
+ $(conf_softmmu xdp af-xdp)
+ $(conf_notuser xen)
+ $(conf_notuser xen xen-pci-passthrough)
+ # use prebuilt keymaps, bug #759604
+ --disable-xkbcommon
+ $(conf_notuser zstd)
+ )
+
+ if [[ ! ${buildtype} == "user" ]] ; then
+ # used by passt and spice, enable it because glib is required anyway
+ conf_opts+=(
+ --enable-gio
+ )
+ # audio options
+ local audio_opts=(
+ # Note: backend order matters here: #716202
+ # We iterate from higher-level to lower level.
+ $(usex pulseaudio pa "")
+ $(usev pipewire)
+ $(usev jack)
+ $(usev sdl)
+ $(usev alsa)
+ $(usev oss)
+ )
+ conf_opts+=(
+ --audio-drv-list=$(IFS=,; echo "${audio_opts[*]}")
+ )
+ fi
+
+ case ${buildtype} in
+ user)
+ conf_opts+=(
+ --enable-linux-user
+ --disable-system
+ --disable-tools
+ --disable-cap-ng
+ --disable-seccomp
+ )
+ local static_flag="static-user"
+ ;;
+ softmmu)
+ conf_opts+=(
+ --disable-linux-user
+ --enable-system
+ --disable-tools
+ --enable-cap-ng
+ --enable-seccomp
+ --disable-libcbor
+ )
+ local static_flag="none"
+ ;;
+ tools)
+ conf_opts+=(
+ --disable-linux-user
+ --disable-system
+ --enable-tools
+ --enable-cap-ng
+ )
+ local static_flag="none"
+ ;;
+ esac
+
+ local targets="${buildtype}_targets"
+ [[ -n ${targets} ]] && conf_opts+=( --target-list="${!targets}" )
+
+ # Add support for SystemTap
+ use systemtap && conf_opts+=( --enable-trace-backends="dtrace" )
+
+ # We always want to attempt to build with PIE support as it results
+ # in a more secure binary. But it doesn't work with static or if
+ # the current GCC doesn't have PIE support.
+ if [[ ${static_flag} != "none" ]] && use ${static_flag}; then
+ conf_opts+=( --static --disable-pie )
+ else
+ tc-enables-pie && conf_opts+=( --enable-pie )
+ fi
+
+ # Meson will not use a cross-file unless cross_prefix is set.
+ tc-is-cross-compiler && conf_opts+=( --cross-prefix="${CHOST}-" )
+
+ # Plumb through equivalent of EXTRA_ECONF to allow experiments
+ # like bug #747928.
+ conf_opts+=( ${EXTRA_CONF_QEMU} )
+
+ echo "../configure ${conf_opts[*]}"
+ cd "${builddir}"
+ ../configure "${conf_opts[@]}" || die "configure failed"
+}
+
+src_configure() {
+ local target
+
+ python_setup
+
+ softmmu_targets= softmmu_bins=()
+ user_targets= user_bins=()
+
+ for target in ${IUSE_SOFTMMU_TARGETS} ; do
+ if use "qemu_softmmu_targets_${target}"; then
+ softmmu_targets+=",${target}-softmmu"
+ softmmu_bins+=( "qemu-system-${target}" )
+ fi
+ done
+
+ for target in ${IUSE_USER_TARGETS} ; do
+ if use "qemu_user_targets_${target}"; then
+ user_targets+=",${target}-linux-user"
+ user_bins+=( "qemu-${target}" )
+ fi
+ done
+
+ softmmu_targets=${softmmu_targets#,}
+ user_targets=${user_targets#,}
+
+ [[ -n ${softmmu_targets} ]] && qemu_src_configure "softmmu"
+ [[ -n ${user_targets} ]] && qemu_src_configure "user"
+ qemu_src_configure "tools"
+}
+
+src_compile() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build" || die
+ default
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ default
+ fi
+
+ cd "${S}/tools-build" || die
+ default
+}
+
+src_test() {
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build" || die
+ pax-mark m */qemu-system-* #515550
+ emake check
+ fi
+}
+
+qemu_python_install() {
+ python_domodule "${S}/python/qemu"
+
+ python_doscript "${S}/scripts/kvm/vmxcap"
+ python_doscript "${S}/scripts/qmp/qmp-shell"
+ python_doscript "${S}/scripts/qmp/qemu-ga-client"
+}
+
+# Generate binfmt support files.
+# - /etc/init.d/qemu-binfmt script which registers the user handlers (openrc)
+# - /usr/share/qemu/binfmt.d/qemu.conf (for use with systemd-binfmt)
+generate_initd() {
+ local out="${T}/qemu-binfmt"
+ local out_systemd="${T}/qemu.conf"
+ local d="${T}/binfmt.d"
+
+ einfo "Generating qemu binfmt scripts and configuration files"
+
+ # Generate the debian fragments first.
+ mkdir -p "${d}"
+ "${S}"/scripts/qemu-binfmt-conf.sh \
+ --debian \
+ --exportdir "${d}" \
+ --qemu-path "${EPREFIX}/usr/bin" \
+ || die
+ # Then turn the fragments into a shell script we can source.
+ sed -E -i \
+ -e 's:^([^ ]+) (.*)$:\1="\2":' \
+ "${d}"/* || die
+
+ # Generate the init.d script by assembling the fragments from above.
+ local f qcpu package interpreter magic mask
+ cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+ for f in "${d}"/qemu-* ; do
+ source "${f}"
+
+ # Normalize the cpu logic like we do in the init.d for the native cpu.
+ qcpu=${package#qemu-}
+ case ${qcpu} in
+ arm*) qcpu="arm";;
+ mips*) qcpu="mips";;
+ ppc*) qcpu="ppc";;
+ s390*) qcpu="s390";;
+ sh*) qcpu="sh";;
+ sparc*) qcpu="sparc";;
+ esac
+
+ # we use 'printf' here to be portable across 'sh'
+ # implementations: #679168
+ cat <<EOF >>"${out}"
+ if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+ printf '%s\n' ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+ fi
+EOF
+
+ echo ":${package}:M::${magic}:${mask}:${interpreter}:OC" >>"${out_systemd}"
+
+ done
+ cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
+src_install() {
+ if [[ -n ${user_targets} ]]; then
+ cd "${S}/user-build"
+ emake DESTDIR="${ED}" install
+
+ # Install binfmt handler init script for user targets.
+ generate_initd
+ doinitd "${T}/qemu-binfmt"
+
+ # Install binfmt/qemu.conf.
+ insinto "/usr/share/qemu/binfmt.d"
+ doins "${T}/qemu.conf"
+ fi
+
+ if [[ -n ${softmmu_targets} ]]; then
+ cd "${S}/softmmu-build"
+ emake DESTDIR="${ED}" install
+
+ # This might not exist if the test failed. #512010
+ [[ -e check-report.html ]] && dodoc check-report.html
+
+ if use kernel_linux; then
+ udev_newrules "${FILESDIR}"/65-kvm.rules-r2 65-kvm.rules
+ fi
+
+ if use python; then
+ python_foreach_impl qemu_python_install
+ fi
+ fi
+
+ cd "${S}/tools-build" || die
+ emake DESTDIR="${ED}" install
+
+ # If USE=doc, there'll be newly generated docs which we install instead.
+ if ! use doc && [[ ${QEMU_DOCS_PREBUILT} == 1 ]] ; then
+ doman "${WORKDIR}"/${PN}-${QEMU_DOCS_VERSION}-docs/docs/*.[0-8]
+ fi
+
+ # Disable mprotect on the qemu binaries as they use JITs to be fast #459348
+ pushd "${ED}"/usr/bin >/dev/null || die
+ pax-mark mr "${softmmu_bins[@]}" "${user_bins[@]}" # bug 575594
+ popd >/dev/null || die
+
+ # suid in src_install to allow FEATURES=suidctl to work properly
+ fperms u+s /usr/libexec/qemu-bridge-helper
+
+ # Install config file example for qemu-bridge-helper
+ insinto "/etc/qemu"
+ doins "${FILESDIR}/bridge.conf"
+
+ cd "${S}" || die
+ dodoc MAINTAINERS
+ newdoc pc-bios/README README.pc-bios
+
+ # Disallow stripping of prebuilt firmware files.
+ dostrip -x ${QA_PREBUILT}
+
+ if [[ -n ${softmmu_targets} ]]; then
+ # Remove SeaBIOS since we're using the SeaBIOS packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../seabios/bios-256k.bin /usr/share/qemu/bios-256k.bin
+ fi
+
+ # Remove vgabios since we're using the seavgabios packaged one
+ rm "${ED}/usr/share/qemu/vgabios.bin"
+ rm "${ED}/usr/share/qemu/vgabios-cirrus.bin"
+ rm "${ED}/usr/share/qemu/vgabios-qxl.bin"
+ rm "${ED}/usr/share/qemu/vgabios-stdvga.bin"
+ rm "${ED}/usr/share/qemu/vgabios-virtio.bin"
+ rm "${ED}/usr/share/qemu/vgabios-vmware.bin"
+
+ # PPC/PPC64 loads vgabios-stdvga
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386 || use qemu_softmmu_targets_ppc || use qemu_softmmu_targets_ppc64; then
+ dosym ../seavgabios/vgabios-isavga.bin /usr/share/qemu/vgabios.bin
+ dosym ../seavgabios/vgabios-cirrus.bin /usr/share/qemu/vgabios-cirrus.bin
+ dosym ../seavgabios/vgabios-qxl.bin /usr/share/qemu/vgabios-qxl.bin
+ dosym ../seavgabios/vgabios-stdvga.bin /usr/share/qemu/vgabios-stdvga.bin
+ dosym ../seavgabios/vgabios-virtio.bin /usr/share/qemu/vgabios-virtio.bin
+ dosym ../seavgabios/vgabios-vmware.bin /usr/share/qemu/vgabios-vmware.bin
+ fi
+
+ # Remove sgabios since we're using the sgabios packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../sgabios/sgabios.bin /usr/share/qemu/sgabios.bin
+ fi
+
+ # Remove iPXE since we're using the iPXE packaged one
+ if use qemu_softmmu_targets_x86_64 || use qemu_softmmu_targets_i386; then
+ dosym ../ipxe/8086100e.rom /usr/share/qemu/pxe-e1000.rom
+ dosym ../ipxe/80861209.rom /usr/share/qemu/pxe-eepro100.rom
+ dosym ../ipxe/10500940.rom /usr/share/qemu/pxe-ne2k_pci.rom
+ dosym ../ipxe/10222000.rom /usr/share/qemu/pxe-pcnet.rom
+ dosym ../ipxe/10ec8139.rom /usr/share/qemu/pxe-rtl8139.rom
+ dosym ../ipxe/1af41000.rom /usr/share/qemu/pxe-virtio.rom
+ fi
+ fi
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ if [[ -n ${softmmu_targets} ]] && use kernel_linux; then
+ udev_reload
+ fi
+
+ xdg_icon_cache_update
+
+ [[ -z ${EPREFIX} ]] && [[ -f ${EROOT}/usr/libexec/qemu-bridge-helper ]] && \
+ fcaps -M u-s cap_net_admin "${EROOT}"/usr/libexec/qemu-bridge-helper
+
+ DISABLE_AUTOFORMATTING=true
+ readme.gentoo_print_elog
+
+ if use pin-upstream-blobs && ver_replacing -lt ${FIRMWARE_ABI_VERSION}; then
+ ewarn "This version of qemu pins new versions of firmware blobs:"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ ewarn " $(best_version sys-firmware/edk2-bin)"
+ else
+ ewarn " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ ewarn " $(best_version sys-firmware/seabios-bin)"
+ else
+ ewarn " $(best_version sys-firmware/seabios)"
+ fi
+
+ ewarn " $(best_version sys-firmware/ipxe)"
+ ewarn " $(best_version sys-firmware/sgabios)"
+ ewarn "This might break resume of hibernated guests (started with a different"
+ ewarn "firmware version) and live migration to/from qemu versions with different"
+ ewarn "firmware. Please (cold) restart all running guests. For functional"
+ ewarn "guest migration ensure that all hosts run at least"
+ ewarn " app-emulation/qemu-${FIRMWARE_ABI_VERSION}."
+ fi
+}
+
+pkg_info() {
+ echo "Using:"
+ echo " $(best_version app-emulation/spice-protocol)"
+
+ if has_version 'sys-firmware/edk2-bin'; then
+ echo " $(best_version sys-firmware/edk2-bin)"
+ else
+ echo " $(best_version sys-firmware/edk2)"
+ fi
+
+ if has_version 'sys-firmware/seabios-bin'; then
+ echo " $(best_version sys-firmware/seabios-bin)"
+ else
+ echo " $(best_version sys-firmware/seabios)"
+ fi
+
+ echo " $(best_version sys-firmware/ipxe)"
+ echo " $(best_version sys-firmware/sgabios)"
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ udev_reload
+}
diff --git a/app-emulation/qtrvsim/Manifest b/app-emulation/qtrvsim/Manifest
new file mode 100644
index 000000000000..bd5d60395a68
--- /dev/null
+++ b/app-emulation/qtrvsim/Manifest
@@ -0,0 +1,3 @@
+DIST qtrvsim-0.9.8-fix-compilation-with-qt-6.10.patch 1173 BLAKE2B 0838067566cbe0c2e798d9e435b19a5a3428f960ac301a8f58d32f5c3d92498e94f87538ad03a9b846088ac96be2d7a9ff2b49768e4b1114f0c547221531aa10 SHA512 7dea93e869371fe9b4dfedb28f5049d3b4d2f31924b15b0f88b4493bf243cf8d79f35912b20cc660cdbf25228dda388543301b483a4b36f1622080b46dde8fbc
+DIST qtrvsim-0.9.8-svgscene-fix-build-when-qt6-is-specified.patch 1445 BLAKE2B d34e5dceae9f76bef0e74ac77b1f32285518cd3c49013a802933e0a37e54c2057e460d7a995679e814080b1a6e0a4562c5e060cbb1d3b8aa8fa6467ced2f7c92 SHA512 44c735f5727546178616b16376ff726f1c8d6ce671b492a8154c2631f3f06f0917a968379856a5c9c537a343702ad3d74aa475d2d24aced723ee286f2a5dd860
+DIST qtrvsim-0.9.8.tar.gz 1442156 BLAKE2B d1e98f5cf0706c2d6cd1edcfdb92d60b4dcd9f74f05e4992f13fc30a11384a25e64af62dbda55a2a3befadbbb6c74d827d8316c392686212c9086487e5adf4c9 SHA512 88efbd3663faadff3f1df44edf518fa9c2f769339d336947cf61c9a9b359b264877f1062a3611b2c3446dbb26a5766316eeb2a861d9e325ca4587705eaddcf15
diff --git a/app-emulation/qtrvsim/metadata.xml b/app-emulation/qtrvsim/metadata.xml
new file mode 100644
index 000000000000..85bf27499bed
--- /dev/null
+++ b/app-emulation/qtrvsim/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>flow@gentoo.org</email>
+ <name>Florian Schmaus</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/qtrvsim/qtrvsim-0.9.8-r1.ebuild b/app-emulation/qtrvsim/qtrvsim-0.9.8-r1.ebuild
new file mode 100644
index 000000000000..be7849b8a84f
--- /dev/null
+++ b/app-emulation/qtrvsim/qtrvsim-0.9.8-r1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 2023-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake xdg
+
+DESCRIPTION="RISC-V CPU simulator for education"
+HOMEPAGE="https://github.com/cvut/qtrvsim"
+SRC_URI="
+ https://github.com/cvut/${PN}/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/cvut/qtrvsim/commit/ce63bb060fa8adb2215547da8a12d4e8d5a8f87e.patch
+ -> ${PN}-0.9.8-svgscene-fix-build-when-qt6-is-specified.patch
+ https://github.com/Flowdalic/qtrvsim/commit/33c9fc538c950da2ebad2cd7bfee28d4a37fd586.patch
+ -> ${PN}-0.9.8-fix-compilation-with-qt-6.10.patch
+"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="amd64"
+
+DEPEND="
+ dev-qt/qtbase:6[gui,widgets]
+ virtual/libelf:=
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${DISTDIR}"/${PN}-0.9.8-svgscene-fix-build-when-qt6-is-specified.patch
+ "${DISTDIR}"/${PN}-0.9.8-fix-compilation-with-qt-6.10.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ -DQT_VERSION_MAJOR=6
+ )
+ cmake_src_configure
+}
diff --git a/app-emulation/ruffle/Manifest b/app-emulation/ruffle/Manifest
new file mode 100644
index 000000000000..c2e9eeba2e52
--- /dev/null
+++ b/app-emulation/ruffle/Manifest
@@ -0,0 +1,2 @@
+DIST ruffle-nightly-2026-02-13-vendor.tar.xz 26927192 BLAKE2B 66244948ffaa3a8517a520ee8b45af6f43d1251df7e154d31fd925fe1cfc041389825b5873d25353341a899918a93356b2c094d17f52bd1d45fe41565570bdca SHA512 e9a8b27e940479d66ef9a503b3acab3822b5b84235c6134e7214e772a930b2734853956a9fdce0cd8ae791aecc1477f037668a09873fd2f56b17ef2f4ffbfd80
+DIST ruffle-nightly-2026-02-13.tar.gz 106785038 BLAKE2B 49d4ca11a67e3c4e0c8503bac2e1356fc3a0953ebff61891e6749cada142b9aa680c739e3e9822a523775a636676df9fc9309cc2834712ac8676e66fd4162932 SHA512 e5dda58028961b2c31b3c028f47ea390393b4f0d15f9270ad863ad5d7f02908d99cce1fca903d0581ac4a537b1f9952debb97a69c1c5b963f1dc2cb902a2c256
diff --git a/app-emulation/ruffle/metadata.xml b/app-emulation/ruffle/metadata.xml
new file mode 100644
index 000000000000..83a427082c82
--- /dev/null
+++ b/app-emulation/ruffle/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/ruffle/ruffle-0_p20260213.ebuild b/app-emulation/ruffle/ruffle-0_p20260213.ebuild
new file mode 100644
index 000000000000..0f8698781159
--- /dev/null
+++ b/app-emulation/ruffle/ruffle-0_p20260213.ebuild
@@ -0,0 +1,83 @@
+# Copyright 2021-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+RUST_MIN_VER=1.88.0
+inherit cargo desktop optfeature xdg
+
+MY_PV=nightly-${PV:3:4}-${PV:7:2}-${PV:9:2}
+MY_P=${PN}-${MY_PV}
+
+DESCRIPTION="Flash Player emulator written in Rust"
+HOMEPAGE="https://ruffle.rs/"
+SRC_URI="
+ https://github.com/ruffle-rs/ruffle/archive/refs/tags/${MY_PV}.tar.gz
+ -> ${MY_P}.tar.gz
+ https://distfiles.gentoo.org/pub/dev/ionen@gentoo.org/${MY_P}-vendor.tar.xz
+"
+S=${WORKDIR}/${MY_P}
+
+LICENSE="|| ( Apache-2.0 MIT )"
+LICENSE+="
+ Apache-2.0 BSD-2 BSD CC0-1.0 ISC MIT MPL-2.0 OFL-1.1 openssl
+ UbuntuFontLicense-1.0 Unicode-3.0 ZLIB BZIP2
+" # crates
+SLOT="0"
+KEYWORDS="amd64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+# X/wayland libraries are dlopen'ed and are unneeded to build, assume
+# users will have whichever they need rather than do USE or optfeatures
+RDEPEND="
+ media-libs/alsa-lib
+ virtual/libudev:=
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ virtual/jre:*
+ virtual/pkgconfig
+"
+
+QA_FLAGS_IGNORED="usr/bin/${PN}.*"
+
+src_configure() {
+ local workspaces=(
+ ruffle_{desktop,scanner}
+ exporter
+ $(usev test tests)
+ )
+
+ cargo_src_configure "${workspaces[@]/#/--package=}"
+}
+
+src_install() {
+ dodoc README.md
+
+ newicon web/packages/extension/assets/images/icon180.png ${PN}.png
+ make_desktop_entry --eapi9 ${PN} -n ${PN^} -c "AudioVideo;Player;Emulator;" \
+ -e "MimeType=application/x-shockwave-flash;application/vnd.adobe.flash.movie;"
+
+ cd "$(cargo_target_dir)" || die
+ newbin ${PN}_desktop ${PN}
+ newbin exporter ${PN}_exporter
+ dobin ${PN}_scanner
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "${PN} is experimental software that is still under heavy development"
+ elog "and only receiving nightly releases. Plans in Gentoo is to update"
+ elog "roughly every 3+ months if no known major regressions (feel free"
+ elog "to report if you feel a newer nightly right away)."
+ elog
+ elog "There is currently no plans to support wasm builds / browser"
+ elog "extensions, this provides the desktop viewer and other tools."
+ fi
+
+ optfeature "h264 video decoding" media-libs/openh264
+ optfeature "the in-application file picker" sys-apps/xdg-desktop-portal
+}
diff --git a/app-emulation/simh/Manifest b/app-emulation/simh/Manifest
new file mode 100644
index 000000000000..533df8a05804
--- /dev/null
+++ b/app-emulation/simh/Manifest
@@ -0,0 +1,2 @@
+DIST simh-3.11.1.tar.gz 2576391 BLAKE2B bebaba75d4264c47202cc0daca2023c03d2e87722798f1ab37c9e3b2cec0b80cd180fccc0077347b2cb5255d26e1ce35f99a908deaf252c1e60e22e0a381e66d SHA512 7c2f81a64d3016b9a44409fc336c804c0da836317745d47594cc48c64cb57dc8f22084d9086e3f86868ec485ee56ac63301f350cee6d275e705b7c5fc82875db
+DIST simh-3.12.5.zip 2878046 BLAKE2B bb94264e675ea7172c947df563e68cc85815eb4f62fd08ddcf1501530dc3af55e523efce3cc7271c46555caf46a3a00c9fc725c816e91da9c84a899b0faea8ac SHA512 6c70f3155b73b669d4b87ede7f0e7e116cebbc5063646a7f17bdca6fd6e6fcf9ed0833b2b2fc0bb345e37284c73c809f4ab0a8b1bd9459b24ee12387487af92b
diff --git a/app-emulation/simh/files/simh-3.11.0-fcommon.patch b/app-emulation/simh/files/simh-3.11.0-fcommon.patch
new file mode 100644
index 000000000000..b23866aaab49
--- /dev/null
+++ b/app-emulation/simh/files/simh-3.11.0-fcommon.patch
@@ -0,0 +1,37 @@
+From ca4b7338836edb7325c82f86dccdeb4808cb4a89 Mon Sep 17 00:00:00 2001
+From: Mark Pizzolato <mark@infocomm.com>
+Date: Wed, 29 Jan 2020 11:39:36 -0800
+Subject: [PATCH] makefile: Force gcc/clang -fcommon to address future gcc
+ -fno-common default
+
+as reported and discussed in #794
+---
+ makefile | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/makefile
++++ b/makefile
+@@ -506,9 +506,13 @@ else
+ ifneq (3,$(GCC_MAJOR_VERSION))
+ ifeq (,$(GCC_OPTIMIZERS_CMD))
+ GCC_OPTIMIZERS_CMD = $(GCC) --help=optimizers
++ GCC_COMMON_CMD = $(GCC) --help=common
+ endif
+ GCC_OPTIMIZERS = $(shell $(GCC_OPTIMIZERS_CMD))
+ endif
++ ifneq (,$(GCC_COMMON_CMD))
++ GCC_OPTIMIZERS += $(shell $(GCC_COMMON_CMD))
++ endif
+ ifneq (,$(findstring $(GCC_VERSION),$(LTO_EXCLUDE_VERSIONS)))
+ NO_LTO = 1
+ endif
+@@ -530,6 +534,9 @@ else
+ ifneq (,$(findstring -fstrict-overflow,$(GCC_OPTIMIZERS)))
+ CFLAGS_O += -fno-strict-overflow
+ endif
++ ifneq (,$(findstring -fcommon,$(GCC_OPTIMIZERS))$(findstring -fno-common,$(GCC_OPTIMIZERS)))
++ CFLAGS_O += -fcommon
++ endif
+ ifeq (,$(NO_LTO))
+ ifneq (,$(findstring -flto,$(GCC_OPTIMIZERS)))
+ CFLAGS_O += -flto -fwhole-program
diff --git a/app-emulation/simh/files/simh-3.11.0-fix-mkdir-race.patch b/app-emulation/simh/files/simh-3.11.0-fix-mkdir-race.patch
new file mode 100644
index 000000000000..e2b1b5547efb
--- /dev/null
+++ b/app-emulation/simh/files/simh-3.11.0-fix-mkdir-race.patch
@@ -0,0 +1,11 @@
+--- simh-3.9.0/makefile
++++ simh-3.9.0/makefile
+@@ -249,7 +249,7 @@
+ NETWORK_OPT = $(NETWORK_CCDEFS)
+ endif
+ ifneq (binexists,$(shell if $(TEST) -e BIN; then echo binexists; fi))
+- MKDIRBIN = if $(TEST) ! -e BIN; then mkdir BIN; fi
++ MKDIRBIN = mkdir -p BIN
+ endif
+ else
+ #Win32 Environments (via MinGW32)
diff --git a/app-emulation/simh/files/simh-3.11.0-respect-FLAGS.patch b/app-emulation/simh/files/simh-3.11.0-respect-FLAGS.patch
new file mode 100644
index 000000000000..0ceca7b0abf8
--- /dev/null
+++ b/app-emulation/simh/files/simh-3.11.0-respect-FLAGS.patch
@@ -0,0 +1,13 @@
+--- a/makefile
++++ b/makefile
+@@ -497,8 +497,8 @@ ifneq ($(DEBUG),)
+ CFLAGS_O = -O0
+ BUILD_FEATURES = - debugging support
+ else
+- CFLAGS_O = -O2
+- LDFLAGS_O =
++ CFLAGS_O ?= -O2
++ LDFLAGS_O ?=
+ ifeq (Darwin,$(OSTYPE))
+ NO_LTO = 1
+ endif
diff --git a/app-emulation/simh/files/simh-3.12.5-incompatible-pointer-types.patch b/app-emulation/simh/files/simh-3.12.5-incompatible-pointer-types.patch
new file mode 100644
index 000000000000..de84b4ae4d6a
--- /dev/null
+++ b/app-emulation/simh/files/simh-3.12.5-incompatible-pointer-types.patch
@@ -0,0 +1,11 @@
+--- a/PDP11/pdp11_ch.c 2026-02-28 11:07:01.660942133 +0100
++++ b/PDP11/pdp11_ch.c 2026-02-28 11:09:16.175650464 +0100
+@@ -271,7 +271,7 @@
+ CONST uint8 *p;
+
+ tmxr_poll_rx (&ch_tmxr);
+- if (tmxr_get_packet_ln (&ch_lines[0], &p, &count) != SCPE_OK) {
++ if (tmxr_get_packet_ln (&ch_lines[0], (const uint8 **)&p, &count) != SCPE_OK) {
+ sim_debug (DBG_ERR, &ch_dev, "TMXR error receiving packet\n");
+ return 0;
+ }
diff --git a/app-emulation/simh/files/simh-3.12.5-respect-FLAGS.patch b/app-emulation/simh/files/simh-3.12.5-respect-FLAGS.patch
new file mode 100644
index 000000000000..f06d3e24d060
--- /dev/null
+++ b/app-emulation/simh/files/simh-3.12.5-respect-FLAGS.patch
@@ -0,0 +1,26 @@
+Respect CFLAGS and LDFLAGS
+https://bugs.gentoo.org/971364
+--- a/makefile 2026-03-20 08:13:14.623645775 -0000
++++ b/makefile 2026-03-20 08:13:21.424581019 -0000
+@@ -1215,7 +1215,7 @@
+ BUILD_FEATURES = - debugging support
+ else
+ ifneq (,$(findstring clang,$(COMPILER_NAME))$(findstring LLVM,$(COMPILER_NAME)))
+- CFLAGS_O = -O2 -fno-strict-overflow
++ CFLAGS_O ?= -O2 -fno-strict-overflow
+ GCC_OPTIMIZERS_CMD = ${GCC} --help
+ NO_LTO = 1
+ else
+@@ -1223,10 +1223,10 @@
+ ifeq (Darwin,$(OSTYPE))
+ CFLAGS_O += -O4 -flto -fwhole-program
+ else
+- CFLAGS_O := -O2
++ CFLAGS_O ?= -O2
+ endif
+ endif
+- LDFLAGS_O =
++ LDFLAGS_O ?=
+ GCC_MAJOR_VERSION = $(firstword $(subst ., ,$(GCC_VERSION)))
+ ifneq (3,$(GCC_MAJOR_VERSION))
+ ifeq (,$(GCC_OPTIMIZERS_CMD))
diff --git a/app-emulation/simh/metadata.xml b/app-emulation/simh/metadata.xml
new file mode 100644
index 000000000000..b18fe99ba022
--- /dev/null
+++ b/app-emulation/simh/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <longdescription>
+ This ebuild contains the "classic" version of SimH, the 3.X
+ stream, as maintained by the original author.
+
+ There is separate fork v4 fork on GitHub under the name Open-SimH,
+ with additional simulators which is in developement.
+ </longdescription>
+ <upstream>
+ <maintainer>
+ <name>Robert M Supnik</name>
+ <email>simh@groups.io</email>
+ </maintainer>
+ <doc>https://simh.trailing-edge.com/</doc>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/simh/simh-3.11.1.ebuild b/app-emulation/simh/simh-3.11.1.ebuild
new file mode 100644
index 000000000000..56555d1481a9
--- /dev/null
+++ b/app-emulation/simh/simh-3.11.1.ebuild
@@ -0,0 +1,61 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+MY_PV="$(ver_rs 2 '-')" # 'a.b.c' -> 'a.b-c'
+DESCRIPTION="a simulator for historical computers such as Vax, PDP-11 etc.)"
+HOMEPAGE="http://simh.trailing-edge.com/"
+SRC_URI="https://github.com/simh/simh/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~ppc ~sparc x86"
+IUSE=""
+
+RDEPEND="net-libs/libpcap"
+DEPEND="${RDEPEND}"
+
+S=${WORKDIR}/simh-${MY_PV}
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.11.0-respect-FLAGS.patch
+ "${FILESDIR}"/${PN}-3.11.0-fix-mkdir-race.patch
+ "${FILESDIR}"/${PN}-3.11.0-fcommon.patch
+)
+
+src_prepare() {
+ default
+
+ # fix linking on Darwin
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ sed -e 's/-lrt//g' \
+ -i makefile || die
+ fi
+}
+
+src_compile() {
+ export GCC="$(tc-getCC)"
+ export LDFLAGS_O="${LDFLAGS}"
+ export CFLAGS_O="${CFLAGS}"
+
+ local my_makeopts=""
+ if tc-is-gcc && ver_test $(gcc-version) -lt 4.6 ; then
+ my_makeopts+=" NO_LTO=1"
+ fi
+
+ emake ${my_makeopts}
+}
+
+src_install() {
+ for BINFILE in BIN/* ; do
+ newbin ${BINFILE} "simh-$(basename ${BINFILE})"
+ done
+
+ insinto /usr/share/simh
+ doins VAX/*.bin
+
+ dodoc *.txt */*.txt
+}
diff --git a/app-emulation/simh/simh-3.12.5.ebuild b/app-emulation/simh/simh-3.12.5.ebuild
new file mode 100644
index 000000000000..c23318be9973
--- /dev/null
+++ b/app-emulation/simh/simh-3.12.5.ebuild
@@ -0,0 +1,59 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=9
+
+inherit toolchain-funcs
+
+MY_PV="$(ver_cut 1)$(ver_cut 2)-$(ver_cut 3)"
+DESCRIPTION="a simulator for historical computers such as Vax, PDP-11 etc."
+HOMEPAGE="https://simh.trailing-edge.com/"
+SRC_URI="https://simh.trailing-edge.com/sources/simhv${MY_PV}.zip -> ${P}.zip"
+S="${WORKDIR}/sim"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="amd64 ~ppc ~sparc x86"
+
+RDEPEND="net-libs/libpcap"
+DEPEND="${RDEPEND}"
+BDEPEND="app-arch/unzip"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-3.12.5-respect-FLAGS.patch"
+ "${FILESDIR}/${PN}-3.12.5-incompatible-pointer-types.patch"
+)
+
+src_prepare() {
+ default
+
+ # fix linking on Darwin
+ if [[ ${CHOST} == *-darwin* ]] ; then
+ sed -e 's/-lrt//g' \
+ -i makefile || die
+ fi
+}
+
+src_compile() {
+ export GCC="$(tc-getCC)"
+ export LDFLAGS_O="${LDFLAGS}"
+ export CFLAGS_O="${CFLAGS}"
+
+ local my_makeopts=""
+ if tc-is-gcc && ver_test $(gcc-version) -lt 4.6 ; then
+ my_makeopts+=" NO_LTO=1"
+ fi
+
+ emake ${my_makeopts}
+}
+
+src_install() {
+ for BINFILE in BIN/* ; do
+ [ -f "${BINFILE}" ] && newbin ${BINFILE} "simh-$(basename ${BINFILE})"
+ done
+
+ insinto /usr/share/simh
+ doins VAX/*.bin
+
+ dodoc doc/*.doc */*.txt
+}
diff --git a/app-emulation/ski/Manifest b/app-emulation/ski/Manifest
new file mode 100644
index 000000000000..61df50f176bd
--- /dev/null
+++ b/app-emulation/ski/Manifest
@@ -0,0 +1 @@
+DIST ski-1.5.0.tar.xz 2221008 BLAKE2B 957e18f6b4638434b65d63275dd112cfba76e18653346c90e68534123ef59b345e91019a1b2df9706833d143ef29cb80f33b17570ce4d826fd0c55ac94aa6d57 SHA512 c53c214c956ad33acf9a620813bf4f3342ea7a3672899cdc9804fa3ad2b6e36044fd65e214362b2cf5e57d1733523e186d63d88e24e54c761fc77cf5b63776c8
diff --git a/app-emulation/ski/files/ski-1.5.0-fix_termio.patch b/app-emulation/ski/files/ski-1.5.0-fix_termio.patch
new file mode 100644
index 000000000000..d1a5b5850ef6
--- /dev/null
+++ b/app-emulation/ski/files/ski-1.5.0-fix_termio.patch
@@ -0,0 +1,49 @@
+PRs merged
+https://github.com/trofi/ski/pull/17.patch
+https://github.com/trofi/ski/pull/18.patch
+Remove occurrences of termio.h and struct termio. Bug #961423
+--- a/src/dos.c
++++ b/src/dos.c
+@@ -35,13 +35,10 @@
+ #include <sys/stat.h>
+ #include <signal.h>
+ #include <string.h>
+-#if defined(__FreeBSD__)
+ #include <termios.h>
+-#define termio termios
++#if defined(__FreeBSD__)
+ #define TCGETA TIOCGETA
+ #define TCSETA TIOCSETA
+-#else
+-#include <termio.h>
+ #endif
+ #include <time.h>
+ #if defined __linux__
+@@ -140,7 +137,7 @@ Status dosInt21(BYTE func, BYTE subFunc)
+ break;
+ case 0x08: /* read keyboard without echo */
+ if (isatty(fhmap[0])) {
+- struct termio origTermio, newTermio;
++ struct termios origTermio, newTermio;
+
+ (void)ioctl(fhmap[0], TCGETA, &origTermio);
+ newTermio = origTermio;
+--- a/src/linux/syscall-linux.c
++++ b/src/linux/syscall-linux.c
+@@ -2147,14 +2147,14 @@ doSyscall (HWORD num, REG arg0, REG arg1, REG arg2, REG arg3, REG arg4,
+
+ case TCGETA:
+ /* assumes host OS matches Linux/ia64 */
+- bytes_out = sizeof (struct termio);
++ bytes_out = sizeof (struct termios);
+ break;
+
+ case TCSETA:
+ case TCSETAW:
+ case TCSETAF:
+ /* assumes host OS matches Linux/ia64 */
+- bytes_in = sizeof (struct termio);
++ bytes_in = sizeof (struct termios);
+ break;
+
+ case TIOCGPGRP:
diff --git a/app-emulation/ski/metadata.xml b/app-emulation/ski/metadata.xml
new file mode 100644
index 000000000000..161097a725d4
--- /dev/null
+++ b/app-emulation/ski/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <use>
+ <flag name="debug">enable extra binary emulation debugging via <pkg>sys-libs/binutils-libs</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/ski/ski-1.5.0.ebuild b/app-emulation/ski/ski-1.5.0.ebuild
new file mode 100644
index 000000000000..1e16ff19a53c
--- /dev/null
+++ b/app-emulation/ski/ski-1.5.0.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit eapi9-ver
+
+DESCRIPTION="ia64 instruction set simulator"
+HOMEPAGE="https://github.com/trofi/ski"
+SRC_URI="https://github.com/trofi/ski/releases/download/v${PV}/${P}.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug"
+
+RDEPEND="
+ sys-libs/ncurses:=
+ virtual/libelf:=
+ debug? ( sys-libs/binutils-libs:= )
+"
+DEPEND="
+ ${RDEPEND}
+ dev-util/gperf
+"
+
+PATCHES=(
+ # merged, to be removed for the next version
+ "${FILESDIR}"/${P}-fix_termio.patch
+)
+
+src_configure() {
+ local myeconfargs=(
+ $(use_with debug bfd)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+pkg_postinst() {
+ if ver_replacing -le 1.4.0; then
+ ewarn "Since version 1.5.0 ${PN} no longer installs xski binary because x11-backend with x11-libs/motif has been removed."
+ fi
+}
diff --git a/app-emulation/softgun/Manifest b/app-emulation/softgun/Manifest
new file mode 100644
index 000000000000..849e9260fefb
--- /dev/null
+++ b/app-emulation/softgun/Manifest
@@ -0,0 +1 @@
+DIST softgun-0.22.tgz 1239881 BLAKE2B 34bbb67ee0f359fd75e19ec455ccb674e613a25b7a68fa638b7b9c4c2021fbbebe1aee5a4e4184e2e5a92d4ae81fe95acd68f7c68ae3700b2284e64f5b785a30 SHA512 5c13840874b09aab6c0921d705c0ea94da87cc1a80d2fcbc9f329ade25f33bb2c8eba2fe284b4c3b41e70b8f258a45fc83caa296880bfa3e7870994de587e591
diff --git a/app-emulation/softgun/files/softgun-0.22-fix-declarations-with-type-mismatches.patch b/app-emulation/softgun/files/softgun-0.22-fix-declarations-with-type-mismatches.patch
new file mode 100644
index 000000000000..25bf382eee56
--- /dev/null
+++ b/app-emulation/softgun/files/softgun-0.22-fix-declarations-with-type-mismatches.patch
@@ -0,0 +1,148 @@
+Subject: [PATCH] fix declarations with type mismatches
+
+Type mismatches between declarations prevent the compile from using LTO
+
+Bug: https://bugs.gentoo.org/854534
+Upstream: https://sourceforge.net/p/softgun/patches/5/
+
+# Pascal Jäger <pascal.jaeger@leimstift.de> (2023-09-21)
+
+--- a/m16c/idecode_m16c.c
++++ b/m16c/idecode_m16c.c
+@@ -9,7 +9,7 @@
+ #include "sglib.h"
+
+ M16C_InstructionProc **iProcTab;
+-M16C_Instruction **iTab;
++M16C_Instruction **iTabM16C;
+
+ static M16C_Instruction instrlist[] = {
+ {0xfef0,0x76f0,"abs.size_dst",2 ,m16c_abs_size_dst},
+@@ -308,7 +308,7 @@ M16C_IDecoderNew()
+ int i,j;
+ int onecount1,onecount2;
+ iProcTab=(M16C_InstructionProc**)sg_calloc(0x10000*sizeof(M16C_InstructionProc*));
+- iTab=sg_calloc(0x10000*sizeof(M16C_Instruction*));
++ iTabM16C=sg_calloc(0x10000*sizeof(M16C_Instruction*));
+ fprintf(stderr,"Allocated M16C Instruction decoder table\n");
+ for(j=0;instrlist[j].proc;j++) {
+ M16C_Instruction *instr = &instrlist[j];
+@@ -327,8 +327,8 @@ M16C_IDecoderNew()
+ }
+ #endif
+ if((i & instr->mask) == instr->icode) {
+- if(iTab[i]) {
+- M16C_Instruction *instr2 = iTab[i];
++ if(iTabM16C[i]) {
++ M16C_Instruction *instr2 = iTabM16C[i];
+ specmask1 = instr->mask;
+ specmask2 = instr2->mask;
+ onecount1 = SGLib_OnecountU32(instr->mask);
+@@ -336,18 +336,18 @@ M16C_IDecoderNew()
+ fprintf(stderr,"Collission %s, %s\n",instr->name,instr2->name);
+ #if 0
+ if(instr->len > instr2->len) {
+- iTab[i] = instr;
++ iTabM16C[i] = instr;
+ iProcTab[i] = instr->proc;
+ } else if(instr2->len > instr->len) {
+- iTab[i] = instr2;
++ iTabM16C[i] = instr2;
+ iProcTab[i] = instr2->proc;
+ } else
+ #endif
+ if(onecount1 > onecount2) {
+- iTab[i] = instr;
++ iTabM16C[i] = instr;
+ iProcTab[i] = instr->proc;
+ } else if(onecount2 > onecount1) {
+- iTab[i] = instr2;
++ iTabM16C[i] = instr2;
+ iProcTab[i] = instr2->proc;
+ } else {
+ fprintf(stderr,"Can not decide %s, %s\n",instr->name,instr2->name);
+@@ -360,10 +360,10 @@ M16C_IDecoderNew()
+ specmask2 |= 0xff00;
+ }
+ if((specmask2 & specmask1) == specmask1) {
+- iTab[i] = instr2;
++ iTabM16C[i] = instr2;
+ iProcTab[i] = instr2->proc;
+ } else if((specmask2 & specmask1) == specmask2) {
+- iTab[i] = instr;
++ iTabM16C[i] = instr;
+ iProcTab[i] = instr->proc;
+ } else {
+ fprintf(stdout,"%04x: no instruction is more specific %s %s %04x %04x %d %d\n",i,instr->name,instr2->name,instr->icode,instr2->icode,instr->len,instr2->len);
+@@ -371,13 +371,13 @@ M16C_IDecoderNew()
+ }
+ #endif
+ } else {
+- iTab[i] = instr;
++ iTabM16C[i] = instr;
+ iProcTab[i] = instr->proc;
+ }
+ }
+ }
+- if(iTab[i] == NULL) {
+- iTab[i] = &undefined_instr;
++ if(iTabM16C[i] == NULL) {
++ iTabM16C[i] = &undefined_instr;
+ iProcTab[i] = (&undefined_instr)->proc;
+ }
+ }
+--- a/m16c/idecode_m16c.h
++++ b/m16c/idecode_m16c.h
+@@ -11,14 +11,14 @@ typedef struct M16C_Instruction {
+ } M16C_Instruction;
+
+ extern M16C_InstructionProc **iProcTab;
+-extern M16C_Instruction **iTab;
++extern M16C_Instruction **iTabM16C;
+
+ void M16C_IDecoderNew(void);
+
+ static inline M16C_Instruction *
+ M16C_InstructionFind(uint16_t icode)
+ {
+- return iTab[icode];
++ return iTabM16C[icode];
+ }
+ static inline M16C_InstructionProc *
+ M16C_InstructionProcFind(uint16_t icode)
+--- a/m16c/instructions_m16c.h
++++ b/m16c/instructions_m16c.h
+@@ -160,7 +160,7 @@ void m16c_smovb_size(void);
+ void m16c_smovf_size(void);
+ void m16c_sstr_size(void);
+ void m16c_stc_srcdst(void);
+-void m16c_stc_pcdst(void);
++void m16c_stc_pcdst(uint16_t icode);
+ void m16c_stctx_abs16abs20(void);
+ void m16c_ste_size_srcabs20(void);
+ void m16c_ste_size_srcdsp20(void);
+--- a/ppc/mmu_ppc.c
++++ b/ppc/mmu_ppc.c
+@@ -587,7 +587,7 @@ PPCMMU_Read8(uint32_t va) {
+ }
+
+ void
+-PPCMMU_Write64(uint32_t value,uint32_t va) {
++PPCMMU_Write64(uint64_t value,uint32_t va) {
+ uint32_t pa=translate_data(va);
+ Bus_Write64(value,pa);
+ }
+--- a/printer/decompress.c
++++ b/printer/decompress.c
+@@ -55,7 +55,7 @@ enum
+ eeCachedColor = 0x60
+ };
+
+-inline uint32_t get3pixel (uint8_t* src)
++static inline uint32_t get3pixel (uint8_t* src)
+ {
+ return (src[0] << 16) | (src[1] << 8) | (src[2]);
+ }
+--
+2.41.0
+
diff --git a/app-emulation/softgun/files/softgun-0.22-fix-implicit-int.patch b/app-emulation/softgun/files/softgun-0.22-fix-implicit-int.patch
new file mode 100644
index 000000000000..b65ddaf660f3
--- /dev/null
+++ b/app-emulation/softgun/files/softgun-0.22-fix-implicit-int.patch
@@ -0,0 +1,33 @@
+Subject: [PATCH] fix implicit int declarations in function params
+
+Clang16 does not allow implicit integer declarations by default.
+
+Bug: https://bugs.gentoo.org/882583
+Upstream: https://sourceforge.net/p/softgun/patches/5/
+
+# Pascal Jäger <pascal.jaeger@leimstift.de> (2023-09-21)
+--- a/arm/arm9cpu.h
++++ b/arm/arm9cpu.h
+@@ -356,7 +356,7 @@ ARM_PostRestartIdecoder() {
+ }
+
+ static inline void
+-ARM_SigDebugMode(value) {
++ARM_SigDebugMode(uint32_t value) {
+ if(value) {
+ gcpu.signals_raw |= ARM_SIG_DEBUGMODE;
+ } else {
+--- a/m32c/idecode_m32c.h
++++ b/m32c/idecode_m32c.h
+@@ -84,7 +84,7 @@ M32C_InstructionProcFind(uint16_t icode)
+ #endif
+
+ static inline int
+-M32C_InstructionLen(icode) {
++M32C_InstructionLen(uint32_t icode) {
+ M32C_Instruction *instr = M32C_InstructionFind(icode);
+ return instr->len;
+ }
+--
+2.41.0
+
diff --git a/app-emulation/softgun/files/softgun-0.22-make.patch b/app-emulation/softgun/files/softgun-0.22-make.patch
new file mode 100644
index 000000000000..9d1ea9b38e0d
--- /dev/null
+++ b/app-emulation/softgun/files/softgun-0.22-make.patch
@@ -0,0 +1,75 @@
+--- softgun-0.22/config.mk
++++ softgun-0.22/config.mk
+@@ -9,7 +9,7 @@ bindir=$(prefix)/bin
+ libdir=$(prefix)/lib/softgun/
+
+ #CFLAGS=-Wall -pg -O0 -DPROFILE
+-CFLAGS=-Wall -O9 -g -fomit-frame-pointer -fno-strict-overflow -Wstrict-overflow=3 -Wno-unused-but-set-variable
+-DEFS=-D_GNU_SOURCE
++CFLAGS+=-Wall -fno-strict-overflow -Wstrict-overflow=3 -Wno-unused-but-set-variable -fno-strict-aliasing
++DEFS=$(CPPFLAGS) -D_GNU_SOURCE
+ INCLUDES:=-I$(top_srcdir) -I.
+
+@@ -17,15 +17,16 @@ INCLUDES:=-I$(top_srcdir) -I.
+ # to omit stack protection symbol in object file
+ SHAREDCFLAGS=-fPIC -nostdlib -D_SHARED_
+ SHAREDLDFLAGS=-nostdlib -shared
+-CYGWIN=$(findstring CYGWIN,$(shell uname))
+-ifeq ($(shell uname),Linux)
+-LDFLAGS=-lpthread -lrt -lm -lz -lasound
++UNAME=$(shell uname)
++CYGWIN=$(findstring CYGWIN,$(UNAME))
++ifeq ($(UNAME),Linux)
++LDLIBS=-lpthread -ldl -lrt -lm -lz -lasound
+ else
+- ifeq ($(shell uname),FreeBSD)
+- LDFLAGS=-lpthread -lm -lz -lSDL
++ ifeq ($(UNAME),FreeBSD)
++ LDLIBS=-lpthread -lm -lz -lSDL
+ else
+ ifeq ($(CYGWIN),CYGWIN)
+- LDFLAGS=-lpthread -lrt -lm -lz
++ LDLIBS=-lpthread -lrt -lm -lz
+ else
+ $(error "Unknown architecture $(shell uname)")
+ endif
+--- softgun-0.22/Makefile
++++ softgun-0.22/Makefile
+@@ -116,7 +116,7 @@
+
+
+ softgun: $(OBJS)
+- $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
++ $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ $(LDLIBS)
+
+ boards/libboards.a:
+ $(MAKE) -C boards libboards.a
+--- softgun-0.22/printer/module.mk
++++ softgun-0.22/printer/module.mk
+@@ -5,5 +5,5 @@
+ INSTALL_BINS += pcl3gui2png
+
+ pcl3gui2png: $(PRINTER_OBJS) printer/pcl3gui2png.c
+- $(CC) -o $@ $(PRINTER_OBJS) printer/pcl3gui2png.c
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^
+
+--- softgun-0.22/tools/Makefile
++++ softgun-0.22/tools/Makefile
+@@ -2,7 +2,7 @@ include ../config.mk
+
+ ifeq ($(shell uname),Linux)
+ sg_tunctl: tunctl.c
+- $(CC) $(CFLAGS) tunctl.c -o sg_tunctl
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^
+
+ install:
+ install -m 0755 sg_tunctl $(bindir)
+@@ -14,7 +14,7 @@ install:
+ endif
+
+ to_c_array: to_c_array.c
+- $(CC) $(CFLAGS) to_c_array.c -o to_c_array
++ $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^
+
+
+ clean:
diff --git a/app-emulation/softgun/metadata.xml b/app-emulation/softgun/metadata.xml
new file mode 100644
index 000000000000..fe2224fc7776
--- /dev/null
+++ b/app-emulation/softgun/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>arm@gentoo.org</email>
+ <name>ARM architecture team</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/softgun/softgun-0.22-r1.ebuild b/app-emulation/softgun/softgun-0.22-r1.ebuild
new file mode 100644
index 000000000000..f36e66a00487
--- /dev/null
+++ b/app-emulation/softgun/softgun-0.22-r1.ebuild
@@ -0,0 +1,38 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs
+
+DESCRIPTION="ARM software emulator"
+HOMEPAGE="https://softgun.sourceforge.net/"
+SRC_URI="https://downloads.sourceforge.net/${PN}/${P}.tgz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+
+DEPEND="media-libs/alsa-lib"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-0.22-make.patch
+ "${FILESDIR}"/${PN}-0.22-fix-implicit-int.patch
+ "${FILESDIR}"/${PN}-0.22-fix-declarations-with-type-mismatches.patch
+)
+
+src_configure() {
+ append-cflags -fcommon
+ default
+}
+
+src_compile() {
+ emake CC="$(tc-getCC)"
+}
+
+src_install() {
+ dodir /usr/bin
+ emake install prefix="${D}/usr"
+ dodoc README configs/*.sg
+}
diff --git a/app-emulation/spectemu/Manifest b/app-emulation/spectemu/Manifest
new file mode 100644
index 000000000000..348fa96c085c
--- /dev/null
+++ b/app-emulation/spectemu/Manifest
@@ -0,0 +1 @@
+DIST spectemu-0.99.3.tar.gz 269524 BLAKE2B f934e059bc40be8e6b3bae64c68a57654ea6d2dd9ab013dd7124446ade51b3e54cbf0d6b737f0c7c930dbd9eea89d619d47857310ea01cf2021f0e2f5a6dc54f SHA512 a2efcf46a2481a213825b452987626ade3fa95a525d26bd11a315ef885eb4f536343a7a58389733f459d05486b3da73e81503a0988ebe768ad93b089351f3e25
diff --git a/app-emulation/spectemu/files/spectemu-0.99.3-automagic.patch b/app-emulation/spectemu/files/spectemu-0.99.3-automagic.patch
new file mode 100644
index 000000000000..0fd6ebc7e6f6
--- /dev/null
+++ b/app-emulation/spectemu/files/spectemu-0.99.3-automagic.patch
@@ -0,0 +1,31 @@
+--- a/configure.in
++++ b/configure.in
+@@ -121,13 +121,22 @@
+ dnl -----------------------------------------------------------
+ dnl Check for SVGALIB
+ dnl -----------------------------------------------------------
+-AC_CHECK_LIB(vga, vga_setmode, no_vga="", no_vga=yes)
+-if test "$no_vga" != yes; then
+- progs="$progs vgaspect"
+- vgalib=-lvga
+
+- LIBS="$vgalib $olibs"
+- AC_CHECK_FUNC(vga_runinbackground_version, AC_DEFINE(RUN_IN_BACKGROUND))
++svgalibs=""
++withsvga=no
++AC_ARG_WITH(svga,
++[ --with-svga Compile with svga library],
++[if test "$withval" = no; then withsvga=no; fi])
++
++if test "$withsvga" = yes; then
++ AC_CHECK_LIB(vga, vga_setmode, no_vga="", no_vga=yes)
++ if test "$no_vga" != yes; then
++ progs="$progs vgaspect"
++ vgalib=-lvga
++
++ LIBS="$vgalib $olibs"
++ AC_CHECK_FUNC(vga_runinbackground_version, AC_DEFINE(RUN_IN_BACKGROUND))
++ fi
+ fi
+
+ LIBS="$olibs"
diff --git a/app-emulation/spectemu/files/spectemu-0.99.3-r2-build.patch b/app-emulation/spectemu/files/spectemu-0.99.3-r2-build.patch
new file mode 100644
index 000000000000..97d9a877675e
--- /dev/null
+++ b/app-emulation/spectemu/files/spectemu-0.99.3-r2-build.patch
@@ -0,0 +1,34 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -44,17 +44,18 @@
+ ./mkinstalldirs $(i_bindir) $(i_mandir)
+
+ install_prog: $(progs)
++ mkdir -p $(i_bindir)
+ if test -f xspect; then \
+- $(INSTALL_PROGRAM) -s -m 755 xspect $(i_bindir); fi
++ $(INSTALL_PROGRAM) -m 755 xspect $(i_bindir); fi
+ if test -f vgaspect; then \
+- $(INSTALL_PROGRAM) -s -m 4755 vgaspect $(i_bindir); fi
++ $(INSTALL_PROGRAM) -m 4755 vgaspect $(i_bindir); fi
+
+ install_man:
++ mkdir -p $(i_mandir)
+ $(INSTALL_DATA) ./xspect.1 $(i_mandir)
+ $(INSTALL_DATA) ./tapeout.1 $(i_mandir)
+- (cd $(i_mandir); rm -f vgaspect.1; ln -s xspect.1 vgaspect.1)
+
+-install: installdirs install_prog install_man
++install: install_prog install_man
+
+ z80_c_objs=z80.o z80optab.o z80_step.o spperif.o spect.o rom48.o \
+ z80_op1.o z80_op2.o z80_op3.o z80_op4.o z80_op5.o z80_op6.o
+@@ -88,7 +90,7 @@
+ ./sp_to_s < i386emul.sp > i386emul.s
+
+ i386emul.o: i386emul.s
+- $(CC) -c $(CFLAGS) i386emul.s
++ $(CC) -c $(ASFLAGS) -Xassembler --noexecstack i386emul.s
+
+ sp_to_s: sp_to_s.o
+ $(CC) -o sp_to_s $(LDFLAGS) sp_to_s.o
diff --git a/app-emulation/spectemu/metadata.xml b/app-emulation/spectemu/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/app-emulation/spectemu/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/spectemu/spectemu-0.99.3-r2.ebuild b/app-emulation/spectemu/spectemu-0.99.3-r2.ebuild
new file mode 100644
index 000000000000..4b6cd315e63b
--- /dev/null
+++ b/app-emulation/spectemu/spectemu-0.99.3-r2.ebuild
@@ -0,0 +1,57 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="48k ZX Spectrum Emulator"
+HOMEPAGE="http://kempelen.iit.bme.hu/~mszeredi/spectemu/spectemu.html"
+SRC_URI="http://www.inf.bme.hu/~mszeredi/spectemu/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+IUSE="readline"
+
+RDEPEND="
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXxf86vm
+ readline? ( sys-libs/readline:= )
+"
+
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-automagic.patch
+ "${FILESDIR}"/${P}-r2-build.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ local myconf=(
+ --with-svga=no
+ --with-x=yes
+ $(use_with readline)
+ )
+
+ econf "${myconf[@]}"
+}
+
+src_compile() {
+ default
+ emake tapeout
+}
+
+src_install() {
+ emake install_root="${ED}" install
+ dobin tapeout
+}
diff --git a/app-emulation/spice-protocol/Manifest b/app-emulation/spice-protocol/Manifest
new file mode 100644
index 000000000000..4162c992343a
--- /dev/null
+++ b/app-emulation/spice-protocol/Manifest
@@ -0,0 +1,2 @@
+DIST spice-protocol-0.14.4.tar.xz 23540 BLAKE2B a36ea56f000fbbfd87f3a318ff932332116f5229d89cbf19be53e7605aef52cc650d453982d23d1f2decb7ef1273758b40022dc1dada49f40cd6f75e55f014d6 SHA512 c55677fd6da37303487f8245388cbd555715c736e15bca4a305c4374feafc655b74e549ea401949d72e17b2e6ad76f16c5add3963008a18a1fefedd4b4a001c1
+DIST spice-protocol-0.14.5.tar.xz 23592 BLAKE2B 25d6ab5cd1615cee10cf88b405c4508bcbd4ab2c6778a0546e9d411c43f789bddec52715460df765c915490402e09111c1c9c414489dfa98c0e2bde9a5a11912 SHA512 45bec8b427f3ae8df62e946eb21d3d31deed5e404d58cb9cd143669a2abb94d9ceb8add4f28b483a9c4215a8edba25be9308b6d3b63ad1ddc21653e0ab068dbc
diff --git a/app-emulation/spice-protocol/metadata.xml b/app-emulation/spice-protocol/metadata.xml
new file mode 100644
index 000000000000..ba984f6df673
--- /dev/null
+++ b/app-emulation/spice-protocol/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/spice-protocol/spice-protocol-0.14.4.ebuild b/app-emulation/spice-protocol/spice-protocol-0.14.4.ebuild
new file mode 100644
index 000000000000..9923ee10e706
--- /dev/null
+++ b/app-emulation/spice-protocol/spice-protocol-0.14.4.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice-protocol.git"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~sparc x86"
+fi
+
+DESCRIPTION="Headers defining the SPICE protocol"
+HOMEPAGE="https://spice-space.org/"
+
+LICENSE="BSD"
+SLOT="0"
diff --git a/app-emulation/spice-protocol/spice-protocol-0.14.5.ebuild b/app-emulation/spice-protocol/spice-protocol-0.14.5.ebuild
new file mode 100644
index 000000000000..ec95080cd630
--- /dev/null
+++ b/app-emulation/spice-protocol/spice-protocol-0.14.5.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice-protocol.git"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/${P}.tar.xz"
+ KEYWORDS="~alpha amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~sparc x86"
+fi
+
+DESCRIPTION="Headers defining the SPICE protocol"
+HOMEPAGE="https://spice-space.org/"
+
+LICENSE="BSD"
+SLOT="0"
diff --git a/app-emulation/spice-protocol/spice-protocol-9999-r1.ebuild b/app-emulation/spice-protocol/spice-protocol-9999-r1.ebuild
new file mode 100644
index 000000000000..fbd573818059
--- /dev/null
+++ b/app-emulation/spice-protocol/spice-protocol-9999-r1.ebuild
@@ -0,0 +1,20 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit meson
+
+if [[ ${PV} = *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice-protocol.git"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/${P}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+DESCRIPTION="Headers defining the SPICE protocol"
+HOMEPAGE="https://spice-space.org/"
+
+LICENSE="BSD"
+SLOT="0"
diff --git a/app-emulation/spice-vdagent/Manifest b/app-emulation/spice-vdagent/Manifest
new file mode 100644
index 000000000000..49738685af14
--- /dev/null
+++ b/app-emulation/spice-vdagent/Manifest
@@ -0,0 +1 @@
+DIST spice-vdagent-0.22.1.tar.bz2 165560 BLAKE2B 4fd4318592d20d305d515c65d7491b90ac79bcc7f5bdfafd9df7858bdce24aa57c79f2121bbf9cbadec8e6297890f4b8598b9abcadcce5a9f39712b96deaa396 SHA512 5a4d2661145f33a0583880a128d925b15ca5aec05df83271c80f8baa0fcdd28fab0242301bc38443ccddf70fbdcfd76b5d30bb5a6b4b7c895c3cea0eb38bdf92
diff --git a/app-emulation/spice-vdagent/files/spice-vdagent.confd-2 b/app-emulation/spice-vdagent/files/spice-vdagent.confd-2
new file mode 100644
index 000000000000..763fdaf886d0
--- /dev/null
+++ b/app-emulation/spice-vdagent/files/spice-vdagent.confd-2
@@ -0,0 +1,11 @@
+# The virtual communication port provided by the hypervisor/vm
+# Default: /dev/virtio-ports/com.redhat.spice.0
+#PORT="/dev/virtio-ports/com.redhat.spice.0"
+
+# Userspace Input Device
+# Default: /dev/uinput or /dev/input/uinput
+#DEVICE=""
+
+# Extra arguments for spice-vdagentd
+# Default: none
+#SPICE_VDAGENT_ARGS=""
diff --git a/app-emulation/spice-vdagent/files/spice-vdagent.initd-4 b/app-emulation/spice-vdagent/files/spice-vdagent.initd-4
new file mode 100644
index 000000000000..ee416dacd899
--- /dev/null
+++ b/app-emulation/spice-vdagent/files/spice-vdagent.initd-4
@@ -0,0 +1,60 @@
+#!/sbin/openrc-run
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ after dbus
+}
+
+PIDFILE="/var/run/spice-vdagentd/spice-vdagentd.pid"
+
+start() {
+ PORT="${PORT:-/dev/virtio-ports/com.redhat.spice.0}"
+ DEVICE="${DEVICE:-/dev/uinput}"
+
+ ebegin "Checking for required modules and devices"
+
+ if [ ! -d /sys/module/uinput ]; then
+ modprobe -q uinput
+ fi
+
+ if [ ! -e /dev/uinput ]; then
+ eerror "Module 'uinput' not loaded or not enabled in the kernel"
+ eend 1
+ return 1
+ fi
+
+ if [ ! -c "${PORT}" ] ; then
+ eerror "Required virtio port does not exist. Make sure you"
+ eerror "started the virtual machine with appropriate parameters."
+ eend 1
+ return 1
+ fi
+ eend 0
+
+ if [ ! -c ${DEVICE} -a -c /dev/input/uinput ]; then
+ DEVICE=/dev/input/uinput
+ fi
+
+ # recreate the directory since /var/run may reside on a ramdisk
+ mkdir -p /var/run/spice-vdagentd
+
+ # cleanup stalled socket
+ rm -f /var/run/spice-vdagentd/spice-vdagent-sock
+
+ ebegin "Starting spice VD agent daemon"
+ start-stop-daemon \
+ --start \
+ --pidfile "${PIDFILE}" \
+ --exec /usr/sbin/spice-vdagentd \
+ -- -u "${DEVICE}" ${SPICE_VDAGENT_ARGS}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping spice VD agent daemon"
+ start-stop-daemon \
+ --stop \
+ --pidfile "${PIDFILE}"
+ eend $?
+}
diff --git a/app-emulation/spice-vdagent/metadata.xml b/app-emulation/spice-vdagent/metadata.xml
new file mode 100644
index 000000000000..b63f47d4c471
--- /dev/null
+++ b/app-emulation/spice-vdagent/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:spice-space:spice-vdagent</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/spice-vdagent/spice-vdagent-0.22.1.ebuild b/app-emulation/spice-vdagent/spice-vdagent-0.22.1.ebuild
new file mode 100644
index 000000000000..c58c80ea1479
--- /dev/null
+++ b/app-emulation/spice-vdagent/spice-vdagent-0.22.1.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info tmpfiles udev
+
+DESCRIPTION="SPICE VD Linux Guest Agent"
+HOMEPAGE="https://www.spice-space.org/"
+SRC_URI="https://www.spice-space.org/download/releases/${P}.tar.bz2"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 ~loong x86"
+IUSE="gtk selinux systemd"
+
+COMMON_DEPEND="
+ dev-libs/glib:2
+ >=app-emulation/spice-protocol-0.14.0
+ media-libs/alsa-lib
+ sys-apps/dbus
+ x11-libs/libdrm
+ >=x11-libs/libpciaccess-0.10
+ x11-libs/libXfixes
+ x11-libs/libXrandr
+ x11-libs/libX11
+ x11-libs/libXinerama
+ gtk? ( x11-libs/gtk+:3 )
+ systemd? ( sys-apps/systemd )"
+DEPEND="${COMMON_DEPEND}
+ x11-base/xorg-proto"
+RDEPEND="${COMMON_DEPEND}
+ selinux? ( sec-policy/selinux-vdagent )"
+BDEPEND="virtual/pkgconfig"
+
+CONFIG_CHECK="~INPUT_UINPUT ~VIRTIO_CONSOLE"
+ERROR_INPUT_UINPUT="User level input support (INPUT_UINPUT) is required"
+ERROR_VIRTIO_CONSOLE="VirtIO console/serial device support (VIRTIO_CONSOLE) is required"
+
+src_configure() {
+ local opt=()
+ if use systemd; then
+ opt+=( --with-session-info=systemd )
+ else
+ opt+=( --with-session-info=none )
+ fi
+
+ econf \
+ --with-init-script=systemd \
+ --localstatedir="${EPREFIX}"/var \
+ $(use_with gtk) \
+ "${opt[@]}"
+}
+
+src_install() {
+ default
+
+ rmdir "${ED}"/var/run/spice-vdagentd || die
+
+ keepdir /var/log/spice-vdagentd
+
+ newinitd "${FILESDIR}/${PN}.initd-4" "${PN}"
+ newconfd "${FILESDIR}/${PN}.confd-2" "${PN}"
+}
+
+pkg_postinst() {
+ udev_reload
+ tmpfiles_process spice-vdagentd.conf
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/spice/Manifest b/app-emulation/spice/Manifest
new file mode 100644
index 000000000000..30d18b0621d9
--- /dev/null
+++ b/app-emulation/spice/Manifest
@@ -0,0 +1,2 @@
+DIST spice-0.15.2.tar.bz2 1663326 BLAKE2B 00f5393ac409590b8fe0203251b811a4fe6dca16e644a30dd8165d57ff28cbef3b2f9c2a92ff7d2f6c8092bbef4f89a4e85ef9228cc8c03b0a163ffa3afaf9f6 SHA512 c8f273b9e97ef38a03b331f7d32c5f0a09d540523fe626568c845152cbd22273a92b3a08bc13fa2e061b913ad16ceb7cbddf142655cd9cdcd8eb5f646fa6aa26
+DIST spice-0.16.0.tar.bz2 1682389 BLAKE2B 09bda6480c72a82aef775e12a1034f0194e99ae754d98456cd73de90be067b22e4210a536515266b2f298364f77fa0839546631b54f79074318f486d9a669aa0 SHA512 21fb8cc3cc4b3c185a1d3735dfda5df054e9244eeec9f3e2e2cf6f67acce70b213766502e55ac7c7e3b69872895cb28b79a39b4d428b63e030eaa157b6c48731
diff --git a/app-emulation/spice/files/README.gentoo b/app-emulation/spice/files/README.gentoo
new file mode 100644
index 000000000000..1920ea69303b
--- /dev/null
+++ b/app-emulation/spice/files/README.gentoo
@@ -0,0 +1,7 @@
+
+If you choose to enable the video streaming support of gstreamer,
+please try to install addtional gst-plugins which matching the video codecs
+
+ mjpeg media-plugins/gst-plugins-libav:1.0
+ vpx media-plugins/gst-plugins-vpx:1.0
+ x264 media-plugins/gst-plugins-x264:1.0
diff --git a/app-emulation/spice/files/spice-0.16.0-c++20-adjust-designated-init.patch b/app-emulation/spice/files/spice-0.16.0-c++20-adjust-designated-init.patch
new file mode 100644
index 000000000000..dfc6a697f048
--- /dev/null
+++ b/app-emulation/spice/files/spice-0.16.0-c++20-adjust-designated-init.patch
@@ -0,0 +1,24 @@
+Adjust designated initializer to be C++20 compliant. Starting with
+g++-16, GCC will default to the C++20 standard.
+
+Signed-off-by: Nicholas Vinson <nvinson234@gmail.com>
+---
+ server/tests/test-display-base.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/server/tests/test-display-base.cpp b/server/tests/test-display-base.cpp
+index b220b7fe..5d0404c9 100644
+--- a/server/tests/test-display-base.cpp
++++ b/server/tests/test-display-base.cpp
+@@ -806,7 +806,7 @@ static QXLInterface display_sif = {
+ .major_version = SPICE_INTERFACE_QXL_MAJOR,
+ .minor_version = SPICE_INTERFACE_QXL_MINOR
+ },
+- { .attached_worker = attached_worker },
++ .attached_worker = attached_worker,
+ .set_compression_level = set_compression_level,
+ .set_mm_time = nullptr,
+ .get_init_info = get_init_info,
+--
+2.52.0
+
diff --git a/app-emulation/spice/metadata.xml b/app-emulation/spice/metadata.xml
new file mode 100644
index 000000000000..b19574d108b4
--- /dev/null
+++ b/app-emulation/spice/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="smartcard">Enable smartcard remoting using <pkg>app-emulation/libcacard</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/spice/spice-0.15.2.ebuild b/app-emulation/spice/spice-0.15.2.ebuild
new file mode 100644
index 000000000000..f7cd79dffc4d
--- /dev/null
+++ b/app-emulation/spice/spice-0.15.2.ebuild
@@ -0,0 +1,97 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit meson python-any-r1 readme.gentoo-r1 xdg-utils
+
+DESCRIPTION="SPICE server"
+HOMEPAGE="https://www.spice-space.org/"
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice.git"
+ inherit git-r3
+
+ DEPEND="~app-emulation/spice-protocol-9999"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/spice-server/${P}.tar.bz2"
+ KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+IUSE="gstreamer lz4 sasl smartcard static-libs test"
+RESTRICT="!test? ( test )"
+
+# The libspice-server only uses the headers of libcacard
+RDEPEND="
+ dev-lang/orc[static-libs(+)?]
+ >=dev-libs/glib-2.38:2[static-libs(+)?]
+ dev-libs/openssl:0=[static-libs(+)?]
+ media-libs/opus[static-libs(+)?]
+ media-libs/libjpeg-turbo:0=[static-libs(+)?]
+ virtual/zlib:=[static-libs(+)?]
+ >=x11-libs/pixman-0.17.7[static-libs(+)?]
+ lz4? ( app-arch/lz4:0=[static-libs(+)?] )
+ smartcard? ( >=app-emulation/libcacard-2.5.1 )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)?] )
+ gstreamer? (
+ media-libs/gstreamer:1.0
+ media-libs/gst-plugins-base:1.0
+ )
+"
+DEPEND+="
+ ${RDEPEND}
+ >=app-emulation/spice-protocol-0.14.3
+ smartcard? ( app-emulation/qemu[smartcard] )
+ test? ( net-libs/glib-networking )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glib-utils
+ virtual/pkgconfig
+ $(python_gen_any_dep '
+ >=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]
+ dev-python/six[${PYTHON_USEDEP}]
+ ')
+"
+
+python_check_deps() {
+ python_has_version -b ">=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]"
+ python_has_version -b "dev-python/six[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && python-any-r1_pkg_setup
+}
+
+src_configure() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ use gstreamer && addpredict /dev
+
+ xdg_environment_reset
+
+ local emesonargs=(
+ -Ddefault_library=$(usex static-libs both shared)
+ -Dgstreamer=$(usex gstreamer 1.0 no)
+ -Dopus=enabled
+ -Dmanual=false
+ $(meson_use lz4)
+ $(meson_use sasl)
+ $(meson_feature smartcard)
+ $(meson_use test tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/spice/spice-0.16.0.ebuild b/app-emulation/spice/spice-0.16.0.ebuild
new file mode 100644
index 000000000000..365421ca37b2
--- /dev/null
+++ b/app-emulation/spice/spice-0.16.0.ebuild
@@ -0,0 +1,102 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit meson python-any-r1 readme.gentoo-r1 xdg-utils
+
+DESCRIPTION="SPICE server"
+HOMEPAGE="https://www.spice-space.org/"
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice.git"
+ inherit git-r3
+
+ DEPEND="~app-emulation/spice-protocol-9999"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/spice-server/${P}.tar.bz2"
+ KEYWORDS="amd64 arm64 ~loong ppc64 ~riscv x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+IUSE="gstreamer lz4 opus sasl smartcard static-libs test"
+RESTRICT="!test? ( test )"
+
+# The libspice-server only uses the headers of libcacard
+RDEPEND="
+ dev-lang/orc[static-libs(+)?]
+ >=dev-libs/glib-2.38:2[static-libs(+)?]
+ dev-libs/openssl:0=[static-libs(+)?]
+ media-libs/opus[static-libs(+)?]
+ media-libs/libjpeg-turbo:0=[static-libs(+)?]
+ virtual/zlib:=[static-libs(+)?]
+ >=x11-libs/pixman-0.17.7[static-libs(+)?]
+ virtual/libudev
+ lz4? ( app-arch/lz4:0=[static-libs(+)?] )
+ opus? ( media-libs/opus[static-libs(+)?] )
+ smartcard? ( >=app-emulation/libcacard-2.5.1 )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)?] )
+ gstreamer? (
+ media-libs/gstreamer:1.0
+ media-libs/gst-plugins-base:1.0
+ )
+"
+DEPEND+="
+ ${RDEPEND}
+ >=app-emulation/spice-protocol-0.14.5
+ smartcard? ( app-emulation/qemu[smartcard] )
+ test? ( net-libs/glib-networking )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glib-utils
+ virtual/pkgconfig
+ $(python_gen_any_dep '
+ >=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]
+ ')
+"
+
+python_check_deps() {
+ python_has_version -b ">=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && python-any-r1_pkg_setup
+}
+
+PATCHES=(
+ "${FILESDIR}/${P}-c++20-adjust-designated-init.patch"
+)
+
+src_configure() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ use gstreamer && addpredict /dev
+
+ xdg_environment_reset
+
+ local emesonargs=(
+ -Ddefault_library=$(usex static-libs both shared)
+ -Dgstreamer=$(usex gstreamer 1.0 no)
+ -Dopus=enabled
+ -Dmanual=false
+ $(meson_use lz4)
+ $(meson_use sasl)
+ $(meson_feature opus)
+ $(meson_feature smartcard)
+ $(meson_use test tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/spice/spice-9999-r1.ebuild b/app-emulation/spice/spice-9999-r1.ebuild
new file mode 100644
index 000000000000..0b36a99a1219
--- /dev/null
+++ b/app-emulation/spice/spice-9999-r1.ebuild
@@ -0,0 +1,98 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit meson python-any-r1 readme.gentoo-r1 xdg-utils
+
+DESCRIPTION="SPICE server"
+HOMEPAGE="https://www.spice-space.org/"
+if [[ ${PV} == 9999 ]] ; then
+ EGIT_REPO_URI="https://gitlab.freedesktop.org/spice/spice.git"
+ inherit git-r3
+
+ DEPEND="~app-emulation/spice-protocol-9999"
+else
+ SRC_URI="https://www.spice-space.org/download/releases/spice-server/${P}.tar.bz2"
+ KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86"
+fi
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+IUSE="gstreamer lz4 opus sasl smartcard static-libs test"
+RESTRICT="!test? ( test )"
+
+# The libspice-server only uses the headers of libcacard
+RDEPEND="
+ dev-lang/orc[static-libs(+)?]
+ >=dev-libs/glib-2.38:2[static-libs(+)?]
+ dev-libs/openssl:0=[static-libs(+)?]
+ media-libs/opus[static-libs(+)?]
+ media-libs/libjpeg-turbo:0=[static-libs(+)?]
+ virtual/zlib:=[static-libs(+)?]
+ >=x11-libs/pixman-0.17.7[static-libs(+)?]
+ virtual/libudev
+ lz4? ( app-arch/lz4:0=[static-libs(+)?] )
+ opus? ( media-libs/opus[static-libs(+)?] )
+ smartcard? ( >=app-emulation/libcacard-2.5.1 )
+ sasl? ( dev-libs/cyrus-sasl[static-libs(+)?] )
+ gstreamer? (
+ media-libs/gstreamer:1.0
+ media-libs/gst-plugins-base:1.0
+ )
+"
+DEPEND+="
+ ${RDEPEND}
+ >=app-emulation/spice-protocol-0.14.5
+ smartcard? ( app-emulation/qemu[smartcard] )
+ test? ( net-libs/glib-networking )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-util/glib-utils
+ virtual/pkgconfig
+ $(python_gen_any_dep '
+ >=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]
+ ')
+"
+
+python_check_deps() {
+ python_has_version -b ">=dev-python/pyparsing-1.5.6-r2[${PYTHON_USEDEP}]"
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && python-any-r1_pkg_setup
+}
+
+src_configure() {
+ # Prevent sandbox violations, bug #586560
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744134
+ # https://bugzilla.gnome.org/show_bug.cgi?id=744135
+ use gstreamer && addpredict /dev
+
+ xdg_environment_reset
+
+ local emesonargs=(
+ -Ddefault_library=$(usex static-libs both shared)
+ -Dgstreamer=$(usex gstreamer 1.0 no)
+ -Dopus=enabled
+ -Dmanual=false
+ $(meson_use lz4)
+ $(meson_use sasl)
+ $(meson_feature opus)
+ $(meson_feature smartcard)
+ $(meson_use test tests)
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/uade/Manifest b/app-emulation/uade/Manifest
new file mode 100644
index 000000000000..fb5828bf562a
--- /dev/null
+++ b/app-emulation/uade/Manifest
@@ -0,0 +1 @@
+DIST uade-2.13.tar.bz2 2897931 BLAKE2B 7d5ba128fc53bb683a6a21616e3c9c2a7376361086f3d91a59026ac89eb48d9520f89342914078ccb4614a16826a8c90f86a6052caffc9d5cc4e1e0ab6b092f0 SHA512 675c3369ed55a314cab81ae7ba8a09b277ab1cfe2354eac92194f746803ec2464b7603d665cf30da41caef5997c21515e69f0313d8d2b079c242a08fef786183
diff --git a/app-emulation/uade/files/uade-2.13-configure.patch b/app-emulation/uade/files/uade-2.13-configure.patch
new file mode 100644
index 000000000000..305e354766fb
--- /dev/null
+++ b/app-emulation/uade/files/uade-2.13-configure.patch
@@ -0,0 +1,24 @@
+--- uade-2.13/configure 2009-10-29 22:01:12.000000000 +0100
++++ uade-2.13-r1/configure 2020-06-30 20:03:45.237913031 +0200
+@@ -342,8 +342,11 @@
+ if test -z "$prefix"; then
+ prefix="/usr/local"
+ fi
++ if test -z "$libdir" ; then
++ libdir="$prefix/lib"
++ fi
+ uadedatadir="$prefix/share/uade2"
+- uadelibdir="$prefix/lib/uade2"
++ uadelibdir="$libdir/uade2"
+ if test -z "$bindir"; then
+ bindir="$prefix/bin"
+ fi
+@@ -439,7 +442,7 @@
+ fi
+ fi
+
+-pkgconfigdir="$prefix/lib/pkgconfig"
++pkgconfigdir="$libdir/pkgconfig"
+ rm -f uade.pc
+ if test -n "$PKG_CONFIG" ; then
+ installuadepcrule=""
diff --git a/app-emulation/uade/metadata.xml b/app-emulation/uade/metadata.xml
new file mode 100644
index 000000000000..f176315bf9d9
--- /dev/null
+++ b/app-emulation/uade/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <use>
+ <flag name="fuse">Enable <pkg>sys-fs/fuse</pkg> uadefs frontend for on-the-fly WAV conversion</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/uade/uade-2.13-r2.ebuild b/app-emulation/uade/uade-2.13-r2.ebuild
new file mode 100644
index 000000000000..bdefc261f02d
--- /dev/null
+++ b/app-emulation/uade/uade-2.13-r2.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit toolchain-funcs
+
+DESCRIPTION="Unix Amiga Delitracker Emulator - plays old Amiga tunes through UAE emulation"
+HOMEPAGE="https://zakalwe.fi/uade"
+SRC_URI="https://zakalwe.fi/uade/uade2/${P}.tar.bz2"
+
+LICENSE="GPL-2+ LGPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ppc ppc64 x86"
+IUSE="fuse"
+
+RDEPEND="
+ media-libs/libao
+ fuse? ( sys-fs/fuse:0 )"
+DEPEND="${RDEPEND}"
+BDEPEND="virtual/pkgconfig"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-configure.patch
+)
+
+DOCS=( AUTHORS ChangeLog doc/BUGS doc/PLANS )
+
+src_prepare() {
+ default
+
+ # needed to avoid ${D} VariableScope undefined behavior in src_configure
+ find . -name Makefile.in -exec sed -i 's|{PACKAGEPREFIX}|$(DESTDIR)|' {} + || die
+}
+
+src_configure() {
+ tc-export CC
+
+ # not autotools generated
+ local configure=(
+ ./configure
+ --prefix="${EPREFIX}"/usr
+ --libdir="${EPREFIX}"/usr/$(get_libdir)
+ --with-text-scope
+ --without-audacious
+ --without-xmms
+ $(use_with fuse uadefs)
+ ${EXTRA_ECONF}
+ )
+ echo ${configure[*]}
+ "${configure[@]}" || die
+}
diff --git a/app-emulation/uxn/Manifest b/app-emulation/uxn/Manifest
new file mode 100644
index 000000000000..a3c3eb2e9855
--- /dev/null
+++ b/app-emulation/uxn/Manifest
@@ -0,0 +1 @@
+DIST uxn-0_p20250122.tar.gz 302511 BLAKE2B 1c750abd5a50a869428b82dcdc817897badb4801a0b206597977726c1e3df2c4dee90464968f42152245f33c0767fb54783b786a98e6558b9efec21ad09000ef SHA512 67f4c51e91ac2d46c371bec7e218ce221edbfe4eac38511a6a2ceeb7e80b634b2303b4983918921ceacf387f5a1a11f7b5227003c515259ea1337a46bd018f0e
diff --git a/app-emulation/uxn/files/uxn-0_p20230609-build.sh.patch b/app-emulation/uxn/files/uxn-0_p20230609-build.sh.patch
new file mode 100644
index 000000000000..a8b75458da43
--- /dev/null
+++ b/app-emulation/uxn/files/uxn-0_p20230609-build.sh.patch
@@ -0,0 +1,20 @@
+--- a/build.sh
++++ b/build.sh
+@@ -52,7 +52,7 @@ fi
+
+ mkdir -p bin
+ CC="${CC:-cc}"
+-CFLAGS="${CFLAGS:--std=c89 -Wall -Wno-unknown-pragmas}"
++CFLAGS="${CFLAGS} --std=c89 "
+ case "$(uname -s 2>/dev/null)" in
+ MSYS_NT*|MINGW*) # MSYS2 on Windows
+ FILE_LDFLAGS="-liberty"
+@@ -77,7 +77,7 @@ then
+ echo "[debug]"
+ CFLAGS="${CFLAGS} -DDEBUG -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined"
+ else
+- CFLAGS="${CFLAGS} -DNDEBUG -O2 -g0 -s"
++ CFLAGS="${CFLAGS} -DNDEBUG "
+ fi
+
+ ${CC} ${CFLAGS} src/uxnasm.c -o bin/uxnasm
diff --git a/app-emulation/uxn/metadata.xml b/app-emulation/uxn/metadata.xml
new file mode 100644
index 000000000000..8e47badc1f5b
--- /dev/null
+++ b/app-emulation/uxn/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>xgqt@gentoo.org</email>
+ <name>Maciej Barć</name>
+ </maintainer>
+ <longdescription>
+ Uxn is a virtual machine with 32 instructions. This one-page computer is
+ capable of hosting small applications, programmable in a unique language.
+ It was designed with an implementation-first mindset with a focus on
+ creating portable tools and games.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/uxn/uxn-0_p20250122.ebuild b/app-emulation/uxn/uxn-0_p20250122.ebuild
new file mode 100644
index 000000000000..6f37fe2a6fca
--- /dev/null
+++ b/app-emulation/uxn/uxn-0_p20250122.ebuild
@@ -0,0 +1,74 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="An assembler and emulator for the Uxn stack-machine, written in ANSI C"
+HOMEPAGE="https://wiki.xxiivv.com/site/uxn.html
+ https://git.sr.ht/~rabbits/uxn/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://git.sr.ht/~rabbits/${PN}"
+elif [[ "${PV}" == *_p20250122 ]] ; then
+ COMMIT="e17c610d735f45e7397d750ec82f791d0fdb496b"
+
+ SRC_URI="https://git.sr.ht/~rabbits/${PN}/archive/${COMMIT}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/uxn-${COMMIT}"
+
+ KEYWORDS="amd64 ~x86"
+else
+ die "Wrong package version, please update the ebuild, given: ${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="
+ media-libs/libsdl2:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+PATCHES=(
+ "${FILESDIR}/uxn-0_p20230609-build.sh.patch"
+)
+
+src_compile() {
+ local -x CC="$(tc-getCC)"
+ local -x CFLAGS="${CFLAGS} ${LDFLAGS}"
+
+ ./build.sh --no-run || die "building with \"build.sh\" failed"
+
+ # Fails to assemble via following loop.
+ # Possibly not mean to be assembled by hand.
+ rm -rf ./projects/library ./projects/software/{asma,launcher}.tal || die
+
+ local tal_file=""
+ local tal_file_base=""
+
+ while read -r tal_file ; do
+ tal_file_base="$(basename "${tal_file}" .tal)"
+
+ ebegin "Assembling ROM ${tal_file_base}"
+ ./bin/uxnasm "${tal_file}" "$(dirname "${tal_file}")/${tal_file_base}.rom"
+ eend ${?} || die "failed to assemble ${tal_file}"
+ done < \
+ <(find projects -type f -name "*.tal")
+}
+
+src_install() {
+ insinto /usr/bin
+ doins ./bin/uxn{asm,cli,emu}
+ fperms 0755 /usr/bin/uxn{asm,cli,emu}
+
+ insinto /usr/share/uxn
+ doins -r ./projects
+
+ einstalldocs
+}
diff --git a/app-emulation/uxn/uxn-9999.ebuild b/app-emulation/uxn/uxn-9999.ebuild
new file mode 100644
index 000000000000..ef6e9fc2dafe
--- /dev/null
+++ b/app-emulation/uxn/uxn-9999.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit toolchain-funcs
+
+DESCRIPTION="An assembler and emulator for the Uxn stack-machine, written in ANSI C"
+HOMEPAGE="https://wiki.xxiivv.com/site/uxn.html
+ https://git.sr.ht/~rabbits/uxn/"
+
+if [[ "${PV}" == *9999* ]] ; then
+ inherit git-r3
+
+ EGIT_REPO_URI="https://git.sr.ht/~rabbits/${PN}"
+elif [[ "${PV}" == *_p20240304 ]] ; then
+ COMMIT=e7c25fad05850f0e577fc83a140405ca6ccd93c2
+ SRC_URI="https://git.sr.ht/~rabbits/${PN}/archive/${COMMIT}.tar.gz
+ -> ${P}.tar.gz"
+ S="${WORKDIR}/uxn-${COMMIT}"
+
+ KEYWORDS="~amd64 ~x86"
+else
+ die "wrong package version (PV), please update the ebuild, given: ${PV}"
+fi
+
+LICENSE="MIT"
+SLOT="0"
+
+RDEPEND="
+ media-libs/libsdl2:=
+"
+DEPEND="
+ ${RDEPEND}
+"
+
+PATCHES=(
+ "${FILESDIR}/uxn-0_p20230609-build.sh.patch"
+)
+
+src_compile() {
+ CC="$(tc-getCC)" CFLAGS="${CFLAGS} ${LDFLAGS}" \
+ ./build.sh --no-run \
+ || die "building with \"build.sh\" failed"
+
+ # Fails to assemble via following loop.
+ # Possibly not mean to be assembled by hand.
+ rm -rf ./projects/library ./projects/software/{asma,launcher}.tal || die
+
+ local tal_file
+ local tal_file_base
+
+ while read -r tal_file ; do
+ tal_file_base="$(basename "${tal_file}" .tal)"
+
+ ebegin "Assembling ROM ${tal_file_base}"
+ bin/uxnasm "${tal_file}" "$(dirname "${tal_file}")/${tal_file_base}.rom"
+ eend ${?} || die "failed to assemble ${tal_file}"
+ done \
+ < <(find projects -type f -name "*.tal")
+}
+
+src_install() {
+ insinto /usr/bin
+ doins bin/uxn*
+ fperms 0755 /usr/bin/uxn*
+
+ insinto /usr/share/uxn
+ doins -r projects
+
+ einstalldocs
+}
diff --git a/app-emulation/vagrant/Manifest b/app-emulation/vagrant/Manifest
new file mode 100644
index 000000000000..6b8b03eb1f99
--- /dev/null
+++ b/app-emulation/vagrant/Manifest
@@ -0,0 +1,3 @@
+DIST vagrant-2.4.0.tar.gz 3334706 BLAKE2B 62b720a83646e94c7608a2f8aa7acf985aea0a3532e0474aa45c229b054ea40a6e0b23ccdbfdbf7e27e3da9a4db5f57407656fe103ead0f5a98dc27dae5ebb57 SHA512 94e866b012303b65d33b72034f08305fc04c12be40aeb95247b786b53d14259b7b5062b372e3c87523390f0539848a0eafd45b28ad16a27badecd8888541243b
+DIST vagrant-2.4.1.tar.gz 3342333 BLAKE2B c24c7c30364cb9f03f6e43422ff05954dd877e22a5e244f62cd9ce4925bf10d064fc678dee40a7affd1b6cf49c82d2d2208ee47b92baa0cda4194419ed501be4 SHA512 12ce4a2161e99970f212f265bbc79d6af38bccc44feab95db8db3b8194e8080acb846d680d1006a4e3fb1beabac33f154a7507f43223f675ba1db09a24591893
+DIST vagrant-2.4.9.tar.gz 1813258 BLAKE2B 4d470c0871a0c44cf6a851e07dcffa5306198c99dca32e3f0cbb48c79b2cfa273a69590bfa85cbb6712b23cd9df5dce630a5398fa84f92edb820c22f73cf2294 SHA512 97d9e0643c0087c0269ce6e09dd6fba22afd11acb4fe43308355775594a73f51eeaf4ed42a5dae2f74baa1d51d4d207e2a81ff319c787bab761cffd9214eff10
diff --git a/app-emulation/vagrant/files/vagrant.in b/app-emulation/vagrant/files/vagrant.in
new file mode 100644
index 000000000000..ed9c84826ccd
--- /dev/null
+++ b/app-emulation/vagrant/files/vagrant.in
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+#
+# This is a wrapper to properly execute Vagrant within the embedded
+# Vagrant installation directory. This sets up proper environmental variables
+# so that everything loads and compiles to proper directories.
+
+for r in @RUBY_VERSIONS@; do
+ # not all ruby versions are guaranteed to be installed
+ if ! command -v "${r}" >/dev/null 2>&1; then
+ continue
+ fi
+
+ VAGRANT_DIR="$( "${r}" -e 'print Gem::default_path[-1] + "/gems/vagrant-@VAGRANT_VERSION@"' )"
+
+ # Export the VAGRANT_EXECUTABLE so that pre-rubygems can optimize a bit
+ export VAGRANT_EXECUTABLE="${VAGRANT_DIR}/bin/vagrant"
+
+ if [ -f ${VAGRANT_EXECUTABLE} ] ;then
+ ruby="${r}"
+ break
+ fi
+done
+
+if [ -z ${ruby} ]; then
+ echo "Error: failed to find any usable ruby"
+ exit 1
+fi
+
+# Export GEM_HOME based on VAGRANT_HOME
+#
+# This needs to be set because Bundler includes gem paths
+# from RubyGems' Gem.paths.
+if [ -z ${VAGRANT_HOME} ]; then
+ VAGRANT_HOME="~/.vagrant.d"
+fi
+export GEM_HOME="${VAGRANT_HOME}/gems"
+
+# SSL certs
+export SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt"
+
+# Export an environmental variable to say we're in a Vagrant
+# installer created environment.
+export VAGRANT_INSTALLER_ENV=1
+
+# This is currently used only in Vagrant::Plugin::Manager.system_plugins_file
+# to locate plugins configuration file.
+export VAGRANT_INSTALLER_EMBEDDED_DIR="/var/lib/vagrant"
+export VAGRANT_INSTALLER_VERSION=2
+
+# Export the OS as an environmental variable that Vagrant can access
+# so that it can behave better.
+export VAGRANT_DETECTED_OS="$(uname -s 2>/dev/null)"
+
+# Allow to install plugins even with deps in different slots (Bug #628648)
+export VAGRANT_DISABLE_STRICT_DEPENDENCY_ENFORCEMENT=1
+
+# Make it work with rvm (Bugs #474476 #628648)
+unset GEM_HOME GEM_PATH
+
+# Call the actual Vagrant bin with our arguments
+exec "${ruby}" "${VAGRANT_EXECUTABLE}" "$@"
diff --git a/app-emulation/vagrant/metadata.xml b/app-emulation/vagrant/metadata.xml
new file mode 100644
index 000000000000..9c62a59b543a
--- /dev/null
+++ b/app-emulation/vagrant/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>guillaumeseren@gmail.com</email>
+ <name>Guillaume Seren</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/vagrant/vagrant-2.4.0-r2.ebuild b/app-emulation/vagrant/vagrant-2.4.0-r2.ebuild
new file mode 100644
index 000000000000..a7483b97bba1
--- /dev/null
+++ b/app-emulation/vagrant/vagrant-2.4.0-r2.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+USE_RUBY="ruby31 ruby32"
+
+RUBY_FAKEGEM_EXTENSIONS=(ext/vagrant/vagrant_ssl/extconf.rb)
+RUBY_FAKEGEM_EXTRADOC="CHANGELOG.md README.md"
+RUBY_FAKEGEM_GEMSPEC="vagrant.gemspec"
+RUBY_FAKEGEM_EXTRAINSTALL="keys plugins templates version.txt"
+RUBY_FAKEGEM_TASK_DOC=""
+RUBY_FAKEGEM_TASK_TEST=test:unit
+RUBY_FAKEGEM_RECIPE_TEST=rake
+
+inherit bash-completion-r1 optfeature ruby-fakegem
+
+DESCRIPTION="A tool for building and distributing development environments"
+HOMEPAGE="https://vagrantup.com/"
+SRC_URI="https://github.com/hashicorp/vagrant/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BUSL-1.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ ${RDEPEND}
+ app-arch/libarchive
+ net-misc/curl
+"
+
+ruby_add_rdepend "
+ >=dev-ruby/bcrypt_pbkdf-1.1.0
+ >=dev-ruby/childprocess-4.1.0
+ >=dev-ruby/ed25519-1.3.0
+ dev-ruby/erubi
+ >=dev-ruby/googleapis-common-protos-types-1.3.0
+ >=dev-ruby/grpc-1.59.2
+ >=dev-ruby/hashicorp-checkpoint-0.1.5
+ >=dev-ruby/i18n-1.12:1
+ >=dev-ruby/listen-3.7
+ >=dev-ruby/log4r-1.1.9
+ <dev-ruby/log4r-1.1.11
+ >=dev-ruby/mime-types-3.3:*
+ >=dev-ruby/net-ftp-0.2.0
+ >=dev-ruby/net-ssh-7.0.0
+ >=dev-ruby/net-sftp-4.0.0
+ >=dev-ruby/net-scp-4.0.0
+ >=dev-ruby/rexml-3.2.0
+ >=dev-ruby/rgl-0.5.10
+ >=dev-ruby/rubyzip-2.3.2
+ >=dev-ruby/vagrant_cloud-3.1.0
+ >=dev-ruby/ipaddr-1.2.4
+"
+
+ruby_add_bdepend "
+ >=dev-ruby/rake-13.0.0
+ test? (
+ ~app-emulation/vagrant-${PV}
+ dev-ruby/fake_ftp
+ dev-ruby/rake-compiler
+ >=dev-ruby/rspec-3.11
+ >=dev-ruby/rspec-its-1.3.0
+ >=dev-ruby/webrick-1.7.0
+ )
+"
+
+all_ruby_prepare() {
+ # remove bundler support
+ sed -e '/[Bb]undler/ s:^:#:' \
+ -e '/extensiontask/ s:^:#:' \
+ -e '/ExtensionTask/,/^end/ s:^:#:' \
+ -i Rakefile || die
+ rm Gemfile || die
+ rm tasks/bundler.rake || die
+
+ sed -e ':rake\|rspec: s:~>:>=:' \
+ -e ':bcrypt_pbkdf\|hashicorp-checkpoint\|i18n\|listen\|net-ssh\|net-scp\|net-sftp\|childprocess: s:~>:>=:' \
+ -e '/fake_ftp/ s:^#*:#:' \
+ -e '/wdm/ s:^#*:#:' \
+ -e '/winrm/ s:^#*:#:' \
+ -e '/rb-kqueue/ s:^#*:#:' \
+ -e '/ruby_dep/ s:^#*:#:' \
+ -i ${PN}.gemspec || die
+
+ sed -e "s/@VAGRANT_VERSION@/${PV}/g" \
+ -e "s/@RUBY_VERSIONS@/$(ruby_get_use_implementations)/g" \
+ "${FILESDIR}/${PN}.in" > "${PN}" || die
+
+ sed -i -e 's/format documentation/format progress/' tasks/test.rake || die
+
+ # Avoid tests confused by the environment
+ rm -f test/unit/vagrant/util/env_test.rb || die
+
+ # Avoid tests for Windows-specific components
+ rm -rf test/unit/plugins/communicators/winrm || die
+ sed -e '/eager loads WinRM/askip "Windows component"' \
+ -e '/should return the specified communicator if given/askip "Windows component"' \
+ -i test/unit/vagrant/machine_test.rb || die
+ sed -e '/with winrm communicator/ s/context/xcontext/' \
+ -i test/unit/plugins/provisioners/ansible/provisioner_test.rb || die
+}
+
+all_ruby_install() {
+ all_fakegem_install
+
+ newbashcomp contrib/bash/completion.sh ${PN}
+
+ # provide executable similar to upstream:
+ # https://github.com/hashicorp/vagrant-installers/blob/master/substrate/modules/vagrant_installer/templates/vagrant.erb
+ dobin "${PN}"
+
+ # directory for plugins.json
+ keepdir /var/lib/vagrant
+
+ insinto /usr/share/vim/vimfiles/syntax/
+ doins contrib/vim/vagrantfile.vim
+
+ optfeature_header "Optional emulation/container backends:"
+ optfeature "VirtualBox support" app-emulation/virtualbox
+ optfeature "Docker support" app-containers/docker
+}
diff --git a/app-emulation/vagrant/vagrant-2.4.1-r1.ebuild b/app-emulation/vagrant/vagrant-2.4.1-r1.ebuild
new file mode 100644
index 000000000000..80af4348f112
--- /dev/null
+++ b/app-emulation/vagrant/vagrant-2.4.1-r1.ebuild
@@ -0,0 +1,124 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+USE_RUBY="ruby31 ruby32 ruby33"
+
+RUBY_FAKEGEM_EXTENSIONS=(ext/vagrant/vagrant_ssl/extconf.rb)
+RUBY_FAKEGEM_EXTRADOC="CHANGELOG.md README.md"
+RUBY_FAKEGEM_GEMSPEC="vagrant.gemspec"
+RUBY_FAKEGEM_EXTRAINSTALL="keys plugins templates version.txt"
+RUBY_FAKEGEM_TASK_DOC=""
+RUBY_FAKEGEM_TASK_TEST=test:unit
+RUBY_FAKEGEM_RECIPE_TEST=rake
+
+inherit bash-completion-r1 optfeature ruby-fakegem
+
+DESCRIPTION="A tool for building and distributing development environments"
+HOMEPAGE="https://vagrantup.com/"
+SRC_URI="https://github.com/hashicorp/vagrant/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BUSL-1.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ ${RDEPEND}
+ app-arch/libarchive
+ net-misc/curl
+"
+
+ruby_add_rdepend "
+ >=dev-ruby/bcrypt_pbkdf-1.1.0
+ >=dev-ruby/childprocess-4.1.0
+ >=dev-ruby/ed25519-1.3.0
+ dev-ruby/erubi
+ >=dev-ruby/googleapis-common-protos-types-1.3.0
+ >=dev-ruby/grpc-1.59.2
+ >=dev-ruby/hashicorp-checkpoint-0.1.5
+ >=dev-ruby/i18n-1.12:1
+ >=dev-ruby/listen-3.7
+ >=dev-ruby/log4r-1.1.9
+ <dev-ruby/log4r-1.1.11
+ >=dev-ruby/mime-types-3.3:*
+ >=dev-ruby/net-ftp-0.2.0
+ >=dev-ruby/net-ssh-7.0.0
+ >=dev-ruby/net-sftp-4.0.0
+ >=dev-ruby/net-scp-4.0.0
+ >=dev-ruby/rexml-3.2.0
+ >=dev-ruby/rgl-0.5.10
+ >=dev-ruby/rubyzip-2.3.2
+ >=dev-ruby/vagrant_cloud-3.1.1
+ >=dev-ruby/ipaddr-1.2.4
+"
+
+ruby_add_bdepend "
+ >=dev-ruby/rake-13.0.0
+ test? (
+ ~app-emulation/vagrant-${PV}
+ dev-ruby/fake_ftp
+ dev-ruby/rake-compiler
+ >=dev-ruby/rspec-3.11
+ >=dev-ruby/rspec-its-1.3.0
+ >=dev-ruby/webrick-1.7.0
+ )
+"
+
+all_ruby_prepare() {
+ # remove bundler support
+ sed -e '/[Bb]undler/ s:^:#:' \
+ -e '/extensiontask/ s:^:#:' \
+ -e '/ExtensionTask/,/^end/ s:^:#:' \
+ -i Rakefile || die
+ rm Gemfile || die
+ rm tasks/bundler.rake || die
+
+ sed -e ':rake\|rspec: s:~>:>=:' \
+ -e ':bcrypt_pbkdf\|hashicorp-checkpoint\|i18n\|listen\|net-ssh\|net-scp\|net-sftp\|childprocess: s:~>:>=:' \
+ -e '/fake_ftp/ s:^#*:#:' \
+ -e '/wdm/ s:^#*:#:' \
+ -e '/winrm/ s:^#*:#:' \
+ -e '/rb-kqueue/ s:^#*:#:' \
+ -e '/ruby_dep/ s:^#*:#:' \
+ -i ${PN}.gemspec || die
+
+ sed -e "s/@VAGRANT_VERSION@/${PV}/g" \
+ -e "s/@RUBY_VERSIONS@/$(ruby_get_use_implementations)/g" \
+ "${FILESDIR}/${PN}.in" > "${PN}" || die
+
+ sed -i -e 's/format documentation/format progress/' tasks/test.rake || die
+
+ # Avoid tests confused by the environment
+ rm -f test/unit/vagrant/util/env_test.rb || die
+
+ # Avoid tests for Windows-specific components
+ rm -rf test/unit/plugins/communicators/winrm || die
+ sed -e '/eager loads WinRM/askip "Windows component"' \
+ -e '/should return the specified communicator if given/askip "Windows component"' \
+ -i test/unit/vagrant/machine_test.rb || die
+ sed -e '/with winrm communicator/ s/context/xcontext/' \
+ -i test/unit/plugins/provisioners/ansible/provisioner_test.rb || die
+}
+
+all_ruby_install() {
+ all_fakegem_install
+
+ newbashcomp contrib/bash/completion.sh ${PN}
+
+ # provide executable similar to upstream:
+ # https://github.com/hashicorp/vagrant-installers/blob/master/substrate/modules/vagrant_installer/templates/vagrant.erb
+ dobin "${PN}"
+
+ # directory for plugins.json
+ keepdir /var/lib/vagrant
+
+ insinto /usr/share/vim/vimfiles/syntax/
+ doins contrib/vim/vagrantfile.vim
+
+ optfeature_header "Optional emulation/container backends:"
+ optfeature "VirtualBox support" app-emulation/virtualbox
+ optfeature "Docker support" app-containers/docker
+}
diff --git a/app-emulation/vagrant/vagrant-2.4.9-r1.ebuild b/app-emulation/vagrant/vagrant-2.4.9-r1.ebuild
new file mode 100644
index 000000000000..d68c3ae99bc8
--- /dev/null
+++ b/app-emulation/vagrant/vagrant-2.4.9-r1.ebuild
@@ -0,0 +1,125 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+USE_RUBY="ruby31 ruby32 ruby33 ruby34"
+
+RUBY_FAKEGEM_EXTENSIONS=(ext/vagrant/vagrant_ssl/extconf.rb)
+RUBY_FAKEGEM_EXTRADOC="CHANGELOG.md README.md"
+RUBY_FAKEGEM_GEMSPEC="vagrant.gemspec"
+RUBY_FAKEGEM_EXTRAINSTALL="keys plugins templates version.txt"
+RUBY_FAKEGEM_TASK_DOC=""
+RUBY_FAKEGEM_TASK_TEST=test:unit
+RUBY_FAKEGEM_RECIPE_TEST=rake
+
+inherit bash-completion-r1 optfeature ruby-fakegem
+
+DESCRIPTION="A tool for building and distributing development environments"
+HOMEPAGE="https://vagrantup.com/"
+SRC_URI="https://github.com/hashicorp/vagrant/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+
+LICENSE="BUSL-1.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ ${RDEPEND}
+ app-arch/libarchive
+ net-misc/curl
+"
+
+ruby_add_rdepend "
+ >=dev-ruby/bcrypt_pbkdf-1.1.0
+ >=dev-ruby/childprocess-5.1
+ >=dev-ruby/csv-3.3
+ >=dev-ruby/ed25519-1.3.0
+ dev-ruby/erubi
+ >=dev-ruby/googleapis-common-protos-types-1.3
+ >=dev-ruby/hashicorp-checkpoint-0.1.5
+ >=dev-ruby/i18n-1.12:1
+ >=dev-ruby/listen-3.7
+ >=dev-ruby/log4r-1.1.9
+ <dev-ruby/log4r-1.1.11
+ >=dev-ruby/logger-1.0
+ >=dev-ruby/mime-types-3.3:*
+ >=dev-ruby/net-ftp-0.2.0
+ >=dev-ruby/net-ssh-7.0.0
+ >=dev-ruby/net-sftp-4.0.0
+ >=dev-ruby/net-scp-4.0.0
+ >=dev-ruby/ostruct-0.6.0
+ >=dev-ruby/rexml-3.2.0
+ >=dev-ruby/rubyzip-2.3.2
+ >=dev-ruby/vagrant_cloud-3.1.2
+ >=dev-ruby/ipaddr-1.2.4
+"
+
+ruby_add_bdepend "
+ >=dev-ruby/rake-13.0.0
+ test? (
+ ~app-emulation/vagrant-${PV}
+ dev-ruby/fake_ftp
+ dev-ruby/rake-compiler
+ >=dev-ruby/rspec-3.11
+ >=dev-ruby/rspec-its-1.3.0
+ >=dev-ruby/webrick-1.7.0
+ )
+"
+
+all_ruby_prepare() {
+ # remove bundler support
+ sed -e '/[Bb]undler/ s:^:#:' \
+ -e '/extensiontask/ s:^:#:' \
+ -e '/ExtensionTask/,/^end/ s:^:#:' \
+ -i Rakefile || die
+ rm Gemfile || die
+ rm tasks/bundler.rake || die
+
+ sed -e ':rake\|rspec: s:~>:>=:' \
+ -e ':bcrypt_pbkdf\|hashicorp-checkpoint\|i18n\|listen\|net-ssh\|net-scp\|net-sftp\|childprocess: s:~>:>=:' \
+ -e '/fake_ftp/ s:^#*:#:' \
+ -e '/wdm/ s:^#*:#:' \
+ -e '/winrm/ s:^#*:#:' \
+ -e '/rb-kqueue/ s:^#*:#:' \
+ -e '/ruby_dep/ s:^#*:#:' \
+ -i ${PN}.gemspec || die
+
+ sed -e "s/@VAGRANT_VERSION@/${PV}/g" \
+ -e "s/@RUBY_VERSIONS@/$(ruby_get_use_implementations)/g" \
+ "${FILESDIR}/${PN}.in" > "${PN}" || die
+
+ sed -i -e 's/format documentation/format progress/' tasks/test.rake || die
+
+ # Avoid tests confused by the environment
+ rm -f test/unit/vagrant/util/env_test.rb || die
+
+ # Avoid tests for Windows-specific components
+ rm -rf test/unit/plugins/communicators/winrm || die
+ sed -e '/eager loads WinRM/askip "Windows component"' \
+ -e '/should return the specified communicator if given/askip "Windows component"' \
+ -i test/unit/vagrant/machine_test.rb || die
+ sed -e '/with winrm communicator/ s/context/xcontext/' \
+ -i test/unit/plugins/provisioners/ansible/provisioner_test.rb || die
+}
+
+all_ruby_install() {
+ all_fakegem_install
+
+ newbashcomp contrib/bash/completion.sh ${PN}
+
+ # provide executable similar to upstream:
+ # https://github.com/hashicorp/vagrant-installers/blob/master/substrate/modules/vagrant_installer/templates/vagrant.erb
+ dobin "${PN}"
+
+ # directory for plugins.json
+ keepdir /var/lib/vagrant
+
+ insinto /usr/share/vim/vimfiles/syntax/
+ doins contrib/vim/vagrantfile.vim
+
+ optfeature_header "Optional emulation/container backends:"
+ optfeature "VirtualBox support" app-emulation/virtualbox
+ optfeature "Docker support" app-containers/docker
+}
diff --git a/app-emulation/vendor-reset/Manifest b/app-emulation/vendor-reset/Manifest
new file mode 100644
index 000000000000..d6e8905b5c12
--- /dev/null
+++ b/app-emulation/vendor-reset/Manifest
@@ -0,0 +1 @@
+DIST vendor-reset-0.1.1_pre20221205.tar.gz 12725340 BLAKE2B 5f2e34b74e83c8f48daad8d2c714872ab23f50cb0fad6b5c7920476b43c2fbfcf5543e923c506dfb2d8c33846e8fdd08c7d20b30fcc053f2c191d813872b44c5 SHA512 87a3c64d917e6a44308115480f14956f65a9f84fef70de29feebe3fcd7d522b59a3dbcb5fc9a340ac9b7a3612a29ed696b4f52648f86a0d877b915c97c5a4cc9
diff --git a/app-emulation/vendor-reset/files/modload.conf b/app-emulation/vendor-reset/files/modload.conf
new file mode 100644
index 000000000000..ff75088aa8fe
--- /dev/null
+++ b/app-emulation/vendor-reset/files/modload.conf
@@ -0,0 +1 @@
+vendor-reset
diff --git a/app-emulation/vendor-reset/files/vendor-reset-0.1.1-allow-correct-compilation-with-clang.patch b/app-emulation/vendor-reset/files/vendor-reset-0.1.1-allow-correct-compilation-with-clang.patch
new file mode 100644
index 000000000000..32ae298d4049
--- /dev/null
+++ b/app-emulation/vendor-reset/files/vendor-reset-0.1.1-allow-correct-compilation-with-clang.patch
@@ -0,0 +1,23 @@
+https://github.com/gnif/vendor-reset/commit/084881c6e9e11bdadaf05798e669568848e698a3.patch
+From: =?UTF-8?q?Marcus=20K=C3=B6hler?= <khler.marcus@gmail.com>
+Date: Mon, 25 Dec 2023 21:43:41 +0100
+Subject: [PATCH] Allow correct compilation with Clang/LLVM
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Marcus Köhler <khler.marcus@gmail.com>
+--- a/src/hook.c
++++ b/src/hook.c
+@@ -30,7 +30,11 @@ static bool hook_installed = false;
+ static int (*orig_pci_dev_specific_reset)(struct pci_dev *dev, int probe);
+
+ /* TCO breaks the hook, we must disable it for this function */
++#if defined(__GNUC__) && !defined(__llvm__)
+ __attribute__((optimize("-fno-optimize-sibling-calls")))
++#elif defined(__clang__)
++__attribute__((disable_tail_calls))
++#endif
+ static int hooked_pci_dev_specific_reset(struct pci_dev *dev, int probe)
+ {
+ int ret;
diff --git a/app-emulation/vendor-reset/files/vendor-reset-0.1.1-fix-build-on-kernel-6.8.patch b/app-emulation/vendor-reset/files/vendor-reset-0.1.1-fix-build-on-kernel-6.8.patch
new file mode 100644
index 000000000000..d99212c9ee27
--- /dev/null
+++ b/app-emulation/vendor-reset/files/vendor-reset-0.1.1-fix-build-on-kernel-6.8.patch
@@ -0,0 +1,35 @@
+https://github.com/gnif/vendor-reset/commit/f72619e468846e0bab4426f5e71b069f88c33a11.patch
+From: Sakari <20642596+sakarie9@users.noreply.github.com>
+Date: Thu, 14 Mar 2024 10:59:15 +0800
+Subject: [PATCH] Fix build on kernel 6.8+
+
+--- a/src/amd/amdgpu/atom.c
++++ b/src/amd/amdgpu/atom.c
+@@ -28,6 +28,7 @@
+ #include <linux/sched.h>
+ #include <linux/slab.h>
+ #include <linux/delay.h>
++#include <linux/version.h>
+ #include <asm/unaligned.h>
+
+ //#include <drm/drm_util.h>
+@@ -39,6 +40,10 @@
+ #include "atom-names.h"
+ #include "atom-bits.h"
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0)
++#define strscpy strlcpy
++#endif
++
+ #define ATOM_COND_ABOVE 0
+ #define ATOM_COND_ABOVEOREQUAL 1
+ #define ATOM_COND_ALWAYS 2
+@@ -1424,7 +1429,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
+ if (*str != '\0')
+ {
+ pr_info("ATOM BIOS: %s\n", str);
+- strlcpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
++ strscpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
+ }
+
+ return ctx;
diff --git a/app-emulation/vendor-reset/metadata.xml b/app-emulation/vendor-reset/metadata.xml
new file mode 100644
index 000000000000..66c1cd8c0da6
--- /dev/null
+++ b/app-emulation/vendor-reset/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>sarnex@gentoo.org</email>
+ <name>Nick Sarnie</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r1.ebuild b/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r1.ebuild
new file mode 100644
index 000000000000..43bacc3c3ea3
--- /dev/null
+++ b/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r1.ebuild
@@ -0,0 +1,39 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-mod-r1
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/gnif/vendor-reset.git"
+ EGIT_BRANCH="master"
+ inherit git-r3
+else
+ KEYWORDS="~amd64"
+ EGIT_COMMIT="4b466e92a2d9f76ce1082cde982c7be0be91e248"
+ SRC_URI="https://github.com/gnif/vendor-reset/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+fi
+
+DESCRIPTION="Linux kernel vendor specific hardware reset module"
+HOMEPAGE="https://github.com/gnif/vendor-reset"
+
+LICENSE="GPL-2"
+SLOT="0"
+
+S="${WORKDIR}/${PN}-${EGIT_COMMIT}"
+
+CONFIG_CHECK="FTRACE KPROBES PCI_QUIRKS KALLSYMS FUNCTION_TRACER"
+
+src_compile() {
+ local modlist=( vendor-reset )
+ local modargs=( KDIR="${KV_OUT_DIR}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modules-load.d/
+ newins "${FILESDIR}"/modload.conf vendor-reset.conf
+}
diff --git a/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r2.ebuild b/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r2.ebuild
new file mode 100644
index 000000000000..f34969845915
--- /dev/null
+++ b/app-emulation/vendor-reset/vendor-reset-0.1.1_pre20221205-r2.ebuild
@@ -0,0 +1,44 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-mod-r1
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/gnif/vendor-reset.git"
+ EGIT_BRANCH="master"
+ inherit git-r3
+else
+ KEYWORDS="~amd64"
+ EGIT_COMMIT="4b466e92a2d9f76ce1082cde982c7be0be91e248"
+ SRC_URI="https://github.com/gnif/vendor-reset/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+fi
+
+DESCRIPTION="Linux kernel vendor specific hardware reset module"
+HOMEPAGE="https://github.com/gnif/vendor-reset"
+
+LICENSE="GPL-2"
+SLOT="0"
+
+S="${WORKDIR}/${PN}-${EGIT_COMMIT}"
+
+CONFIG_CHECK="FTRACE KPROBES PCI_QUIRKS KALLSYMS FUNCTION_TRACER"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.1.1-allow-correct-compilation-with-clang.patch"
+ "${FILESDIR}/${PN}-0.1.1-fix-build-on-kernel-6.8.patch"
+)
+
+src_compile() {
+ local modlist=( vendor-reset )
+ local modargs=( KDIR="${KV_OUT_DIR}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modules-load.d/
+ newins "${FILESDIR}"/modload.conf vendor-reset.conf
+}
diff --git a/app-emulation/vendor-reset/vendor-reset-9999.ebuild b/app-emulation/vendor-reset/vendor-reset-9999.ebuild
new file mode 100644
index 000000000000..2723fba58a32
--- /dev/null
+++ b/app-emulation/vendor-reset/vendor-reset-9999.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-mod-r1
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/gnif/vendor-reset.git"
+ EGIT_BRANCH="master"
+ inherit git-r3
+else
+ KEYWORDS="~amd64"
+ EGIT_COMMIT="4b466e92a2d9f76ce1082cde982c7be0be91e248"
+ SRC_URI="https://github.com/gnif/vendor-reset/archive/${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz"
+fi
+
+DESCRIPTION="Linux kernel vendor specific hardware reset module"
+HOMEPAGE="https://github.com/gnif/vendor-reset"
+
+LICENSE="GPL-2"
+SLOT="0"
+
+CONFIG_CHECK="FTRACE KPROBES PCI_QUIRKS KALLSYMS FUNCTION_TRACER"
+
+src_compile() {
+ local modlist=( vendor-reset )
+ local modargs=( KDIR="${KV_OUT_DIR}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modules-load.d/
+ newins "${FILESDIR}"/modload.conf vendor-reset.conf
+}
diff --git a/app-emulation/vice/Manifest b/app-emulation/vice/Manifest
new file mode 100644
index 000000000000..4bf33815ea7e
--- /dev/null
+++ b/app-emulation/vice/Manifest
@@ -0,0 +1 @@
+DIST vice-3.10.tar.gz 14366175 BLAKE2B d41bfe4ed5213f4fff345f195de60e95d87b9c5901e89ff31d221841e51358a55e1f7fecae5afae0e71439d5a8da7411e632bc42b582e5b17b72dba07ae2cadd SHA512 5cddbb09080d39fad7690e8c178af40a5834377e201252c112816e2a9af5b4afd1ed090fdd19217dd36c8d18f7c633fda1ee6efc1322334bbe13ba4866435f97
diff --git a/app-emulation/vice/files/vice-3.10-mpg123-without-curl.patch b/app-emulation/vice/files/vice-3.10-mpg123-without-curl.patch
new file mode 100644
index 000000000000..2173a05be019
--- /dev/null
+++ b/app-emulation/vice/files/vice-3.10-mpg123-without-curl.patch
@@ -0,0 +1,169 @@
+https://bugs.gentoo.org/970962
+https://sourceforge.net/p/vice-emu/code/45964/
+--- a/src/arch/gtk3/widgets/settings_userport.c
++++ b/src/arch/gtk3/widgets/settings_userport.c
+@@ -442,81 +441,0 @@
+-#if defined(USE_MPG123) && defined (HAVE_GLOB_H)
+-/* FunMP3 path selection widget */
+-#include "mainlock.h"
+-
+-/** \brief Callback for the directory-select dialog
+- *
+- * \param[in] dialog directory-select dialog
+- * \param[in] filename filename (NULL if canceled)
+- * \param[in] entry entry box for the filename
+- */
+-static void funmp3dir_browse_callback(GtkDialog *dialog, gchar *filename, gpointer entry)
+-{
+- if (filename != NULL) {
+- vice_gtk3_resource_entry_set(GTK_WIDGET(entry), filename);
+- g_free(filename);
+- }
+- gtk_widget_destroy(GTK_WIDGET(dialog));
+-}
+-
+-/** \brief Handler for the 'clicked' event of the FunMP3 directory browse button
+- *
+- * \param[in] button FunMP3 directory browse button (unused)
+- * \param[in] entry FunMP3 directory text entry
+- */
+-static void on_funmp3dir_browse_clicked(GtkWidget *button, gpointer entry)
+-{
+- GtkWidget *dialog;
+-
+- mainlock_assert_is_not_vice_thread();
+-
+- dialog = vice_gtk3_select_directory_dialog("Select FunMP3 directory",
+- NULL,
+- TRUE,
+- NULL,
+- funmp3dir_browse_callback,
+- entry);
+- gtk_widget_show_all(dialog);
+-}
+-
+-/** \brief Create FunMP3 path selection entry widget
+- *
+- */
+-static GtkWidget *create_funmp3dir_entry_widget(void)
+-{
+- GtkWidget *entry;
+- entry = vice_gtk3_resource_entry_new("FunMP3Dir");
+- gtk_widget_set_tooltip_text(entry,
+- "Select the host directory for MP3 files");
+- gtk_widget_set_hexpand(entry, TRUE);
+- return entry;
+-}
+-
+-/** \brief Create FunMP3 path selection widget
+- *
+- */
+-static GtkWidget *create_funmp3dir_widget(void)
+-{
+- GtkWidget *grid;
+- GtkWidget *entry;
+- GtkWidget *label;
+- GtkWidget *browse;
+-
+- grid = vice_gtk3_grid_new_spaced(8, 0);
+-
+- label = gtk_label_new("FunMP3 directory");
+- gtk_widget_set_halign(label, GTK_ALIGN_START);
+- entry = create_funmp3dir_entry_widget();
+- browse = gtk_button_new_with_label("Browse ...");
+- g_signal_connect_unlocked(browse,
+- "clicked",
+- G_CALLBACK(on_funmp3dir_browse_clicked),
+- (gpointer)entry);
+- gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 1, 1);
+- gtk_grid_attach(GTK_GRID(grid), entry, 1, 1, 1, 1);
+- gtk_grid_attach(GTK_GRID(grid), browse, 2, 1, 1, 1);
+-
+- gtk_widget_show_all(grid);
+- return grid;
+-}
+-
+-#endif /* MPG123 && HAVE_GLOB_H */
+@@ -684,0 +604,82 @@
++
++#if defined(USE_MPG123) && defined (HAVE_GLOB_H)
++/* FunMP3 path selection widget */
++#include "mainlock.h"
++
++/** \brief Callback for the directory-select dialog
++ *
++ * \param[in] dialog directory-select dialog
++ * \param[in] filename filename (NULL if canceled)
++ * \param[in] entry entry box for the filename
++ */
++static void funmp3dir_browse_callback(GtkDialog *dialog, gchar *filename, gpointer entry)
++{
++ if (filename != NULL) {
++ vice_gtk3_resource_entry_set(GTK_WIDGET(entry), filename);
++ g_free(filename);
++ }
++ gtk_widget_destroy(GTK_WIDGET(dialog));
++}
++
++/** \brief Handler for the 'clicked' event of the FunMP3 directory browse button
++ *
++ * \param[in] button FunMP3 directory browse button (unused)
++ * \param[in] entry FunMP3 directory text entry
++ */
++static void on_funmp3dir_browse_clicked(GtkWidget *button, gpointer entry)
++{
++ GtkWidget *dialog;
++
++ mainlock_assert_is_not_vice_thread();
++
++ dialog = vice_gtk3_select_directory_dialog("Select FunMP3 directory",
++ NULL,
++ TRUE,
++ NULL,
++ funmp3dir_browse_callback,
++ entry);
++ gtk_widget_show_all(dialog);
++}
++
++/** \brief Create FunMP3 path selection entry widget
++ *
++ */
++static GtkWidget *create_funmp3dir_entry_widget(void)
++{
++ GtkWidget *entry;
++ entry = vice_gtk3_resource_entry_new("FunMP3Dir");
++ gtk_widget_set_tooltip_text(entry,
++ "Select the host directory for MP3 files");
++ gtk_widget_set_hexpand(entry, TRUE);
++ return entry;
++}
++
++/** \brief Create FunMP3 path selection widget
++ *
++ */
++static GtkWidget *create_funmp3dir_widget(void)
++{
++ GtkWidget *grid;
++ GtkWidget *entry;
++ GtkWidget *label;
++ GtkWidget *browse;
++
++ grid = vice_gtk3_grid_new_spaced(8, 0);
++
++ label = gtk_label_new("FunMP3 directory");
++ gtk_widget_set_halign(label, GTK_ALIGN_START);
++ entry = create_funmp3dir_entry_widget();
++ browse = gtk_button_new_with_label("Browse ...");
++ g_signal_connect_unlocked(browse,
++ "clicked",
++ G_CALLBACK(on_funmp3dir_browse_clicked),
++ (gpointer)entry);
++ gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 1, 1);
++ gtk_grid_attach(GTK_GRID(grid), entry, 1, 1, 1, 1);
++ gtk_grid_attach(GTK_GRID(grid), browse, 2, 1, 1, 1);
++
++ gtk_widget_show_all(grid);
++ return grid;
++}
++
++#endif /* MPG123 && HAVE_GLOB_H */
diff --git a/app-emulation/vice/metadata.xml b/app-emulation/vice/metadata.xml
new file mode 100644
index 000000000000..9c58c9036e49
--- /dev/null
+++ b/app-emulation/vice/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>games@gentoo.org</email>
+ <name>Gentoo Games Project</name>
+ </maintainer>
+ <use>
+ <flag name="ethernet">Enable ethernet emulation</flag>
+ <flag name="headless">Include the headless variant of the emulator</flag>
+ <flag name="mpg123">Enable mp3@64 cartridge support</flag>
+ <flag name="parport">Enable parallel port SID support</flag>
+ <flag name="pci">Enable PCI device discovery using <pkg>sys-apps/pciutils</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/vice/vice-3.10.ebuild b/app-emulation/vice/vice-3.10.ebuild
new file mode 100644
index 000000000000..e7f67e4e1f4f
--- /dev/null
+++ b/app-emulation/vice/vice-3.10.ebuild
@@ -0,0 +1,203 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools multibuild toolchain-funcs xdg
+
+DESCRIPTION="Versatile Commodore Emulator"
+HOMEPAGE="https://vice-emu.sourceforge.io/"
+SRC_URI="https://downloads.sourceforge.net/vice-emu/releases/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="amd64 ~arm ~arm64 x86"
+IUSE="
+ alsa curl debug doc ethernet flac gif +gtk headless lame mpg123 ogg
+ openmp oss parport pci png portaudio pulseaudio sdl usb
+"
+REQUIRED_USE="|| ( gtk headless sdl )"
+
+RDEPEND="
+ virtual/zlib:=
+ virtual/libintl
+ alsa? ( media-libs/alsa-lib )
+ curl? ( net-misc/curl )
+ ethernet? (
+ net-libs/libpcap
+ sys-libs/libcap
+ )
+ flac? ( media-libs/flac:= )
+ gif? ( media-libs/giflib:= )
+ gtk? (
+ >=app-accessibility/at-spi2-core-2.46:2
+ dev-libs/glib:2
+ dev-libs/libevdev
+ media-libs/fontconfig:1.0
+ media-libs/glew:0=[-egl-only(-)]
+ media-libs/libglvnd[X]
+ x11-libs/cairo
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3[X]
+ x11-libs/libX11
+ x11-libs/pango
+ )
+ lame? ( media-sound/lame )
+ mpg123? ( media-sound/mpg123-base )
+ ogg? (
+ media-libs/libogg
+ media-libs/libvorbis
+ )
+ parport? ( sys-libs/libieee1284 )
+ pci? ( sys-apps/pciutils )
+ png? ( media-libs/libpng:= )
+ portaudio? ( media-libs/portaudio )
+ pulseaudio? ( media-libs/libpulse )
+ sdl? (
+ media-libs/libsdl2[video]
+ media-libs/sdl2-image
+ )
+ usb? ( dev-libs/libusb:1 )
+"
+DEPEND="
+ ${RDEPEND}
+ x11-base/xorg-proto
+"
+BDEPEND="
+ app-alternatives/awk
+ app-alternatives/lex
+ app-alternatives/yacc
+ app-arch/unzip
+ app-text/dos2unix
+ dev-embedded/xa
+ dev-lang/perl
+ sys-apps/texinfo
+ sys-devel/gettext
+ virtual/pkgconfig
+ doc? ( virtual/texi2dvi )
+ gtk? ( x11-misc/xdg-utils )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-mpg123-without-curl.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+pkg_setup() {
+ [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
+}
+
+src_prepare() {
+ default
+ eautoreconf
+
+ # strip the predefined C(XX)FLAGS
+ sed -Ei 's:(VICE_C(XX)?FLAGS=)"[^$]+":\1:' configure || die
+
+ MULTIBUILD_VARIANTS=(
+ $(usev headless)
+ $(usev sdl)
+ $(usev gtk) # build last, prefer its binaries if any duplicates
+ )
+
+ # debug build currently broken without copy sources
+ multibuild_copy_sources
+}
+
+src_configure() {
+ tc-export AR
+
+ multibuild_foreach_variant run_in_build_dir multibuild_src_configure
+}
+
+multibuild_src_configure() {
+ # append ".variant" to [xv]* binaries if building multiple variants
+ # except for gtk which always uses default names to match *.desktop
+ local xform
+ [[ ${#MULTIBUILD_VARIANTS[@]} -gt 1 && ${MULTIBUILD_VARIANT} != gtk ]] &&
+ xform="/^[xv]/s/\$/.${MULTIBUILD_VARIANT}/"
+
+ vice-multi_enable() {
+ if [[ ${MULTIBUILD_VARIANT} == ${1} ]]; then
+ echo --enable-${2}
+ else
+ echo --disable-${2}
+ fi
+ }
+
+ local econfargs=(
+ "${xform+--program-transform-name=${xform}}"
+ $(vice-multi_enable gtk desktop-files)
+ $(vice-multi_enable gtk gtk3ui)
+ $(vice-multi_enable headless headlessui)
+ $(vice-multi_enable sdl sdl2ui)
+ $(usex debug $(vice-multi_enable gtk debug-gtk3ui) --disable-debug-gtk3ui)
+ $(use_enable debug)
+ $(use_enable doc pdf-docs)
+ $(use_enable ethernet)
+ $(use_enable openmp)
+ $(use_enable parport parsid)
+ $(usev !usb enable_usbsid=no) # not setup properly in configure.ac atm
+ $(use_with alsa)
+ $(use_with curl libcurl)
+ $(use_with flac)
+ $(use_with gif)
+ $(use_with lame)
+ $(use_with lame static-lame) # disables dlopen, uses shared still
+ $(use_with mpg123)
+ $(use_with ogg vorbis)
+ $(use_with oss)
+ $(use_with parport libieee1284)
+ $(use_with png)
+ $(use_with portaudio)
+ $(use_with pulseaudio pulse)
+ $(usex alsa --enable-midi $(use_enable oss midi))
+ $(usev !pci ac_cv_header_pci_pci_h=no)
+ --disable-arch
+ --disable-sdl1ui
+ ac_cv_lib_ungif_EGifPutLine=no # ensure use giflib, not ungif
+ )
+
+ econf "${econfargs[@]}"
+}
+
+src_compile() {
+ # bug #924116 wrt SHELL
+ multibuild_foreach_variant run_in_build_dir emake SHELL="${BASH}"
+}
+
+src_install() {
+ # make xdg-icon-resource use ED, theme directory needs to pre-exist
+ # TODO: check if still needed on bump, handling may change,
+ # (see https://sourceforge.net/p/vice-emu/bugs/2127/)
+ dodir /usr/share/icons/hicolor
+ local -x XDG_UTILS_INSTALL_MODE=system
+ local -x XDG_DATA_DIRS=${ED}/usr/share
+
+ multibuild_foreach_variant run_in_build_dir default
+
+ # x64 symlink does not respect --program-transform-name (bug #955032)
+ if (( ${#MULTIBUILD_VARIANTS[@]} > 1 )); then
+ use gtk || rm -- "${ED}"/usr/bin/x64 || die
+ use sdl && dosym x64sc.sdl /usr/bin/x64.sdl
+ use headless && dosym x64sc.headless /usr/bin/x64.headless
+ fi
+
+ rm -f -- "${ED}"/usr/share/applications/*.cache || die
+
+ vice-install_extras() {
+ docinto html
+ dodoc doc/html/*.{html,css}
+ dodoc -r doc/html/images
+
+ insinto /usr/share/vim/vimfiles/ftdetect
+ doins doc/vim/ftdetect/*.vim
+
+ insinto /usr/share/vim/vimfiles/syntax
+ doins doc/vim/syntax/*.vim
+ }
+ multibuild_for_best_variant run_in_build_dir vice-install_extras
+}
diff --git a/app-emulation/virt-firmware/Manifest b/app-emulation/virt-firmware/Manifest
new file mode 100644
index 000000000000..78c1d9c880fb
--- /dev/null
+++ b/app-emulation/virt-firmware/Manifest
@@ -0,0 +1,4 @@
+DIST virt_firmware-25.10.tar.gz 137685 BLAKE2B d1ab74eae907048549e2129aa256597752c5219110606bd623e0e6f0b90f88dd38226d8b7a992fe05ef49ab8c4ddf3a917184051715ebd6224cdbda4303754a5 SHA512 2fdf609f0ba335d6064cb595c5e4b465b0a148f258f87292f0b82d1aa653f5bfd1f9b851d36f1c46a94fb8be36d6cd6c5c3f5d633e86d34b8f6159186f872908
+DIST virt_firmware-25.12.tar.gz 143352 BLAKE2B f456a444e529ed7abf9fbba4491b56b1b1f76bf9c9d76c3a82e1c3a716b88c952bd494330680a4b21576a792a516e69b74203126dc4bac688e083185f1589924 SHA512 faa2f8abd0f8f633f2c620a2b7fd6ff91809e2a546b01088154e48d5151426f5b7b6134de0325664028419fe50376214b575f9da25095d2522edb814024ff8dc
+DIST virt_firmware-26.2.tar.gz 143457 BLAKE2B fd0b977539af0cde4059e67e86ddf97c6dcffc3f7b1cf5975d181dd51b698334c8b22b2c6a951da2e39327a0dd43b44d03a05d0ff56be6defb4a48f872ac4e80 SHA512 6e7fa94009da095e15880b6be850b130ea3097394572c01fe0404b6d4bc11117b9ae730ca43408cb02b5ae9dc2671ef5635520dd2c8776bb2b6b68c8246d06c7
+DIST virt_firmware-26.5.4.tar.gz 151249 BLAKE2B 05724cb57e33ef4d30cf987bdc7cf71b49be0b32437b27cec5fb43d39fe9fd0456f104da3ecac05e251f8249a974f18286f162f041247de2267436c993864be9 SHA512 5a61d4cf9e4aa025a12eab17f5f61ada197a7fc5c18d1ecdf0a6282d26cec8d261112a88ea24fbcdfd4ef69421667225ad8df1645cd30a1c1c374c8475e5c532
diff --git a/app-emulation/virt-firmware/files/kernel-bootcfg-boot-successful b/app-emulation/virt-firmware/files/kernel-bootcfg-boot-successful
new file mode 100644
index 000000000000..5c7ef1a79ccf
--- /dev/null
+++ b/app-emulation/virt-firmware/files/kernel-bootcfg-boot-successful
@@ -0,0 +1,9 @@
+#!/sbin/openrc-run
+# Copyright 2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+description="UKI Successful Boot"
+
+start() {
+ kernel-bootcfg --boot-successful --update-csv || return 1
+}
diff --git a/app-emulation/virt-firmware/metadata.xml b/app-emulation/virt-firmware/metadata.xml
new file mode 100644
index 000000000000..392c7cb93cd8
--- /dev/null
+++ b/app-emulation/virt-firmware/metadata.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>nowa@gentoo.org</email>
+ <name>Nowa Ammerlaan</name>
+ </maintainer>
+ <stabilize-allarches />
+ <longdescription lang="en">
+ This is a small collection of tools for edk2 firmware images. They
+ support decoding and printing the content of firmware volumes.
+ Variable stores (OVMF_VARS.fd) can be modified, for example to enroll
+ secure boot certificates.
+ </longdescription>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virt-firmware/virt-firmware-25.10.ebuild b/app-emulation/virt-firmware/virt-firmware-25.10.ebuild
new file mode 100644
index 000000000000..e849d1fe4aab
--- /dev/null
+++ b/app-emulation/virt-firmware/virt-firmware-25.10.ebuild
@@ -0,0 +1,55 @@
+# Copyright 2024-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 optfeature pypi systemd
+
+DESCRIPTION="Tools for ovmf/armvirt firmware volumes"
+HOMEPAGE="
+ https://gitlab.com/kraxel/virt-firmware
+ https://pypi.org/project/virt-firmware/
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~riscv ~x86"
+
+RDEPEND="
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/pefile[${PYTHON_USEDEP}]
+"
+
+# Need systemd-detect-virt
+BDEPEND="
+ test? (
+ sys-apps/systemd
+ )
+"
+
+distutils_enable_tests unittest
+
+python_test() {
+ eunittest tests
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ doman man/*.1
+
+ doinitd "${FILESDIR}/kernel-bootcfg-boot-successful"
+ systemd_dounit systemd/kernel-bootcfg-boot-successful.service
+
+ # Use our own provided by sys-kernel/installkernel[efistub,systemd]
+ #exeinto /usr/lib/kernel/install.d
+ #doexe systemd/99-uki-uefi-setup.install
+}
+
+pkg_postinst() {
+ optfeature "automatically updating UEFI configuration on each kernel installation or removal" \
+ "sys-kernel/installkernel[systemd,efistub]"
+}
diff --git a/app-emulation/virt-firmware/virt-firmware-25.12.ebuild b/app-emulation/virt-firmware/virt-firmware-25.12.ebuild
new file mode 100644
index 000000000000..6dc08c1149c8
--- /dev/null
+++ b/app-emulation/virt-firmware/virt-firmware-25.12.ebuild
@@ -0,0 +1,55 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 optfeature pypi systemd
+
+DESCRIPTION="Tools for ovmf/armvirt firmware volumes"
+HOMEPAGE="
+ https://gitlab.com/kraxel/virt-firmware
+ https://pypi.org/project/virt-firmware/
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~riscv ~x86"
+
+RDEPEND="
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/pefile[${PYTHON_USEDEP}]
+"
+
+# Need systemd-detect-virt
+BDEPEND="
+ test? (
+ sys-apps/systemd
+ )
+"
+
+distutils_enable_tests unittest
+
+python_test() {
+ eunittest tests
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ doman man/*.1
+
+ doinitd "${FILESDIR}/kernel-bootcfg-boot-successful"
+ systemd_dounit systemd/kernel-bootcfg-boot-successful.service
+
+ # Use our own provided by sys-kernel/installkernel[efistub,systemd]
+ #exeinto /usr/lib/kernel/install.d
+ #doexe systemd/99-uki-uefi-setup.install
+}
+
+pkg_postinst() {
+ optfeature "automatically updating UEFI configuration on each kernel installation or removal" \
+ "sys-kernel/installkernel[systemd,efistub]"
+}
diff --git a/app-emulation/virt-firmware/virt-firmware-26.2.ebuild b/app-emulation/virt-firmware/virt-firmware-26.2.ebuild
new file mode 100644
index 000000000000..cb805df341de
--- /dev/null
+++ b/app-emulation/virt-firmware/virt-firmware-26.2.ebuild
@@ -0,0 +1,55 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 optfeature pypi systemd
+
+DESCRIPTION="Tools for ovmf/armvirt firmware volumes"
+HOMEPAGE="
+ https://gitlab.com/kraxel/virt-firmware
+ https://pypi.org/project/virt-firmware/
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~loong ~riscv x86"
+
+RDEPEND="
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/pefile[${PYTHON_USEDEP}]
+"
+
+# Need systemd-detect-virt
+BDEPEND="
+ test? (
+ sys-apps/systemd
+ )
+"
+
+distutils_enable_tests unittest
+
+python_test() {
+ eunittest tests
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ doman man/*.1
+
+ doinitd "${FILESDIR}/kernel-bootcfg-boot-successful"
+ systemd_dounit systemd/kernel-bootcfg-boot-successful.service
+
+ # Use our own provided by sys-kernel/installkernel[efistub,systemd]
+ #exeinto /usr/lib/kernel/install.d
+ #doexe systemd/99-uki-uefi-setup.install
+}
+
+pkg_postinst() {
+ optfeature "automatically updating UEFI configuration on each kernel installation or removal" \
+ "sys-kernel/installkernel[systemd,efistub]"
+}
diff --git a/app-emulation/virt-firmware/virt-firmware-26.5.4.ebuild b/app-emulation/virt-firmware/virt-firmware-26.5.4.ebuild
new file mode 100644
index 000000000000..3cc2929227a1
--- /dev/null
+++ b/app-emulation/virt-firmware/virt-firmware-26.5.4.ebuild
@@ -0,0 +1,65 @@
+# Copyright 2024-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+DISTUTILS_USE_PEP517=setuptools
+
+inherit distutils-r1 optfeature pypi systemd
+
+DESCRIPTION="Tools for ovmf/armvirt firmware volumes"
+HOMEPAGE="
+ https://gitlab.com/kraxel/virt-firmware
+ https://pypi.org/project/virt-firmware/
+"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~riscv ~x86"
+
+RDEPEND="
+ dev-python/cryptography[${PYTHON_USEDEP}]
+ dev-python/pefile[${PYTHON_USEDEP}]
+ dev-python/pyyaml[${PYTHON_USEDEP}]
+"
+
+# Need systemd-detect-virt
+BDEPEND="
+ test? (
+ sys-apps/systemd
+ )
+"
+
+distutils_enable_tests unittest
+
+python_prepare_all() {
+ # Requires crypt module removed in py3.13
+ rm virt/qemutest/cloudinit.py || die
+ sed -e '/from virt.qemutest.cloudinit import CloudInitISO/d' \
+ -i tests/tests.py || die
+
+ distutils-r1_python_prepare_all
+}
+
+python_test() {
+ eunittest tests
+}
+
+python_install_all() {
+ distutils-r1_python_install_all
+
+ doman man/*.1
+
+ doinitd "${FILESDIR}/kernel-bootcfg-boot-successful"
+ systemd_dounit systemd/kernel-bootcfg-boot-successful.service
+
+ # Use our own provided by sys-kernel/installkernel[efistub,systemd]
+ #exeinto /usr/lib/kernel/install.d
+ #doexe systemd/99-uki-uefi-setup.install
+}
+
+pkg_postinst() {
+ optfeature "automatically updating UEFI configuration on each kernel installation or removal" \
+ "sys-kernel/installkernel[systemd,efistub]"
+}
diff --git a/app-emulation/virt-manager/Manifest b/app-emulation/virt-manager/Manifest
new file mode 100644
index 000000000000..8dd5620b94ce
--- /dev/null
+++ b/app-emulation/virt-manager/Manifest
@@ -0,0 +1,3 @@
+DIST virt-manager-5.1.0-elementtree-fallback.patch.xz 8500 BLAKE2B 795444bda6a3d04c9d9e65a63c3acc0c40eae457f460941ac6c871f1a3f78795eb2e7838add13b4378aa9880184c523f9422f73d6b31af603cefeec38bc374ba SHA512 b3a36edb21348072023b237996d6ded5528a6474e1d15c291c17b43eed58b6beb963d90fb026b069b2283535416c6d5416d21cb8dade61960fe3ee903e8856a3
+DIST virt-manager-5.1.0.tar.xz 1489116 BLAKE2B 89c00eb1cb472e8ab1b97085404aefee00da4a0577f233945da36a44aeda53e11ee126d0357861cb0700b1b796f46775e3b233d9fa8ec77b058c8e286f498092 SHA512 6306500ae442a6ccb36d5f19bc26b0e32984ca145ee8d41a475e175ee4db6c0d253f0cf9d908c30e3269cf7aabdad4bbd30e84f3cd0477f233da1e43e0235e3c
+DIST virt-manager-5.1.0.tar.xz.asc 833 BLAKE2B 60f538b94c1d995c4b04be242f8bf659d1114afe4076b0bf515168f0998ab8df110731104795016b4530ead24783d804ecc887359c3021375ef637de9be0c588 SHA512 b74d8efcf2cec023b2044406c22aa4659e15e265f54a9d0f3501fa651dfd4a4f92f7a7ce690c7d7c0423dfbd01b1564a7e05be8fb4c9e990bfd2302ad2d53c3a
diff --git a/app-emulation/virt-manager/metadata.xml b/app-emulation/virt-manager/metadata.xml
new file mode 100644
index 000000000000..e1304f45449e
--- /dev/null
+++ b/app-emulation/virt-manager/metadata.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <name>Filip Kobierski</name>
+ <email>fkobi@pm.me</email>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="sasl">Enable connecting to SASL-enabled (e.g. Kerberos-protected) instances</flag>
+ </use>
+ <longdescription>
+ Virtual Machine Manager provides a graphical tool for managing libvirt virtual machines.
+ On Gentoo it supports KVM, Xen, and LXC backends.
+ It provides a GUI for not only running VMs but also managing their settings and monitoring usage statistics.
+ The software does not limit you to using the graphical tools though: it allows for editing the XML config files directly.
+ </longdescription>
+ <upstream>
+ <bugs-to>https://github.com/virt-manager/virt-manager/issues</bugs-to>
+ <changelog>https://github.com/virt-manager/virt-manager/blob/main/NEWS.md</changelog>
+ <doc>https://virt-manager.org/documentation.html</doc>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virt-manager/virt-manager-5.1.0-r1.ebuild b/app-emulation/virt-manager/virt-manager-5.1.0-r1.ebuild
new file mode 100644
index 000000000000..3b534356fa58
--- /dev/null
+++ b/app-emulation/virt-manager/virt-manager-5.1.0-r1.ebuild
@@ -0,0 +1,135 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit gnome2 python-single-r1 optfeature meson verify-sig
+
+DESCRIPTION="Desktop tool for managing libvirt virtual machines"
+HOMEPAGE="https://virt-manager.org https://github.com/virt-manager/virt-manager"
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/virt-manager/virt-manager.git"
+ EGIT_BRANCH="main"
+ SRC_URI=""
+ inherit git-r3
+else
+ SRC_URI="
+ https://releases.pagure.org/${PN}/${P}.tar.xz
+ https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-elementtree-fallback.patch.xz
+ verify-sig? ( https://releases.pagure.org/${PN}/${P}.tar.xz.asc )
+ "
+ KEYWORDS="amd64 arm64 ppc64 x86"
+fi
+
+LICENSE="CC0-1.0 GPL-2+" # appdata & source code
+SLOT="0"
+IUSE="gui policykit sasl verify-sig"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# https://github.com/virt-manager/virt-manager/blob/main/virt-manager.spec.in
+RDEPEND="
+ ${PYTHON_DEPS}
+ || ( dev-libs/libisoburn app-cdr/cdrtools )
+ >=app-emulation/libvirt-glib-0.0.9[introspection]
+ >=sys-libs/libosinfo-0.2.10[introspection]
+ $(python_gen_cond_dep '
+ dev-python/argcomplete[${PYTHON_USEDEP}]
+ >=dev-python/libvirt-python-6.10.0[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ ')
+ gui? (
+ gnome-base/dconf
+ >=net-libs/gtk-vnc-0.3.8[gtk3(+),introspection]
+ net-misc/spice-gtk[usbredir,gtk3,introspection,sasl?]
+ sys-apps/dbus
+ x11-libs/gtk+:3[introspection]
+ || (
+ x11-libs/gtksourceview:4[introspection]
+ x11-libs/gtksourceview:3.0[introspection]
+ )
+ x11-libs/vte:2.91[introspection]
+ policykit? ( sys-auth/polkit[introspection] )
+ )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-python/docutils
+ sys-devel/gettext
+ verify-sig? ( >=sec-keys/openpgp-keys-virt-manager-20250106 )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/virt-manager.asc
+
+DOCS=( {DESIGN,NEWS,README}.md )
+
+PATCHES=(
+ "${WORKDIR}"/${P}-elementtree-fallback.patch
+)
+
+src_unpack() {
+ if use verify-sig ; then
+ verify-sig_verify_detached "${DISTDIR}"/${P}.tar.xz{,.asc}
+ fi
+
+ unpack ${P}.tar.xz
+ unpack ${P}-elementtree-fallback.patch.xz
+}
+
+src_configure() {
+ local emesonargs=( # in upstream's order
+ -Dupdate-icon-cache=false
+ -Dcompile-schemas=false
+
+ # -Ddefault-graphics=spice # default
+ # we do not ship OpenVZ and bhyve does not work on linux
+ -Ddefault-hvs="['qemu','xen','lxc']"
+
+ # While in the past we did allow test suite to run, any errors from
+ # test_cli.py were ignored. Since that's where like 90% of tests actually
+ # lives, just disable tests (and do not drag additional dependencies).
+ -Dtests=disabled
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+
+ if ! use gui; then
+ rm -r "${ED}/usr/share/applications/${PN}.desktop" || die
+ rm -r "${ED}/usr/share/${PN}/icons/" || die
+ rm -r "${ED}/usr/share/${PN}/ui/" || die
+ rm -r "${ED}/usr/share/icons/" || die
+ rm -r "${ED}/usr/bin/${PN}" || die
+ fi
+
+ python_fix_shebang "${ED}"
+ python_optimize "${ED}"/usr/share/virt-manager/virt{inst,Manager}
+}
+
+pkg_postinst() {
+ use gui && gnome2_pkg_postinst
+
+ # OPTFEATURE SECTION
+ # keep app-emulation/* optfeatures on top and multiline on the bottom
+ if has_version app-emulation/qemu; then
+ optfeature "Full QEMU host support" app-emulation/qemu[usbredir,spice]
+ fi
+ if use policykit && has_version app-emulation/libvirt[-policykit]; then
+ optfeature "PolicyKit integration with local libvirt instance" \
+ app-emulation/libvirt[policykit]
+ fi
+ # it's possible this also requires libguestfs-appliance but it's a RDEPEND of libguestfs
+ optfeature "Inspection of guest filesystems" app-emulation/libguestfs[libvirt,python]
+
+ optfeature "SSH_ASKPASS program implementation" \
+ kde-plasma/ksshaskpass \
+ lxqt-base/lxqt-openssh-askpass \
+ net-misc/ssh-askpass-fullscreen \
+ net-misc/x11-ssh-askpass
+}
diff --git a/app-emulation/virt-manager/virt-manager-9999.ebuild b/app-emulation/virt-manager/virt-manager-9999.ebuild
new file mode 100644
index 000000000000..3cd77fb1e30e
--- /dev/null
+++ b/app-emulation/virt-manager/virt-manager-9999.ebuild
@@ -0,0 +1,121 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit gnome2 python-single-r1 optfeature meson verify-sig
+
+DESCRIPTION="Desktop tool for managing libvirt virtual machines"
+HOMEPAGE="https://virt-manager.org https://github.com/virt-manager/virt-manager"
+
+if [[ ${PV} == *9999* ]]; then
+ EGIT_REPO_URI="https://github.com/virt-manager/virt-manager.git"
+ EGIT_BRANCH="main"
+ SRC_URI=""
+ inherit git-r3
+else
+ SRC_URI="
+ https://releases.pagure.org/${PN}/${P}.tar.xz
+ verify-sig? ( https://releases.pagure.org/${PN}/${P}.tar.xz.asc )
+ "
+ KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+fi
+
+LICENSE="CC0-1.0 GPL-2+" # appdata & source code
+SLOT="0"
+IUSE="gui policykit sasl verify-sig"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+# https://github.com/virt-manager/virt-manager/blob/main/virt-manager.spec.in
+RDEPEND="
+ ${PYTHON_DEPS}
+ || ( dev-libs/libisoburn app-cdr/cdrtools )
+ >=app-emulation/libvirt-glib-0.0.9[introspection]
+ >=sys-libs/libosinfo-0.2.10[introspection]
+ $(python_gen_cond_dep '
+ dev-python/argcomplete[${PYTHON_USEDEP}]
+ >=dev-python/libvirt-python-6.10.0[${PYTHON_USEDEP}]
+ dev-python/pygobject:3[${PYTHON_USEDEP}]
+ dev-python/requests[${PYTHON_USEDEP}]
+ ')
+ gui? (
+ gnome-base/dconf
+ >=net-libs/gtk-vnc-0.3.8[gtk3(+),introspection]
+ net-misc/spice-gtk[usbredir,gtk3,introspection,sasl?]
+ sys-apps/dbus
+ x11-libs/gtk+:3[introspection]
+ || (
+ x11-libs/gtksourceview:4[introspection]
+ x11-libs/gtksourceview:3.0[introspection]
+ )
+ x11-libs/vte:2.91[introspection]
+ policykit? ( sys-auth/polkit[introspection] )
+ )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+ dev-python/docutils
+ sys-devel/gettext
+ verify-sig? ( >=sec-keys/openpgp-keys-virt-manager-20250106 )
+"
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/virt-manager.asc
+
+DOCS=( {DESIGN,NEWS,README}.md )
+
+src_configure() {
+ local emesonargs=( # in upstream's order
+ -Dupdate-icon-cache=false
+ -Dcompile-schemas=false
+
+ # -Ddefault-graphics=spice # default
+ # we do not ship OpenVZ and bhyve does not work on linux
+ -Ddefault-hvs="['qemu','xen','lxc']"
+
+ # While in the past we did allow test suite to run, any errors from
+ # test_cli.py were ignored. Since that's where like 90% of tests actually
+ # lives, just disable tests (and do not drag additional dependencies).
+ -Dtests=disabled
+ )
+
+ meson_src_configure
+}
+
+src_install() {
+ meson_src_install
+
+ if ! use gui; then
+ rm -r "${ED}/usr/share/applications/${PN}.desktop" || die
+ rm -r "${ED}/usr/share/${PN}/icons/" || die
+ rm -r "${ED}/usr/share/${PN}/ui/" || die
+ rm -r "${ED}/usr/share/icons/" || die
+ rm -r "${ED}/usr/bin/${PN}" || die
+ fi
+
+ python_fix_shebang "${ED}"
+ python_optimize "${ED}"/usr/share/virt-manager/virt{inst,Manager}
+}
+
+pkg_postinst() {
+ use gui && gnome2_pkg_postinst
+
+ # OPTFEATURE SECTION
+ # keep app-emulation/* optfeatures on top and multiline on the bottom
+ if has_version app-emulation/qemu; then
+ optfeature "Full QEMU host support" app-emulation/qemu[usbredir,spice]
+ fi
+ if use policykit && has_version app-emulation/libvirt[-policykit]; then
+ optfeature "PolicyKit integration with local libvirt instance" \
+ app-emulation/libvirt[policykit]
+ fi
+ # it's possible this also requires libguestfs-appliance but it's a RDEPEND of libguestfs
+ optfeature "Inspection of guest filesystems" app-emulation/libguestfs[libvirt,python]
+
+ optfeature "SSH_ASKPASS program implementation" \
+ kde-plasma/ksshaskpass \
+ lxqt-base/lxqt-openssh-askpass \
+ net-misc/ssh-askpass-fullscreen \
+ net-misc/x11-ssh-askpass
+}
diff --git a/app-emulation/virt-v2v/Manifest b/app-emulation/virt-v2v/Manifest
new file mode 100644
index 000000000000..1cf58c824628
--- /dev/null
+++ b/app-emulation/virt-v2v/Manifest
@@ -0,0 +1,2 @@
+DIST virt-v2v-2.10.0.tar.gz 7484900 BLAKE2B c9ffbbd1d64ab7efb0bdc50916d8b6be9f7230b931e498440a309d7d9f78c3b464c96096143c7da75d14955c5d9bc4fc426b26b0d1b75187674023fd3e7b28f2 SHA512 035f2181c1cc5f482e96d3e21b513b95939ca224d71ac6ad938842d5af5d60ef07db1600d2ccb609dc2042b1c74088f6f39ffbe595cb51e80278ecb50c314515
+DIST virt-v2v-2.6.0.tar.gz 7441540 BLAKE2B 60524a23e4f54ff4027863c2684cde66ca679d76dead971fa492ed90fdf16a6a75c7a6ebc047b1a38cf273bf29f1392f61cce33bc2c2137e710816f510d38062 SHA512 bc7ecf99e66bae057eaf5d7c82ca38ded4aa6ef8732544bc7079f2894c9c79542a415fede02cf8c2cb7e83756683457c705f816b1da57e5ca9565350b9376a73
diff --git a/app-emulation/virt-v2v/metadata.xml b/app-emulation/virt-v2v/metadata.xml
new file mode 100644
index 000000000000..ef8d59ed2a12
--- /dev/null
+++ b/app-emulation/virt-v2v/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>salah.coronya@gmail.com</email>
+ <name>Christopher Byrne</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virt-v2v/virt-v2v-2.10.0.ebuild b/app-emulation/virt-v2v/virt-v2v-2.10.0.ebuild
new file mode 100644
index 000000000000..3c0653437ca5
--- /dev/null
+++ b/app-emulation/virt-v2v/virt-v2v-2.10.0.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit bash-completion-r1
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tool to convert guests from foreign hypervisors to run on KVM"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${PN}/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+
+SLOT="0"
+if [ "${SD}" == "stable" ]; then
+ KEYWORDS="~amd64"
+fi
+IUSE="test"
+
+RESTRICT="!test? ( test )"
+
+DEPEND=">=app-emulation/libguestfs-1.56.0[ocaml]
+ dev-libs/json-c
+ dev-libs/libpcre2
+ dev-ml/libvirt-ocaml
+ sys-libs/libnbd[ocaml]
+ sys-libs/libosinfo
+ >=sys-block/nbdkit-1.42.0[curl,libssh,nbd,python]
+ virtual/libcrypt:="
+RDEPEND="${DEPEND}
+ app-arch/unzip
+ app-emulation/qemu"
+BDEPEND="dev-ml/findlib[ocamlopt]
+ dev-ml/ocaml-gettext[ocamlopt]
+ dev-ml/ocaml-gettext-stub[ocamlopt]
+ dev-perl/IPC-Run3
+ sys-devel/gettext
+ virtual/pkgconfig
+ test? ( dev-ml/ounit2[ocamlopt] )"
+
+src_test() {
+ # libguestfs tests won't work until the new environment is sourced
+ # Automatic testers (tinderboxes) probably won't do this, so do it ourselves if needed
+ if [[ -z "${LIBGUESTFS_PATH}" ]]; then
+ local -x $(<${BROOT}/etc/env.d/99libguestfs-appliance) || die
+ fi
+
+ # Can't reach libvirt from the sandbox
+ local -x SKIP_TEST_O_LIBVIRT_SH=1
+ # Requires libnbd "blkhash" support, which is not in portage and an automagic dependency
+ # of libnbd
+ local -x SKIP_TEST_O_OVIRT_UPLOAD_SH=1
+ local -x SKIP_TEST_VIRTIO_WIN_ISO_SH=1
+ local -x SKIP_TEST_WINDOWS_UEFI_CONVERSION_SH=1
+ # Requires 3rd party Windows binaries: rhsrvany.exe or pvvxsvc.exe
+ local -x SKIP_TEST_I_OVA_AS_ROOT_SH=1
+ # Requires supermin
+ local -x SKIP_TEST_O_OVIRT_SH=1
+ # Must be called explicilty even without above variable because
+ # emake check -n fails due to missing Windows headers.
+ emake check
+}
+
+src_install() {
+ default
+
+ dobashcomp bash/virt-v2v
+}
diff --git a/app-emulation/virt-v2v/virt-v2v-2.6.0.ebuild b/app-emulation/virt-v2v/virt-v2v-2.6.0.ebuild
new file mode 100644
index 000000000000..5f3118b0df92
--- /dev/null
+++ b/app-emulation/virt-v2v/virt-v2v-2.6.0.ebuild
@@ -0,0 +1,64 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit bash-completion-r1
+
+MY_PV_1="$(ver_cut 1-2)"
+MY_PV_2="$(ver_cut 2)"
+[[ $(( ${MY_PV_2} % 2 )) -eq 0 ]] && SD="stable" || SD="development"
+
+DESCRIPTION="Tool to convert guests from foreign hypervisors to run on KVM"
+HOMEPAGE="https://libguestfs.org/"
+SRC_URI="https://download.libguestfs.org/${PN}/${MY_PV_1}-${SD}/${P}.tar.gz"
+
+LICENSE="GPL-2"
+
+SLOT="0"
+if [ "${SD}" == "stable" ]; then
+ KEYWORDS="~amd64"
+fi
+
+IUSE="test"
+
+RESTRICT="!test? ( test )"
+
+DEPEND="app-emulation/libguestfs[ocaml]
+ dev-libs/jansson
+ dev-libs/libpcre2
+ dev-ml/libvirt-ocaml
+ >sys-libs/libnbd-1.14.1-r1[ocaml]
+ sys-libs/libosinfo
+ >=sys-block/nbdkit-1.42.0[curl,libssh,nbd,python]
+ virtual/libcrypt:="
+RDEPEND="${DEPEND}
+ app-arch/unzip
+ app-emulation/qemu"
+BDEPEND="dev-ml/findlib[ocamlopt]
+ sys-devel/gettext
+ dev-ml/ocaml-gettext[ocamlopt]
+ dev-ml/ocaml-gettext-stub[ocamlopt]
+ virtual/pkgconfig
+ test? ( dev-ml/ounit2[ocamlopt] )"
+
+src_test() {
+ # libguestfs tests won't work until the new environment is sourced
+ # Automatic testers (tinderboxes) probably won't do this, so do it ourselves if needed
+ if [[ -z "${LIBGUESTFS_PATH}" ]]; then
+ local -x $(<${BROOT}/etc/env.d/99libguestfs-appliance) || die
+ fi
+
+ # Can't reach libvirt from the sandbox
+ local -x SKIP_TEST_V2V_O_LIBVIRT_SH=1
+
+ # Must be called explicilty even without above variable because
+ # emake check -n fails due to missing Windows headers.
+ emake check
+}
+
+src_install() {
+ default
+
+ dobashcomp bash/virt-v2v
+}
diff --git a/app-emulation/virt-viewer/Manifest b/app-emulation/virt-viewer/Manifest
new file mode 100644
index 000000000000..4bf036f22561
--- /dev/null
+++ b/app-emulation/virt-viewer/Manifest
@@ -0,0 +1 @@
+DIST virt-viewer-11.0.tar.xz 259772 BLAKE2B 41914a60361f0a47a0b0b54962d228ffaec67c6b69c664bb6fe683b7074dd5e2136d2bf3528b6e1b6b785cc4e337125fe16fdd94dd603dd42e8fde543931241a SHA512 738034e15e40a7aaadd2646bf289c12409cbf2d06925d43baa50fa7bc8438188480d6b97687e9816427ac0a9dae84d205351715cb2f38afdbefa2dd1d134904a
diff --git a/app-emulation/virt-viewer/files/virt-viewer-10.0_p20210730-meson-0.61.patch b/app-emulation/virt-viewer/files/virt-viewer-10.0_p20210730-meson-0.61.patch
new file mode 100644
index 000000000000..46c708b9d342
--- /dev/null
+++ b/app-emulation/virt-viewer/files/virt-viewer-10.0_p20210730-meson-0.61.patch
@@ -0,0 +1,36 @@
+https://gitlab.com/virt-viewer/virt-viewer/-/merge_requests/117.patch
+https://bugs.gentoo.org/831963
+
+From 41cc016278e713d3db156761fce6437dff81a53a Mon Sep 17 00:00:00 2001
+From: Michal Vasilek <michal@vasilek.cz>
+Date: Sat, 22 Jan 2022 23:28:20 +0100
+Subject: [PATCH] meson: fix build with meson 0.61
+
+i18n.merge_file doesn't accept positional arguments
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -2,7 +2,6 @@ if host_machine.system() != 'windows'
+ desktop = 'remote-viewer.desktop'
+
+ i18n.merge_file (
+- desktop,
+ type: 'desktop',
+ input: desktop + '.in',
+ output: desktop,
+@@ -14,7 +13,6 @@ if host_machine.system() != 'windows'
+ mimetypes = 'virt-viewer-mime.xml'
+
+ i18n.merge_file (
+- mimetypes,
+ type: 'xml',
+ input: mimetypes + '.in',
+ output: mimetypes,
+@@ -27,7 +25,6 @@ if host_machine.system() != 'windows'
+ metainfo = 'remote-viewer.appdata.xml'
+
+ i18n.merge_file (
+- metainfo,
+ type: 'xml',
+ input: metainfo + '.in',
+ output: metainfo,
+GitLab
diff --git a/app-emulation/virt-viewer/metadata.xml b/app-emulation/virt-viewer/metadata.xml
new file mode 100644
index 000000000000..c9fd59279c7b
--- /dev/null
+++ b/app-emulation/virt-viewer/metadata.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <use>
+ <flag name="libvirt">Support connecting to virtual machines
+ managed by libvirt.</flag>
+ <flag name="spice">Support connecting to SPICE-enabled virtual
+ machines.</flag>
+ <flag name="vte">Enable terminal support (<pkg>x11-libs/vte</pkg>)
+ in the GTK+ interface</flag>
+ <flag name="vnc">Support connecting to VNC-enabled virtual
+ machines.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virt-viewer/virt-viewer-11.0-r1.ebuild b/app-emulation/virt-viewer/virt-viewer-11.0-r1.ebuild
new file mode 100644
index 000000000000..399b8f783100
--- /dev/null
+++ b/app-emulation/virt-viewer/virt-viewer-11.0-r1.ebuild
@@ -0,0 +1,68 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit meson python-any-r1 xdg
+
+DESCRIPTION="Graphical console client for connecting to virtual machines"
+HOMEPAGE="https://virt-manager.org/ https://gitlab.com/virt-viewer/virt-viewer"
+if [[ ${PV} == *_p* ]] ; then
+ GIT_HASH="f0cc7103becccbce95bdf0c80151178af2bace5a"
+ SRC_URI="https://gitlab.com/${PN}/${PN}/-/archive/${GIT_HASH}/${PN}-${GIT_HASH}.tar.bz2 -> ${P}.tar.bz2"
+ S="${WORKDIR}/${PN}-${GIT_HASH}"
+else
+ SRC_URI="https://virt-manager.org/download/sources/${PN}/${P}.tar.xz"
+fi
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 x86"
+IUSE="+libvirt sasl +spice +vnc vte"
+
+RDEPEND="dev-libs/glib:2
+ >=dev-libs/libxml2-2.6:=
+ x11-libs/gdk-pixbuf:2
+ x11-libs/gtk+:3
+ x11-libs/pango
+ libvirt? (
+ >=app-emulation/libvirt-0.10.0:=[sasl?]
+ app-emulation/libvirt-glib
+ )
+ spice? ( >=net-misc/spice-gtk-0.35[sasl?,gtk3] )
+ vte? ( x11-libs/vte:2.91 )
+ vnc? ( >=net-libs/gtk-vnc-0.5.0[sasl?,gtk3(+)] )"
+DEPEND="${RDEPEND}
+ spice? ( >=app-emulation/spice-protocol-0.12.10 )"
+BDEPEND="${PYTHON_DEPS}
+ dev-lang/perl
+ virtual/pkgconfig"
+
+REQUIRED_USE="|| ( spice vnc )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-10.0_p20210730-meson-0.61.patch
+)
+
+src_prepare() {
+ default
+
+ # Fix python shebangs for python-exec[-native-symlinks], #811408
+ local shebangs=($(grep -rl "#!/usr/bin/env python3" || die))
+ python_fix_shebang -q ${shebangs[*]}
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_feature libvirt)
+ $(meson_feature vte)
+ $(meson_feature vnc)
+ $(meson_feature spice)
+
+ -Dgit_werror=disabled
+ )
+
+ meson_src_configure
+}
diff --git a/app-emulation/virt-what/Manifest b/app-emulation/virt-what/Manifest
new file mode 100644
index 000000000000..037f7a30b76d
--- /dev/null
+++ b/app-emulation/virt-what/Manifest
@@ -0,0 +1 @@
+DIST virt-what-1.25.tar.gz 516445 BLAKE2B 3f3403a3954e359005754e1ad2aba545a824ff9eb77e787615235c1042735f99a58d89f755c265324c16a9d0467e8332a67dff88b3ac15ae21a4f4f7a6dd3136 SHA512 0147b4b44ae0ee685977aa34dfa9bf30ae8e0eb31b7a6d5c0097d16f830fa6fb6afd7156964fc79f3fd5e82b2f68d921fd5306245cc63a2140f6dddc7fdd0e98
diff --git a/app-emulation/virt-what/metadata.xml b/app-emulation/virt-what/metadata.xml
new file mode 100644
index 000000000000..260c4e473970
--- /dev/null
+++ b/app-emulation/virt-what/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>prometheanfire@gentoo.org</email>
+ <name>Matthew Thode</name>
+ </maintainer>
+ <use>
+ <flag name="dmi">Use <pkg>sys-apps/dmidecode</pkg> to read firmware data</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virt-what/virt-what-1.25.ebuild b/app-emulation/virt-what/virt-what-1.25.ebuild
new file mode 100644
index 000000000000..9b493e1d6044
--- /dev/null
+++ b/app-emulation/virt-what/virt-what-1.25.ebuild
@@ -0,0 +1,24 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Detects if the current machine is running in a virtual machine"
+HOMEPAGE="https://people.redhat.com/~rjones/virt-what/"
+SRC_URI="https://people.redhat.com/~rjones/virt-what/files/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="amd64 arm arm64 ~hppa ppc ppc64 ~riscv ~sparc x86"
+IUSE="dmi"
+
+DEPEND="dev-lang/perl"
+RDEPEND="app-shells/bash
+ dmi? ( sys-apps/dmidecode )"
+
+src_prepare() {
+ default
+
+ # Pretends to be POSIX sh while it is not
+ sed -e 's:/bin/sh:/bin/bash:' -i virt-what.in || die
+}
diff --git a/app-emulation/virtio-win/Manifest b/app-emulation/virtio-win/Manifest
new file mode 100644
index 000000000000..246d128c0337
--- /dev/null
+++ b/app-emulation/virtio-win/Manifest
@@ -0,0 +1,3 @@
+DIST virtio-win-0.1.266.iso 724434944 BLAKE2B 3face98acbdf4b03d458171e0bbc31636e96d30cd87c176d3fd7d26be161aa44c714deba7436cd6ad6592ce55b9809401f76613dd73a29562a076726683007c7 SHA512 13b5d4f9ef187f1212ea56c61a6f204576d5976ba0b29abf3c11b72e76a4020132c22cfd7c0c3765bc0794b3a03008bbf18930a3027ef29ebe54949f4de2a08d
+DIST virtio-win-0.1.271.iso 726501376 BLAKE2B f9f0d5ababbbdd42a76ebea5a34b3dcc88a791809484852fbf6f46044f13deb7ce1431e8d87806aeb8a5e86a310ed4140660a23961b7a4639a887a10e4761307 SHA512 e11c0b7544b90d37e4a74bfb884316fc26471a0b7a479f4877f3da486b3e6ac1c24866c5998ec9915f66adcea875e966b32779a2958c19eaf3015b642433f1ec
+DIST virtio-win-0.1.285.iso 789645312 BLAKE2B 30c0ac252be9b28e9dd18d85d8bfa3436194b9430b374cc917e0e2de5209ae280d6f62e5eb0be37fbb8e73a40fa11ee70fb2e21da0f32f93ff157cdb9895a192 SHA512 4f13070cc9241fa342deab4ebfac360565030580ff77b6e5f1951a64627621e5da4abfd30e1e46ca8bae2bb7dd4ff98141aff424142c9629a5876a61283962e5
diff --git a/app-emulation/virtio-win/files/README.gentoo b/app-emulation/virtio-win/files/README.gentoo
new file mode 100644
index 000000000000..9c50feb9a1e8
--- /dev/null
+++ b/app-emulation/virtio-win/files/README.gentoo
@@ -0,0 +1,15 @@
+VirtIO drivers have been installed as a CD-ROM image to
+
+ /usr/share/drivers/windows/virtio-win.iso
+
+To install the drivers on a Windows guest machine, either during or after the
+installation of Windows, pass the iso file to the guest machine and mount it as
+a CD-ROM image. Then, in the Windows guest, open the Device Manager and start
+the driver update wizard. Locate the appropriate device and click to update its
+driver. In the pop-up window, click to browse in the guest machine to locate
+the iso image, and select the driver(s) from it to install.
+
+For an example, see: https://wiki.gentoo.org/wiki/QEMU/Windows_guest
+
+For information on using the Device Manager, refer to the Windows
+documentation.
diff --git a/app-emulation/virtio-win/metadata.xml b/app-emulation/virtio-win/metadata.xml
new file mode 100644
index 000000000000..ab4820f8b270
--- /dev/null
+++ b/app-emulation/virtio-win/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>kaichun.ning@gmail.com</email>
+ <name>Kai-Chun Ning</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtio-win/virtio-win-0.1.266.1.ebuild b/app-emulation/virtio-win/virtio-win-0.1.266.1.ebuild
new file mode 100644
index 000000000000..2de00bc089fc
--- /dev/null
+++ b/app-emulation/virtio-win/virtio-win-0.1.266.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit readme.gentoo-r1
+
+MY_PV=$(ver_cut 1-3)
+MY_DW=$(ver_rs 3 -)
+
+DESCRIPTION="VirtIO drivers for Windows virtual machines running on KVM"
+HOMEPAGE="https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html"
+SRC_URI="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/${PN}-${MY_DW}/${PN}-${MY_PV}.iso"
+
+S="${WORKDIR}"
+LICENSE="BSD Apache-2.0 GPL-2 GPL-2+ GPL-3+ LGPL-2+ Ms-RL"
+SLOT="0"
+KEYWORDS="amd64"
+INSTALL_PATH=/usr/share/drivers/windows
+
+src_install() {
+ insinto "${INSTALL_PATH}"
+ doins "${DISTDIR}/${PN}-${MY_PV}.iso"
+ dosym "${PN}-${MY_PV}.iso" "${INSTALL_PATH}/${PN}.iso"
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/virtio-win/virtio-win-0.1.271.1.ebuild b/app-emulation/virtio-win/virtio-win-0.1.271.1.ebuild
new file mode 100644
index 000000000000..9b9069053b14
--- /dev/null
+++ b/app-emulation/virtio-win/virtio-win-0.1.271.1.ebuild
@@ -0,0 +1,30 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit readme.gentoo-r1
+
+MY_PV=$(ver_cut 1-3)
+MY_DW=$(ver_rs 3 -)
+
+DESCRIPTION="VirtIO drivers for Windows virtual machines running on KVM"
+HOMEPAGE="https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html"
+SRC_URI="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/${PN}-${MY_DW}/${PN}-${MY_PV}.iso"
+
+S="${WORKDIR}"
+LICENSE="BSD Apache-2.0 GPL-2 GPL-2+ GPL-3+ LGPL-2+ Ms-RL"
+SLOT="0"
+KEYWORDS="amd64 ~arm64"
+INSTALL_PATH=/usr/share/drivers/windows
+
+src_install() {
+ insinto "${INSTALL_PATH}"
+ doins "${DISTDIR}/${PN}-${MY_PV}.iso"
+ dosym "${PN}-${MY_PV}.iso" "${INSTALL_PATH}/${PN}.iso"
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/virtio-win/virtio-win-0.1.285.1.ebuild b/app-emulation/virtio-win/virtio-win-0.1.285.1.ebuild
new file mode 100644
index 000000000000..c55a12f3cde4
--- /dev/null
+++ b/app-emulation/virtio-win/virtio-win-0.1.285.1.ebuild
@@ -0,0 +1,32 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit readme.gentoo-r1
+
+MY_PV=$(ver_cut 1-3)
+MY_DW=$(ver_rs 3 -)
+
+DESCRIPTION="VirtIO drivers for Windows virtual machines running on KVM"
+HOMEPAGE="https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html"
+SRC_URI="https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/${PN}-${MY_DW}/${PN}-${MY_PV}.iso"
+
+S="${WORKDIR}"
+LICENSE="BSD Apache-2.0 GPL-2 GPL-2+ GPL-3+ LGPL-2+ Ms-RL"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+INSTALL_PATH=/usr/share/drivers/windows
+
+src_install() {
+ insinto "${INSTALL_PATH}"
+ doins "${DISTDIR}/${PN}-${MY_PV}.iso"
+ dosym "${PN}-${MY_PV}.iso" "${INSTALL_PATH}/${PN}.iso"
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/virtiofsd/Manifest b/app-emulation/virtiofsd/Manifest
new file mode 100644
index 000000000000..a4275ea40509
--- /dev/null
+++ b/app-emulation/virtiofsd/Manifest
@@ -0,0 +1,120 @@
+DIST aho-corasick-0.7.18.crate 112923 BLAKE2B 4f6947d1aacf89ccfab0592cdc55fa61ef09cea38231d3f758765dbce328a810c0b588be4ba96e81d64955379ee005722d22a7aec39caea6e72342245d7ca34f SHA512 7a23b16231a90d23ee60ad4c81bc225410599a4560d33d3a203138fc540c39cf1000100fed3aed40dcc371c3635656a3792545dca5dd1aefbde00d8774eebd00
+DIST anstream-0.3.2.crate 19504 BLAKE2B 617b846c244ea4ccd6c7835a382afe85e14c245ea56b678f57ee12e9c7bcc1c0c3db9620eb4d16bf35e17eca38968bf04420b758f482ac5594670e6292c1fbb9 SHA512 b896e5208a2ee6a3c98bf3bb9ac1c52792de114dfa5709dadcac6183ea19ea63230dffd3217e571354a71d69b8eafbb0189e05f8f77f50922020de54e3aeecc8
+DIST anstyle-1.0.1.crate 13977 BLAKE2B 35be03a7de78737592528967e8ad4851436a74c7863cae9cf5cf7366d3cce9bbbd255b1a89401051f82fe8569a0ff029dcfe427c14a2e0677890453c6119d241 SHA512 2bf9b83ad9772c6a3ef28239cbb98bd667dc631fd1ef76ec5029825c128f6cb22756bb1548dd991e482f86eb9fd94fae5c648f91de2c0d71754b6dca4ec2362c
+DIST anstyle-parse-0.2.1.crate 24802 BLAKE2B 6304a56c6a9fbaf1bb4d1d177b2315684345dc9d71c35836f9544145364f8d6eb56e25c03076690c594ab7db5914501acb569f6c136952e59c93179ced527fb2 SHA512 5c8fc7d88ffc3a6e78340ffe0f3c2d72e865512030ade4509de9c673eba955c536bb1873dac11f6ba11cc8367fb30c67451ed65d19f81507c9e917c702bfd176
+DIST anstyle-query-1.0.0.crate 8620 BLAKE2B 2d296b5066fd6284a2410923215571e6df650c5ef892d6de7a7088a0996ca30608797feabc84f3c325ff4d07001dac80ac5067d2a9c9d15d9ba59a276b399f53 SHA512 2781be5c82293b7ae338ec5046fbeb130de9eb2dbf2e4dfaa73ca5233032e1e52c133e141b02f33d4bc36d996a0a3f680ac82d42d614a5305005f60547133c7a
+DIST anstyle-wincon-1.0.1.crate 11718 BLAKE2B 2500845a23edfb47ecd156424a89789c713a7c367c3fef98d26e4e7b2acb3c6433d39a1c2a59813a98266b0993d4b750e9b6b68b7ced7ec5a04a8b13bad174e7 SHA512 00c380fc0198c49776c40aeef419be2fd2d6809bd2e5d86457f1658c6f4b2e83ebe8feee95855c3bbedd4200a917f582bd41b0ee0cf5d7d1d5017228885a58e6
+DIST arc-swap-1.5.0.crate 65351 BLAKE2B c6b278134f6e29551302e27131639f3bc5bfb05042701cf6c12aab1697f211be0942c44919d374e196ef03605fb137334b42decb9623a137b6ead346586c2105 SHA512 b668a75b2ac77a9d2df3f29b70c8c22e5a961cd2478cd76b6d313e0e1ff809508887451b895f057d160860daa4b02cb74616ab8daa34d163ef3f42a009842031
+DIST atomic-polyfill-0.1.11.crate 11087 BLAKE2B 643da9fa628029c70c8a1e365860301118ddcf43f9ca826800e010af60873c0287001717d736b9449f889bf73c0ef2c584316d5a41df764986e2bc1a4a181379 SHA512 09fce00854e79a45747c6b3b93691908f6cd677f35e8a22d86c51af8b6f3c38359526a4b317aade3d5016174b8ee6c73bd029f07a0489eaf9cee109945a51023
+DIST atty-0.2.14.crate 5470 BLAKE2B 2db856a9e898a430258f059aeaf7c844a153293e8856d90ac81f7d91a888c89198768ad5cb09303c23241fe85c560a55148fa56a303651a82b0edb895616bfab SHA512 d7b6c4b9a0f898d91ddbc41a5ee45bbf45d1d269508c8cc87ee3e3990500e41e0ec387afb1f3bc7db55bedac396dd86c6509f4bf9e5148d809c3802edcc5e1d9
+DIST autocfg-1.1.0.crate 13272 BLAKE2B 7724055c337d562103f191f4e36cab469e578f0c51cc24d33624dea155d108a07578703766341fd6a4cc1ef52acda406e7dba1650d59115f18261281e5b40203 SHA512 df972c09abbdc0b6cb6bb55b1e29c7fed706ece38a62613d9e275bac46a19574a7f96f0152cccb0239efea04ee90083a146b58b15307696c4c81878cd12de28f
+DIST bitflags-1.3.2.crate 23021 BLAKE2B eb990bb27b2bdeb66fd7212ce582cb36e1c616debbac85df642d0c82b25439e6bf9b1e811fac76b59e58ea3c1bbea6170d03a61e8f9a395e4334a0e2e2987eda SHA512 3c698f757b5cc62f815f9a1cce365c3d2dd88e4db71f331dff8bba86c2865f755b81cb4c9bfc59bd86b7643b0943f9e09a7c4f8ad75eb2ab0e714803d0129f62
+DIST bitflags-2.4.1.crate 37043 BLAKE2B f61c45b142265e9c2944c7054e01704de47510735e9ee5351cd02b98676cc4eb42d68b1fc4849ad5f54654617a74f20cb533b4207c2fe76516b724ba9318b414 SHA512 d3fd7abc95acc1cb5bf16d6acc12dbb8eadd250f069268df13c2e8dc3d5f5c15a929cd17ca931c77393b64dce0516ef8674c469789ed32d78e315b5faada062b
+DIST btree-range-map-0.7.2.crate 21391 BLAKE2B a8e0239977088726832dd97cfc20fff080108bad5eb12ad472dcd62a8419ce492d7f00cfd2191342530ee67023104ee31484863ce1a1a218db9766df23d9d695 SHA512 1fcf4f882f9bd19632587d254a632bd2057277d50b2bf1c3f06eb2fa8ffba88a6c4d7d0ccb9a60364ccf345315210a811813425db00b8e58a1422b461bdb71d1
+DIST btree-slab-0.6.1.crate 44541 BLAKE2B 47cb12b7fa50a82fa8b79c18726c6cb745a28e14f5be79235fc62eba645d06c9d0863337bddf557a50967ba3d300106ecf309003bf71dc52575662256622235d SHA512 e8265f619444a278de3520df4432ab8e47b52c78ec906715f3dd376b4527fb42d676359289072461ac454c76baeaa0737b9597fd40023528c2ae755d9ac5f260
+DIST byteorder-1.4.3.crate 22512 BLAKE2B d39c546ba7346df315297fc53da4bfc77ecb1f38567ddb788549ee31cae2719a8bc0b7d1f1705abb3cff033aa57af004987d90748f5a31765273b3223a011c0d SHA512 8c8000eb8ecf40351c9ce36a3a8acd7a02f81786d1b11aab85adfeffa0f2267ed74df29b2ca5d1d38128484d1d3cad2b673aa0d0441dcd0620dfd3934bb888fa
+DIST capng-0.2.2.crate 24372 BLAKE2B 85cf114065f0f103a9e1583b11316c5a95d5fa9f5d70448d6749b500e956e4e0c6fb4f5e548a7490d191ecae878624cf4ea1e5026a6a0796c8269e68de70af0e SHA512 132c446c36eea932a39190b284d0f2f29b50334dc8c12043e43a1eca90366a56b2034c649740ac20ded4c4e91147226237cbbcee18750dfc281154644d6fa0db
+DIST cc-1.0.79.crate 62624 BLAKE2B b3cbed3bd6fcac1c6ea258ec96cd107f859947a35dc89c3dc8f314741b0f668e61518f896ec32ce10c9a7eb20dd350bc177a71810d53ebea59fda062ed9d27db SHA512 cbf0a25f3a23fc540e9d638fabc23f761f1c240ebb4814e761e90437d71fc559cd155768ab9e78fc192220d8a605c66c3af342ed736b719181656170b98d7bf5
+DIST cc-traits-2.0.0.crate 18857 BLAKE2B 2b5c25374e6278bd99a6d20ecc0fb975f0b3388bddd7999f6fbe44f4a96df88532cada8211a5cff190d66584a3811842badef8391b12543bd1962be55e282db3 SHA512 471946046b9b7d6363c5c73deefe52538a5b2d8299cb5ddda3a7c5b0ecd878c420cb87096c3b1ebb1f79d21babcf42b771b9a584fb850a34a86e7eb227a543ae
+DIST cfg-if-1.0.0.crate 7934 BLAKE2B e99a5589c11d79d77a4537b34ce0a45d37b981c123b79b807cea836c89fc3926d693458893baca2882448d3d44e3f64e06141f6d916b748daa10b8cc1ae16d1b SHA512 0fb16a8882fd30e86b62c5143b1cb18ab564e84e75bd1f28fd12f24ffdc4a42e0d2e012a99abb606c12efe3c11061ff5bf8e24ab053e550ae083f7d90f6576ff
+DIST clap-4.3.11.crate 54864 BLAKE2B c1b0567950d6df6c6f40d0f0c2fcb4c485a65a3d5abe49ca04ba8c3ff24ffa52eb08a7d17395c20fc0ff09fee06852ff854369dbe033bc049d322b0a61b13142 SHA512 d00a142055671b4986f95e394f01d05cc41e9bb2fed23b2b1f6cc3366fc24204d877bc5220572f2a7a9424136b24d2596cd7ec7d1604c13b1384c0f0d9d1012a
+DIST clap_builder-4.3.11.crate 160795 BLAKE2B ec650dd28d65412f594ad7cb578afb36412840bd7e04734f8c4bd8a40b453cd2c926ad7164dbdd0e33d357a8c3830560ad03d6f8e105463b7ba592ab68ba897c SHA512 9b0dfe5bfa838d6f5fd9388f574a6a880d724dd49eb987955609bc1e754fdade6db9fd9fc6672d42458d9e621e638aa7702205d894d2318a12711791168bb741
+DIST clap_derive-4.3.2.crate 29053 BLAKE2B 9e578a78e92fcb90689c1327a41f446fac64506ac77c4721f5a87094b18beb540704846485585525695de333c301bd6f6da2805bad4d00888664da01e5a1a8c8 SHA512 2d7214eb91517067d6701443440f514648ae1345a326e6d00c1fec9d387e7781d5ce429d340277eb85fd436fec69154ba51d6a10a0e117276656f0187ddc19fe
+DIST clap_lex-0.5.0.crate 11792 BLAKE2B 0409c9d957ea6a566eb8b50f4212702df038d04c4c38f7440d91cb4c58ec887940f0cf500c4c3949c2191399aac3f5cb1ce44868eac587cde90211d3e467b9a2 SHA512 0149ed7c2438a19b4857f895767550d783711078f07bfa9ac8ca531e06f51c7388110f4d558e30bf503536367cc370cb581e8deb6fe51f9b5460a334963daacd
+DIST cobs-0.2.3.crate 12576 BLAKE2B 063a618689b5d51ea9e32b7b8bd377daebe61da21010ac9eae5ff4318d6b397be0c48f6ce6ff5b5a10269407c07957eb85deb28a80d67037d788ee45bc9f83d6 SHA512 9432c28515f0972b88da4f132658ef535df131825febeed62c6b0314d49852d1de4efe1c54566f314976000f91160f8bc9e21969963b85288ad79b1cafbecf55
+DIST colorchoice-1.0.0.crate 6857 BLAKE2B a0818be1299717461ffc1bcfb6fc53a0b3b645aa8c45fb72e045cf2d876fa207948610e58d6a837aad24838ea9616e80b0558ca3eae03fdf9bc4c03a8e5ba52f SHA512 53363f2889cd8e8a3b3ed10c48356896c0daa72f3c12c9c7804707ab0dbc07c0e34ef52fa4f0fb1647311ce5913168c1bf62c2407ff86a33f765a9e6fccad551
+DIST critical-section-1.1.2.crate 18337 BLAKE2B 2ef2649550f192013086ecf48788e016d92b907bc39c617657e2cbbf01a79cc182b1cf3b9e3dd53051121773cecef7da1b4b842b4127ca928305935019c3a3a1 SHA512 739175c5c18d1d6bcb6592a1a522dc2883dac7261a38eb54f06e0ebe82ecfd26567cf817f39eae9d8911b900c1968d0b21c13d514f4894d5695885b20adc8f54
+DIST env_logger-0.8.4.crate 33342 BLAKE2B b1bb359be2f34ca6f93f72154c86920b8254f574b48f693b2ae7296cd1ff25d34dea61e95fb2954569fdebb6c522c851ef7499c107005528aa2226df13b0de33 SHA512 9e4478ff609a2e1e1a902a55b221af43a52622fdb5668dc33fb0be354b964708b7b6d13b7f1ef11982f45fa7e71f0712a2ab3fd4ea98155a5115e5a7c3d33049
+DIST errno-0.3.1.crate 10348 BLAKE2B 72831d0b69f95884a69918249cc0e814eb5eade3205331bec6d2021f8b01a42c4c9b494f2717033d65a4c5230c8490b6ce250d349c1e8e177b20e7e84a860020 SHA512 00d64157d066f1e7601c522c0f4e777eb662ca5cce64682f616de0734857765c343396f7161ac2908c3db0c474995ae157bfe9d8a9880743724d9bd428dfdf54
+DIST errno-dragonfly-0.1.2.crate 1810 BLAKE2B 781fc26dce5c33d83b9a1fd9be2b2ce9ac2559aaa858957ba6777e143b1e44cdfee48e1b47e3c91a95075a51921d1a421d0b45eb3d8de827cf4dd0ad744a7d8c SHA512 f853f1e1b8dd0f359a8f9a0399b3384c1103cd090d96e2b2204f91a40d40a9eb99383d4aa6a11e5470c51557afacf452d4be2049600d4235d27f59870fa3b916
+DIST error-chain-0.12.4.crate 29274 BLAKE2B d082bcbce47411477e8b597cfcb76985cc7d6f1696926cb5314f4e84d2c8642939f5263e110aaef56353ec086a21874a8093bcea1d018be81c86ca42c2c30d71 SHA512 c0ee19a0ba2d79ff1843148d0a582045e68466a9dc429e5f3c8a3a75bc1b6e0d6de03ad69fce851bc0297e7db77b2c6817a13c37e1c3d4501ed41db8a454bf79
+DIST futures-0.3.21.crate 49935 BLAKE2B 290dee4f7662a473d82350092c0b12a8270f6d6f5eae9e4f7e06a6abf59e2d9f2d33e5e62e2682fcf6e109d62f651cb37cc467cff2b20f909c72b5fee2cb7683 SHA512 723fc190e4480fd812a852656fa6509a188f0d06adaa1c22ef24ec4afa7688a1c5d3961e5747f0812d073fc672b0e084af6ad5e5c3fac3ea5829466f993ad865
+DIST futures-channel-0.3.21.crate 31961 BLAKE2B e99f37cdeac080c8bad2203fd24b48eb62918166104ad6cc531c8f69d3e0c3a5898ca27f19693e2c143c9049a7d244f9af49c16fecba12233f9ff3f1d01e35b0 SHA512 1c10398657949b53b6df196cc44d8e4b3acf53b4d216be6f5f631d8d4b500f5c344e2cc7d5a5642ced6c5480511884611be6d429f56a0ede4a716b9c5770cb76
+DIST futures-core-0.3.21.crate 14601 BLAKE2B 73cf4c422202a34cc9916509939fab35c79093a6c1aeb99e35763727ebf7d3a06ae203684d75cc74183126f0cd95dec1530f136ffa2a0e69354c554883e3af1f SHA512 b60e7892436ae28fd2240f17816f934f6caeac663d67b8efc7d519ebb4b0bd921f0b732b6176bd4b472d2fbe346d39a37ba394401e15afa93af8294ceea90976
+DIST futures-executor-0.3.21.crate 17306 BLAKE2B fd20c7f0b4996cc10e3b3d30c33630a42eb363ac7893af4ae5c476775f8e4f3724ac110648252b6cfb3d652d352fbb5833f2647d262a4c9ae999de1fa69340a3 SHA512 597732f96b45ce21f7a0b149f62cbdc54a80010bfa5421ab0ef7345c501c197e1c8fe109fa2d1c813d5c2e872b4670e0fbd96e2572cc3e9d2646b68f41c78147
+DIST futures-io-0.3.21.crate 8902 BLAKE2B e673342d3fae38e5a6a20c426cb1127353b4f15459b4c27965566f7f2f13f0773ac6ec850b0d679bea37d68219edf6cdf9d1d0eed37665f4ff51c6060b81466c SHA512 dde0b79c4ba208b4c92c699457efbd515d331ab612e7b7df735b3b8f2ab79c012b1ba329ddaf488d68c69dbd119aa231b833b81cbcc0cc2f55c656f68dc22bd8
+DIST futures-macro-0.3.21.crate 11250 BLAKE2B c981e6d56971871102591b6f14b13f0ed75499627036a90cb71a3e11336db408d11ea0feced484d9ea454f47db74951cdfc61377af267359f46cb6462cc3fc0c SHA512 a79d4d3e487d05554e05e04f3a631fc9f0b5c525126eed550ee30eed16d4c457dc39274efac53558a3e33a119b8ff9d3552ce367359eec9d05105b278f7677c0
+DIST futures-sink-0.3.21.crate 7843 BLAKE2B e4b2ac98e89063b23f5e278cad1df6b1b8f96d4f0df0cb035ce964b91e97f88c7a1a4942ec4010cb4da5f4a3552487eac048a6bfcef637bf1f83398d7f38758e SHA512 9bc0198495b5a1b3ed25fcf7b053a235bba0a43a4226bf085d9027537a57add1686ef61179bf2a2d4189945cb5a05a8d64ba6e6e647c56245666d51e138d113f
+DIST futures-task-0.3.21.crate 11815 BLAKE2B ec3f2e2c025e9a482d86912099e68722099c22c0024669906036504d0e70998cb9cb5fd4074928d21847334611ccfcbe6d3e2f686c4d4d7d4436f1e7f501b8fb SHA512 8f3b27865d8c7a290471903297e3c0b52caebfaa55550a4738d7915008b893fce67c7d9ae5c5bd03f2a42ee72a96aa0245c4bee70fc06977b3493eb81bca2033
+DIST futures-util-0.3.21.crate 153768 BLAKE2B b3bc5632bbc7616d33f74361d68f83e0cb051125475101c84212ea2bd03307e927cd125e2f93eeb0f84946cc45d3964a590dcbfcfff88d3ce1970f127e71aed3 SHA512 ff952fb74a54e793de943e3aee2ac771357bf9f1aa5de89af128868c46a6b44e414fc4ea97f2d9b201ff7ff41023e119f1adf90d314343ff53ab987c3e07f5d4
+DIST getrandom-0.2.15.crate 37163 BLAKE2B 7d534e799a4711d01c6553b8c9422dbf01e384a850fb0f7cd76e444628f2b96d28d0f5e8dae042f8081a2bf9340f57c558be50a6f22ed5fa6b0301a15898fb35 SHA512 04789a53d3f4a84862e1e8b2113641af67e471b468de1222470d5e6cef0015232463a2cf3c3518dc2a533b3983b175a7c8922da00665bcf71c1e4e279b67e6fb
+DIST hash32-0.2.1.crate 11168 BLAKE2B 26e157c3e8e1c3f72c06a804b0e991544d92dc46ed6f12913074dc3f22861939e24644d7fee8e4836ba4d36fe02cf7147a5c1f30998deed33fb3ac53854d20a1 SHA512 e739445fb07403370fda110dc76b82046e5df0250a5e9898ccd0b33547972d26405527f3e3e9cddcd2caa775c8afcfbfc098cb995ab59c44aca642d6c539594f
+DIST heapless-0.7.16.crate 75999 BLAKE2B 1285288b76290c9bad11a3c9dba45832896e8d73760976f43beaef93c67659b71c414e5ddbbb83b89602b8df3e9c38e931d7839b8cd8033c9fd2b53556970bb0 SHA512 c67633044298013fc584fba5dde8a85f84f259d138d6f0912de4368ceee0b7194c5cde705b4a04186a4420757336814335b6b935b5e5380eb341720090b56428
+DIST heck-0.4.1.crate 11567 BLAKE2B 520aeea740cfa30b0cca12f73594ffa655f32959673b1c9caaca1ea0162e455546ae3033881394c0ba0516bcd5c9a997da02162e1585522d665813b9096eabd9 SHA512 8c80e959d2f10a2893f9a71994720f90747742bb5b61fc0a539eed3ea5679b140c48fd7f7690d7122cd6af5f7f20a19d412e3569fe741c6d31f6b2ce1e0b80e8
+DIST hermit-abi-0.1.19.crate 9979 BLAKE2B 801e8052b85341cca388ada9db4b06bb1bd7b64474185b2ad06c0256b9e597639bd3dd4ba0053ea010f922e53969a4ab47b90d451fd9b94c8f2324055d151ea1 SHA512 1c877fcd562b15d2de9c151fd6c5f3ea4bf48abcb799e6139a180ffad5d64b632f0000d5707bbd92ff23a0e5f349157b9e0f5be8b50f03680b0fa47315dbb78a
+DIST hermit-abi-0.3.2.crate 13783 BLAKE2B 43089507a5ca0731a9e9a54fdc8f4dd5f807244797eba5bdcc072c2c2b3761481df65b8cc65900769777d9d21f8345b502cb1915ec36747160e87f179469a661 SHA512 22901ec8976a7c96e93c9e07a2c5d3db49d7af60ce60c7ee6f61c3cbe93190d1f285e737c1c8b2236d540ab14e5d92e42828ec05f1b212332a862baf2b1b57f6
+DIST hostname-0.3.1.crate 9272 BLAKE2B cafcae4bbfadd51d058e3daba3e63d897bc3418723d8e843fd941d9663dbc89dba131c77d14ce7a5da552650ea3c40c4e418c88d465f1bab2fa20c178596852d SHA512 a90407996353c9bcf5b76be03713e3a0455ac80a50892e77a508744cf436a938ddb87ef97d8cc91ec7dc4353cfb7bca0fd28c90a72f8a9ecd4f29220d174edf2
+DIST humantime-2.1.0.crate 16749 BLAKE2B e2ae8325b037fb175b9200cc5c1944ce579056c6662cce307beb6701894552362a25e371aad65f8fb9384945b48815ca74bb8b544a32e0a5845b7edd30b918c9 SHA512 3bf29ddd1391d82897c22baa0ff3ed58ef6d6959859f1f8ed54d324caba5b6fb4422e56790511ce82f902cd11467f93c8ab7fc7b0e0bdb719308a4d0a446ae0c
+DIST is-terminal-0.4.9.crate 8109 BLAKE2B 0fa495da123f6fe5e3ba5f643f1ee097fc4f8e8aa54d9525b6108855a6a2e58556534a5e8dbfe7b5f8e2f1932003ac63f6aa3384317de7b385cf724bee294468 SHA512 0803ea53945715333d9b5fb18feec7230a49cb1a5f7308e2ea8d06a650e376794dd372be111e85622fd21320228706dd589423510dd010cd6ea112f185c46966
+DIST itoa-1.0.2.crate 11112 BLAKE2B e277db8e2f506d4d20b6888b609d9726d594e1cb2c9f21df60a8cf8dcbad1808d8c1bdb0b7857ce7734b92c0f23fb1ec56f8564e779f27eea953d0ffbfcd3f84 SHA512 44a732a102d60b58e72fe76c43a1d185fa12ff08d04eeacf03234368552f84d3de87a2ea0a6e7a56b8cfa74cb6f6697005afcee26f45afe0c2fc7dce5da3b593
+DIST libc-0.2.155.crate 743539 BLAKE2B 42cdcf8d4a187383548b1f09d404474f168916d626d614463fe10a1fd886e972e1caf6297e75445214af3f31fe631d0927e54ec1cdc63e20082b3587e38dce16 SHA512 05354bba532b8338bda1f88f12c7f3893429734a06e33925fca2b99d49548ae5216e2cd84e782d2368a2dfef20b0e035e2dcad8dd13ede7119462a8c639b2807
+DIST libc-0.2.177.crate 792045 BLAKE2B ecea1ade26b0faa9cb5fb025e237f3a59dfb562e7b3de3682b42a41038b1d436e83b42b53158c1fc1cc4b1cc64ab55ba1497e869ae850a677c089fcce9138912 SHA512 9d737091dba80244137987d06a52ffcd44a968c96b59ae9af9cfa40c38cb9675d023f6324fbf25c436ce1b9592ebf26248f85b0a7c97ee02360ca624b0efb3e0
+DIST libseccomp-sys-0.2.1.crate 11601 BLAKE2B 77a77d6d1f8ef6f5d25b35c299032738aed0a404c855cb84223a7334caaf57392fbd8f0915f4f7be875778176cbfdb8062eabbf7b414d3c198a5d41cd8a466ef SHA512 b53b13f95ac487d802ff051b4cee32be2dfa496846f3104a61399a53a07a7d6fb6b4543088765858e26e060e22e0bf93f8cb3a175c06dae4719f918844c7fe0f
+DIST linux-raw-sys-0.4.5.crate 1274380 BLAKE2B e15ca5b63cb994e86a8161e3b6e4bd20da8f574d1a470128f9a209a729ff22c86470f4c2b2a8ccbc1e37d6284b026e0805902645ea4b742425fe34491e519638 SHA512 13c36e03cb5bdb2e9f17622e21eda608057fc9d908bc55a829fdeeb77785094769d4f4b4daf376c5509ceb3abfdb3936f668bd6d5b2fd48e21c5c28b6e597e78
+DIST lock_api-0.4.10.crate 26713 BLAKE2B 113adf8554c65e9782e8fd0360d0398567dfbfddb1fea4928cc152fbab98dbe086e42b81170f6f5c333d61dd3261e8a1ebfbaed786e6bf6378e6afde6d7f9e5c SHA512 ffe8cad8099bc382832181c1ff95e0935993491f247114604201be7d4ddf8402fd4db8fd6499c611f95fbce7d57dc3d3738eddfab31c52f50ab8709e549697db
+DIST log-0.4.17.crate 38028 BLAKE2B b46be3719fc0a53e50b1f342762e188587e9f1ceb692c72473ce2663edfb8253742d30024e68c1444780ab7fc0e2d5b0601b8ea7228dc3405a9342a57548e605 SHA512 2477d88db42b1d92c30708d88823212e236f613b3465e85eb425f83f8d16fadfaf0352f06c2999a1852102edd2f6ffb10ecb539d8a3b6c48f552a25622ccffa2
+DIST match_cfg-0.1.0.crate 7153 BLAKE2B d3f40e5b16761fed337ed18dfa9db9e46aa2ad84ca8cfdc7cf7c72bea7cff8d084d95214ce013b3515bbe5b1ad4b8527bfce692569551e4588fe6f396a8a96ee SHA512 fd36f2b128d70a0f278e708bcb3274d90380229f754aed7ce9b808138b0189d5e1a07e0ba732216f788a530cecddcdd980559b3f71efa371d8805a213ff8f2d6
+DIST memchr-2.5.0.crate 65812 BLAKE2B 57966413a1f933dcb2d2d4ccb29c247070f65a83299b2a9f5aa83f5a48a5c5f1c4c7c632fa63bd19f9508e9291e7258db2f16e2813a56fd84e0856f70f1e67ab SHA512 444a163b484c233e78c0e2e4d51f01ce2da93d7d29f516a95e4b0866b20bdfd3f34137653abed53eb70387991ee3e2b5937d8d4360a85bbcb50a93005a75defa
+DIST num_cpus-1.13.1.crate 14752 BLAKE2B 27490aeee349d944c29e50b44e9a84371030459353a9316ffaa0245ce499df4424e39c25a81be59cd0f9a19c3214c78bdc7a84b632059282be476d8f918c44d6 SHA512 91ffe0ec792228621d6c2d5cc544ef4744203d19fc9c86e0aad2610038c43aca0448b6c27d82979417a0f6c939ea73523303a44c28df0d1c1b8d09814d5306d9
+DIST num_threads-0.1.6.crate 7334 BLAKE2B 416efdf395b0299b6b01e1508823afdda08cf67ca54e1d644fc5accbb0490945a492a34bc5ba70c3e838e6405d17ddce164ef87468bd9da27097de8994ad9577 SHA512 b2d9897e29e59353379b6372a629fc7f9afc89f777b4410eaeac7b4729527948a8dbecb175f056899f9076693ef855cc0d40e725cc54f28af588fbac5f7ce3b6
+DIST once_cell-1.18.0.crate 32969 BLAKE2B a08d5beee50a7add28bd9e50b18709e7b34574f0f55f80909d5efb7ac5917e5f30bdcf3fb43ddd0a4f420a427390c7ffe1cc1c7191a3a1d939bc6e3139e6eef7 SHA512 9328968afdf3535b2d9e0113d75afa725259d76994ef2e1948ad7efa4ec8a65bac7cfdc31b749d5cd55ad4e28d2e28ac57b871e3067b89182453c7e2413a13b8
+DIST pin-project-lite-0.2.9.crate 27713 BLAKE2B d6985b5add432fb6287d1b0c9fb0cc91a195f82c5a748a9ea430e4ba884717ec7b16d730b5ea62de5b2bfead1771da2d115b3776e12e605f70f2538f374a28fa SHA512 cef0b77233adca712db1183f780732ea577cf1b27c2643de221d54c837c75ce749f907e24a967be7474812c7682cba613a3fc5d553a9578a1b80569da0e562e4
+DIST pin-utils-0.1.0.crate 7580 BLAKE2B 457e1287202f16d1873b24bf4f1de1828300128c4ba3131758e64f9784d36d47365f22d85493c3a85d854f0d8dbb4c6cef3a0f5b064014dc03943e58b7ba9178 SHA512 828422b8440cc82ac6b0743e0112fa7540d437aed457564999092b1462cd7672cd6b1f0201b67075431aeedd3d9c5127468a3dd028744109944f7f023c82fd70
+DIST postcard-1.0.6.crate 52027 BLAKE2B 721cba76c450b44c47bc0ecbb35d93dcb3d48d3f66147f659bf688f35a6eea33aba24bf73e2f8cd50e4ff7ef52c9d2c99b135841e18cb53c69c9342d6c20d282 SHA512 bb7dabf7a0edb786aff9e9edc9e7a9b2a5661122b994f7de367c2787db10667625635d4532c036df95f9efd0b2d4bbfb41eccc864815b427f3da089ad3449583
+DIST ppv-lite86-0.2.20.crate 22478 BLAKE2B 9d68dc36d8148047d571c0147ed29f586f3c6ac9394b56bd955c8ae5bb18f5a8da5369809f7b8c3199074e23660325158c32c62e1bf69a16cb1f5da2a01f5df0 SHA512 6d171f63b42296f7765732fce3af7ea05d0d81f1541ffb3ad86e81210715ef4afe5bc9e58926e97e757aea6ff96a8012c8411eac78be0fd080898318ed21d7d1
+DIST proc-macro2-1.0.63.crate 44867 BLAKE2B 54fc0f4f4e328c78609f5c0e26a8e6b1e5f1ad989d68e63d21e094bc20e1be6950d5df98ffb601c89bd3d137f6c05a3d1de74070e493002e793bf159b96f29de SHA512 3855011d0d42e8fe591e7552d224b692d79b194c4452fe9d8f92ed85e5437c0a3524a38e66301412be482cfcfbd468b071a03cf584a1618284dfcdcac9713102
+DIST quote-1.0.29.crate 28345 BLAKE2B 3aeb637a4139730348775caab4d48173650d8bdce08247263d741ccc657dfff7f2facff05725bcaa73486818d394c392c64ecbc61bae3f5b612104aec16ff289 SHA512 d686a3943dca059a8e79689c77e6e8f6dbfa9b16a1a7ecdd27099339b77a55334252eaa8b4340e79c35ebb1f6e4deeb3f6356dfd02484f9c724e66a74387e30b
+DIST rand-0.8.5.crate 87113 BLAKE2B 516f26bb2a969d0d79e957818133f35d2c0b4d9f1b401098ea23c5b80d27599e842b9298c0c5e46e2a6cb6953857bf8a9fb71ec9366c5ce6708cf17df14f179c SHA512 8b33a8988906ba5e2057a9a84bdd11f867a5536c22f5056eec59ed4ec4e3a6da2fd773da4c0510d343762e5a4ea0f007db4c4a7cef87a47f90e36c1a84d86fb2
+DIST rand_chacha-0.3.1.crate 15251 BLAKE2B 645771b2c3e274f085e0837a20306b1d59f6e9032fba8eb38a6d1b30180d15e2f89ffa2a162bf6358da41e030098242d81e71dab4321980d0a4f6ddfc2974ce3 SHA512 8198c580b1b9b0429758ffa49cd8138fa3ce724f0dcf73c767ea7e55611d6a2e4c7cad9950896510def500ce4062b594386c947ac3d89425b4e5c9b04d0b8075
+DIST rand_core-0.6.4.crate 22666 BLAKE2B 8b6b66d50aade877f2779c006f8038db450f808c66d73d79efa66c4178dc03db06f12201bf0e7930181c4b0f4030c49b20cce6eb7839763cf2217cad9710789a SHA512 36c67eb845aa2ccca49d6d680f28d418229bbc5a050729e487fe6b9f9f384fdd7b8d67fc6508b90b79ffb3c26688e72feceb3ecae57d3d7f59338aeb62296f79
+DIST range-traits-0.3.2.crate 4937 BLAKE2B 4721ec4ef30bb72c53b96c2eb3cd164e2e426b4f27f4d1ab2873d7220cfc87fba6ce220c2d076d9d1417ff6a7c693173340788eba27d9073e5f1b716ef1ff530 SHA512 82da1ee7afa5abc3a698aba865340b6319314828188f7fbfc3af381ce71f8f8684768595865f781b523f89f54b3fdf45a76dd612dc98a81a9205c97f31cd9aa8
+DIST regex-1.6.0.crate 239329 BLAKE2B 646405e681ce572ebe2dc51a3339f0f8204143f9b2b8f8e74a4c80379c43c3581363ad347610a384d5ee831cf1425f74ddd944a658b1da2461e8068c5521af69 SHA512 b4861c9cc13d6fb224f67057fd3522f04576591b3d7ae0d3581dce42ca2b2bff96860cf2a7f4dfab00e46a1d29e6473f6723c4aeb02e34ed6d5f205b66f07876
+DIST regex-syntax-0.6.27.crate 297300 BLAKE2B 4ca1a2e23d04e29c5925085ea4ab7ebcc398dfe135eacaab1e686aa8be43a110a28e8bec05a6910183f9a6bb1fd0d635fcb1a60b5a6a03fed4d2cf937a542a5a SHA512 5cc705a5dda08cbdb4dbcf3fa98763cadcda13d9c3ba407b35f3e88d77935efc2704bb40b3fb5aad7dfbad0df43bcb4c4cad9732defb954e2228a0739f7c37c6
+DIST rustc_version-0.4.0.crate 12175 BLAKE2B 6fda2ce03eab45d7193fa0d70175cc7ffb56b7be85fb1314092bdcfd3948ea145420569ace3a47218a4a2a6e44a818862cea6dd8cfb945475496f63b591c29da SHA512 f66da7c6efe431db06cd01180d84ba67fcd38f8cd6ef693762957c00ccc2211f23c08079d7f184776e08f28d2d6ca3bdb5f5016f7de245c6193d4722891ba1db
+DIST rustix-0.38.7.crate 332031 BLAKE2B c7261d4ef5308a8aca32a919d1ce70980b939333b75fd575978261064789bf673466c892fbee1e0b51cab13b80f21a0355e8a4eddf2375ed2f4c5d6ed7ae7668 SHA512 798a84fb6561ccf6902ce7177b2a555cef4d46a2faa265fe7121c600b543782e2e0970346fab52b1075ea40054f6c8f7b830b45f4b0c9bec3aea824645d3ec89
+DIST scopeguard-1.2.0.crate 11619 BLAKE2B 8b7e9ed6cefef9ee55407fb9690d57a2a98bb93e5105aeebdb475a52485e9e185255249e1dce8f83cd80534e7402d485aac3efa7e8493b13135de27550cd4bc4 SHA512 6247719a15fe1e4e2d179127b9a934bd2f99367724f41175ed9522f58824b6bc69b35002eae66b35880375ff61d77ac43ddaa78cbde7160a35183a1da32d3fbb
+DIST semver-1.0.18.crate 29703 BLAKE2B b1867f552ac87968d895c5e49123bcce0f8aa0ad384e421e5ac88bd04ae203ed6b731d5c77fb8488ec6601f1f02a8f2a207a9d21f1cc66d433032628f5d7beda SHA512 698dcd37b354cfd6ee452dce02d16051f23088ce53f0b4d099e1e4ad0f9350996f0b9b2e1c3ac7d5ed258accd92773266892e945fcae28055d4671c7ae5aac02
+DIST serde-1.0.168.crate 77538 BLAKE2B b3c1686bf113d9e16878445667f15c118afd991751efd0aea57db5c641b96c83473b94f96304a6d0e0dc163a30ca1392cff42f9e372d2a5096576e97240c10e9 SHA512 4c0c9376069532c48a815e7a07ce489cd4c6b11d995c09da833417a62539cf4b14f71e25e2cc4dad28aa7beafb3d93020c1a3087e3a0dc9b05cb8d89030cf273
+DIST serde_derive-1.0.168.crate 55149 BLAKE2B 08183d10632997fdc2acf3e48819efbf2980c1f2a61ef8889bfdc3f6d504662f59ed65a9706647a0ce09dc0af88b41783a362112bafe76263acf987e127f99b3 SHA512 8f6d5884e65e80d5039ab217f7f2a1ca42046585aa26caf549de9cd2e0377becfa993d1d9ec90bd0d96b22a8311ac86a962e280f1d71b5a2226a8f9790d94d9f
+DIST slab-0.4.7.crate 16647 BLAKE2B f567cc822e7b84f64a0b0372c22a0463d260871455a33df025808a0476dcbbd4e051a117d8896d96d6d3d0655b7c296cd691ca22edc54486440f4e2e0f5d1e1b SHA512 659a9ca3323fc2cd236f6cb9eb6feeae8a1f5fa046fa239a34cd7a5ab8a7eadb9e5977e8d5cc41e9138900dd7c75ebc0601480771c5fdd2e084ee76619b82521
+DIST smallvec-1.13.2.crate 35216 BLAKE2B 31a268aad595c06cdb078577a97b089dbea156a0df307a3e6aaaf4861bd9a680c5b11921da9dbdb1bcfe17d58c0cbede1ffe6bba3aef59b384fb1b9703c62d27 SHA512 a97c758b668e40ad9eb572e65feeae4954e09200a04ab92e26a13b48894381cd3a3d2571070c4b7a5e181182e1ede9688f990650342ec69ecfe1a264d234c679
+DIST spin-0.9.8.crate 38958 BLAKE2B 8648bf2e48fc618758e3de67f0a493bf3cd22a8d18666164b0d850ed7c0d73650f7b0af783019dd361116bd60c61d24895cdd2c579383cd2700de0e32a23cdae SHA512 b15ad66ba9b308937f34ea166b799676fa45c67224e10cb57530fe33d2a8317ff3e3db3223a3249fa2862cc141c964d2130d3f39910a86ac5ef8aaf8ff4bc6ee
+DIST stable_deref_trait-1.2.0.crate 8054 BLAKE2B 287a65c3e5b47213544a43e57c60a54add60b4c2e3c8d042407d860cc950ba7ca01a2e67ce56aed6744992b61ec1f9aed3321e3d88482e33129548b7d51df205 SHA512 a13cfb22723f1f2cf089b2d07d657846f50c37bc0438d1a76096bea30214cad226b7a422c21f9e191ce87071da8a141d61882aedf9e0203a5fffdfda86a5fb03
+DIST strsim-0.10.0.crate 11355 BLAKE2B bcb25ad0a7284e24e4f17ebe0ccb621bdc4118e499b50b094d98aa7e8fcc0b96716c9953c3516ce7ea78309d41d424892ded595259696a5bbffdcb07802b5c2f SHA512 78b318532addfcf5c1ccc1e14539e258aab9d3cd893cc45d82342549bde838c177d90f13c560671f8f32929af47d0b467db35e6876bd7697d8b3f9e055aeeac1
+DIST syn-1.0.98.crate 235451 BLAKE2B 0667c24d7f6b9bf4c0a5f45fb51c903303a87c72d445ad824e05ab98a158f9beda0d00721144c486335b6a830db47fe57a34831cff6995f478c969c4d0a039dc SHA512 fe5dda742e085e14b6aea5617d3f9dd19ffd46009f34b119c0d74ec693042f641e594f75ff027dbfa38f3d5149a94eb6187248ee9d09d41dab9cc2cfc18fab18
+DIST syn-2.0.32.crate 242504 BLAKE2B 2c2938c0d711c684c9baf95538e2e76220418646590474b2b654d9242d2818aa7c3e5990208fe231ef64903df17edbbf6cc930e6224c964cad4eae5aeaeae781 SHA512 609f125f8138d17b1185760b1a63f3713079f5214fb56c23012229a56d10ac1c12654466c9ad1ecd6b2aff1126d125abfb0a42bd7f669635e5024b962b0cb0af
+DIST syslog-6.1.1.crate 10017 BLAKE2B 9e7d6eb22bb17423152f28211ff71087d0b0c71ad7e402c17f1ac8fedb3610ce4eb12139a5ba9f5ec5beea9a6af7962112dc6ebf1fc4a940a2420b1aa036bb02 SHA512 aea467196670e8e3f9309a9c5c93b652ae42af9bd61d63e535152fd488f372fa32e5828ef859521c13f6f87fec9b426cabc93d74b0a633912ac21bd68d22390a
+DIST termcolor-1.1.3.crate 17242 BLAKE2B 5aef69c0004081bd3cc4d531d13d63627cc02313868c0faab62358d13abfa7b4ba82f142c2801d25a6ae46ecbc8b7bdbeaa21c9105ea3b8950ab6a38cdb88513 SHA512 5838fcbfd70f300cb4b62aab50565db52074c56b152ccc8ac1173e4676c0d5a636271bf5a645a77da6e1d4edbf0091af2cd4dd6d73b85c3d198c760898c06f3a
+DIST thiserror-1.0.41.crate 18734 BLAKE2B 4b2fb42333441ce6a93e74c08615293b58c1d614783a328591a6852144c164311c4e660f6f41c99b1279475066f854fe2c764f857fb69cf16ecd18a5770f7b89 SHA512 3f185746f2783f7f25b986e0aa1d8c3137f6aa2997a40531f04b2fbc00cb380226b0916bb266c8697a10d20d042c7dfa0fe7e767e6ca37346169c67ecfdf4a82
+DIST thiserror-impl-1.0.41.crate 15078 BLAKE2B 53d95c0ecfd2c9d50f618e572eac0a6faa7735fd9afdc8e2a9a7d730ceda83a7222be979d592811fe4a25fe4d992a261d6479df9bcc11abffa4a88571f7647ca SHA512 bf30f7391757f6424d585b28cc2501d962d0d85b6a903baa7d9ef9d4cb96c3b71db67719777aace08fe91fdeedd241905a4d9dc5de5fc97d099968e902191c9b
+DIST time-0.3.11.crate 91807 BLAKE2B d5b80416590bf48c8f403cc0e2ad735b95d98048dc335737fe509c44f805cc911fa55d6af611d3a05150b2a9ebedf005e8903a4daf66e245a5d5f290ed661c46 SHA512 214bb8c5573d3ee405a923f55e22ac3d659c30ba413f5e960e17d8f226d094133e2b52084e34efc6ece2311e13a862f2fcded9783937d69709d11144a8d6b48d
+DIST unicode-ident-1.0.2.crate 34951 BLAKE2B f03f7a040142785675a800672bb363dcf7aae266eebf50425436100249442f27b18837f9e297d93b59a9254c349e13222f8af892a9c0fbf2bac676df8a1b0e1e SHA512 60d78668b762eb842c15ee554c0c1175393702c805f1a874957d49104e9152ad2d0316966553fb14cb520aa858a84da223bf426d55e4ac23de3324a3bebc301c
+DIST utf8parse-0.2.1.crate 13435 BLAKE2B a1c111d7ffc60690f2aaa86f034c66ba1abe4e126f1774a4377d41eba3269369862f57515af387ea785d69a8adf46338b5e53761b5ee6f4f4380473f4d9cab0a SHA512 51fba8f1e7eb74b7020fd831e30a67fc8353ac2ee07335c8c3374a5570ac8117f165f6905d4b7f0360095b7b5ed3e739001d02a8cc3c89195baf2cd679136050
+DIST uuid-1.11.0.crate 47683 BLAKE2B 37a601b0fe7ec57333613f8c18ada76bd784c43c8af7c252200a7c9c76b445b179931cdf727b5ddae3ffa3fa29c5a13507fb0f2bd604d306982843e042038314 SHA512 0cd1b95fc2247bf4e627de6abb41e332ebaf39e5720640e52b9f235f7a0e2d451e7a486efdabb616ce00e47832d21919611683d0e6a71c86a86f290940cfda32
+DIST uuid-macro-internal-1.11.0.crate 9225 BLAKE2B 58f0c923185e2910601d6fed49fdf83aa1ec1c56629d9a8d938fe896f14a17166fd2ec6d55d6d9c3efaa0146a700d685b9513ee2dbbdd6c90a75d26944db2af4 SHA512 f6a3b4bcedf71b1d2ee9f1d57b772257624a88ea7b38e475d783db8c9a5e54e123350d9f8f6b235fa767bf75620fe4aa87e3e9c660fc1fedcaaac0b3ca474aff
+DIST version_check-0.9.4.crate 14895 BLAKE2B fa1fa4008af165bfc1fdbe560488afd9d232cfafee94104fbcc4cbc52f234849bff9ddfa88109a1ac682f6d9c1d86b0459893d223f64e65adc08966aaf93dc89 SHA512 b172dc9a3759a4a683ffc39b9a40b03b9974b626a088217de87090466cef695226557c226cf3e469b2b25ee7297b7eb0d7719878cab42457f80146a81943c0c8
+DIST vhost-0.13.0.crate 209860 BLAKE2B 3acfe85695a559db548c4d601e2ea19943846570509d655160bca4eb56df938d4a032c4f3a32c1c89e316b26672b8a9b98c042474ea8fcd7042d3d0e3601b1bb SHA512 cca79a922eed9ca23960de08ec6480927490309b980de7422dec6ed6acf00716bc786b7667948201eb239c3f8af210cf0485ee0884ae87e44328e70cd856bd88
+DIST vhost-user-backend-0.17.0.crate 29329 BLAKE2B ac5a9ed0c654e07d27b46a7c0b9b2d81ac79fa0c584aac0347f05c19d6007665111ad44c453b53bb8cbb2986e4c5c8dc029417d925d2000a92fe6800b5b1bb49 SHA512 417f3c7a984cb9ce4872b23ba07eff9b837f2ef04200ae4d849a445e38bdcc0d9755b5b007cb4c01820b166ab71786cec0dd54d3022c25e6f386d90751999d0c
+DIST virtio-bindings-0.2.4.crate 19048 BLAKE2B b86495f60c51a75e63fb98ba3c5d5b9ca85aea787c2fce43d18de5607576e352d1deb5e159395f29944d004c2a4b668fd5430361b2bfe833a0c5a4fa7877edcd SHA512 a5bc118c6dca2afc5aaee45ae65c817b957a7f8f534c4708fa0849eeb5cd1527a92bf63319bc47f4fc0507af4f38460fc31b029f86d6e5964f2721405d406e04
+DIST virtio-queue-0.14.0.crate 153316 BLAKE2B 1c91793d9a91c7a7426f42353e1e56f33453afc55ddabb8a4ab014c4262f8a15f91ad8c67d07c928da0ee3c1ce75b0003d13b28a5e29c9015a211be53a2ea373 SHA512 7c31b1dd6f120450e3467a5e26ad83b711891e0ea8c11e4cb563207ec8ccf438c34133552811f5a4f7235ff6746f56ed35e702b53d84cd4fb5b6f61cb2dcefc5
+DIST virtiofsd-v1.13.1.tar.bz2 137055 BLAKE2B 8d8e6214bfbaa204175d80f1cc920ffc81c98ab17b16d716389867ec656923e0f4c41eb07250e08fea9b717033ec5d339ac1176f10bac59377bd2e00ec858e99 SHA512 2e9a7b5200fbbdeb50a2defce6983aabbc7bac71711a4b6a00071aa7dc91f5cdc4ebe37aacabf54bf49d9afc659f34df2944907e2cc6b2d0995f8c2a4a7693e1
+DIST virtiofsd-v1.13.2.tar.bz2 138588 BLAKE2B ba450eaf004abef86d83d4833b3ec4e8f23e36b08938a4c8d391a13718fd05660d9361e493c6cf63b1d785929f5475dd675187c79ac0004480cab8a1263e4a06 SHA512 0b790b71251adce7f1db2774d09d761d2c0ef94acae5475ed887268fdf7a9927f1c9cc0f30ae2d54597302a9265cc3f2e8cf88042fd6372b0d2aa360fed07db7
+DIST virtiofsd-v1.13.3.tar.bz2 139109 BLAKE2B 52c60c2f4fd711e875abf904345c8d9d423b38b6ca32c50766cb946da8b6acfb6e2d6e40c9f4b9a1e53a74157d76201e821b65b0dde960e4a50a4469947cdc91 SHA512 a04bf95f1752d84a7248d435f991afafa66b4fbf059f480ab25bffcbd4eab4b6db3369121aa8359cf344080c6b63d9791834aae8b3f5f7110a3ebcf89598e97a
+DIST vm-memory-0.16.0.crate 85749 BLAKE2B f58d4cf43956e7be95794c20bfa8c5090be17d8b2e4bdde9cb7036424bd6c68417014f29b2de138f9da039ca2df1aee4ce8d297fecffb916bc68e3db1e87e85d SHA512 324584de07d3e02dd218ac432fa35b11114cc1213e483506e4f8a7fb2bd664c806b7ab8bfb17d95602aac8c5fabedd25e98dacac5e7a8bad39e11030de061ca0
+DIST vmm-sys-util-0.12.1.crate 58520 BLAKE2B 6b1d176169caa32fb6cbe77d4058dd1df37fc23e5a92d76b8f0eb5f7e2282c2a120f5ad3fdf7710bb1d0b0a24a34770a34310e5da6bcde4c230b485a81eaf2d7 SHA512 dbaf9e2cd002baa97f43ee7659e2bd259df9aeb029fdd5a7e7473c1d38cf82a8208ba5849c12ecc02571da1702082c3491673c68f8029f43c1234ed8e834f960
+DIST wasi-0.11.0+wasi-snapshot-preview1.crate 28131 BLAKE2B fe501889f25d65e2d032f885cc50c4f8bf7dd70fd5cbc438de349838370d8699e9627b0a4fc76030ea9fe6d508f41d0c9928a875fdbc47e73bfb17241cf7b155 SHA512 043500ab28cd9cb779475255da5d109ebab7fccca72b64873dc28d77bc5a157ba8d96b9e8f05223b5b36c7089bb7b4ba87657fc69bac16b78972f897294a865f
+DIST winapi-0.3.9.crate 1200382 BLAKE2B cb5799749ccd935ea2d7068d953cecf19f543d9db7dc16ad4584bb7005373ada34937a3ced7225544d8bc765da599911c7a3190efefb3a25b7c1bb7123b4f673 SHA512 ff8b7b78065f3d8999ec03c725a0460ebc059771bf071c7a3df3f0ecd733edf3b0a2450024d4e24e1aedddaecd9038ce1376c0d8bbf45132068cf45cf4a53a97
+DIST winapi-i686-pc-windows-gnu-0.4.0.crate 2918815 BLAKE2B 4d357e4d30f9552972170d65b9a5358b69c46a3e772fe05efc22f3d4ffc1caeeaad7aacdc7abd503a7ad0545f8bd7d22bf351dcb6df76f812fa4d45c34d65df0 SHA512 a672ccefd0730a8166fef1d4e39f9034d9ae426a3f5e28d1f4169fa5c5790767693f281d890e7804773b34acdb0ae1febac33cde8c50c0044a5a6152c7209ec2
+DIST winapi-util-0.1.5.crate 10164 BLAKE2B fc800aceae5249a858c806c3e969ef2545766099872d856ebee51c883d9acf1122278db9607d50ca53eac351502b700fd2463900932d342240f97f683d517963 SHA512 7baeb661f397c4693dfa001fdc774b323c51a7c55caad40f2de5112a1cefd1d6151e3df41fa4ee193460a5905917c83d2b1de5fa10b4bd014ad96690af95c0fd
+DIST winapi-x86_64-pc-windows-gnu-0.4.0.crate 2947998 BLAKE2B 2ad1ea8b5fa07d544e910ccba043ae925269b76b26c9da356305b34b86741dd8b9aff0b9ffe3d562db4fcd7d7c46a11ce9e3168b782b1d89ae6881742b7ede82 SHA512 4a654af6a5d649dc87e00497245096b35a2894ae66f155cb62389902c3b93ddcc5cf7d0d8b9dd97b291d2d80bc686af2298e80abef6ac69883f4a54e79712513
+DIST windows-sys-0.48.0.crate 2628884 BLAKE2B 551e900de4f67187ef034b60df9fd0e0d8f82a3100ef28e1eabd543ac129d882dc86ffcc1714071aba09e4cb2ae2d2f07ace1a32b99fd989ce525cf05991edab SHA512 bdf534bcf3face31e9ebe11427a911a53f89f4ff5eaea8cccd094e139bfe14b2aec602b1cab1df774794d999477439d9adc6b627a8e33c20334fc348ba2c47ed
+DIST windows-targets-0.48.1.crate 6902 BLAKE2B 8e6cd47dea52131c66983cbf4982e88f7bd30416dfae4e380f7afb39f67ee0ac88d40769668dd5aba40d4415f9f00cbc2ac98d598506fed26029f5ec4df3a2c5 SHA512 e48179620cce528292167f1d5ee2deea0659569c996dc90eb4ab62b9ea8baee6c0bea3ab739e06d8793c9690bfc895545ed0039cb633ca39293de79c42ea9de2
+DIST windows_aarch64_gnullvm-0.48.0.crate 366543 BLAKE2B 9b10f65089fe6da3ff38a1061783f635644ae84f567f891eaced280af68f7ff3919b34289e8850aa34554bb0346903273ff0a7fa743ca8794c2d23a9f1b0185f SHA512 80c5aa74c5669f7acff3882a8e7575f15e8d7cc58c11a1cb731ff423eb9cc9ba43cc6b80e52803c0d44e6a9001655ba87de6f43a9fe858da6d6e3a5c983a2711
+DIST windows_aarch64_msvc-0.48.0.crate 671479 BLAKE2B 0c80f210437628e1d878d1d14e884fea532c7539b3030aa76d46f27d02372c715c6e33d7efdbbd770666472b44a66c30711a33d819ede9cdcd51c96355802d45 SHA512 617e47a7202f1db4dbd3ecea509682135ccd85e3a458c0331b9bc7aa1d84e5756b59c881cb098d5c6d4c951248d13c8253a8e8a50938e1997bd19ceba77262df
+DIST windows_i686_gnu-0.48.0.crate 741490 BLAKE2B 5a4a584f8d8ee5bbd2d4c5b6749a66f2d43fc9e4ef90faab2227709b270f0d46fc26578c029edd96877c71309316ddb32d91c39f46d88f9a484c614f866e3dbe SHA512 15149fdd48b61b6d993acd392dbd353d0280d984ea88745217e4207937174bb90cdd9701f69ff0fe06a842f03607cbb57937d20d79ab577181e605a8a8fadc68
+DIST windows_i686_msvc-0.48.0.crate 730056 BLAKE2B 4e4ad6ed94948145199c2ed50fc65e4af08455a0fd058bb0f763d481f30b029f99a2b8dbac087b29e762500a19270f6683baf62ba99d141eb002a5b0b5c8ea05 SHA512 11a50800e709712dbea907275bc0faa46d2eb2969118445ed5b932d9c5957a09592a5b26a40e554c1f5fd56c6d074a07637e6f88eedd2224e1001e62df7b469b
+DIST windows_x86_64_gnu-0.48.0.crate 703595 BLAKE2B b227efb78a99c43d0538cceadada3fa1840df29adc665787fdcf845b73e77d782da8a9f9aa602e1da61401b550d0107176feb6c397c922a6240b38cc8f04a180 SHA512 38eff1164fb37dbd2bbe53404b20cba92de84cbbd5e4eb9ad60d51fb43d6fdb8b87a1488e2c88ebd4b3ff3b708f93fdc05df4b14a285d3ff11c33ff0d9828602
+DIST windows_x86_64_gnullvm-0.48.0.crate 366536 BLAKE2B 295dc3aef18c604d1579978045f4058b1a315083a8ab842bddf5800ec3460b1530ad88c3464acab712a229290aca235810de8a3b6a253859a354d9fa97277e58 SHA512 8d82fad4c8445030844708aa026a62f1ca43362b8e15f14b0d226c7e9cda04ffa0715087b6a025dbb738e8891de24fcc4a2df071a532917cf03c4a46f934f396
+DIST windows_x86_64_msvc-0.48.0.crate 671422 BLAKE2B abb063610dcc38581657133182b7d9efeed5553df67bd2bd6f30f1668a645186e4824f9ef556a5abc84ace10b1b437b6325bbda6df5a64ce880d7dcb743ac786 SHA512 6e598b8e3ac54912a8ebac01b0dd2c58fd282072527d7fedc7f6ebecdfb7dcb09ae46c22293bc0117849437f8b053db5e90406e7a38276f0f0afd06be3966795
+DIST zerocopy-0.7.35.crate 152645 BLAKE2B 8f13123c9d9257ac5a5c6954d38c3510fa658624442f7e03cdcc6db5a0977d9f26bb4e277be172b7872ec365cf6e58ac742e5578636f7698f9f37093e9249d9a SHA512 17fcb31c029ae89c01e5bae5fb2bb46bd434120199a3dc2c7fe0012dbbcfe2a0bb38934c4a7d3a4920e3fe47c097403beee554fefa54b66cb390f8b1de638d3c
+DIST zerocopy-derive-0.7.35.crate 37829 BLAKE2B badeb7fa5e0bfe93a6788d93fd297604ed31de526b121549300ead3c49d450f49265f499e2e7ce606dcce2b59dd01f7fa817b8fbb3f237475185c5b42f5299c4 SHA512 dbe23573b62a6267d7bc8c744320b75b2fbda03b908c1d175211f7394374fe182bce58021e25485c10671d726b2007f250565dfe53134d51c89293bb607e9feb
diff --git a/app-emulation/virtiofsd/metadata.xml b/app-emulation/virtiofsd/metadata.xml
new file mode 100644
index 000000000000..3c3f18df0b60
--- /dev/null
+++ b/app-emulation/virtiofsd/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>michal.privoznik@gmail.com</email>
+ <name>Michal Privoznik</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtiofsd/virtiofsd-1.13.1.ebuild b/app-emulation/virtiofsd/virtiofsd-1.13.1.ebuild
new file mode 100644
index 000000000000..2b6a78c423a6
--- /dev/null
+++ b/app-emulation/virtiofsd/virtiofsd-1.13.1.ebuild
@@ -0,0 +1,183 @@
+# Copyright 2023-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ aho-corasick@0.7.18
+ anstream@0.3.2
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.1
+ anstyle@1.0.1
+ arc-swap@1.5.0
+ atomic-polyfill@0.1.11
+ atty@0.2.14
+ autocfg@1.1.0
+ bitflags@1.3.2
+ bitflags@2.4.1
+ btree-range-map@0.7.2
+ btree-slab@0.6.1
+ byteorder@1.4.3
+ capng@0.2.2
+ cc-traits@2.0.0
+ cc@1.0.79
+ cfg-if@1.0.0
+ clap@4.3.11
+ clap_builder@4.3.11
+ clap_derive@4.3.2
+ clap_lex@0.5.0
+ cobs@0.2.3
+ colorchoice@1.0.0
+ critical-section@1.1.2
+ env_logger@0.8.4
+ errno-dragonfly@0.1.2
+ errno@0.3.1
+ error-chain@0.12.4
+ futures-channel@0.3.21
+ futures-core@0.3.21
+ futures-executor@0.3.21
+ futures-io@0.3.21
+ futures-macro@0.3.21
+ futures-sink@0.3.21
+ futures-task@0.3.21
+ futures-util@0.3.21
+ futures@0.3.21
+ getrandom@0.2.15
+ hash32@0.2.1
+ heapless@0.7.16
+ heck@0.4.1
+ hermit-abi@0.1.19
+ hermit-abi@0.3.2
+ hostname@0.3.1
+ humantime@2.1.0
+ is-terminal@0.4.9
+ itoa@1.0.2
+ libc@0.2.155
+ libseccomp-sys@0.2.1
+ linux-raw-sys@0.4.5
+ lock_api@0.4.10
+ log@0.4.17
+ match_cfg@0.1.0
+ memchr@2.5.0
+ num_cpus@1.13.1
+ num_threads@0.1.6
+ once_cell@1.18.0
+ pin-project-lite@0.2.9
+ pin-utils@0.1.0
+ postcard@1.0.6
+ ppv-lite86@0.2.20
+ proc-macro2@1.0.63
+ quote@1.0.29
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ range-traits@0.3.2
+ regex-syntax@0.6.27
+ regex@1.6.0
+ rustc_version@0.4.0
+ rustix@0.38.7
+ scopeguard@1.2.0
+ semver@1.0.18
+ serde@1.0.168
+ serde_derive@1.0.168
+ slab@0.4.7
+ smallvec@1.13.2
+ spin@0.9.8
+ stable_deref_trait@1.2.0
+ strsim@0.10.0
+ syn@1.0.98
+ syn@2.0.32
+ syslog@6.1.1
+ termcolor@1.1.3
+ thiserror-impl@1.0.41
+ thiserror@1.0.41
+ time@0.3.11
+ unicode-ident@1.0.2
+ utf8parse@0.2.1
+ uuid-macro-internal@1.11.0
+ uuid@1.11.0
+ version_check@0.9.4
+ vhost-user-backend@0.17.0
+ vhost@0.13.0
+ virtio-bindings@0.2.4
+ virtio-queue@0.14.0
+ vm-memory@0.16.0
+ vmm-sys-util@0.12.1
+ wasi@0.11.0+wasi-snapshot-preview1
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.48.0
+ windows-targets@0.48.1
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_msvc@0.48.0
+ zerocopy-derive@0.7.35
+ zerocopy@0.7.35
+"
+
+inherit cargo
+
+DESCRIPTION="Shared file system for virtual machines"
+HOMEPAGE="https://virtio-fs.gitlab.io/"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/virtio-fs/virtiofsd.git"
+ EGIT_BRANCH="main"
+else
+ SRC_URI="
+ https://gitlab.com/virtio-fs/virtiofsd/-/archive/v${PV}/virtiofsd-v${PV}.tar.bz2
+ ${CARGO_CRATE_URIS}
+ "
+ KEYWORDS="amd64 ppc64"
+ S="${WORKDIR}/${PN}-v${PV}"
+fi
+
+LICENSE="Apache-2.0 BSD"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0 BSD MIT Unicode-DFS-2016"
+SLOT="0"
+
+DEPEND="
+ sys-libs/libcap-ng
+ sys-libs/libseccomp
+"
+RDEPEND="
+ sys-apps/shadow
+ ${DEPEND}
+"
+
+# rust does not use *FLAGS from make.conf, silence portage warning
+# update with proper path to binaries this crate installs, omit leading /
+QA_FLAGS_IGNORED="usr/libexec/${PN}"
+
+src_unpack() {
+ if [[ "${PV}" == *9999* ]]; then
+ git-r3_src_unpack
+ cargo_live_src_unpack
+ else
+ cargo_src_unpack
+ fi
+}
+
+src_install() {
+ cargo_src_install
+
+ mkdir "${ED}/usr/libexec" || die
+ mv "${ED}/usr/"{bin,libexec}/${PN} || die
+
+ # Install 50-virtiofsd.json but to avoid conflicts with
+ # <app-emulation/qemu-8.0.0 install it under different name. In this case,
+ # smaller number means higher priority, but that's probably what users want
+ # anyway if they install this package on top of app-emulation/qemu.
+ # TODO: remove once old QEMUs are removed from the portage.
+ insinto "/usr/share/qemu/vhost-user"
+ newins "50-virtiofsd.json" "40-virtiofsd.json"
+}
diff --git a/app-emulation/virtiofsd/virtiofsd-1.13.2.ebuild b/app-emulation/virtiofsd/virtiofsd-1.13.2.ebuild
new file mode 100644
index 000000000000..0f61b7fb1f7e
--- /dev/null
+++ b/app-emulation/virtiofsd/virtiofsd-1.13.2.ebuild
@@ -0,0 +1,181 @@
+# Copyright 2023-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ aho-corasick@0.7.18
+ anstream@0.3.2
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.1
+ anstyle@1.0.1
+ arc-swap@1.5.0
+ atomic-polyfill@0.1.11
+ atty@0.2.14
+ autocfg@1.1.0
+ bitflags@1.3.2
+ bitflags@2.4.1
+ btree-range-map@0.7.2
+ btree-slab@0.6.1
+ byteorder@1.4.3
+ capng@0.2.2
+ cc-traits@2.0.0
+ cc@1.0.79
+ cfg-if@1.0.0
+ clap@4.3.11
+ clap_builder@4.3.11
+ clap_derive@4.3.2
+ clap_lex@0.5.0
+ cobs@0.2.3
+ colorchoice@1.0.0
+ critical-section@1.1.2
+ env_logger@0.8.4
+ errno-dragonfly@0.1.2
+ errno@0.3.1
+ error-chain@0.12.4
+ futures-channel@0.3.21
+ futures-core@0.3.21
+ futures-executor@0.3.21
+ futures-io@0.3.21
+ futures-macro@0.3.21
+ futures-sink@0.3.21
+ futures-task@0.3.21
+ futures-util@0.3.21
+ futures@0.3.21
+ getrandom@0.2.15
+ hash32@0.2.1
+ heapless@0.7.16
+ heck@0.4.1
+ hermit-abi@0.1.19
+ hermit-abi@0.3.2
+ hostname@0.3.1
+ humantime@2.1.0
+ is-terminal@0.4.9
+ itoa@1.0.2
+ libc@0.2.155
+ libseccomp-sys@0.2.1
+ linux-raw-sys@0.4.5
+ lock_api@0.4.10
+ log@0.4.17
+ match_cfg@0.1.0
+ memchr@2.5.0
+ num_cpus@1.13.1
+ num_threads@0.1.6
+ once_cell@1.18.0
+ pin-project-lite@0.2.9
+ pin-utils@0.1.0
+ postcard@1.0.6
+ ppv-lite86@0.2.20
+ proc-macro2@1.0.63
+ quote@1.0.29
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ range-traits@0.3.2
+ regex-syntax@0.6.27
+ regex@1.6.0
+ rustc_version@0.4.0
+ rustix@0.38.7
+ scopeguard@1.2.0
+ semver@1.0.18
+ serde@1.0.168
+ serde_derive@1.0.168
+ slab@0.4.7
+ smallvec@1.13.2
+ spin@0.9.8
+ stable_deref_trait@1.2.0
+ strsim@0.10.0
+ syn@1.0.98
+ syn@2.0.32
+ syslog@6.1.1
+ termcolor@1.1.3
+ thiserror-impl@1.0.41
+ thiserror@1.0.41
+ time@0.3.11
+ unicode-ident@1.0.2
+ utf8parse@0.2.1
+ uuid-macro-internal@1.11.0
+ uuid@1.11.0
+ version_check@0.9.4
+ vhost-user-backend@0.17.0
+ vhost@0.13.0
+ virtio-bindings@0.2.4
+ virtio-queue@0.14.0
+ vm-memory@0.16.0
+ vmm-sys-util@0.12.1
+ wasi@0.11.0+wasi-snapshot-preview1
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.48.0
+ windows-targets@0.48.1
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_msvc@0.48.0
+ zerocopy-derive@0.7.35
+ zerocopy@0.7.35
+"
+
+inherit cargo
+
+DESCRIPTION="Shared file system for virtual machines"
+HOMEPAGE="https://virtio-fs.gitlab.io/"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/virtio-fs/virtiofsd.git"
+ EGIT_BRANCH="main"
+else
+ SRC_URI="https://gitlab.com/virtio-fs/virtiofsd/-/archive/v${PV}/virtiofsd-v${PV}.tar.bz2"
+ SRC_URI+=" ${CARGO_CRATE_URIS}"
+ KEYWORDS="amd64 ~arm64 ppc64"
+ S="${WORKDIR}/${PN}-v${PV}"
+fi
+
+LICENSE="Apache-2.0 BSD"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0-with-LLVM-exceptions MIT Unicode-DFS-2016 Unlicense"
+SLOT="0"
+
+DEPEND="
+ sys-libs/libcap-ng
+ sys-libs/libseccomp
+"
+RDEPEND="
+ sys-apps/shadow
+ ${DEPEND}
+"
+
+# rust does not use *FLAGS from make.conf, silence portage warning
+# update with proper path to binaries this crate installs, omit leading /
+QA_FLAGS_IGNORED="usr/libexec/${PN}"
+
+src_unpack() {
+ if [[ "${PV}" == *9999* ]]; then
+ git-r3_src_unpack
+ cargo_live_src_unpack
+ else
+ cargo_src_unpack
+ fi
+}
+
+src_install() {
+ cargo_src_install
+
+ mkdir "${ED}/usr/libexec" || die
+ mv "${ED}/usr/"{bin,libexec}/${PN} || die
+
+ # Install 50-virtiofsd.json but to avoid conflicts with
+ # <app-emulation/qemu-8.0.0 install it under different name. In this case,
+ # smaller number means higher priority, but that's probably what users want
+ # anyway if they install this package on top of app-emulation/qemu.
+ # TODO: remove once old QEMUs are removed from the portage.
+ insinto "/usr/share/qemu/vhost-user"
+ newins "50-virtiofsd.json" "40-virtiofsd.json"
+}
diff --git a/app-emulation/virtiofsd/virtiofsd-1.13.3.ebuild b/app-emulation/virtiofsd/virtiofsd-1.13.3.ebuild
new file mode 100644
index 000000000000..0dc295972a5b
--- /dev/null
+++ b/app-emulation/virtiofsd/virtiofsd-1.13.3.ebuild
@@ -0,0 +1,181 @@
+# Copyright 2023-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ aho-corasick@0.7.18
+ anstream@0.3.2
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.1
+ anstyle@1.0.1
+ arc-swap@1.5.0
+ atomic-polyfill@0.1.11
+ atty@0.2.14
+ autocfg@1.1.0
+ bitflags@1.3.2
+ bitflags@2.4.1
+ btree-range-map@0.7.2
+ btree-slab@0.6.1
+ byteorder@1.4.3
+ capng@0.2.2
+ cc-traits@2.0.0
+ cc@1.0.79
+ cfg-if@1.0.0
+ clap@4.3.11
+ clap_builder@4.3.11
+ clap_derive@4.3.2
+ clap_lex@0.5.0
+ cobs@0.2.3
+ colorchoice@1.0.0
+ critical-section@1.1.2
+ env_logger@0.8.4
+ errno-dragonfly@0.1.2
+ errno@0.3.1
+ error-chain@0.12.4
+ futures-channel@0.3.21
+ futures-core@0.3.21
+ futures-executor@0.3.21
+ futures-io@0.3.21
+ futures-macro@0.3.21
+ futures-sink@0.3.21
+ futures-task@0.3.21
+ futures-util@0.3.21
+ futures@0.3.21
+ getrandom@0.2.15
+ hash32@0.2.1
+ heapless@0.7.16
+ heck@0.4.1
+ hermit-abi@0.1.19
+ hermit-abi@0.3.2
+ hostname@0.3.1
+ humantime@2.1.0
+ is-terminal@0.4.9
+ itoa@1.0.2
+ libc@0.2.177
+ libseccomp-sys@0.2.1
+ linux-raw-sys@0.4.5
+ lock_api@0.4.10
+ log@0.4.17
+ match_cfg@0.1.0
+ memchr@2.5.0
+ num_cpus@1.13.1
+ num_threads@0.1.6
+ once_cell@1.18.0
+ pin-project-lite@0.2.9
+ pin-utils@0.1.0
+ postcard@1.0.6
+ ppv-lite86@0.2.20
+ proc-macro2@1.0.63
+ quote@1.0.29
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ range-traits@0.3.2
+ regex-syntax@0.6.27
+ regex@1.6.0
+ rustc_version@0.4.0
+ rustix@0.38.7
+ scopeguard@1.2.0
+ semver@1.0.18
+ serde@1.0.168
+ serde_derive@1.0.168
+ slab@0.4.7
+ smallvec@1.13.2
+ spin@0.9.8
+ stable_deref_trait@1.2.0
+ strsim@0.10.0
+ syn@1.0.98
+ syn@2.0.32
+ syslog@6.1.1
+ termcolor@1.1.3
+ thiserror-impl@1.0.41
+ thiserror@1.0.41
+ time@0.3.11
+ unicode-ident@1.0.2
+ utf8parse@0.2.1
+ uuid-macro-internal@1.11.0
+ uuid@1.11.0
+ version_check@0.9.4
+ vhost-user-backend@0.17.0
+ vhost@0.13.0
+ virtio-bindings@0.2.4
+ virtio-queue@0.14.0
+ vm-memory@0.16.0
+ vmm-sys-util@0.12.1
+ wasi@0.11.0+wasi-snapshot-preview1
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.48.0
+ windows-targets@0.48.1
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_msvc@0.48.0
+ zerocopy-derive@0.7.35
+ zerocopy@0.7.35
+"
+
+inherit cargo
+
+DESCRIPTION="Shared file system for virtual machines"
+HOMEPAGE="https://virtio-fs.gitlab.io/"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/virtio-fs/virtiofsd.git"
+ EGIT_BRANCH="main"
+else
+ SRC_URI="https://gitlab.com/virtio-fs/virtiofsd/-/archive/v${PV}/virtiofsd-v${PV}.tar.bz2"
+ SRC_URI+=" ${CARGO_CRATE_URIS}"
+ KEYWORDS="~amd64 ~arm64 ~ppc64"
+ S="${WORKDIR}/${PN}-v${PV}"
+fi
+
+LICENSE="Apache-2.0 BSD"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0 BSD MIT Unicode-DFS-2016"
+SLOT="0"
+
+DEPEND="
+ sys-libs/libcap-ng
+ sys-libs/libseccomp
+"
+RDEPEND="
+ sys-apps/shadow
+ ${DEPEND}
+"
+
+# rust does not use *FLAGS from make.conf, silence portage warning
+# update with proper path to binaries this crate installs, omit leading /
+QA_FLAGS_IGNORED="usr/libexec/${PN}"
+
+src_unpack() {
+ if [[ "${PV}" == *9999* ]]; then
+ git-r3_src_unpack
+ cargo_live_src_unpack
+ else
+ cargo_src_unpack
+ fi
+}
+
+src_install() {
+ cargo_src_install
+
+ mkdir "${ED}/usr/libexec" || die
+ mv "${ED}/usr/"{bin,libexec}/${PN} || die
+
+ # Install 50-virtiofsd.json but to avoid conflicts with
+ # <app-emulation/qemu-8.0.0 install it under different name. In this case,
+ # smaller number means higher priority, but that's probably what users want
+ # anyway if they install this package on top of app-emulation/qemu.
+ # TODO: remove once old QEMUs are removed from the portage.
+ insinto "/usr/share/qemu/vhost-user"
+ newins "50-virtiofsd.json" "40-virtiofsd.json"
+}
diff --git a/app-emulation/virtiofsd/virtiofsd-9999.ebuild b/app-emulation/virtiofsd/virtiofsd-9999.ebuild
new file mode 100644
index 000000000000..0dc295972a5b
--- /dev/null
+++ b/app-emulation/virtiofsd/virtiofsd-9999.ebuild
@@ -0,0 +1,181 @@
+# Copyright 2023-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+CRATES="
+ aho-corasick@0.7.18
+ anstream@0.3.2
+ anstyle-parse@0.2.1
+ anstyle-query@1.0.0
+ anstyle-wincon@1.0.1
+ anstyle@1.0.1
+ arc-swap@1.5.0
+ atomic-polyfill@0.1.11
+ atty@0.2.14
+ autocfg@1.1.0
+ bitflags@1.3.2
+ bitflags@2.4.1
+ btree-range-map@0.7.2
+ btree-slab@0.6.1
+ byteorder@1.4.3
+ capng@0.2.2
+ cc-traits@2.0.0
+ cc@1.0.79
+ cfg-if@1.0.0
+ clap@4.3.11
+ clap_builder@4.3.11
+ clap_derive@4.3.2
+ clap_lex@0.5.0
+ cobs@0.2.3
+ colorchoice@1.0.0
+ critical-section@1.1.2
+ env_logger@0.8.4
+ errno-dragonfly@0.1.2
+ errno@0.3.1
+ error-chain@0.12.4
+ futures-channel@0.3.21
+ futures-core@0.3.21
+ futures-executor@0.3.21
+ futures-io@0.3.21
+ futures-macro@0.3.21
+ futures-sink@0.3.21
+ futures-task@0.3.21
+ futures-util@0.3.21
+ futures@0.3.21
+ getrandom@0.2.15
+ hash32@0.2.1
+ heapless@0.7.16
+ heck@0.4.1
+ hermit-abi@0.1.19
+ hermit-abi@0.3.2
+ hostname@0.3.1
+ humantime@2.1.0
+ is-terminal@0.4.9
+ itoa@1.0.2
+ libc@0.2.177
+ libseccomp-sys@0.2.1
+ linux-raw-sys@0.4.5
+ lock_api@0.4.10
+ log@0.4.17
+ match_cfg@0.1.0
+ memchr@2.5.0
+ num_cpus@1.13.1
+ num_threads@0.1.6
+ once_cell@1.18.0
+ pin-project-lite@0.2.9
+ pin-utils@0.1.0
+ postcard@1.0.6
+ ppv-lite86@0.2.20
+ proc-macro2@1.0.63
+ quote@1.0.29
+ rand@0.8.5
+ rand_chacha@0.3.1
+ rand_core@0.6.4
+ range-traits@0.3.2
+ regex-syntax@0.6.27
+ regex@1.6.0
+ rustc_version@0.4.0
+ rustix@0.38.7
+ scopeguard@1.2.0
+ semver@1.0.18
+ serde@1.0.168
+ serde_derive@1.0.168
+ slab@0.4.7
+ smallvec@1.13.2
+ spin@0.9.8
+ stable_deref_trait@1.2.0
+ strsim@0.10.0
+ syn@1.0.98
+ syn@2.0.32
+ syslog@6.1.1
+ termcolor@1.1.3
+ thiserror-impl@1.0.41
+ thiserror@1.0.41
+ time@0.3.11
+ unicode-ident@1.0.2
+ utf8parse@0.2.1
+ uuid-macro-internal@1.11.0
+ uuid@1.11.0
+ version_check@0.9.4
+ vhost-user-backend@0.17.0
+ vhost@0.13.0
+ virtio-bindings@0.2.4
+ virtio-queue@0.14.0
+ vm-memory@0.16.0
+ vmm-sys-util@0.12.1
+ wasi@0.11.0+wasi-snapshot-preview1
+ winapi-i686-pc-windows-gnu@0.4.0
+ winapi-util@0.1.5
+ winapi-x86_64-pc-windows-gnu@0.4.0
+ winapi@0.3.9
+ windows-sys@0.48.0
+ windows-targets@0.48.1
+ windows_aarch64_gnullvm@0.48.0
+ windows_aarch64_msvc@0.48.0
+ windows_i686_gnu@0.48.0
+ windows_i686_msvc@0.48.0
+ windows_x86_64_gnu@0.48.0
+ windows_x86_64_gnullvm@0.48.0
+ windows_x86_64_msvc@0.48.0
+ zerocopy-derive@0.7.35
+ zerocopy@0.7.35
+"
+
+inherit cargo
+
+DESCRIPTION="Shared file system for virtual machines"
+HOMEPAGE="https://virtio-fs.gitlab.io/"
+
+if [[ ${PV} == *9999* ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.com/virtio-fs/virtiofsd.git"
+ EGIT_BRANCH="main"
+else
+ SRC_URI="https://gitlab.com/virtio-fs/virtiofsd/-/archive/v${PV}/virtiofsd-v${PV}.tar.bz2"
+ SRC_URI+=" ${CARGO_CRATE_URIS}"
+ KEYWORDS="~amd64 ~arm64 ~ppc64"
+ S="${WORKDIR}/${PN}-v${PV}"
+fi
+
+LICENSE="Apache-2.0 BSD"
+# Dependent crate licenses
+LICENSE+=" Apache-2.0 BSD MIT Unicode-DFS-2016"
+SLOT="0"
+
+DEPEND="
+ sys-libs/libcap-ng
+ sys-libs/libseccomp
+"
+RDEPEND="
+ sys-apps/shadow
+ ${DEPEND}
+"
+
+# rust does not use *FLAGS from make.conf, silence portage warning
+# update with proper path to binaries this crate installs, omit leading /
+QA_FLAGS_IGNORED="usr/libexec/${PN}"
+
+src_unpack() {
+ if [[ "${PV}" == *9999* ]]; then
+ git-r3_src_unpack
+ cargo_live_src_unpack
+ else
+ cargo_src_unpack
+ fi
+}
+
+src_install() {
+ cargo_src_install
+
+ mkdir "${ED}/usr/libexec" || die
+ mv "${ED}/usr/"{bin,libexec}/${PN} || die
+
+ # Install 50-virtiofsd.json but to avoid conflicts with
+ # <app-emulation/qemu-8.0.0 install it under different name. In this case,
+ # smaller number means higher priority, but that's probably what users want
+ # anyway if they install this package on top of app-emulation/qemu.
+ # TODO: remove once old QEMUs are removed from the portage.
+ insinto "/usr/share/qemu/vhost-user"
+ newins "50-virtiofsd.json" "40-virtiofsd.json"
+}
diff --git a/app-emulation/virtualbox-additions/Manifest b/app-emulation/virtualbox-additions/Manifest
new file mode 100644
index 000000000000..197e7bea3d14
--- /dev/null
+++ b/app-emulation/virtualbox-additions/Manifest
@@ -0,0 +1,4 @@
+DIST VBoxGuestAdditions_7.0.26.iso 54992896 BLAKE2B a52bcf234232723e3c04e7de5fda518a745b3128f2fd3d1213a97d69e3f010647056d407b05e9f7f1debb966e32b0189c4fc4176e096e7b5ac3ba27e1adad57e SHA512 636328e8ccdbbefbcccce1750dcb984bbb52d886e3f6f94f119212e9d9258d6d37029f65a8ce6b86d677014d45f48d255ed9346de4edbd53f609b64ba9b5b1e9
+DIST VBoxGuestAdditions_7.1.18.iso 61454336 BLAKE2B 7e863fad6c3d6ab65947a36cc7579c577a7a391215c92a435e6760e766145c71fe600b193da010e7996b91c7221a678e2fae723bb1a223f2488ca9294ce0ec3e SHA512 d196ad3a73d47785a5784bfecb9e1e08acd1ec6155f9e86ca2b95ceba7f0815332b5e4931ff5c2f60c0526614912c4fcf7280cf1a48a60b919185e31e02825ff
+DIST VBoxGuestAdditions_7.2.6.iso 53391360 BLAKE2B 5086951316215d476b503238a16233ae6119fcdebb47c1356286bc84ab98c867c85c68b4aa7f3eec43ae4b66cbf1c81dbc297509c7f523496a96c72d27706bda SHA512 1d1c1e18390e5e4906207d85923204faa4a85e496906eb26ef49c00c845b359cda4ec305a374273f00535dd43eb5776ceef86aa59738e21ac3a242cc38e3590c
+DIST VBoxGuestAdditions_7.2.8.iso 53442560 BLAKE2B 2573b283839d42e7fa3b3e6b37d0c7dfca0bbd223d1a7af3b5452c9b7ee364e465b19e0d1cf70524991579a7b16e134483fef58169bf45ad72b2e176f9696881 SHA512 265a58341b842278c3e2500f605636b3d69af376456c2366abb72e93daf95d419de23f20e8528d6550084253c5b1e953014f20ad53535d716dadff96e01a5ef2
diff --git a/app-emulation/virtualbox-additions/metadata.xml b/app-emulation/virtualbox-additions/metadata.xml
new file mode 100644
index 000000000000..607acb789312
--- /dev/null
+++ b/app-emulation/virtualbox-additions/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:oracle:vm_virtualbox</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-additions/virtualbox-additions-7.0.26.ebuild b/app-emulation/virtualbox-additions/virtualbox-additions-7.0.26.ebuild
new file mode 100644
index 000000000000..b3af06cc20ab
--- /dev/null
+++ b/app-emulation/virtualbox-additions/virtualbox-additions-7.0.26.ebuild
@@ -0,0 +1,25 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PN=VBoxGuestAdditions
+MY_P=${MY_PN}_${PV}
+
+DESCRIPTION="CD image containing guest additions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${PV}/${MY_P}.iso"
+S="${WORKDIR}"
+
+LICENSE="GPL-3 || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+src_unpack() {
+ return 0
+}
+
+src_install() {
+ insinto /usr/share/${PN/-additions}
+ newins "${DISTDIR}"/${MY_P}.iso ${MY_PN}.iso
+}
diff --git a/app-emulation/virtualbox-additions/virtualbox-additions-7.1.18.ebuild b/app-emulation/virtualbox-additions/virtualbox-additions-7.1.18.ebuild
new file mode 100644
index 000000000000..f07acacae506
--- /dev/null
+++ b/app-emulation/virtualbox-additions/virtualbox-additions-7.1.18.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PN=VBoxGuestAdditions
+MY_PV=${PV^^}
+MY_P=${MY_PN}_${MY_PV}
+
+DESCRIPTION="CD image containing guest additions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.iso"
+S="${WORKDIR}"
+
+LICENSE="GPL-3 || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+
+src_unpack() {
+ return 0
+}
+
+src_install() {
+ insinto /usr/share/${PN/-additions}
+ newins "${DISTDIR}"/${MY_P}.iso ${MY_PN}.iso
+}
diff --git a/app-emulation/virtualbox-additions/virtualbox-additions-7.2.6.ebuild b/app-emulation/virtualbox-additions/virtualbox-additions-7.2.6.ebuild
new file mode 100644
index 000000000000..fdec5d1d5717
--- /dev/null
+++ b/app-emulation/virtualbox-additions/virtualbox-additions-7.2.6.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PN=VBoxGuestAdditions
+MY_PV=${PV^^}
+MY_P=${MY_PN}_${MY_PV}
+
+DESCRIPTION="CD image containing guest additions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.iso"
+S="${WORKDIR}"
+
+LICENSE="GPL-3 || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+src_unpack() {
+ return 0
+}
+
+src_install() {
+ insinto /usr/share/${PN/-additions}
+ newins "${DISTDIR}"/${MY_P}.iso ${MY_PN}.iso
+}
diff --git a/app-emulation/virtualbox-additions/virtualbox-additions-7.2.8.ebuild b/app-emulation/virtualbox-additions/virtualbox-additions-7.2.8.ebuild
new file mode 100644
index 000000000000..fdec5d1d5717
--- /dev/null
+++ b/app-emulation/virtualbox-additions/virtualbox-additions-7.2.8.ebuild
@@ -0,0 +1,26 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PN=VBoxGuestAdditions
+MY_PV=${PV^^}
+MY_P=${MY_PN}_${MY_PV}
+
+DESCRIPTION="CD image containing guest additions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.iso"
+S="${WORKDIR}"
+
+LICENSE="GPL-3 || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+src_unpack() {
+ return 0
+}
+
+src_install() {
+ insinto /usr/share/${PN/-additions}
+ newins "${DISTDIR}"/${MY_P}.iso ${MY_PN}.iso
+}
diff --git a/app-emulation/virtualbox-extpack-oracle/Manifest b/app-emulation/virtualbox-extpack-oracle/Manifest
new file mode 100644
index 000000000000..7836647048e6
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/Manifest
@@ -0,0 +1,4 @@
+DIST Oracle_VM_VirtualBox_Extension_Pack-7.0.26.tar.gz 18268793 BLAKE2B 26b53bb022dab26a02fb450252ad07d58b3e9f7fb103752396652e1950b6c77f4f2ff8eff1a1e6d4a0c38de331110b26f26f1750d211aaebb71198513e2fad74 SHA512 bae8dfeea7048a1d7057b27f9815fa626b87beafa182d801b650048dd95cfae7cf87ed7dbf2dc87678748b5f4e46d7d284da1d1aaa0be9b3e214ccb16dd76630
+DIST Oracle_VirtualBox_Extension_Pack-7.1.18.tar.gz 22971432 BLAKE2B eff180e2c1f112698184d863a3f7907af6f87dd34dd60baed09d29a2c7799d5079ab743d59e7b0421716cf9c5674b2caeb28626e46bf6ca790b893427473e722 SHA512 cc86ece4fa818c5f2459513eb53eabe581bc76dddaca8d155c4824f2c838ec8356c63dcb3fe951ad43fa29be49ce34774fadc1eeca519cafdbe1ce368e18166f
+DIST Oracle_VirtualBox_Extension_Pack-7.2.6.tar.gz 20040709 BLAKE2B 759afd7b8b1b55faf7723d5658f2a42c8e4d10b18c0144bb408dbe955bd24f165da095302394e2a2439b414f799d3e801fa00d8ac4791d727ddb8b2bc91d22f2 SHA512 4878a961333b488195713315c726f132f36d943e9b4a2def7d94f751595f9b3b1ab52dd38b574dc9b896cf9c73e0670fa3d5f2a2c28ba0d6ac1ef97fb346aa49
+DIST Oracle_VirtualBox_Extension_Pack-7.2.8.tar.gz 20069022 BLAKE2B db3176fecee6382cb015c00f708ffad88d5cf4139c165bc453525ec5c059fa2c4f007bafd1ec493bfe3882aad6449b737afa66f9bf4079ffa7ab0998b5af89df SHA512 abef46967131ef0d37ab63a5c0b2d0b843e7c723a31b3f2daae8d9dd05fbef4feb33bd039ff0b7da2b1222e16809fa767736432d3bf533915b786dfaa89e70e0
diff --git a/app-emulation/virtualbox-extpack-oracle/metadata.xml b/app-emulation/virtualbox-extpack-oracle/metadata.xml
new file mode 100644
index 000000000000..607acb789312
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:oracle:vm_virtualbox</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.0.26.ebuild b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.0.26.ebuild
new file mode 100644
index 000000000000..8bfb156c171d
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.0.26.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PV="$(ver_cut 1-3)"
+MY_PN="Oracle_VM_VirtualBox_Extension_Pack"
+MY_P="${MY_PN}-${MY_PV}"
+
+DESCRIPTION="PUEL extensions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.vbox-extpack -> ${MY_P}.tar.gz"
+S="${WORKDIR}"
+
+LICENSE="PUEL-11"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+RESTRICT="bindist mirror strip"
+
+RDEPEND="
+ || (
+ =app-emulation/virtualbox-${MY_PV}*
+ =app-emulation/virtualbox-kvm-${MY_PV}*
+ )
+"
+
+QA_PREBUILT="usr/lib*/virtualbox/ExtensionPacks/${MY_PN}/*"
+
+src_install() {
+ insinto /usr/$(get_libdir)/virtualbox/ExtensionPacks/${MY_PN}
+ doins -r linux.${ARCH}
+ doins ExtPack* PXE-Intel.rom
+}
diff --git a/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.1.18.ebuild b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.1.18.ebuild
new file mode 100644
index 000000000000..fdd30bb6b345
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.1.18.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PV="${PV^^}"
+MY_PN="Oracle_VirtualBox_Extension_Pack"
+MY_P="${MY_PN}-${MY_PV}"
+
+DESCRIPTION="PUEL extensions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.vbox-extpack -> ${MY_P}.tar.gz"
+S="${WORKDIR}"
+
+LICENSE="PUEL-12"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+RESTRICT="bindist mirror strip"
+
+RDEPEND="
+ || (
+ =app-emulation/virtualbox-${PV}*
+ =app-emulation/virtualbox-kvm-${PV}*
+ )
+"
+
+QA_PREBUILT="usr/lib*/virtualbox/ExtensionPacks/${MY_PN}/*"
+
+src_install() {
+ insinto /usr/$(get_libdir)/virtualbox/ExtensionPacks/${MY_PN}
+ doins -r linux.${ARCH}
+ doins ExtPack* PXE-Intel.rom
+}
diff --git a/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.6.ebuild b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.6.ebuild
new file mode 100644
index 000000000000..61f505038ea8
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.6.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PV="${PV^^}"
+MY_PN="Oracle_VirtualBox_Extension_Pack"
+MY_P="${MY_PN}-${MY_PV}"
+
+DESCRIPTION="PUEL extensions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.vbox-extpack -> ${MY_P}.tar.gz"
+S="${WORKDIR}"
+
+LICENSE="PUEL-12"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+RESTRICT="bindist mirror strip"
+
+RDEPEND="
+ || (
+ =app-emulation/virtualbox-${PV}*
+ =app-emulation/virtualbox-kvm-${PV}*
+ )
+"
+
+QA_PREBUILT="usr/lib*/virtualbox/ExtensionPacks/${MY_PN}/*"
+
+src_install() {
+ insinto /usr/$(get_libdir)/virtualbox/ExtensionPacks/${MY_PN}
+ doins -r linux.${ARCH}
+ doins ExtPack* PXE-Intel.rom
+}
diff --git a/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.8.ebuild b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.8.ebuild
new file mode 100644
index 000000000000..61f505038ea8
--- /dev/null
+++ b/app-emulation/virtualbox-extpack-oracle/virtualbox-extpack-oracle-7.2.8.ebuild
@@ -0,0 +1,33 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MY_PV="${PV^^}"
+MY_PN="Oracle_VirtualBox_Extension_Pack"
+MY_P="${MY_PN}-${MY_PV}"
+
+DESCRIPTION="PUEL extensions for VirtualBox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.vbox-extpack -> ${MY_P}.tar.gz"
+S="${WORKDIR}"
+
+LICENSE="PUEL-12"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+RESTRICT="bindist mirror strip"
+
+RDEPEND="
+ || (
+ =app-emulation/virtualbox-${PV}*
+ =app-emulation/virtualbox-kvm-${PV}*
+ )
+"
+
+QA_PREBUILT="usr/lib*/virtualbox/ExtensionPacks/${MY_PN}/*"
+
+src_install() {
+ insinto /usr/$(get_libdir)/virtualbox/ExtensionPacks/${MY_PN}
+ doins -r linux.${ARCH}
+ doins ExtPack* PXE-Intel.rom
+}
diff --git a/app-emulation/virtualbox-guest-additions/Manifest b/app-emulation/virtualbox-guest-additions/Manifest
new file mode 100644
index 000000000000..25da1ff42a9b
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/Manifest
@@ -0,0 +1,7 @@
+DIST VirtualBox-7.0.26.tar.bz2 174650718 BLAKE2B ba13a940b9566a5ac5b228bf29d49d4b9bf16a72da3212c305538711d363f1e6fddaa8717d4c46394ce488d2c1670874fece356740f421f44f6f40bd655f5551 SHA512 337f62438679f98b342213dbafdd3e07f7d7092a4205bfe388d64d1cc8224499621addea56b70d806c93290bb82e6150c07516e69250460a276e3b7a4484a9b6
+DIST VirtualBox-7.1.18.tar.bz2 222872511 BLAKE2B 1c692a6bd86185035e379feefddd3e98c18a49f231a2fd57702ca95c887ffe9ec435a90ebad457d07054bcd88bd31d84db61ed21ae8a99ae6d6ca39e18b1879c SHA512 bb0eae83af0ca94e502fc713a5fdf90e2760eb90e548ad102259b57edcda98f04adf6e9cb83b52bee3c1b341f1c2823fec05a0c60a2403e70be6159dd4a21c34
+DIST VirtualBox-7.2.6.tar.bz2 211192590 BLAKE2B 4871e52d8ebc6eb05c6c7dc08a7a38010bb536e7db4617023235ce8104a984e267341a502e3c385abe1a2fd4e0bb1e054f55794b994a5dba79e368f5ef4c3f9a SHA512 77b83b9fd086f89313eb73ecf98f3b2484985ddf6bb89d514b350e55f44c37a001f842d966173d0eed5071db08e1b0e66e0cbab4365ec99b7904143a7d162a55
+DIST VirtualBox-7.2.8.tar.bz2 207408458 BLAKE2B f57d2cbf02cb6b4b78a203737d1e12916b396e188a58d075b2b6414e83e526f0adecab7e317b33a639de51d30b8351d74dc4beb48e57e5a0feb1bf68d2523339 SHA512 a67256506c870b7fcecb0ec8b1d5e75490ee02379b5e967aead44ed09e2b15c0a2c3fd2d1e021281609d8d1f98b161cd3aa0265938490a999a700a1e01a9013b
+DIST virtualbox-patches-7.0.16.tar.bz2 6808 BLAKE2B d15fa2ca306375142c3e25d4759d2790b2bb9eb69e333a8773ad500b29dd127b401943abf59ca59d01858a3ed5551fb3a6c93c4c893c8de971a714ce5306d577 SHA512 a488cbc6660fe8637c44cd79d87156609af089988239a7e76fea8a3c7e6319512c574bef2e942b354b14ce671a8e75ab8b2160abf7c40963795ee8a545ecd992
+DIST virtualbox-patches-7.1.16.tar.bz2 6001 BLAKE2B 0e8bd42b9556321841e94827df500cbed40ecffc47e2e82fbcc7a98e00a069322e7e549f6ceb250359735d3602467fa55c81aa2534c05502b1854e8a11b839c5 SHA512 aea93103e5122568b7c0bb70566872935326675c7f9dda00563a83e0cb59c92020501e780e30b2b58c1c0b0f2cb97a6d72379702c913c14fd4c7546f7e033361
+DIST virtualbox-patches-7.2.6.tar.bz2 6041 BLAKE2B 6bd791a24acccc7ab923f09b5a1a88f557c59f2526b1055c7a877e3ca25ca002c58cc5fb67737e2f53c322bae5c716dba4472da8c977006d6297793fae55fafc SHA512 94a49da99d6affa0c89e0fb349bb09fd1dc7f05ced9c828d52d30455fb8c76a245db1f572491801fa381e7521bc8f4e094ddb3d8fd2d341835f3bd238a24cc25
diff --git a/app-emulation/virtualbox-guest-additions/files/vboxclient.desktop b/app-emulation/virtualbox-guest-additions/files/vboxclient.desktop
new file mode 100644
index 000000000000..316eb9f6203a
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/vboxclient.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Type=Application
+Name=VirtualBox Client Service
+Exec=VBoxClient-all
+Terminal=false
+X-KDE-StartupNotify=false
+StartupNotify=false
diff --git a/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-5-localconfig b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-5-localconfig
new file mode 100644
index 000000000000..f04dab4ddfb0
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-5-localconfig
@@ -0,0 +1,30 @@
+# -*- Makefile -*-
+#
+# Overwrite some default kBuild settings
+#
+
+#
+# Copyright (C) 2006-2008 Sun Microsystems, Inc.
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License as published by the Free Software Foundation,
+# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
+# distribution. VirtualBox OSE is distributed in the hope that it will
+# be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# don't build testcases to save time, they are not needed for the package
+VBOX_WITH_TESTCASES :=
+VBOX_WITH_VALIDATIONKIT :=
+
+KBUILD_MSG_STYLE := brief
+
+## paths, origin, hardening
+VBOX_WITH_HARDENING := 2
+VBOX_WITH_ORIGIN :=
+VBOX_ONLY_ADDITIONS := 1
+
+## don't build with -Werror
+VBOX_WITH_WARNINGS_AS_ERRORS :=
diff --git a/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1-arm64.patch b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1-arm64.patch
new file mode 100644
index 000000000000..01af41332d4f
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1-arm64.patch
@@ -0,0 +1,14 @@
+# see request https://www.virtualbox.org/ticket/22397
+--- a/configure
++++ b/configure
+@@ -421,6 +421,10 @@ EOF
+ BUILD_MACHINE='sparc32'
+ BUILD_CPU='blend'
+ ;;
++ aarch64)
++ BUILD_MACHINE='arm64'
++ BUILD_CPU='blend'
++ ;;
+ *)
+ log_failure "Cannot determine system"
+ exit 1
diff --git a/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1.6-disable-vboxvideo-module.patch b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1.6-disable-vboxvideo-module.patch
new file mode 100644
index 000000000000..1ccf0baa3740
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-7.1.6-disable-vboxvideo-module.patch
@@ -0,0 +1,19 @@
+The vboxvideo module is deprecated.
+Do not build it when VBOX_NO_LEGACY_XORG_X11 is defined.
+
+--- a/src/VBox/Additions/linux/drm/Makefile.kmk
++++ b/src/VBox/Additions/linux/drm/Makefile.kmk
+@@ -25,6 +25,8 @@
+ # SPDX-License-Identifier: GPL-3.0-only
+ #
+
++ifndef VBOX_NO_LEGACY_XORG_X11
++
+ SUB_DEPTH = ../../../../..
+ include $(KBUILD_PATH)/subheader.kmk
+
+@@ -50,3 +52,4 @@
+
+ include $(FILE_KBUILD_SUB_FOOTER)
+
++endif
diff --git a/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-8.initd-r1 b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-8.initd-r1
new file mode 100644
index 000000000000..17c90bb9d819
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions-8.initd-r1
@@ -0,0 +1,25 @@
+#!/sbin/openrc-run
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+pidfile="/var/run/vboxguest-service.pid"
+command="/usr/sbin/vboxguest-service"
+command_args="--foreground"
+command_background="true"
+
+depend() {
+ need dbus localmount
+ before display-manager
+}
+
+start_pre() {
+ einfo "Loading kernel modules"
+ /sbin/modprobe vboxguest 2>&1
+ /sbin/modprobe vboxsf 2>&1
+}
+
+stop_post() {
+ einfo "Removing kernel modules"
+ /sbin/modprobe -r vboxsf 2>&1
+ /sbin/modprobe -r vboxguest 2>&1
+}
diff --git a/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions.service b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions.service
new file mode 100644
index 000000000000..35f9ce24b80c
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/files/virtualbox-guest-additions.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=VirtualBox Guest Additions
+ConditionVirtualization=oracle
+Before=display-manager.service
+
+[Service]
+Type=simple
+ExecStartPre=/sbin/modprobe vboxguest
+ExecStartPre=/sbin/modprobe vboxsf
+ExecStart=/usr/sbin/vboxguest-service --foreground
+ExecStopPost=/sbin/modprobe -r vboxsf
+ExecStopPost=/sbin/modprobe -r vboxguest
+PIDFile=/var/run/vboxguest-service.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/app-emulation/virtualbox-guest-additions/metadata.xml b/app-emulation/virtualbox-guest-additions/metadata.xml
new file mode 100644
index 000000000000..607acb789312
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:oracle:vm_virtualbox</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.0.26.ebuild b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.0.26.ebuild
new file mode 100644
index 000000000000..6dcbeb4a7305
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.0.26.ebuild
@@ -0,0 +1,249 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo readme.gentoo-r1 systemd toolchain-funcs udev
+
+MY_PN="VirtualBox"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="VirtualBox kernel modules and user-space tools for Gentoo guests"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${PV}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-7.0.16.tar.bz2"
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+LICENSE="GPL-3 LGPL-2.1+ MIT || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 x86"
+IUSE="+dbus gui"
+
+RDEPEND="
+ acct-group/vboxguest
+ acct-group/vboxsf
+ acct-user/vboxguest
+ sys-libs/pam
+ virtual/zlib:=
+ ~app-emulation/virtualbox-guest-modules-${PV}
+ dbus? ( sys-apps/dbus )
+ gui? (
+ x11-apps/xrandr
+ x11-apps/xrefresh
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXmu
+ x11-libs/libXt
+ )
+"
+# some libs here are indirect dependencies, and also needed at compile time.
+# keeping them in DEPEND to avoid warnings from qa-vdb.
+DEPEND="
+ ${RDEPEND}
+ gui? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-base/xorg-proto
+ )
+"
+BDEPEND="
+ >=dev-lang/yasm-0.6.2
+ >=dev-build/kbuild-0.1.9998.3127
+ sys-devel/bin86
+ sys-power/iasl
+"
+
+DOCS=() # Don't install the default README file during einstalldocs
+
+DOC_CONTENTS="\n
+Please add users to the \"vboxguest\" group so they can\n
+benefit from seamless mode, auto-resize and clipboard.\n
+\n
+The vboxsf group has been added to make automount services work.\n
+These services are part of the shared folders support.\n
+\n
+Please add:\n
+ /etc/init.d/virtualbox-guest-additions\n
+to the default runlevel in order to start\n
+needed services.\n
+\n
+An autostart .desktop file has been installed to start\n
+VBoxClient in desktop sessions.\n
+\n
+You can mount shared folders with:\n
+ mount -t vboxsf <shared_folder_name> <mount_point>\n
+\n
+Warning:\n
+ this ebuild is only needed if you are running gentoo\n
+ inside a VirtualBox Virtual Machine, you don't need\n
+ it to run VirtualBox itself.\n
+\n"
+
+src_prepare() {
+ # Remove shipped binaries (kBuild,yasm), see bug #232775
+ rm -r kBuild/bin tools || die
+
+ # Disable things unused or splitted into separate ebuilds
+ cp "${FILESDIR}/${PN}-5-localconfig" LocalConfig.kmk || die
+ if use gui; then
+ echo "VBOX_NO_LEGACY_XORG_X11 := 1" >> LocalConfig.kmk || die
+ else
+ echo "VBOX_WITH_X11_ADDITIONS :=" >> LocalConfig.kmk || die
+ fi
+
+ # Remove pointless GCC version check
+ sed -e '/ check_gcc$/d' -i configure || die
+
+ # Respect LDFLAGS (bug #759100)
+ sed -i -e '/TEMPLATE_VBoxR3Exe_LDFLAGS.linux[ ]*=/ s/$/ $(CCLDFLAGS)/' Config.kmk || die
+
+ eapply "${FILESDIR}"/${PN}-7.1.6-disable-vboxvideo-module.patch
+ eapply "${WORKDIR}/virtualbox-patches-7.0.16/patches"
+ eapply_user
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+
+ # Build the user-space tools, warnings are harmless
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --nofatal
+ --disable-xpcom
+ --disable-sdl-ttf
+ --disable-pulse
+ --disable-alsa
+ $(usev !dbus --disable-dbus)
+ --target-arch=${ARCH}
+ --disable-kmods
+ --build-headless
+ )
+
+ # bug #843437
+ # Respect LDFLAGS (bug #759100)
+ # Cannot use LDFLAGS here because they also get passed to $(LD)
+ cat >> LocalConfig.kmk <<-EOF || die
+ CFLAGS=${CFLAGS}
+ CXXFLAGS=${CXXFLAGS}
+ CCLDFLAGS=${LDFLAGS}
+ EOF
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_ONLY_ADDITIONS=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+ LD="$(tc-getCC)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_CXX="$(tc-getCXX)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GCC3_LD_SYSMOD="$(tc-getCC)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GXX3_LD_SYSMOD="$(tc-getCXX)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+ TOOL_YASM_AS=yasm
+ )
+
+ MAKE="kmk" emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ cd out/linux.${ARCH}/release/bin/additions || die
+
+ insinto /sbin
+ newins mount.vboxsf mount.vboxsf
+ fperms 4755 /sbin/mount.vboxsf
+
+ if use dbus; then
+ newinitd "${FILESDIR}"/${PN}-8.initd-r1 ${PN}
+ else
+ newinitd <(sed 's/ dbus\>//' "${FILESDIR}"/${PN}-8.initd-r1) ${PN}
+ fi
+
+ insinto /usr/sbin/
+ newins VBoxService vboxguest-service
+ fperms 0755 /usr/sbin/vboxguest-service
+
+ insinto /usr/bin
+ doins VBoxControl
+ fperms 0755 /usr/bin/VBoxControl
+
+ # VBoxClient user service and xrandr wrapper
+ if use gui ; then
+ doins VBoxClient
+ fperms 0755 /usr/bin/VBoxClient
+ doins VBoxDRMClient
+ fperms 4755 /usr/bin/VBoxDRMClient
+
+ pushd "${S}"/src/VBox/Additions/x11/Installer &>/dev/null || die
+ newins 98vboxadd-xclient VBoxClient-all
+ fperms 0755 /usr/bin/VBoxClient-all
+ popd &>/dev/null || die
+ fi
+
+ # udev rule for vboxdrv
+ local udev_rules_dir="/lib/udev/rules.d"
+ dodir ${udev_rules_dir}
+ echo 'KERNEL=="vboxguest", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+ echo 'KERNEL=="vboxuser", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+
+ # VBoxClient autostart file
+ insinto /etc/xdg/autostart
+ doins "${FILESDIR}"/vboxclient.desktop
+
+ systemd_dounit "${FILESDIR}/${PN}.service"
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if ! use gui ; then
+ elog "The use flag \"gui\" is off, enable it to install the"
+ elog "X Window System drivers and integration."
+ fi
+
+ readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.1.18.ebuild b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.1.18.ebuild
new file mode 100644
index 000000000000..e93f23fac8f9
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.1.18.ebuild
@@ -0,0 +1,256 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo readme.gentoo-r1 systemd toolchain-funcs udev
+
+MY_PN="VirtualBox"
+MY_PV=${PV^^}
+MY_P=${MY_PN}-${MY_PV}
+PATCHES_PV="7.1.16"
+
+DESCRIPTION="VirtualBox kernel modules and user-space tools for Gentoo guests"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2"
+S="${WORKDIR}/${MY_PN}-${MY_PV}"
+
+LICENSE="GPL-3 LGPL-2.1+ MIT || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64 ~arm64 ~x86"
+IUSE="+dbus gui"
+
+RDEPEND="
+ acct-group/vboxguest
+ acct-group/vboxsf
+ acct-user/vboxguest
+ sys-libs/pam
+ virtual/zlib:=
+ ~app-emulation/virtualbox-guest-modules-${PV}
+ dbus? ( sys-apps/dbus )
+ gui? (
+ x11-apps/xrandr
+ x11-apps/xrefresh
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXmu
+ x11-libs/libXt
+ )
+"
+# some libs here are indirect dependencies, and also needed at compile time.
+# keeping them in DEPEND to avoid warnings from qa-vdb.
+DEPEND="
+ ${RDEPEND}
+ gui? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-base/xorg-proto
+ )
+"
+BDEPEND="
+ >=dev-lang/yasm-0.6.2
+ >=dev-build/kbuild-0.1.9998.3127
+ sys-devel/bin86
+ sys-power/iasl
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.1.6-disable-vboxvideo-module.patch
+ "${FILESDIR}"/${PN}-7.1-arm64.patch
+ "${WORKDIR}/virtualbox-patches-${PATCHES_PV}/patches"
+)
+
+DOCS=() # Don't install the default README file during einstalldocs
+
+DOC_CONTENTS="\n
+Please add users to the \"vboxguest\" group so they can\n
+benefit from seamless mode, auto-resize and clipboard.\n
+\n
+The vboxsf group has been added to make automount services work.\n
+These services are part of the shared folders support.\n
+\n
+Please add:\n
+ /etc/init.d/virtualbox-guest-additions\n
+to the default runlevel in order to start\n
+needed services.\n
+\n
+An autostart .desktop file has been installed to start\n
+VBoxClient in desktop sessions.\n
+\n
+You can mount shared folders with:\n
+ mount -t vboxsf <shared_folder_name> <mount_point>\n
+\n
+Warning:\n
+ this ebuild is only needed if you are running gentoo\n
+ inside a VirtualBox Virtual Machine, you don't need\n
+ it to run VirtualBox itself.\n
+\n"
+
+src_prepare() {
+ # Remove shipped binaries (kBuild,yasm), see bug #232775
+ rm -r kBuild/bin tools || die
+
+ # Disable things unused or splitted into separate ebuilds
+ cp "${FILESDIR}/${PN}-5-localconfig" LocalConfig.kmk || die
+ if use gui; then
+ echo "VBOX_NO_LEGACY_XORG_X11 := 1" >> LocalConfig.kmk || die
+ else
+ echo "VBOX_WITH_X11_ADDITIONS :=" >> LocalConfig.kmk || die
+ fi
+
+ # Remove pointless GCC version check
+ sed -e '/ check_gcc$/d' -i configure || die
+
+ # Respect LDFLAGS (bug #759100)
+ sed -i -e '/TEMPLATE_VBoxR3Exe_LDFLAGS.linux[ ]*=/ s/$/ $(CCLDFLAGS)/' Config.kmk || die
+
+ eapply "${PATCHES[@]}"
+ eapply_user
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+
+ # Build the user-space tools, warnings are harmless
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --nofatal
+ --disable-xpcom
+ --disable-sdl-ttf
+ --disable-pulse
+ --disable-alsa
+ $(usev !dbus --disable-dbus)
+ --target-arch=${ARCH}
+ --disable-kmods
+ --build-headless
+ )
+
+ # bug #843437
+ # Respect LDFLAGS (bug #759100)
+ # Cannot use LDFLAGS here because they also get passed to $(LD)
+ cat >> LocalConfig.kmk <<-EOF || die
+ CFLAGS=${CFLAGS}
+ CXXFLAGS=${CXXFLAGS}
+ CCLDFLAGS=${LDFLAGS}
+ EOF
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_ONLY_ADDITIONS=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+ LD="$(tc-getCC)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_CXX="$(tc-getCXX)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GCC3_LD_SYSMOD="$(tc-getCC)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GXX3_LD_SYSMOD="$(tc-getCXX)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+ TOOL_YASM_AS=yasm
+ )
+
+ MAKE="kmk" emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ cd out/linux.${ARCH}/release/bin/additions || die
+
+ insinto /sbin
+ newins mount.vboxsf mount.vboxsf
+ fperms 4755 /sbin/mount.vboxsf
+
+ if use dbus; then
+ newinitd "${FILESDIR}"/${PN}-8.initd-r1 ${PN}
+ else
+ newinitd <(sed 's/ dbus\>//' "${FILESDIR}"/${PN}-8.initd-r1) ${PN}
+ fi
+
+ insinto /usr/sbin/
+ newins VBoxService vboxguest-service
+ fperms 0755 /usr/sbin/vboxguest-service
+
+ insinto /usr/bin
+ doins VBoxControl
+ fperms 0755 /usr/bin/VBoxControl
+
+ # VBoxClient user service and xrandr wrapper
+ if use gui ; then
+ doins VBoxClient
+ fperms 0755 /usr/bin/VBoxClient
+ doins VBoxDRMClient
+ fperms 4755 /usr/bin/VBoxDRMClient
+
+ pushd "${S}"/src/VBox/Additions/x11/Installer &>/dev/null || die
+ newins 98vboxadd-xclient VBoxClient-all
+ fperms 0755 /usr/bin/VBoxClient-all
+ popd &>/dev/null || die
+ fi
+
+ # udev rule for vboxdrv
+ local udev_rules_dir="/lib/udev/rules.d"
+ dodir ${udev_rules_dir}
+ echo 'KERNEL=="vboxguest", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+ echo 'KERNEL=="vboxuser", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+
+ # VBoxClient autostart file
+ insinto /etc/xdg/autostart
+ doins "${FILESDIR}"/vboxclient.desktop
+
+ systemd_dounit "${FILESDIR}/${PN}.service"
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if ! use gui ; then
+ elog "The use flag \"gui\" is off, enable it to install the"
+ elog "X Window System drivers and integration."
+ fi
+
+ readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.6.ebuild b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.6.ebuild
new file mode 100644
index 000000000000..c25fe5958d64
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.6.ebuild
@@ -0,0 +1,256 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo readme.gentoo-r1 systemd toolchain-funcs udev
+
+MY_PN="VirtualBox"
+MY_PV=${PV^^}
+MY_P=${MY_PN}-${MY_PV}
+PATCHES_PV="7.2.6"
+
+DESCRIPTION="VirtualBox kernel modules and user-space tools for Gentoo guests"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2"
+S="${WORKDIR}/${MY_PN}-${MY_PV}"
+
+LICENSE="GPL-3 LGPL-2.1+ MIT || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 ~arm64 x86"
+IUSE="+dbus gui"
+
+RDEPEND="
+ acct-group/vboxguest
+ acct-group/vboxsf
+ acct-user/vboxguest
+ sys-libs/pam
+ virtual/zlib:=
+ ~app-emulation/virtualbox-guest-modules-${PV}
+ dbus? ( sys-apps/dbus )
+ gui? (
+ x11-apps/xrandr
+ x11-apps/xrefresh
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXmu
+ x11-libs/libXt
+ )
+"
+# some libs here are indirect dependencies, and also needed at compile time.
+# keeping them in DEPEND to avoid warnings from qa-vdb.
+DEPEND="
+ ${RDEPEND}
+ gui? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-base/xorg-proto
+ )
+"
+BDEPEND="
+ >=dev-lang/yasm-0.6.2
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-devel/bin86
+ sys-power/iasl
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.1.6-disable-vboxvideo-module.patch
+ "${FILESDIR}"/${PN}-7.1-arm64.patch
+ "${WORKDIR}/virtualbox-patches-${PATCHES_PV}/patches"
+)
+
+DOCS=() # Don't install the default README file during einstalldocs
+
+DOC_CONTENTS="\n
+Please add users to the \"vboxguest\" group so they can\n
+benefit from seamless mode, auto-resize and clipboard.\n
+\n
+The vboxsf group has been added to make automount services work.\n
+These services are part of the shared folders support.\n
+\n
+Please add:\n
+ /etc/init.d/virtualbox-guest-additions\n
+to the default runlevel in order to start\n
+needed services.\n
+\n
+An autostart .desktop file has been installed to start\n
+VBoxClient in desktop sessions.\n
+\n
+You can mount shared folders with:\n
+ mount -t vboxsf <shared_folder_name> <mount_point>\n
+\n
+Warning:\n
+ this ebuild is only needed if you are running gentoo\n
+ inside a VirtualBox Virtual Machine, you don't need\n
+ it to run VirtualBox itself.\n
+\n"
+
+src_prepare() {
+ # Remove shipped binaries (kBuild,yasm), see bug #232775
+ rm -r kBuild/bin tools || die
+
+ # Disable things unused or splitted into separate ebuilds
+ cp "${FILESDIR}/${PN}-5-localconfig" LocalConfig.kmk || die
+ if use gui; then
+ echo "VBOX_NO_LEGACY_XORG_X11 := 1" >> LocalConfig.kmk || die
+ else
+ echo "VBOX_WITH_X11_ADDITIONS :=" >> LocalConfig.kmk || die
+ fi
+
+ # Remove pointless GCC version check
+ sed -e '/ check_gcc$/d' -i configure || die
+
+ # Respect LDFLAGS (bug #759100)
+ sed -i -e '/TEMPLATE_VBoxR3Exe_LDFLAGS.linux[ ]*=/ s/$/ $(CCLDFLAGS)/' Config.kmk || die
+
+ eapply "${PATCHES[@]}"
+ eapply_user
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+
+ # Build the user-space tools, warnings are harmless
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --nofatal
+ --disable-xpcom
+ --disable-sdl-ttf
+ --disable-pulse
+ --disable-alsa
+ $(usev !dbus --disable-dbus)
+ --target-arch=${ARCH}
+ --disable-kmods
+ --build-headless
+ )
+
+ # bug #843437
+ # Respect LDFLAGS (bug #759100)
+ # Cannot use LDFLAGS here because they also get passed to $(LD)
+ cat >> LocalConfig.kmk <<-EOF || die
+ CFLAGS=${CFLAGS}
+ CXXFLAGS=${CXXFLAGS}
+ CCLDFLAGS=${LDFLAGS}
+ EOF
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_ONLY_ADDITIONS=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+ LD="$(tc-getCC)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_CXX="$(tc-getCXX)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GCC3_LD_SYSMOD="$(tc-getCC)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GXX3_LD_SYSMOD="$(tc-getCXX)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+ TOOL_YASM_AS=yasm
+ )
+
+ MAKE="kmk" emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ cd out/linux.${ARCH}/release/bin/additions || die
+
+ insinto /sbin
+ newins mount.vboxsf mount.vboxsf
+ fperms 4755 /sbin/mount.vboxsf
+
+ if use dbus; then
+ newinitd "${FILESDIR}"/${PN}-8.initd-r1 ${PN}
+ else
+ newinitd <(sed 's/ dbus\>//' "${FILESDIR}"/${PN}-8.initd-r1) ${PN}
+ fi
+
+ insinto /usr/sbin/
+ newins VBoxService vboxguest-service
+ fperms 0755 /usr/sbin/vboxguest-service
+
+ insinto /usr/bin
+ doins VBoxControl
+ fperms 0755 /usr/bin/VBoxControl
+
+ # VBoxClient user service and xrandr wrapper
+ if use gui ; then
+ doins VBoxClient
+ fperms 0755 /usr/bin/VBoxClient
+ doins VBoxDRMClient
+ fperms 4755 /usr/bin/VBoxDRMClient
+
+ pushd "${S}"/src/VBox/Additions/x11/Installer &>/dev/null || die
+ newins 98vboxadd-xclient VBoxClient-all
+ fperms 0755 /usr/bin/VBoxClient-all
+ popd &>/dev/null || die
+ fi
+
+ # udev rule for vboxdrv
+ local udev_rules_dir="/lib/udev/rules.d"
+ dodir ${udev_rules_dir}
+ echo 'KERNEL=="vboxguest", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+ echo 'KERNEL=="vboxuser", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+
+ # VBoxClient autostart file
+ insinto /etc/xdg/autostart
+ doins "${FILESDIR}"/vboxclient.desktop
+
+ systemd_dounit "${FILESDIR}/${PN}.service"
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if ! use gui ; then
+ elog "The use flag \"gui\" is off, enable it to install the"
+ elog "X Window System drivers and integration."
+ fi
+
+ readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.8.ebuild b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.8.ebuild
new file mode 100644
index 000000000000..c25fe5958d64
--- /dev/null
+++ b/app-emulation/virtualbox-guest-additions/virtualbox-guest-additions-7.2.8.ebuild
@@ -0,0 +1,256 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit edo readme.gentoo-r1 systemd toolchain-funcs udev
+
+MY_PN="VirtualBox"
+MY_PV=${PV^^}
+MY_P=${MY_PN}-${MY_PV}
+PATCHES_PV="7.2.6"
+
+DESCRIPTION="VirtualBox kernel modules and user-space tools for Gentoo guests"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://download.virtualbox.org/virtualbox/${MY_PV}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2"
+S="${WORKDIR}/${MY_PN}-${MY_PV}"
+
+LICENSE="GPL-3 LGPL-2.1+ MIT || ( GPL-3 CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 ~arm64 x86"
+IUSE="+dbus gui"
+
+RDEPEND="
+ acct-group/vboxguest
+ acct-group/vboxsf
+ acct-user/vboxguest
+ sys-libs/pam
+ virtual/zlib:=
+ ~app-emulation/virtualbox-guest-modules-${PV}
+ dbus? ( sys-apps/dbus )
+ gui? (
+ x11-apps/xrandr
+ x11-apps/xrefresh
+ x11-libs/libX11
+ x11-libs/libXext
+ x11-libs/libXmu
+ x11-libs/libXt
+ )
+"
+# some libs here are indirect dependencies, and also needed at compile time.
+# keeping them in DEPEND to avoid warnings from qa-vdb.
+DEPEND="
+ ${RDEPEND}
+ gui? (
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libXau
+ x11-libs/libXdmcp
+ x11-base/xorg-proto
+ )
+"
+BDEPEND="
+ >=dev-lang/yasm-0.6.2
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-devel/bin86
+ sys-power/iasl
+"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.1.6-disable-vboxvideo-module.patch
+ "${FILESDIR}"/${PN}-7.1-arm64.patch
+ "${WORKDIR}/virtualbox-patches-${PATCHES_PV}/patches"
+)
+
+DOCS=() # Don't install the default README file during einstalldocs
+
+DOC_CONTENTS="\n
+Please add users to the \"vboxguest\" group so they can\n
+benefit from seamless mode, auto-resize and clipboard.\n
+\n
+The vboxsf group has been added to make automount services work.\n
+These services are part of the shared folders support.\n
+\n
+Please add:\n
+ /etc/init.d/virtualbox-guest-additions\n
+to the default runlevel in order to start\n
+needed services.\n
+\n
+An autostart .desktop file has been installed to start\n
+VBoxClient in desktop sessions.\n
+\n
+You can mount shared folders with:\n
+ mount -t vboxsf <shared_folder_name> <mount_point>\n
+\n
+Warning:\n
+ this ebuild is only needed if you are running gentoo\n
+ inside a VirtualBox Virtual Machine, you don't need\n
+ it to run VirtualBox itself.\n
+\n"
+
+src_prepare() {
+ # Remove shipped binaries (kBuild,yasm), see bug #232775
+ rm -r kBuild/bin tools || die
+
+ # Disable things unused or splitted into separate ebuilds
+ cp "${FILESDIR}/${PN}-5-localconfig" LocalConfig.kmk || die
+ if use gui; then
+ echo "VBOX_NO_LEGACY_XORG_X11 := 1" >> LocalConfig.kmk || die
+ else
+ echo "VBOX_WITH_X11_ADDITIONS :=" >> LocalConfig.kmk || die
+ fi
+
+ # Remove pointless GCC version check
+ sed -e '/ check_gcc$/d' -i configure || die
+
+ # Respect LDFLAGS (bug #759100)
+ sed -i -e '/TEMPLATE_VBoxR3Exe_LDFLAGS.linux[ ]*=/ s/$/ $(CCLDFLAGS)/' Config.kmk || die
+
+ eapply "${PATCHES[@]}"
+ eapply_user
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+
+ # Build the user-space tools, warnings are harmless
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --nofatal
+ --disable-xpcom
+ --disable-sdl-ttf
+ --disable-pulse
+ --disable-alsa
+ $(usev !dbus --disable-dbus)
+ --target-arch=${ARCH}
+ --disable-kmods
+ --build-headless
+ )
+
+ # bug #843437
+ # Respect LDFLAGS (bug #759100)
+ # Cannot use LDFLAGS here because they also get passed to $(LD)
+ cat >> LocalConfig.kmk <<-EOF || die
+ CFLAGS=${CFLAGS}
+ CXXFLAGS=${CXXFLAGS}
+ CCLDFLAGS=${LDFLAGS}
+ EOF
+
+ edo ./configure "${myconf[@]}"
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_ONLY_ADDITIONS=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+ LD="$(tc-getCC)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_CXX="$(tc-getCXX)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GCC3_LD_SYSMOD="$(tc-getCC)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+ #TOOL_GXX3_LD_SYSMOD="$(tc-getCXX)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+ TOOL_YASM_AS=yasm
+ )
+
+ MAKE="kmk" emake "${myemakeargs[@]}"
+}
+
+src_install() {
+ cd out/linux.${ARCH}/release/bin/additions || die
+
+ insinto /sbin
+ newins mount.vboxsf mount.vboxsf
+ fperms 4755 /sbin/mount.vboxsf
+
+ if use dbus; then
+ newinitd "${FILESDIR}"/${PN}-8.initd-r1 ${PN}
+ else
+ newinitd <(sed 's/ dbus\>//' "${FILESDIR}"/${PN}-8.initd-r1) ${PN}
+ fi
+
+ insinto /usr/sbin/
+ newins VBoxService vboxguest-service
+ fperms 0755 /usr/sbin/vboxguest-service
+
+ insinto /usr/bin
+ doins VBoxControl
+ fperms 0755 /usr/bin/VBoxControl
+
+ # VBoxClient user service and xrandr wrapper
+ if use gui ; then
+ doins VBoxClient
+ fperms 0755 /usr/bin/VBoxClient
+ doins VBoxDRMClient
+ fperms 4755 /usr/bin/VBoxDRMClient
+
+ pushd "${S}"/src/VBox/Additions/x11/Installer &>/dev/null || die
+ newins 98vboxadd-xclient VBoxClient-all
+ fperms 0755 /usr/bin/VBoxClient-all
+ popd &>/dev/null || die
+ fi
+
+ # udev rule for vboxdrv
+ local udev_rules_dir="/lib/udev/rules.d"
+ dodir ${udev_rules_dir}
+ echo 'KERNEL=="vboxguest", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+ echo 'KERNEL=="vboxuser", OWNER="vboxguest", GROUP="vboxguest", MODE="0660"' \
+ >> "${ED}/${udev_rules_dir}/60-virtualbox-guest-additions.rules" \
+ || die
+
+ # VBoxClient autostart file
+ insinto /etc/xdg/autostart
+ doins "${FILESDIR}"/vboxclient.desktop
+
+ systemd_dounit "${FILESDIR}/${PN}.service"
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if ! use gui ; then
+ elog "The use flag \"gui\" is off, enable it to install the"
+ elog "X Window System drivers and integration."
+ fi
+
+ readme.gentoo_print_elog
+}
+
+pkg_postrm() {
+ udev_reload
+}
diff --git a/app-emulation/virtualbox-guest-modules/Manifest b/app-emulation/virtualbox-guest-modules/Manifest
new file mode 100644
index 000000000000..a3558f024caa
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/Manifest
@@ -0,0 +1,4 @@
+DIST vbox-guest-kernel-module-src-7.0.26.tar.xz 691328 BLAKE2B 8bbe434bb34e2046227713ce9d8508754621b6210e29dbfffa18129c8156ee6da265280db0a2d0485abd9f6299bc56ac2490b3a35057b594456ea3ba31445cf2 SHA512 fbdf7bd9fa23e71d1421006424379893d078edc7bb1d9720f941289a754dba9cedbb0eb741beecab2da312b4230effca6ccd2e570923d4c2242be3557e330fd5
+DIST vbox-guest-kernel-module-src-7.1.18.tar.xz 751300 BLAKE2B 691ef51f62f9d8c908c57b8da25b3803e5f1b9f1e5d172564acf0d71ce227e066e4780acc96dd13851045ff4cef668c2d3647fc2e570f8a19504be3a19a9c60f SHA512 5196577d2af2ce5f64bd9a2ac590f920e9cdecfd8ed56ea79699e211b958f4614fbd508f152e05f95ce31cdb824efd465420da8eb5b52b877f1f0fd3623467b1
+DIST vbox-guest-kernel-module-src-7.2.6.tar.xz 751008 BLAKE2B 2733c22535f3fa5597580d0da495b8166c20c96e0e10bae5894e099bb24c9516ec28303129787c8c9d2dcf95c37fadcacacc30dbbe15e9ec49947344ea20c213 SHA512 08e503de4b90f4c3fa76f5a3b0670611e7463cf4c5fc5c317043663207fb0c87fc8da5c2bcdd8912a916a3284adba00ba2c1de4a7517cefb2eed9ce1ca082f56
+DIST vbox-guest-kernel-module-src-7.2.8.tar.xz 754192 BLAKE2B ecccd02a83a675e870f362c0ea44d0a7b52d1db9a55fc5ddb24f6a8c1161a2370dbb82adf251de6c80e9e7dfaf4503e0e96f956bd4f756bceb60bbb9cb8d578f SHA512 ea18bdf93aa382a9b81d20f7fbf0c0c4ccbbffe892b3ca4ebd46bd95c5ab7460140dedf9b657ac48bc9cbc13388ae2d0bdf1a8ecab7a8f0dfa180b6394d155cf
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-6.1.36-log-use-c99.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-6.1.36-log-use-c99.patch
new file mode 100644
index 000000000000..41641f2336a5
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-6.1.36-log-use-c99.patch
@@ -0,0 +1,13 @@
+https://bugs.gentoo.org/298988
+
+--- a/vboxguest/Makefile
++++ b/vboxguest/Makefile
+@@ -149,7 +149,7 @@
+ IN_MODULE \
+ RT_WITH_VBOX \
+ VBGL_VBOXGUEST \
+- VBOX_WITH_HGCM
++ VBOX_WITH_HGCM LOG_USE_C99
+ ifeq ($(VBOX_KBUILD_TARGET_ARCH),amd64)
+ VBOXMOD_DEFS += VBOX_WITH_64_BITS_GUESTS
+ endif
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.1.8-kernel-6.15.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.1.8-kernel-6.15.patch
new file mode 100644
index 000000000000..42a917b5e081
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.1.8-kernel-6.15.patch
@@ -0,0 +1,251 @@
+Add initial support for kernel 6.15.0.
+Patch obtained by comparing sources from 7.1.8 and 7.2.0_BETA1 where upstream added support.
+https://bugs.gentoo.org/956675
+
+--- a/vboxguest/Makefile-footer.gmk
++++ b/vboxguest/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxguest/r0drv/linux/timer-r0drv-linux.c
++++ b/vboxguest/r0drv/linux/timer-r0drv-linux.c
+@@ -422,7 +422,11 @@ static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes)
+ }
+ else
+ #endif
++# if RTLNX_VER_MIN(6,15,0)
++ timer_delete(&pSubTimer->u.Std.LnxTimer);
++#else
+ del_timer(&pSubTimer->u.Std.LnxTimer);
++#endif
+
+ rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED);
+ }
+@@ -470,7 +474,11 @@ static void rtTimerLnxDestroyIt(PRTTIMER pTimer)
+ hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer);
+ else
+ #endif
++# if RTLNX_VER_MIN(6,15,0)
++ timer_delete_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
++#else
+ del_timer_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
++#endif
+ }
+
+ /*
+@@ -1626,8 +1634,13 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_
+ #ifdef RTTIMER_LINUX_WITH_HRTIMER
+ if (pTimer->fHighRes)
+ {
++#if RTLNX_VER_MIN(6,15,0)
++ hrtimer_setup(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer,
++ rtTimerLinuxHrCallback, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
++#else
+ hrtimer_init(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
+ pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback;
++#endif
+ }
+ else
+ #endif
+--- a/vboxsf/Makefile-footer.gmk
++++ b/vboxsf/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxsf/dirops.c
++++ b/vboxsf/dirops.c
+@@ -1088,7 +1088,9 @@ static int vbsf_inode_create(struct inode *parent, struct dentry *dentry, int mo
+ * @param mode file mode
+ * @returns 0 on success, Linux error code otherwise
+ */
+-#if RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(9,6, 9,99) || defined(DOXYGEN_RUNNING)
++#if RTLNX_VER_MIN(6,15,0)
++static struct dentry *vbsf_inode_mkdir(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode)
++#elif RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(9,6, 9,99) || defined(DOXYGEN_RUNNING)
+ static int vbsf_inode_mkdir(struct mnt_idmap *idmap, struct inode *parent, struct dentry *dentry, umode_t mode)
+ #elif RTLNX_VER_MIN(5,12,0)
+ static int vbsf_inode_mkdir(struct user_namespace *ns, struct inode *parent, struct dentry *dentry, umode_t mode)
+@@ -1098,14 +1100,22 @@ static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, umode_t
+ static int vbsf_inode_mkdir(struct inode *parent, struct dentry *dentry, int mode)
+ #endif
+ {
++ int rc;
++
+ TRACE();
+ AssertMsg(!(mode & S_IFMT) || (mode & S_IFMT) == S_IFDIR, ("0%o\n", mode));
+- return vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
+- SHFL_CF_ACT_CREATE_IF_NEW
+- | SHFL_CF_ACT_FAIL_IF_EXISTS
+- | SHFL_CF_ACCESS_READWRITE
+- | SHFL_CF_DIRECTORY,
+- false /*fStashHandle*/, false /*fDoLookup*/, NULL /*phHandle*/, NULL /*fCreated*/);
++
++ rc = vbsf_create_worker(parent, dentry, (mode & ~S_IFMT) | S_IFDIR,
++ SHFL_CF_ACT_CREATE_IF_NEW
++ | SHFL_CF_ACT_FAIL_IF_EXISTS
++ | SHFL_CF_ACCESS_READWRITE
++ | SHFL_CF_DIRECTORY,
++ false /*fStashHandle*/, false /*fDoLookup*/, NULL /*phHandle*/, NULL /*fCreated*/);
++#if RTLNX_VER_MIN(6,15,0)
++ return ERR_PTR(rc);
++#else
++ return rc;
++#endif
+ }
+
+
+--- a/vboxvideo/Makefile-footer.gmk
++++ b/vboxvideo/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxvideo/vbox_fb.c
++++ b/vboxvideo/vbox_fb.c
+@@ -260,7 +260,7 @@ static struct fb_info *drm_fb_helper_alloc_fbi(struct drm_fb_helper *helper)
+ }
+ #endif
+
+-static int vboxfb_create(struct drm_fb_helper *helper,
++int vboxfb_create(struct drm_fb_helper *helper,
+ struct drm_fb_helper_surface_size *sizes)
+ {
+ struct vbox_fbdev *fbdev =
+@@ -407,9 +407,11 @@ static int vboxfb_create(struct drm_fb_helper *helper,
+ return 0;
+ }
+
++#if RTLNX_VER_MAX(6,15,0)
+ static struct drm_fb_helper_funcs vbox_fb_helper_funcs = {
+ .fb_probe = vboxfb_create,
+ };
++#endif
+
+ #if RTLNX_VER_MAX(4,3,0) && !RTLNX_RHEL_MAJ_PREREQ(7,3)
+ static void drm_fb_helper_unregister_fbi(struct drm_fb_helper *fb_helper)
+@@ -478,7 +480,9 @@ int vbox_fbdev_init(struct drm_device *dev)
+ vbox->fbdev = fbdev;
+ spin_lock_init(&fbdev->dirty_lock);
+
+-#if RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(8,9, 8,99) || RTLNX_RHEL_RANGE(9,3, 9,99)
++#if RTLNX_VER_MIN(6,15,0)
++ drm_fb_helper_prepare(dev, &fbdev->helper, 32, NULL);
++#elif RTLNX_VER_MIN(6,3,0) || RTLNX_RHEL_RANGE(8,9, 8,99) || RTLNX_RHEL_RANGE(9,3, 9,99)
+ drm_fb_helper_prepare(dev, &fbdev->helper, 32, &vbox_fb_helper_funcs);
+ #elif RTLNX_VER_MIN(3,17,0) || RTLNX_RHEL_MIN(7,2)
+ drm_fb_helper_prepare(dev, &fbdev->helper, &vbox_fb_helper_funcs);
+--- a/vboxvideo/vbox_mode.c
++++ b/vboxvideo/vbox_mode.c
+@@ -653,12 +653,13 @@ static int vbox_get_modes(struct drm_connector *connector)
+ return num_modes;
+ }
+
+-#if RTLNX_VER_MAX(3,14,0) && !RTLNX_RHEL_MAJ_PREREQ(7,1)
+-static int vbox_mode_valid(struct drm_connector *connector,
++#if RTLNX_VER_MIN(6,15,0)
++static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector, const struct drm_display_mode *mode)
++#elif RTLNX_VER_MIN(3,14,0) || RTLNX_RHEL_MAJ_PREREQ(7,1)
++static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)
+ #else
+-static enum drm_mode_status vbox_mode_valid(struct drm_connector *connector,
++static int vbox_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode)
+ #endif
+- struct drm_display_mode *mode)
+ {
+ return MODE_OK;
+ }
+--- a/vboxvideo/vbox_drv.c
++++ b/vboxvideo/vbox_drv.c
+@@ -39,6 +39,10 @@
+ # include <drm/drm_probe_helper.h>
+ #endif
+
++#if RTLNX_VER_MIN(6,13,0) && defined(CONFIG_APERTURE_HELPERS)
++# include <linux/aperture.h>
++#endif
++
+ #if RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
+ # include <drm/drm_aperture.h>
+ #endif
+@@ -88,7 +92,9 @@ static int vbox_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ }
+ #endif
+
+-# if RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
++# if RTLNX_VER_MIN(6,13,0) && defined(CONFIG_APERTURE_HELPERS)
++ ret = aperture_remove_conflicting_pci_devices(pdev, driver.name);
++# elif RTLNX_VER_RANGE(5,14,0, 6,13,0) || RTLNX_RHEL_RANGE(8,6, 8,99)
+ # if RTLNX_VER_MIN(5,15,0) || RTLNX_RHEL_RANGE(8,7, 8,99) || RTLNX_RHEL_MIN(9,1) || RTLNX_SUSE_MAJ_PREREQ(15,4)
+ ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &driver);
+ # else
+@@ -384,6 +390,9 @@ static struct drm_driver driver = {
+ .desc = DRIVER_DESC,
+ #if RTLNX_VER_MAX(6,14,0)
+ .date = DRIVER_DATE,
++#endif
++#if RTLNX_VER_MIN(6,15,0)
++ .fbdev_probe = vboxfb_create,
+ #endif
+ .major = DRIVER_MAJOR,
+ .minor = DRIVER_MINOR,
+@@ -404,7 +413,9 @@ static struct drm_driver driver = {
+ .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
+ #endif
+ .gem_prime_import = drm_gem_prime_import,
++#if RTLNX_VER_MAX(6,15,0)
+ .gem_prime_import_sg_table = vbox_gem_prime_import_sg_table,
++#endif
+ #if RTLNX_VER_MAX(6,6,0) && !RTLNX_RHEL_RANGE(9,4, 9,99) && !RTLNX_SUSE_MAJ_PREREQ(15, 6)
+ .gem_prime_mmap = vbox_gem_prime_mmap,
+ #endif
+--- a/vboxvideo/vbox_prime.c
++++ b/vboxvideo/vbox_prime.c
+@@ -49,18 +49,20 @@ struct sg_table *vbox_gem_prime_get_sg_table(struct drm_gem_object *obj)
+ return ERR_PTR(-ENOSYS);
+ }
+
+-#if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2)
++#if RTLNX_VER_MAX(6,15,0)
++# if RTLNX_VER_MAX(3,18,0) && !RTLNX_RHEL_MAJ_PREREQ(7,2)
+ struct drm_gem_object *vbox_gem_prime_import_sg_table(
+ struct drm_device *dev, size_t size, struct sg_table *table)
+-#else
++# else
+ struct drm_gem_object *vbox_gem_prime_import_sg_table(
+ struct drm_device *dev, struct dma_buf_attachment *attach,
+ struct sg_table *table)
+-#endif
++# endif
+ {
+ WARN_ONCE(1, "not implemented");
+ return ERR_PTR(-ENOSYS);
+ }
++#endif
+
+ void *vbox_gem_prime_vmap(struct drm_gem_object *obj)
+ {
+--- a/vboxvideo/vbox_drv.h
++++ b/vboxvideo/vbox_drv.h
+@@ -428,6 +428,8 @@ int vbox_framebuffer_init(struct drm_device *dev,
+ #endif
+ struct drm_gem_object *obj);
+
++int vboxfb_create(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes);
++
+ int vbox_fbdev_init(struct drm_device *dev);
+ void vbox_fbdev_fini(struct drm_device *dev);
+ void vbox_fbdev_set_base(struct vbox_private *vbox, unsigned long gpu_addr);
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-1.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-1.patch
new file mode 100644
index 000000000000..b3f6b0345c2c
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-1.patch
@@ -0,0 +1,117 @@
+https://github.com/VirtualBox/virtualbox/commit/280303b3f03d7087b9c955088a3cf499414f6ec1
+
+From 280303b3f03d7087b9c955088a3cf499414f6ec1 Mon Sep 17 00:00:00 2001
+From: Vadim Galitsyn <vadim.galitsyn@oracle.com>
+Date: Tue, 17 Feb 2026 15:00:09 +0000
+Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19
+ bugref:11038.
+
+svn:sync-xref-src-repo-rev: r172809
+--- a/vboxguest/r0drv/linux/initterm-r0drv-linux.c
++++ b/vboxguest/r0drv/linux/initterm-r0drv-linux.c
+@@ -60,6 +60,11 @@ static DECLARE_TASK_QUEUE(g_rtR0LnxWorkQueue);
+ * This is a special mm structure used to manage the kernel address space. */
+ struct mm_struct *g_pLnxInitMm = NULL;
+
++#if RTLNX_VER_MIN(6,19,0)
++/** Pointer to __flush_tlb_all kernel symbol. */
++void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
++
+
+ /**
+ * Pushes an item onto the IPRT work queue.
+@@ -136,6 +141,11 @@ DECLHIDDEN(int) rtR0InitNative(void)
+ printk("rtR0InitNative: g_pLnxInitMm=%p\n", g_pLnxInitMm);
+
+ RTR0DbgKrnlInfoRelease(hKrnlInfo);
++# if RTLNX_VER_MIN(6,19,0)
++ g_pfnLinuxFlushTlbAll = __symbol_get("__flush_tlb_all");
++ if (!RT_VALID_PTR(g_pfnLinuxFlushTlbAll))
++ printk("rtR0InitNative: can't load __flush_tlb_all\n");
++# endif
+ }
+ else
+ printk("rtR0InitNative: RTR0DbgKrnlInfoOpen failed: %d\n", rc);
+@@ -151,6 +161,12 @@ DECLHIDDEN(void) rtR0TermNative(void)
+ {
+ IPRT_LINUX_SAVE_EFL_AC();
+
++# if RTLNX_VER_MIN(6,19,0)
++ if (RT_VALID_PTR(g_pfnLinuxFlushTlbAll))
++ symbol_put_addr(g_pfnLinuxFlushTlbAll);
++ g_pfnLinuxFlushTlbAll = NULL;
++#endif
++
+ rtR0LnxWorkqueueFlush();
+ #if RTLNX_VER_MIN(2,5,41)
+ destroy_workqueue(g_prtR0LnxWorkQueue);
+--- a/vboxguest/r0drv/linux/memobj-r0drv-linux.c
++++ b/vboxguest/r0drv/linux/memobj-r0drv-linux.c
+@@ -181,7 +181,7 @@ static const struct
+ * Internal Functions *
+ *********************************************************************************************************************************/
+ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
+-
++static void rtR0MemObjLinuxFlushTlbAll(void);
+
+
+ /**
+@@ -2245,6 +2245,15 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
+ return rc;
+ }
+
++static void rtR0MemObjLinuxFlushTlbAll(void)
++{
++#if RTLNX_VER_MIN(6,19,0)
++ if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll)))
++ g_pfnLinuxFlushTlbAll();
++#else
++ __flush_tlb_all();
++#endif
++}
+
+ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
+ {
+@@ -2265,7 +2274,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub,
+ set_pte(papPtes[i], mk_pte(pMemLnx->apPages[i], fPg));
+ }
+ preempt_disable();
+- __flush_tlb_all();
++ rtR0MemObjLinuxFlushTlbAll();
+ preempt_enable();
+ return VINF_SUCCESS;
+ }
+@@ -2311,7 +2320,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub,
+ flush_icache_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub);
+ # if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) /* flush_tlb_kernel_range is not exported, but __flush_tlb_all is. */
+ preempt_disable();
+- __flush_tlb_all();
++ rtR0MemObjLinuxFlushTlbAll();
+ preempt_enable();
+ # else
+ flush_tlb_kernel_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub);
+--- a/vboxsf/r0drv/linux/the-linux-kernel.h
++++ b/vboxsf/r0drv/linux/the-linux-kernel.h
+@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv);
+
+
+ extern struct mm_struct *g_pLnxInitMm;
++#if RTLNX_VER_MIN(6,19,0)
++extern void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
+
+
+ #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */
+--- a/vboxguest/r0drv/linux/the-linux-kernel.h
++++ b/vboxguest/r0drv/linux/the-linux-kernel.h
+@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv);
+
+
+ extern struct mm_struct *g_pLnxInitMm;
++#if RTLNX_VER_MIN(6,19,0)
++extern void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
+
+
+ #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-3.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-3.patch
new file mode 100644
index 000000000000..ddf670fed21e
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-kernel-6.19-3.patch
@@ -0,0 +1,40 @@
+https://github.com/VirtualBox/virtualbox/commit/33992f0e56b8a9bb565e0beecad91e87362ab390
+
+From 33992f0e56b8a9bb565e0beecad91e87362ab390 Mon Sep 17 00:00:00 2001
+From: Vadim Galitsyn <vadim.galitsyn@oracle.com>
+Date: Tue, 17 Feb 2026 15:37:37 +0000
+Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 (build
+ fix for old kernels),bugref:11038.
+
+svn:sync-xref-src-repo-rev: r172811
+--- a/vboxguest/r0drv/linux/memobj-r0drv-linux.c
++++ b/vboxguest/r0drv/linux/memobj-r0drv-linux.c
+@@ -181,7 +181,6 @@ static const struct
+ * Internal Functions *
+ *********************************************************************************************************************************/
+ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
+-static void rtR0MemObjLinuxFlushTlbAll(void);
+
+
+ /**
+@@ -2245,15 +2244,17 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
+ return rc;
+ }
+
++#if defined(IPRT_USE_ALLOC_VM_AREA_FOR_EXEC) || defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC)
+ static void rtR0MemObjLinuxFlushTlbAll(void)
+ {
+-#if RTLNX_VER_MIN(6,19,0)
++# if RTLNX_VER_MIN(6,19,0)
+ if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll)))
+ g_pfnLinuxFlushTlbAll();
+-#else
++# else
+ __flush_tlb_all();
+-#endif
++# endif
+ }
++#endif
+
+ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
+ {
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-log-use-c99.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-log-use-c99.patch
new file mode 100644
index 000000000000..2335d31014d9
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-log-use-c99.patch
@@ -0,0 +1,12 @@
+https://bugs.gentoo.org/298988
+
+--- a/vboxguest/Makefile
++++ b/vboxguest/Makefile
+@@ -167,6 +167,7 @@ VBOXMOD_DEFS = \
+ IN_GUEST_R0 \
+ IN_MODULE \
+ RT_WITH_VBOX \
++ LOG_USE_C99 \
+ VBGL_VBOXGUEST \
+ VBOX_WITH_HGCM
+ ifeq ($(KERN_VERSION),24)
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-no-vboxvideo.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-no-vboxvideo.patch
new file mode 100644
index 000000000000..aadac7938f9e
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.6-no-vboxvideo.patch
@@ -0,0 +1,15 @@
+https://bugs.gentoo.org/972754
+
+We do not use vboxvideo but the default Makefile builds it anyway.
+
+--- a/Makefile
++++ b/Makefile
+@@ -42,7 +42,7 @@
+ VBOX_QUIET_SH := set -x;
+ endif
+
+-all: vboxguest vboxsf vboxvideo
++all: vboxguest vboxsf
+
+ vboxguest:
+ @echo "=== Building 'vboxguest' module ==="
diff --git a/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.8-no-vboxvideo.patch b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.8-no-vboxvideo.patch
new file mode 100644
index 000000000000..6cc38386438f
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/files/virtualbox-guest-modules-7.2.8-no-vboxvideo.patch
@@ -0,0 +1,22 @@
+https://bugs.gentoo.org/972754
+
+We do not use vboxvideo but the default Makefile builds it anyway.
+
+Note:
+Since 7.2.8, upstream disables it for kernels 7+.
+This patch disables it always.
+
+
+--- a/Makefile
++++ b/Makefile
+@@ -42,9 +42,7 @@
+ VBOX_QUIET_SH := set -x;
+ endif
+
+-KERN_MAJ = $(shell uname -r | cut -d . -f1)
+-
+-all: vboxguest vboxsf $(if $(shell [ "$(KERN_MAJ)" -lt 7 ] && echo y),vboxvideo,)
++all: vboxguest vboxsf
+
+ vboxguest:
+ @echo "=== Building 'vboxguest' module ==="
diff --git a/app-emulation/virtualbox-guest-modules/metadata.xml b/app-emulation/virtualbox-guest-modules/metadata.xml
new file mode 100644
index 000000000000..d9067a7aa2ed
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26-r1.ebuild b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26-r1.ebuild
new file mode 100644
index 000000000000..de1b1a013365
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26-r1.ebuild
@@ -0,0 +1,48 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-guest-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox Guest Additions"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64 ~x86"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.1.36-log-use-c99.patch
+ "${FILESDIR}"/${PN}-7.1.8-kernel-6.15.patch
+)
+
+CONFIG_CHECK="~DRM_TTM ~DRM_VMWGFX"
+WARNING_DRM_TTM="DRM_TTM is needed for running the vboxvideo driver."
+WARNING_DRM_VMWGFX="DRM_VMWGFX is the recommended driver for VMSVGA."
+
+src_compile() {
+ local modlist=( {vboxguest,vboxsf}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d # 485996
+ newins - vboxsf.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Internal Aliases - Do not edit
+ # ------------------------------
+ alias fs-vboxsf vboxsf
+ EOF
+}
diff --git a/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26.ebuild b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26.ebuild
new file mode 100644
index 000000000000..e4343af2ca45
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.0.26.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-guest-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox Guest Additions"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 x86"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.1.36-log-use-c99.patch
+)
+
+CONFIG_CHECK="~DRM_TTM ~DRM_VMWGFX"
+WARNING_DRM_TTM="DRM_TTM is needed for running the vboxvideo driver."
+WARNING_DRM_VMWGFX="DRM_VMWGFX is the recommended driver for VMSVGA."
+
+src_compile() {
+ local modlist=( {vboxguest,vboxsf}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d # 485996
+ newins - vboxsf.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Internal Aliases - Do not edit
+ # ------------------------------
+ alias fs-vboxsf vboxsf
+ EOF
+}
diff --git a/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.1.18.ebuild b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.1.18.ebuild
new file mode 100644
index 000000000000..6dcba4f4a63c
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.1.18.ebuild
@@ -0,0 +1,47 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-guest-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox Guest Additions"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64 ~arm64 ~x86"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.1.36-log-use-c99.patch
+)
+
+CONFIG_CHECK="~DRM_TTM ~DRM_VMWGFX"
+WARNING_DRM_TTM="DRM_TTM is needed for running the vboxvideo driver."
+WARNING_DRM_VMWGFX="DRM_VMWGFX is the recommended driver for VMSVGA."
+
+src_compile() {
+ local modlist=( {vboxguest,vboxsf}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d # 485996
+ newins - vboxsf.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Internal Aliases - Do not edit
+ # ------------------------------
+ alias fs-vboxsf vboxsf
+ EOF
+}
diff --git a/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.6-r1.ebuild b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.6-r1.ebuild
new file mode 100644
index 000000000000..fa46c8239daf
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.6-r1.ebuild
@@ -0,0 +1,49 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-guest-kernel-module-src-${PV^^}"
+DESCRIPTION="Kernel Modules for Virtualbox Guest Additions"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 ~arm64 x86"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.2.6-log-use-c99.patch
+ "${FILESDIR}"/${P}-kernel-6.19-{1,3}.patch
+ "${FILESDIR}"/${P}-no-vboxvideo.patch
+)
+
+CONFIG_CHECK="~DRM_TTM ~DRM_VMWGFX"
+WARNING_DRM_TTM="DRM_TTM is needed for running the vboxvideo driver."
+WARNING_DRM_VMWGFX="DRM_VMWGFX is the recommended driver for VMSVGA."
+
+src_compile() {
+ local modlist=( {vboxguest,vboxsf}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d # 485996
+ newins - vboxsf.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Internal Aliases - Do not edit
+ # ------------------------------
+ alias fs-vboxsf vboxsf
+ EOF
+}
diff --git a/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.8.ebuild b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.8.ebuild
new file mode 100644
index 000000000000..a4ec9ea912ae
--- /dev/null
+++ b/app-emulation/virtualbox-guest-modules/virtualbox-guest-modules-7.2.8.ebuild
@@ -0,0 +1,48 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the sources
+# using the upstream provided export_modules.sh
+# https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/app-emulation/virtualbox-modules/make-modules-from-source
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-guest-kernel-module-src-${PV^^}"
+DESCRIPTION="Kernel Modules for Virtualbox Guest Additions"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64 ~arm64 x86"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.2.6-log-use-c99.patch
+ "${FILESDIR}"/${PN}-7.2.8-no-vboxvideo.patch
+)
+
+CONFIG_CHECK="~DRM_TTM ~DRM_VMWGFX"
+WARNING_DRM_TTM="DRM_TTM is needed for running the vboxvideo driver."
+WARNING_DRM_VMWGFX="DRM_VMWGFX is the recommended driver for VMSVGA."
+
+src_compile() {
+ local modlist=( {vboxguest,vboxsf}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+
+ insinto /etc/modprobe.d # 485996
+ newins - vboxsf.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Internal Aliases - Do not edit
+ # ------------------------------
+ alias fs-vboxsf vboxsf
+ EOF
+}
diff --git a/app-emulation/virtualbox-kvm/Manifest b/app-emulation/virtualbox-kvm/Manifest
new file mode 100644
index 000000000000..c02bbbb11384
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/Manifest
@@ -0,0 +1,6 @@
+DIST VirtualBox-7.2.6.tar.bz2 211192590 BLAKE2B 4871e52d8ebc6eb05c6c7dc08a7a38010bb536e7db4617023235ce8104a984e267341a502e3c385abe1a2fd4e0bb1e054f55794b994a5dba79e368f5ef4c3f9a SHA512 77b83b9fd086f89313eb73ecf98f3b2484985ddf6bb89d514b350e55f44c37a001f842d966173d0eed5071db08e1b0e66e0cbab4365ec99b7904143a7d162a55
+DIST VirtualBox-7.2.8.tar.bz2 207408458 BLAKE2B f57d2cbf02cb6b4b78a203737d1e12916b396e188a58d075b2b6414e83e526f0adecab7e317b33a639de51d30b8351d74dc4beb48e57e5a0feb1bf68d2523339 SHA512 a67256506c870b7fcecb0ec8b1d5e75490ee02379b5e967aead44ed09e2b15c0a2c3fd2d1e021281609d8d1f98b161cd3aa0265938490a999a700a1e01a9013b
+DIST virtualbox-help-7.2.6.tar.xz 8343068 BLAKE2B f383da784fe46cb0c21b0e6a67cec706883f91a73c6e1f6a6b942df73910219966c48bea8783f455bfb370931f53037742fcfb7c09be11be3a9930babc71bc6e SHA512 91b6b51c1879b031530540b3ed78fed3fc7bda1b28a89d94d46c77d6a78e4019d21c65445d6dbedf485195f53401758d4661e5b99bdbf5d0beb7cf625698e3ad
+DIST virtualbox-help-7.2.8.tar.xz 8378772 BLAKE2B 6941831bcdabe0017f3b03c4741ac5df5feef8aa376f0686878eb70e8ae7e9bdf878a34db86b4756ac65476ea08e3e0f1417db7870d35619bb4065bd271264dd SHA512 476d9e3ca3c338ec0c54a91204c24b5033af75c60d55e66693093bef30262157437f36a66c5c8184e9eb95b0a243cd6ec5c59f2c5b9c6dc31f94ab5cea393e5f
+DIST virtualbox-kvm-20260201.tar.gz 273470 BLAKE2B 2379d031fdb0c5301bdd947d22817d5cb12067a63c288fa650db9ee940fd88639ff499a0226cfb297494d4a8c46da169d26646671d24229d68bca7966f175439 SHA512 55c5222c82b2854a9a3c7aaa46edcb598ba1272032bb33dd0783ea14d2c2696b85a0aaeb2440fea2da59dd36bba06650c00526d7ca659dce246f9f8678aa8a46
+DIST virtualbox-patches-7.2.6.tar.bz2 6041 BLAKE2B 6bd791a24acccc7ab923f09b5a1a88f557c59f2526b1055c7a877e3ca25ca002c58cc5fb67737e2f53c322bae5c716dba4472da8c977006d6297793fae55fafc SHA512 94a49da99d6affa0c89e0fb349bb09fd1dc7f05ced9c828d52d30455fb8c76a245db1f572491801fa381e7521bc8f4e094ddb3d8fd2d341835f3bd238a24cc25
diff --git a/app-emulation/virtualbox-kvm/files/050_virtualbox-5.2.8-nopie.patch b/app-emulation/virtualbox-kvm/files/050_virtualbox-5.2.8-nopie.patch
new file mode 100644
index 000000000000..35bd8e0a705e
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/050_virtualbox-5.2.8-nopie.patch
@@ -0,0 +1,147 @@
+diff -Naur VirtualBox-5.1.24/Config.kmk VirtualBox-5.1.24/Config.kmk
+--- VirtualBox-5.1.24/Config.kmk 2017-07-26 13:55:27.803972185 -0400
++++ VirtualBox-5.1.24/Config.kmk 2017-07-26 13:53:10.700974328 -0400
+@@ -2601,6 +2601,7 @@
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overlength-strings?= $(call VBOX_GCC_CHECK_CC,-Wno-overlength-strings,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overloaded-virtual?= $(call VBOX_GCC_CHECK_CXX,-Wno-overloaded-virtual,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
++ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_nopie ?= $(call VBOX_GCC_CHECK_CC,-nopie,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-dwarf2-cfi-asm ?= $(call VBOX_GCC_CHECK_CC,-fno-dwarf2-cfi-asm,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_m64 ?= $(call VBOX_GCC_CHECK_CC,-m64,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_no-pie ?= $(call VBOX_GCC_CHECK_CC,-no-pie,)'
+@@ -3843,8 +3844,8 @@
+
+ ifeq ($(VBOX_LDR_FMT32),elf)
+ TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL)
+- TEMPLATE_VBoxRc_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
+- TEMPLATE_VBoxRc_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
++ TEMPLATE_VBoxRc_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
++ TEMPLATE_VBoxRc_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
+ ifeq ($(KBUILD_TARGET),solaris)
+ TEMPLATE_VBoxRc_LDFLAGS = -r
+ else
+@@ -3864,8 +3865,8 @@
+ ifeq ($(VBOX_LDR_FMT32),macho)
+ TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC_TOOL)
+ TEMPLATE_VBoxRc_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
+- TEMPLATE_VBoxRc_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-rtti
+- TEMPLATE_VBoxRc_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
++ TEMPLATE_VBoxRc_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-rtti
++ TEMPLATE_VBoxRc_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
+ TEMPLATE_VBoxRc_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
+ #TEMPLATE_VBoxRc_LDFLAGS.release = -Wl,-S ???
+ endif
+@@ -3903,9 +3904,9 @@
+ endif
+
+ ifeq ($(VBOX_LDR_FMT32),elf)
+- TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0
+- TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0
+- TEMPLATE_VBoxRcExe_LDFLAGS = -g
++ TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0 $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0 $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxRcExe_LDFLAGS = -g $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g
+ TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g
+ TEMPLATE_VBoxRcExe_LDFLAGS.release = -g
+@@ -3984,8 +3985,8 @@
+
+ ifeq ($(VBOX_LDR_FMT),elf)
+ TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
+-TEMPLATE_VBoxR0_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
+-TEMPLATE_VBoxR0_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
++TEMPLATE_VBoxR0_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
++TEMPLATE_VBoxR0_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
+ TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
+ TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
+ ifeq ($(KBUILD_TARGET),solaris)
+@@ -4018,12 +4019,12 @@
+ TEMPLATE_VBoxR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
+ TEMPLATE_VBoxR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) \
+ -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
+- -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
++ -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
+ TEMPLATE_VBoxR0_CXXFLAGS.x86 = -m32
+ TEMPLATE_VBoxR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
+ -fno-common -msoft-float -static -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
+- -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
++ -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
+ TEMPLATE_VBoxR0_CFLAGS.x86 = -m32
+ TEMPLATE_VBoxR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
+@@ -4259,7 +4260,7 @@
+ -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
+ -Wimplicit-function-declaration -Werror-implicit-function-declaration \
+ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -std=c99
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
+ TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \
+@@ -4268,7 +4269,7 @@
+ TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
+ $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
+ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
+@@ -4341,7 +4342,7 @@
+ -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
+ -Wimplicit-function-declaration -Werror-implicit-function-declaration \
+ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -std=c99 -msoft-float
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 \
+ -mpreferred-stack-boundary=2 -mno-mmx -mno-sse -mno-avx \
+@@ -4353,7 +4354,7 @@
+ TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
+ $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
+ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -msoft-float
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
+@@ -4394,7 +4395,7 @@
+ TEMPLATE_VBOXR0DRV_LDFLAGS = -shared -no-undefined -dc -dy -lroot -rpath-link /boot/system/develop/lib/x86 --no-add-needed /boot/system/develop/lib/_KERNEL_ --no-add-needed /boot/system/develop/lib/haiku_version_glue.o
+ TEMPLATE_VBOXR0DRV_CFLAGS = -fno-PIC \
+ $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
+ TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
+@@ -5210,8 +5211,8 @@
+ TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
+ TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
+ TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
+- TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector)
+- TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
++ TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ ifeq ($(KBUILD_TARGET_ARCH),amd64)
+ # in 64-bit mode we'll build a sys-module (VBoxREM2).
+ if1of ($(KBUILD_TARGET), darwin solaris)
+diff -Naur VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk
+--- VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk 2017-07-26 13:55:27.746972186 -0400
++++ VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk 2017-07-26 13:53:10.641974329 -0400
+@@ -132,6 +132,7 @@
+ -W \
+ -Wformat-nonliteral \
+ $(VBOX_GCC_fno-stack-protector) \
++ $(VBOX_GCC_nopie) \
+ $(VBOX_GCC_fno-dwarf2-cfi-asm) \
+ $(VBOX_GCC_Wno-address)
+ TEMPLATE_iPxe_ASFLAGS = \
+@@ -155,6 +156,7 @@
+ -W \
+ -Wformat-nonliteral \
+ $(VBOX_GCC_fno-stack-protector) \
++ $(VBOX_GCC_nopie) \
+ $(VBOX_GCC_fno-dwarf2-cfi-asm) \
+ $(VBOX_GCC_Wno-address) \
+ -DASSEMBLY
diff --git a/app-emulation/virtualbox-kvm/files/10-virtualbox.rules b/app-emulation/virtualbox-kvm/files/10-virtualbox.rules
new file mode 100644
index 000000000000..014c164a37f5
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/10-virtualbox.rules
@@ -0,0 +1,7 @@
+# create second tree of USB devices according to
+# http://www.virtualbox.org/ticket/7759#comment:5
+
+SUBSYSTEM=="usb_device", ACTION!="remove", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb", ACTION!="remove", ENV{DEVTYPE}=="usb_device", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb_device", ACTION=="remove", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh --remove $major $minor"
+SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh --remove $major $minor"
diff --git a/app-emulation/virtualbox-kvm/files/test_python.py b/app-emulation/virtualbox-kvm/files/test_python.py
new file mode 100644
index 000000000000..da03af795501
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/test_python.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+# Smoke test for python:
+# Test if the python bindings have been built and if python is crashing when creating a manager
+
+def test_module_was_built():
+ import os
+ assert os.path.isfile(os.getenv('VBOX_PROGRAM_PATH') + '/VBoxPython3.so')
+
+def test_VirtualBoxManager():
+ from vboxapi import VirtualBoxManager
+ try:
+ manager = VirtualBoxManager()
+ except:
+ # if it reaches here, it did not crash
+ pass
diff --git a/app-emulation/virtualbox-kvm/files/vboxwebsrv-confd b/app-emulation/virtualbox-kvm/files/vboxwebsrv-confd
new file mode 100644
index 000000000000..fdcd17e9ba0c
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/vboxwebsrv-confd
@@ -0,0 +1,19 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# The host to bind to (defaults to "localhost").
+VBOXWEBSRV_HOST="localhost"
+
+# Which port to on the host (defaults to 18083).
+VBOXWEBSRV_PORT="18083"
+
+# Session timeout, in seconds. (defaults to 20).
+VBOXWEBSRV_TIMEOUT=20
+
+# The interval in which the webservice checks for
+# timed-out clients, in seconds. Normally does not
+# need to be changed (defaults to 5).
+VBOXWEBSRV_INTERVAL=5
+
+# User under which vboxwebsrv is running
+VBOXWEBSRV_USER="root"
diff --git a/app-emulation/virtualbox-kvm/files/vboxwebsrv-initd b/app-emulation/virtualbox-kvm/files/vboxwebsrv-initd
new file mode 100644
index 000000000000..f50c3ec099d6
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/vboxwebsrv-initd
@@ -0,0 +1,21 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need net
+}
+
+start() {
+ ebegin "Starting VirtualBox WebService"
+ start-stop-daemon --start --quiet --user ${VBOXWEBSRV_USER} --pidfile /var/run/vboxwebsrv.pid \
+ --background --make-pidfile --exec /usr/bin/vboxwebsrv \
+ -- -H ${VBOXWEBSRV_HOST} -p ${VBOXWEBSRV_PORT} -t ${VBOXWEBSRV_TIMEOUT} -i ${VBOXWEBSRV_INTERVAL}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping VirtualBox WebService"
+ start-stop-daemon --stop --user ${VBOXWEBSRV_USER} --quiet --pidfile /var/run/vboxwebsrv.pid
+ eend $?
+}
diff --git a/app-emulation/virtualbox-kvm/files/virtualbox-4-config b/app-emulation/virtualbox-kvm/files/virtualbox-4-config
new file mode 100644
index 000000000000..af7822146560
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/virtualbox-4-config
@@ -0,0 +1 @@
+INSTALL_DIR=/usr/MY_LIBDIR/virtualbox
diff --git a/app-emulation/virtualbox-kvm/files/virtualbox-5-localconfig b/app-emulation/virtualbox-kvm/files/virtualbox-5-localconfig
new file mode 100644
index 000000000000..0f9113825fb8
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/virtualbox-5-localconfig
@@ -0,0 +1,47 @@
+# -*- Makefile -*-
+#
+# Overwrite some default kBuild settings
+#
+
+#
+# Copyright (C) 2006-2008 Sun Microsystems, Inc.
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License as published by the Free Software Foundation,
+# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
+# distribution. VirtualBox OSE is distributed in the hope that it will
+# be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# shut up wine complaining about unknown locale
+EXEC_X86_WIN32 := wine
+
+# don't build testcases to save time, they are not needed for the package
+VBOX_WITH_TESTCASES :=
+VBOX_WITH_VALIDATIONKIT :=
+VBOX_DOCBOOK_WITH_LATEX := 1
+
+KBUILD_MSG_STYLE := brief
+
+## paths, origin, hardening
+#VBOX_WITH_HARDENING := 1
+VBOX_WITH_ORIGIN :=
+VBOX_PATH_APP_PRIVATE_ARCH := /usr/MY_LIBDIR/virtualbox
+VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
+VBOX_PATH_APP_DOCS = $(VBOX_PATH_PACKAGE_DOCS)
+
+## don't build unwanted/splitted stuff
+VBOX_WITHOUT_ADDITIONS := 1
+VBOX_WITH_VBOXDRV :=
+VBOX_WITH_VBOXBFE :=
+VBOX_WITH_KCHMVIEWER :=
+
+## don't build with -Werror
+VBOX_WITH_WARNINGS_AS_ERRORS :=
+
+## fix compilation with USE="doc" (Gentoo bug #554932)
+VBOX_PATH_DOCBOOK_DTD := /usr/share/sgml/docbook/sgml-dtd-4.4
diff --git a/app-emulation/virtualbox-kvm/files/virtualbox-kvm-7.1.0-disable-rebuild-iPxeBiosBin.patch b/app-emulation/virtualbox-kvm/files/virtualbox-kvm-7.1.0-disable-rebuild-iPxeBiosBin.patch
new file mode 100644
index 000000000000..85e3f8cbaff8
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/virtualbox-kvm-7.1.0-disable-rebuild-iPxeBiosBin.patch
@@ -0,0 +1,18 @@
+When compiling with clang we get:
+
+src/VBox/Devices/PC/ipxe/src/core/settings.c:310:8: error: fields must have a constant size: 'variable length array in structure' extension will never be supported
+
+Apply this patch conditionally to disable rebuilding iPxeBiosBin.rom when using clang.
+
+--- a/src/VBox/Devices/PC/ipxe/Makefile.kmk
++++ b/src/VBox/Devices/PC/ipxe/Makefile.kmk
+@@ -45,7 +45,8 @@
+ iPxeBiosBin_CLEAN = \
+ $(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c \
+
+-if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.amd64 darwin.arm64 linux.arm64 os2.x86 solaris.amd64 win.amd64 win.arm64)
++# Disable building on Linux if using clang
++if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.amd64 darwin.arm64 linux.arm64 linux.amd64 os2.x86 solaris.amd64 win.amd64 win.arm64)
+ $$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c: $(PATH_SUB_CURRENT)/iPxeBiosBin.rom $(VBOX_BIN2C) | $$(dir $$@)
+ $(call MSG_TOOL,bin2c,iPxeBiosBin,$<,$@)
+ $(QUIET)$(VBOX_BIN2C) -min 32 -max 56 -mask 0x1ff -export NetBiosBinary $< $@
diff --git a/app-emulation/virtualbox-kvm/files/virtualbox-ose-6-wrapper b/app-emulation/virtualbox-kvm/files/virtualbox-ose-6-wrapper
new file mode 100644
index 000000000000..57b15cc93eba
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/virtualbox-ose-6-wrapper
@@ -0,0 +1,119 @@
+#!/bin/sh
+## @file
+# Oracle VM VirtualBox startup script, Linux hosts.
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+PATH="/usr/bin:/bin:/usr/sbin:/sbin"
+CONFIG="/etc/vbox/vbox.cfg"
+
+test -r "${CONFIG}" &&
+ . "${CONFIG}"
+test -z "${INSTALL_DIR}" &&
+ if test -f /usr/lib/virtualbox/VirtualBox &&
+ test -x /usr/lib/virtualbox/VirtualBox; then
+ INSTALL_DIR=/usr/lib/virtualbox
+ else
+ echo "Could not find VirtualBox installation. Please reinstall."
+ exit 1
+ fi
+
+# Note: This script must not fail if the module was not successfully installed
+# because the user might not want to run a VM but only change VM params!
+
+if [ "$1" = "shutdown" ]; then
+ SHUTDOWN="true"
+elif ! lsmod|grep -q vboxdrv; then
+ cat << EOF
+WARNING: The vboxdrv kernel module is not loaded. Either there is no module
+ available for the current kernel (`uname -r`) or it failed to
+ load. Please recompile the kernel module and install it by
+
+ for m in vbox{drv,netadp,netflt}; do modprobe \$m; done
+
+ You will not be able to start VMs until this problem is fixed.
+EOF
+elif [ ! -c /dev/vboxdrv ]; then
+ cat << EOF
+WARNING: The character device /dev/vboxdrv does not exist.
+ Please try to reload all the needed kernel modules by:
+
+ for m in vbox{netflt,netadp,drv}; do rmmod \$m; done
+ for m in vbox{drv,netadp,netflt}; do modprobe \$m; done
+
+ and if that is not successful, try to re-install the package by:
+
+ emerge -1av app-emulation/virtualbox-modules
+
+ You will not be able to start VMs until this problem is fixed.
+EOF
+fi
+
+SERVER_PID=$(ps -U ${LOGNAME:-$USER} | grep VBoxSVC | awk '{ print $1 }')
+if [ -z "$SERVER_PID" ]; then
+ # Server not running yet/anymore, cleanup socket path.
+ # See IPC_GetDefaultSocketPath()!
+ if [ -n "$LOGNAME" ]; then
+ rm -rf /tmp/.vbox-$LOGNAME-ipc > /dev/null 2>&1
+ else
+ rm -rf /tmp/.vbox-$USER-ipc > /dev/null 2>&1
+ fi
+fi
+
+if [ "$SHUTDOWN" = "true" ]; then
+ if [ -n "$SERVER_PID" ]; then
+ kill -TERM $SERVER_PID
+ sleep 2
+ fi
+ exit 0
+fi
+
+APP=`basename $0`
+case "$APP" in
+ VirtualBox|virtualbox)
+ exec "$INSTALL_DIR/VirtualBox" "$@"
+ ;;
+ VirtualBoxVM|virtualboxvm)
+ exec "$INSTALL_DIR/VirtualBoxVM" "$@"
+ ;;
+ VBoxManage|vboxmanage)
+ exec "$INSTALL_DIR/VBoxManage" "$@"
+ ;;
+ VBoxSDL|vboxsdl)
+ exec "$INSTALL_DIR/VBoxSDL" "$@"
+ ;;
+ VBoxVRDP|VBoxHeadless|vboxheadless)
+ exec "$INSTALL_DIR/VBoxHeadless" "$@"
+ ;;
+ VBoxAutostart|vboxautostart)
+ exec "$INSTALL_DIR/VBoxAutostart" "$@"
+ ;;
+ VBoxBalloonCtrl|vboxballoonctrl)
+ exec "$INSTALL_DIR/VBoxBalloonCtrl" "$@"
+ ;;
+ VBoxBugReport|vboxbugreport)
+ exec "$INSTALL_DIR/VBoxBugReport" "$@"
+ ;;
+ VBoxDTrace|vboxdtrace)
+ exec "$INSTALL_DIR/VBoxDTrace" "$@"
+ ;;
+ vboxwebsrv)
+ exec "$INSTALL_DIR/vboxwebsrv" "$@"
+ ;;
+ *)
+ echo "Unknown application - $APP"
+ exit 1
+ ;;
+esac
+exit 0
diff --git a/app-emulation/virtualbox-kvm/files/virtualbox-vboxusb_tmpfilesd b/app-emulation/virtualbox-kvm/files/virtualbox-vboxusb_tmpfilesd
new file mode 100644
index 000000000000..39378536a8b2
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/files/virtualbox-vboxusb_tmpfilesd
@@ -0,0 +1 @@
+d /dev/vboxusb 0750 root vboxusers
diff --git a/app-emulation/virtualbox-kvm/metadata.xml b/app-emulation/virtualbox-kvm/metadata.xml
new file mode 100644
index 000000000000..4e3feaf70f18
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/metadata.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <use>
+ <flag name="dtrace">Install dtrace Extension Pack</flag>
+ <flag name="hardened">Enable hardening and install binaries SUID</flag>
+ <flag name="lvm">Build VBoxVolInfo that needs devicemapper from <pkg>sys-fs/lvm2</pkg>.</flag>
+ <flag name="sdk">Enable building of SDK</flag>
+ <flag name="udev">Controls installation of special USB udev rules.</flag>
+ <flag name="vboxwebsrv">Build and install the VirtualBox webservice</flag>
+ <flag name="vde">Support for VDE networking via <pkg>net-misc/vde</pkg>
+ </flag>
+ <flag name="vmmraw">Enable 32-bit support on a 64-bit kernel.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.6_pre20260201-r1.ebuild b/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.6_pre20260201-r1.ebuild
new file mode 100644
index 000000000000..1f726b715b3a
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.6_pre20260201-r1.ebuild
@@ -0,0 +1,788 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit desktop edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+PATCHES_PV="7.2.6"
+ORIGIN_PN="VirtualBox"
+ORIGIN_PV=${PV%_pre*}
+
+MY_PN=virtualbox
+MY_PV=${PV#*_pre}
+MY_P=${ORIGIN_PN}-${ORIGIN_PV}
+
+PATCHES_DIR="${WORKDIR}"/${PN}-dev-${MY_PV}
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/cyberus-technology/virtualbox-kvm"
+SRC_URI="
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2
+ https://github.com/cyberus-technology/virtualbox-kvm/archive/dev-${MY_PV}.tar.gz -> ${PN}-${MY_PV}.tar.gz
+ https://download.virtualbox.org/virtualbox/${ORIGIN_PV%*a}/${MY_P}.tar.bz2
+ gui? ( !doc? ( https://dev.gentoo.org/~ceamac/${CATEGORY}/${MY_PN}/${MY_PN}-help-${ORIGIN_PV}.tar.xz ) )
+"
+S="${WORKDIR}/${ORIGIN_PN}-${ORIGIN_PV%*a}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+IUSE="alsa dbus debug doc dtrace +gui +hardened java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde +vmmraw vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libogg
+ media-libs/libpng:0=
+ media-libs/libvorbis
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,wayland,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ !app-emulation/virtualbox
+ ${COMMON_DEPEND}
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_PV}/patches
+ "${PATCHES_DIR}"/patches
+)
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${MY_PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VMR3.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+ --with-kvm
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !hardened --disable-hardening)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${MY_PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${MY_PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${MY_PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root with USE=hardened.
+ local mode=$(usex hardened 4750 0750)
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} ${mode}
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{-x86,-amd64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL ${mode}
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM ${mode}
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ newmenu ${MY_PN}.desktop ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${MY_PN}-${size}px.png ${PN}.png
+ done
+ newicon ${MY_PN}-48px.png ${PN}.png
+ newicon -s scalable ${MY_PN}.svg ${PN}.png
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${MY_PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${MY_PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo ${mode}
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${MY_PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}/UserManual.q{ch,hc}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${MY_PN}-help-${ORIGIN_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}/UserManual.q{ch,hc}
+ fi
+ dodoc ${PATCHES_DIR}/README.*
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${MY_PN}-vboxusb_tmpfilesd virtualbox-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${ORIGIN_PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${MY_PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.8_pre20260201.ebuild b/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.8_pre20260201.ebuild
new file mode 100644
index 000000000000..abd01c23353c
--- /dev/null
+++ b/app-emulation/virtualbox-kvm/virtualbox-kvm-7.2.8_pre20260201.ebuild
@@ -0,0 +1,789 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit desktop edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+PATCHES_PV="7.2.6"
+ORIGIN_PN="VirtualBox"
+ORIGIN_PV=${PV%_pre*}
+
+MY_PN=virtualbox
+MY_PV=${PV#*_pre}
+MY_P=${ORIGIN_PN}-${ORIGIN_PV}
+
+PATCHES_DIR="${WORKDIR}"/${PN}-dev-${MY_PV}
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/cyberus-technology/virtualbox-kvm"
+SRC_URI="
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2
+ https://github.com/cyberus-technology/virtualbox-kvm/archive/dev-${MY_PV}.tar.gz -> ${PN}-${MY_PV}.tar.gz
+ https://download.virtualbox.org/virtualbox/${ORIGIN_PV%*a}/${MY_P}.tar.bz2
+ gui? ( !doc? ( https://dev.gentoo.org/~ceamac/${CATEGORY}/${MY_PN}/${MY_PN}-help-${ORIGIN_PV}.tar.xz ) )
+"
+S="${WORKDIR}/${ORIGIN_PN}-${ORIGIN_PV%*a}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+IUSE="alsa dbus debug doc dtrace +gui +hardened java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde +vmmraw vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libogg
+ media-libs/libpng:0=
+ media-libs/libvorbis
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,wayland,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ !app-emulation/virtualbox
+ ${COMMON_DEPEND}
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ test? ( !debug )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_PV}/patches
+ "${PATCHES_DIR}"/patches
+)
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${MY_PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VMR3.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+ --with-kvm
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !hardened --disable-hardening)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${MY_PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${MY_PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${MY_PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root with USE=hardened.
+ local mode=$(usex hardened 4750 0750)
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} ${mode}
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{-x86,-amd64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL ${mode}
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM ${mode}
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ newmenu ${MY_PN}.desktop ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${MY_PN}-${size}px.png ${PN}.png
+ done
+ newicon ${MY_PN}-48px.png ${PN}.png
+ newicon -s scalable ${MY_PN}.svg ${PN}.png
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${MY_PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${MY_PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo ${mode}
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${MY_PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}/UserManual.q{ch,hc}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${MY_PN}-help-${ORIGIN_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}/UserManual.q{ch,hc}
+ fi
+ dodoc ${PATCHES_DIR}/README.*
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${MY_PN}-vboxusb_tmpfilesd virtualbox-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${ORIGIN_PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${MY_PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox-modules/Manifest b/app-emulation/virtualbox-modules/Manifest
new file mode 100644
index 000000000000..5c45142c26e2
--- /dev/null
+++ b/app-emulation/virtualbox-modules/Manifest
@@ -0,0 +1,4 @@
+DIST vbox-host-kernel-module-src-7.1.18.tar.xz 815796 BLAKE2B 2769287ec164931d9a0b7c463911b5d9998f627c4db890a7ca2fd8218732debcd7ad56e87b15401b475f63a299f5b3e9ce98f550426e0fa6945fbd083803bfa5 SHA512 20c1d27bf6db05a5d4f5096db9870e9f98af6ddf3b7dfb9c531cfdd0e28058a8f9db51d505a16d758d4bc603193911b739cfad7241992703502e0b3e4dcce5bf
+DIST vbox-host-kernel-module-src-7.2.6.tar.xz 854948 BLAKE2B bf6dbaa2ba60eee2e204e08ad5dc4c76788e7e7cae2470c5ffc6355cd91c362a850dc06bdddbec38989df1b3cfeaea03d5f71db101d86b0b93bfa2c523d83003 SHA512 b1c710a6f2d339eb1be56d02794c8ed96f79976e4be8b424924788ffe906eea3c0e01f8289a400727a95123388a228210e70ea3e2c75b72cbb409536c2e899d9
+DIST vbox-host-kernel-module-src-7.2.8.tar.xz 861596 BLAKE2B d04b6bc042738cf4997ff152f1ba92620b32ef99e1b8296e2e1994e0d5b333ce132a0d75e5ee094813b4e2fa96f628b5dcc20e41a013950eefcf066455028989 SHA512 8240a37fe5d673db5b3d865f8a8cf77340b141dabfb70936961ff9364b4b9303d5f727ac90dd60c3cbeaa9e01d9e1ff6c00e80c6fcf72e6d5a72f1e9e61cc4c8
+DIST vbox-kernel-module-src-7.0.26.tar.xz 721876 BLAKE2B 355ac80cc96f4ad259a0fdbb909803bbec884c1d25fc9061f45f7039a0857b4f6cc93d4739cf85a82b9544aae06bf7b689d5d530ffc2fe97a874ef57d123423f SHA512 5980721197b908d5d991b258be395a8b542b8183eac7b146b147e4dbea9ff0b0408de5733b12d02a159b689bde29966a55fa7b64c953b9abe4180dbf6e0ebcb6
diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.1.8-kernel-6.15.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.1.8-kernel-6.15.patch
new file mode 100644
index 000000000000..5f1140df9d62
--- /dev/null
+++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.1.8-kernel-6.15.patch
@@ -0,0 +1,116 @@
+Add initial support for kernel 6.15.0.
+Patch obtained by comparing sources from 7.1.8 and 7.2.0_BETA1 where upstream added support.
+https://bugs.gentoo.org/956675
+
+--- a/vboxdrv/Makefile-footer.gmk
++++ b/vboxdrv/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxdrv/r0drv/linux/timer-r0drv-linux.c
++++ b/vboxdrv/r0drv/linux/timer-r0drv-linux.c
+@@ -422,7 +422,11 @@ static void rtTimerLnxStopSubTimer(PRTTIMERLNXSUBTIMER pSubTimer, bool fHighRes)
+ }
+ else
+ #endif
++# if RTLNX_VER_MIN(6,15,0)
++ timer_delete(&pSubTimer->u.Std.LnxTimer);
++#else
+ del_timer(&pSubTimer->u.Std.LnxTimer);
++#endif
+
+ rtTimerLnxSetState(&pSubTimer->enmState, RTTIMERLNXSTATE_STOPPED);
+ }
+@@ -470,7 +474,11 @@ static void rtTimerLnxDestroyIt(PRTTIMER pTimer)
+ hrtimer_cancel(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer);
+ else
+ #endif
++# if RTLNX_VER_MIN(6,15,0)
++ timer_delete_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
++#else
+ del_timer_sync(&pTimer->aSubTimers[iCpu].u.Std.LnxTimer);
++#endif
+ }
+
+ /*
+@@ -1626,8 +1634,13 @@ RTDECL(int) RTTimerCreateEx(PRTTIMER *ppTimer, uint64_t u64NanoInterval, uint32_
+ #ifdef RTTIMER_LINUX_WITH_HRTIMER
+ if (pTimer->fHighRes)
+ {
++#if RTLNX_VER_MIN(6,15,0)
++ hrtimer_setup(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer,
++ rtTimerLinuxHrCallback, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
++#else
+ hrtimer_init(&pTimer->aSubTimers[iCpu].u.Hr.LnxTimer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
+ pTimer->aSubTimers[iCpu].u.Hr.LnxTimer.function = rtTimerLinuxHrCallback;
++#endif
+ }
+ else
+ #endif
+--- a/vboxnetadp/Makefile-footer.gmk
++++ b/vboxnetadp/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxnetflt/Makefile-footer.gmk
++++ b/vboxnetflt/Makefile-footer.gmk
+@@ -115,6 +115,7 @@ VBOXMOD_EXT := ko
+
+ # build defs
+ EXTRA_CFLAGS += $(VBOXMOD_CFLAGS) $(addprefix -I,$(KERN_INCL) $(VBOXMOD_INCL)) $(VBOXMOD_0_KFLAGS) $(KDEBUG)
++ccflags-y += $(EXTRA_CFLAGS)
+ $(VBOXMOD_0_TARGET)-y := $(VBOXMOD_OBJS)
+ obj-m += $(VBOXMOD_0_TARGET).o
+
+--- a/vboxdrv/linux/SUPDrv-linux.c
++++ b/vboxdrv/linux/SUPDrv-linux.c
+@@ -1744,10 +1744,17 @@ SUPR0DECL(bool) SUPR0FpuBegin(bool fCtxHook)
+ */
+ Assert(fCtxHook || !RTThreadPreemptIsEnabled(NIL_RTTHREAD));
+ kernel_fpu_begin();
+-# if 0 /* Always do it for now for better test coverage. */
++# if RTLNX_VER_MIN(6,15,0) /* fpregs_unlock may do more than just preempt_enable, so only when necessary now. */
+ if (fCtxHook)
+-# endif
++# endif
++ {
++# if RTLNX_VER_MIN(6,15,0)
++ if (!irqs_disabled())
++ fpregs_unlock();
++# else
+ preempt_enable();
++# endif
++ }
+ return false; /** @todo Not sure if we have license to use any extended state, or
+ * if we're limited to the SSE & x87 FPU. If it's the former,
+ * we should return @a true and the caller can skip
+@@ -1765,10 +1772,17 @@ SUPR0DECL(void) SUPR0FpuEnd(bool fCtxHook)
+ #if RTLNX_VER_MIN(4,19,0)
+ /* HACK ALERT! See SUPR0FpuBegin for an explanation of this. */
+ Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
+-# if 0 /* Always do it for now for better test coverage. */
++# if RTLNX_VER_MIN(6,15,0) /* fpregs_unlock may do more than just preempt_enable, so only when necessary now. */
+ if (fCtxHook)
+-# endif
++# endif
++ {
++# if RTLNX_VER_MIN(6,15,0)
++ if (!irqs_disabled())
++ fpregs_lock();
++# else
+ preempt_disable();
++# endif
++ }
+ kernel_fpu_end();
+ #endif
+ }
diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch
new file mode 100644
index 000000000000..ff31366604c8
--- /dev/null
+++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-1.patch
@@ -0,0 +1,243 @@
+https://github.com/VirtualBox/virtualbox/commit/280303b3f03d7087b9c955088a3cf499414f6ec1
+
+From 280303b3f03d7087b9c955088a3cf499414f6ec1 Mon Sep 17 00:00:00 2001
+From: Vadim Galitsyn <vadim.galitsyn@oracle.com>
+Date: Tue, 17 Feb 2026 15:00:09 +0000
+Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19
+ bugref:11038.
+
+svn:sync-xref-src-repo-rev: r172809
+--- a/vboxdrv/linux/SUPDrv-linux.c
++++ b/vboxdrv/linux/SUPDrv-linux.c
+@@ -190,6 +190,12 @@ static bool g_fEnabledHwvirtUsingKvm;
+ static int (*g_pfnKvmEnableVirtualization)(void);
+ /** Function pointer to kvm_disable_virtualization(). */
+ static void (*g_pfnKvmDisableVirtualization)(void);
++# if RTLNX_VER_MIN(6,19,0)
++/** Function pointer to cr4_update_irqsoff(). */
++static void (*g_pfnCr4UpdateIrqsoff)(unsigned long set, unsigned long clear);
++/** Function pointer to cr4_read_shadow(). */
++static unsigned long (*g_pfnCr4ReadShadow)(void);
++# endif
+ /** Pointer to the KVM hardware specific module. */
+ struct module *g_pKvmHwvirtModule;
+ #endif
+@@ -395,6 +401,28 @@ static int supdrvLinuxInitKvmSymbols(void)
+ void *pfnDisable = __symbol_get("kvm_disable_virtualization");
+ if (pfnDisable)
+ {
++# if RTLNX_VER_MIN(6,19,0)
++ void *pfnCr4UpdateIrqsoff = __symbol_get("cr4_update_irqsoff");
++ void *pfnRr4ReadShadow = __symbol_get("cr4_read_shadow");
++
++ if ( pfnCr4UpdateIrqsoff
++ && pfnRr4ReadShadow)
++ {
++ g_pfnCr4UpdateIrqsoff = pfnCr4UpdateIrqsoff;
++ g_pfnCr4ReadShadow = pfnRr4ReadShadow;
++
++ printk(KERN_INFO "vboxdrv: Found extra KVM hardware-virtualization symbols\n");
++ }
++ else
++ {
++ printk(KERN_WARNING "vboxdrv: Failed to find extra KVM hardware-virtualization symbols\n");
++
++ if (pfnCr4UpdateIrqsoff)
++ symbol_put_addr(pfnCr4UpdateIrqsoff);
++ if (pfnRr4ReadShadow)
++ symbol_put_addr(pfnRr4ReadShadow);
++ }
++#endif
+ /*
+ * Try to obtain a reference to kvm_intel/kvm_amd module in addition to the
+ * reference to the kvm module. If we fail, we will not try to use KVM for
+@@ -479,6 +507,18 @@ static void supdrvLinuxTermKvmSymbols(void)
+ symbol_put_addr(g_pfnKvmDisableVirtualization);
+ g_pfnKvmDisableVirtualization = NULL;
+ }
++# if RTLNX_VER_MIN(6,19,0)
++ if (g_pfnCr4UpdateIrqsoff)
++ {
++ symbol_put_addr(g_pfnCr4UpdateIrqsoff);
++ g_pfnCr4UpdateIrqsoff = NULL;
++ }
++ if (g_pfnCr4ReadShadow)
++ {
++ symbol_put_addr(g_pfnCr4ReadShadow);
++ g_pfnCr4ReadShadow = NULL;
++ }
++#endif
+ if (g_pKvmHwvirtModule)
+ {
+ module_put(g_pKvmHwvirtModule);
+@@ -1159,6 +1199,35 @@ SUPR0DECL(int) SUPDrvLinuxLdrDeregisterWrappedModule(PCSUPLDRWRAPPEDMODULE pWrap
+ }
+ EXPORT_SYMBOL(SUPDrvLinuxLdrDeregisterWrappedModule);
+
++/**
++ * Wrapper function for cr4_update_irqsoff() which was
++ * exported only for KVM starting from kernel 6.19.
++ */
++static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clear)
++{
++#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
++ if (g_pfnCr4UpdateIrqsoff)
++ g_pfnCr4UpdateIrqsoff(set, clear);
++#else
++ cr4_update_irqsoff(set, clear);
++#endif
++}
++
++/**
++ * Wrapper function for supdrvLinux_cr4_read_shadow() which was
++ * exported only for KVM starting from kernel 6.19.
++ */
++static unsigned long supdrvLinux_cr4_read_shadow(void)
++{
++ unsigned long cr4 = 0;
++#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
++ if (g_pfnCr4ReadShadow)
++ cr4 = g_pfnCr4ReadShadow();
++#else
++ cr4 = cr4_read_shadow();
++#endif
++ return cr4;
++}
+
+ #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
+ RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
+@@ -1166,10 +1235,10 @@ RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask
+ # if RTLNX_VER_MIN(5,8,0)
+ unsigned long fSavedFlags;
+ local_irq_save(fSavedFlags);
+- RTCCUINTREG const uOld = cr4_read_shadow();
+- cr4_update_irqsoff(fOrMask, ~fAndMask); /* Same as this function, only it is not returning the old value. */
+- AssertMsg(cr4_read_shadow() == ((uOld & fAndMask) | fOrMask),
+- ("fOrMask=%#RTreg fAndMask=%#RTreg uOld=%#RTreg; new cr4=%#llx\n", fOrMask, fAndMask, uOld, cr4_read_shadow()));
++ RTCCUINTREG const uOld = supdrvLinux_cr4_read_shadow();
++ supdrvLinux_cr4_update_irqsoff(fOrMask, ~fAndMask); /* Same as this function, only it is not returning the old value. */
++ AssertMsg(supdrvLinux_cr4_read_shadow() == ((uOld & fAndMask) | fOrMask),
++ ("fOrMask=%#RTreg fAndMask=%#RTreg uOld=%#RTreg; new cr4=%#llx\n", fOrMask, fAndMask, uOld, supdrvLinux_cr4_read_shadow()));
+ local_irq_restore(fSavedFlags);
+ # else
+ # if RTLNX_VER_MIN(3,20,0)
+--- a/vboxdrv/r0drv/linux/initterm-r0drv-linux.c
++++ b/vboxdrv/r0drv/linux/initterm-r0drv-linux.c
+@@ -60,6 +60,11 @@ static DECLARE_TASK_QUEUE(g_rtR0LnxWorkQueue);
+ * This is a special mm structure used to manage the kernel address space. */
+ struct mm_struct *g_pLnxInitMm = NULL;
+
++#if RTLNX_VER_MIN(6,19,0)
++/** Pointer to __flush_tlb_all kernel symbol. */
++void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
++
+
+ /**
+ * Pushes an item onto the IPRT work queue.
+@@ -136,6 +141,11 @@ DECLHIDDEN(int) rtR0InitNative(void)
+ printk("rtR0InitNative: g_pLnxInitMm=%p\n", g_pLnxInitMm);
+
+ RTR0DbgKrnlInfoRelease(hKrnlInfo);
++# if RTLNX_VER_MIN(6,19,0)
++ g_pfnLinuxFlushTlbAll = __symbol_get("__flush_tlb_all");
++ if (!RT_VALID_PTR(g_pfnLinuxFlushTlbAll))
++ printk("rtR0InitNative: can't load __flush_tlb_all\n");
++# endif
+ }
+ else
+ printk("rtR0InitNative: RTR0DbgKrnlInfoOpen failed: %d\n", rc);
+@@ -151,6 +161,12 @@ DECLHIDDEN(void) rtR0TermNative(void)
+ {
+ IPRT_LINUX_SAVE_EFL_AC();
+
++# if RTLNX_VER_MIN(6,19,0)
++ if (RT_VALID_PTR(g_pfnLinuxFlushTlbAll))
++ symbol_put_addr(g_pfnLinuxFlushTlbAll);
++ g_pfnLinuxFlushTlbAll = NULL;
++#endif
++
+ rtR0LnxWorkqueueFlush();
+ #if RTLNX_VER_MIN(2,5,41)
+ destroy_workqueue(g_prtR0LnxWorkQueue);
+--- a/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
++++ b/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
+@@ -181,7 +181,7 @@ static const struct
+ * Internal Functions *
+ *********************************************************************************************************************************/
+ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
+-
++static void rtR0MemObjLinuxFlushTlbAll(void);
+
+
+ /**
+@@ -2245,6 +2245,15 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
+ return rc;
+ }
+
++static void rtR0MemObjLinuxFlushTlbAll(void)
++{
++#if RTLNX_VER_MIN(6,19,0)
++ if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll)))
++ g_pfnLinuxFlushTlbAll();
++#else
++ __flush_tlb_all();
++#endif
++}
+
+ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
+ {
+@@ -2265,7 +2274,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub,
+ set_pte(papPtes[i], mk_pte(pMemLnx->apPages[i], fPg));
+ }
+ preempt_disable();
+- __flush_tlb_all();
++ rtR0MemObjLinuxFlushTlbAll();
+ preempt_enable();
+ return VINF_SUCCESS;
+ }
+@@ -2311,7 +2320,7 @@ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub,
+ flush_icache_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub);
+ # if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) /* flush_tlb_kernel_range is not exported, but __flush_tlb_all is. */
+ preempt_disable();
+- __flush_tlb_all();
++ rtR0MemObjLinuxFlushTlbAll();
+ preempt_enable();
+ # else
+ flush_tlb_kernel_range((uintptr_t)pMemLnx->Core.pv + offSub, cbSub);
+--- a/vboxdrv/r0drv/linux/the-linux-kernel.h
++++ b/vboxdrv/r0drv/linux/the-linux-kernel.h
+@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv);
+
+
+ extern struct mm_struct *g_pLnxInitMm;
++#if RTLNX_VER_MIN(6,19,0)
++extern void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
+
+
+ #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */
+--- a/vboxnetflt/r0drv/linux/the-linux-kernel.h
++++ b/vboxnetflt/r0drv/linux/the-linux-kernel.h
+@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv);
+
+
+ extern struct mm_struct *g_pLnxInitMm;
++#if RTLNX_VER_MIN(6,19,0)
++extern void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
+
+
+ #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */
+--- a/vboxnetadp/r0drv/linux/the-linux-kernel.h
++++ b/vboxnetadp/r0drv/linux/the-linux-kernel.h
+@@ -512,6 +512,9 @@ RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv);
+
+
+ extern struct mm_struct *g_pLnxInitMm;
++#if RTLNX_VER_MIN(6,19,0)
++extern void (*g_pfnLinuxFlushTlbAll)(void);
++#endif
+
+
+ #endif /* !IPRT_INCLUDED_SRC_r0drv_linux_the_linux_kernel_h */
diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch
new file mode 100644
index 000000000000..f5e727bf1024
--- /dev/null
+++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-2.patch
@@ -0,0 +1,53 @@
+https://github.com/VirtualBox/virtualbox/commit/8902311a0d88a2d14a1b8ee224008a4c7061854b
+
+From 8902311a0d88a2d14a1b8ee224008a4c7061854b Mon Sep 17 00:00:00 2001
+From: Vadim Galitsyn <vadim.galitsyn@oracle.com>
+Date: Tue, 17 Feb 2026 15:20:09 +0000
+Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 (build
+ fix), bugref:11038.
+
+svn:sync-xref-src-repo-rev: r172810
+--- a/vboxdrv/linux/SUPDrv-linux.c
++++ b/vboxdrv/linux/SUPDrv-linux.c
+@@ -1199,18 +1199,19 @@ SUPR0DECL(int) SUPDrvLinuxLdrDeregisterWrappedModule(PCSUPLDRWRAPPEDMODULE pWrap
+ }
+ EXPORT_SYMBOL(SUPDrvLinuxLdrDeregisterWrappedModule);
+
++#if RTLNX_VER_MIN(5,8,0)
+ /**
+ * Wrapper function for cr4_update_irqsoff() which was
+ * exported only for KVM starting from kernel 6.19.
+ */
+ static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clear)
+ {
+-#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
++# if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
+ if (g_pfnCr4UpdateIrqsoff)
+ g_pfnCr4UpdateIrqsoff(set, clear);
+-#else
++# else
+ cr4_update_irqsoff(set, clear);
+-#endif
++# endif
+ }
+
+ /**
+@@ -1220,14 +1221,15 @@ static void supdrvLinux_cr4_update_irqsoff(unsigned long set, unsigned long clea
+ static unsigned long supdrvLinux_cr4_read_shadow(void)
+ {
+ unsigned long cr4 = 0;
+-#if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
++# if RTLNX_VER_MIN(6,19,0) && defined(SUPDRV_LINUX_HAS_KVM_HWVIRT_API)
+ if (g_pfnCr4ReadShadow)
+ cr4 = g_pfnCr4ReadShadow();
+-#else
++# else
+ cr4 = cr4_read_shadow();
+-#endif
++# endif
+ return cr4;
+ }
++#endif /* 5.8.0 */
+
+ #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)
+ RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
diff --git a/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch
new file mode 100644
index 000000000000..7a3d2a89b0b8
--- /dev/null
+++ b/app-emulation/virtualbox-modules/files/virtualbox-modules-7.2.6-kernel-6.19-3.patch
@@ -0,0 +1,40 @@
+https://github.com/VirtualBox/virtualbox/commit/33992f0e56b8a9bb565e0beecad91e87362ab390
+
+From 33992f0e56b8a9bb565e0beecad91e87362ab390 Mon Sep 17 00:00:00 2001
+From: Vadim Galitsyn <vadim.galitsyn@oracle.com>
+Date: Tue, 17 Feb 2026 15:37:37 +0000
+Subject: [PATCH] Linux host: Introduce initial support for kernel 6.19 (build
+ fix for old kernels),bugref:11038.
+
+svn:sync-xref-src-repo-rev: r172811
+--- a/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
++++ b/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
+@@ -181,7 +181,6 @@ static const struct
+ * Internal Functions *
+ *********************************************************************************************************************************/
+ static void rtR0MemObjLinuxFreePages(PRTR0MEMOBJLNX pMemLnx);
+-static void rtR0MemObjLinuxFlushTlbAll(void);
+
+
+ /**
+@@ -2245,15 +2244,17 @@ DECLHIDDEN(int) rtR0MemObjNativeMapUser(PPRTR0MEMOBJINTERNAL ppMem, RTR0MEMOBJ p
+ return rc;
+ }
+
++#if defined(IPRT_USE_ALLOC_VM_AREA_FOR_EXEC) || defined(IPRT_USE_APPLY_TO_PAGE_RANGE_FOR_EXEC)
+ static void rtR0MemObjLinuxFlushTlbAll(void)
+ {
+-#if RTLNX_VER_MIN(6,19,0)
++# if RTLNX_VER_MIN(6,19,0)
+ if (RT_LIKELY(RT_VALID_PTR(g_pfnLinuxFlushTlbAll)))
+ g_pfnLinuxFlushTlbAll();
+-#else
++# else
+ __flush_tlb_all();
+-#endif
++# endif
+ }
++#endif
+
+ DECLHIDDEN(int) rtR0MemObjNativeProtect(PRTR0MEMOBJINTERNAL pMem, size_t offSub, size_t cbSub, uint32_t fProt)
+ {
diff --git a/app-emulation/virtualbox-modules/files/virtualbox.conf-r1 b/app-emulation/virtualbox-modules/files/virtualbox.conf-r1
new file mode 100644
index 000000000000..39b882494993
--- /dev/null
+++ b/app-emulation/virtualbox-modules/files/virtualbox.conf-r1
@@ -0,0 +1,3 @@
+vboxdrv
+vboxnetflt
+vboxnetadp
diff --git a/app-emulation/virtualbox-modules/metadata.xml b/app-emulation/virtualbox-modules/metadata.xml
new file mode 100644
index 000000000000..d9067a7aa2ed
--- /dev/null
+++ b/app-emulation/virtualbox-modules/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26-r1.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26-r1.ebuild
new file mode 100644
index 000000000000..4a4a16923fdb
--- /dev/null
+++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26-r1.ebuild
@@ -0,0 +1,52 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.1.8-kernel-6.15.patch
+)
+
+src_compile() {
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf
+
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+}
diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26.ebuild
new file mode 100644
index 000000000000..06f8f15f95e0
--- /dev/null
+++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.0.26.ebuild
@@ -0,0 +1,48 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL"
+
+src_compile() {
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf
+
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+}
diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.1.18.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.1.18.ebuild
new file mode 100644
index 000000000000..c83dd89dd78f
--- /dev/null
+++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.1.18.ebuild
@@ -0,0 +1,48 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-host-kernel-module-src-${PV}"
+DESCRIPTION="Kernel Modules for Virtualbox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL ~PREEMPT_NOTIFIERS"
+
+src_compile() {
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf
+
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+}
diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r2.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r2.ebuild
new file mode 100644
index 000000000000..67d1c0c2f063
--- /dev/null
+++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.6-r2.ebuild
@@ -0,0 +1,53 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the binary
+# package that comes from VirtualBox-*.run
+# XXX: update: now it is split from virtualbox-*-Debian~bullseye_amd64.deb
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-host-kernel-module-src-${PV^^}"
+DESCRIPTION="Kernel Modules for Virtualbox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-kernel-6.19-{1..3}.patch
+)
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL ~PREEMPT_NOTIFIERS ~KPROBES"
+KPROBES_ERROR="CONFIG_KPROBES is required for kernel 6.16+; modules fail to build with kernel 6.19+"
+
+src_compile() {
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf
+
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+}
diff --git a/app-emulation/virtualbox-modules/virtualbox-modules-7.2.8.ebuild b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.8.ebuild
new file mode 100644
index 000000000000..32006dde90ca
--- /dev/null
+++ b/app-emulation/virtualbox-modules/virtualbox-modules-7.2.8.ebuild
@@ -0,0 +1,49 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# XXX: the tarball here is just the kernel modules split out of the sources
+# using the upstream provided export_modules.sh
+# https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/app-emulation/virtualbox-modules/make-modules-from-source
+
+EAPI=8
+
+inherit linux-mod-r1
+
+MY_P="vbox-host-kernel-module-src-${PV^^}"
+DESCRIPTION="Kernel Modules for Virtualbox"
+HOMEPAGE="https://www.virtualbox.org/"
+SRC_URI="https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${MY_P}.tar.xz"
+S="${WORKDIR}"
+
+LICENSE="GPL-3"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL ~PREEMPT_NOTIFIERS ~KPROBES"
+KPROBES_ERROR="CONFIG_KPROBES is required for kernel 6.16+; modules fail to build with kernel 6.19+"
+
+src_compile() {
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins "${FILESDIR}"/virtualbox.conf-r1 virtualbox.conf
+
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+}
diff --git a/app-emulation/virtualbox/Manifest b/app-emulation/virtualbox/Manifest
new file mode 100644
index 000000000000..1a2d61591880
--- /dev/null
+++ b/app-emulation/virtualbox/Manifest
@@ -0,0 +1,12 @@
+DIST VirtualBox-7.0.26.tar.bz2 174650718 BLAKE2B ba13a940b9566a5ac5b228bf29d49d4b9bf16a72da3212c305538711d363f1e6fddaa8717d4c46394ce488d2c1670874fece356740f421f44f6f40bd655f5551 SHA512 337f62438679f98b342213dbafdd3e07f7d7092a4205bfe388d64d1cc8224499621addea56b70d806c93290bb82e6150c07516e69250460a276e3b7a4484a9b6
+DIST VirtualBox-7.1.18.tar.bz2 222872511 BLAKE2B 1c692a6bd86185035e379feefddd3e98c18a49f231a2fd57702ca95c887ffe9ec435a90ebad457d07054bcd88bd31d84db61ed21ae8a99ae6d6ca39e18b1879c SHA512 bb0eae83af0ca94e502fc713a5fdf90e2760eb90e548ad102259b57edcda98f04adf6e9cb83b52bee3c1b341f1c2823fec05a0c60a2403e70be6159dd4a21c34
+DIST VirtualBox-7.2.6.tar.bz2 211192590 BLAKE2B 4871e52d8ebc6eb05c6c7dc08a7a38010bb536e7db4617023235ce8104a984e267341a502e3c385abe1a2fd4e0bb1e054f55794b994a5dba79e368f5ef4c3f9a SHA512 77b83b9fd086f89313eb73ecf98f3b2484985ddf6bb89d514b350e55f44c37a001f842d966173d0eed5071db08e1b0e66e0cbab4365ec99b7904143a7d162a55
+DIST VirtualBox-7.2.8.tar.bz2 207408458 BLAKE2B f57d2cbf02cb6b4b78a203737d1e12916b396e188a58d075b2b6414e83e526f0adecab7e317b33a639de51d30b8351d74dc4beb48e57e5a0feb1bf68d2523339 SHA512 a67256506c870b7fcecb0ec8b1d5e75490ee02379b5e967aead44ed09e2b15c0a2c3fd2d1e021281609d8d1f98b161cd3aa0265938490a999a700a1e01a9013b
+DIST virtualbox-help-7.1.0.tar.xz 1631644 BLAKE2B 408748619d1e981b9d5b5e615baca75ff297e9b7e745751767361b7b9c74345a3db1980734439f3868c412fe28a6b687b417adc3cc148d2e2b8a9fa60e48463b SHA512 513b8474d4fbf7cdb83624dc8d344122c524d92f9f84b32784161c8e1cac8ddc2c265447621d7cd3cf105d555a044e6abf42155f413ba89d507eba7ce3b2da89
+DIST virtualbox-help-7.1.18.tar.xz 8350244 BLAKE2B 4c63fc530418d4852a6a88b4dacd2c9e9fa753ff3836ebadb2f6cc99296c35604bddf0a95addbcdf2f4d36ddc5299395f3bde0fa0e2201d1dc48d262197a8bd3 SHA512 247bf80af406e4f76d71e8b966f113f138b5f08bf3755fe9e70cabc9a9f1d098215dbadb00ab184e9325e5cee7e927fad0a360faa28f90598bd995e70996d640
+DIST virtualbox-help-7.2.6.tar.xz 8343068 BLAKE2B f383da784fe46cb0c21b0e6a67cec706883f91a73c6e1f6a6b942df73910219966c48bea8783f455bfb370931f53037742fcfb7c09be11be3a9930babc71bc6e SHA512 91b6b51c1879b031530540b3ed78fed3fc7bda1b28a89d94d46c77d6a78e4019d21c65445d6dbedf485195f53401758d4661e5b99bdbf5d0beb7cf625698e3ad
+DIST virtualbox-help-7.2.8.tar.xz 8378772 BLAKE2B 6941831bcdabe0017f3b03c4741ac5df5feef8aa376f0686878eb70e8ae7e9bdf878a34db86b4756ac65476ea08e3e0f1417db7870d35619bb4065bd271264dd SHA512 476d9e3ca3c338ec0c54a91204c24b5033af75c60d55e66693093bef30262157437f36a66c5c8184e9eb95b0a243cd6ec5c59f2c5b9c6dc31f94ab5cea393e5f
+DIST virtualbox-patches-7.0.22-r1.tar.bz2 6972 BLAKE2B e9116cb2ed874f9a0133e756b725a48ee665a412114d04195849f5930782c65678a2aaf581b9b02bc29001be4191116e322643232ee37de5cba0f2b5049b615f SHA512 be72b596f63229bd28b22c026108cf5a5c951f58343a709f158446593e6f872a81734dd83a838dd91c02c80854312e2cad81f3a525035db5ffabeb96729a8276
+DIST virtualbox-patches-7.1.16.tar.bz2 6001 BLAKE2B 0e8bd42b9556321841e94827df500cbed40ecffc47e2e82fbcc7a98e00a069322e7e549f6ceb250359735d3602467fa55c81aa2534c05502b1854e8a11b839c5 SHA512 aea93103e5122568b7c0bb70566872935326675c7f9dda00563a83e0cb59c92020501e780e30b2b58c1c0b0f2cb97a6d72379702c913c14fd4c7546f7e033361
+DIST virtualbox-patches-7.2.4.tar.bz2 6938 BLAKE2B be3ef14c2090f39eeb1fe6fe82231dbf725ff6d20603e72e4c3bbf8b15ae7698d2be86bb321bd1776a15c6385770a393cc8c6b945ea87c54f9c767c3c77b61af SHA512 2e9c403dff97f5146e7632d7f6b5d0230f65f8be172efc6dd2959e72054778f617aa437f8c86d1489f9ce9212899ff08e83433a9eca3e5691353b036d426784a
+DIST virtualbox-patches-7.2.6.tar.bz2 6041 BLAKE2B 6bd791a24acccc7ab923f09b5a1a88f557c59f2526b1055c7a877e3ca25ca002c58cc5fb67737e2f53c322bae5c716dba4472da8c977006d6297793fae55fafc SHA512 94a49da99d6affa0c89e0fb349bb09fd1dc7f05ced9c828d52d30455fb8c76a245db1f572491801fa381e7521bc8f4e094ddb3d8fd2d341835f3bd238a24cc25
diff --git a/app-emulation/virtualbox/files/050_virtualbox-5.2.8-nopie.patch b/app-emulation/virtualbox/files/050_virtualbox-5.2.8-nopie.patch
new file mode 100644
index 000000000000..35bd8e0a705e
--- /dev/null
+++ b/app-emulation/virtualbox/files/050_virtualbox-5.2.8-nopie.patch
@@ -0,0 +1,147 @@
+diff -Naur VirtualBox-5.1.24/Config.kmk VirtualBox-5.1.24/Config.kmk
+--- VirtualBox-5.1.24/Config.kmk 2017-07-26 13:55:27.803972185 -0400
++++ VirtualBox-5.1.24/Config.kmk 2017-07-26 13:53:10.700974328 -0400
+@@ -2601,6 +2601,7 @@
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overlength-strings?= $(call VBOX_GCC_CHECK_CC,-Wno-overlength-strings,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_Wno-overloaded-virtual?= $(call VBOX_GCC_CHECK_CXX,-Wno-overloaded-virtual,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-stack-protector ?= $(call VBOX_GCC_CHECK_CC,-fno-stack-protector,)'
++ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_nopie ?= $(call VBOX_GCC_CHECK_CC,-nopie,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_fno-dwarf2-cfi-asm ?= $(call VBOX_GCC_CHECK_CC,-fno-dwarf2-cfi-asm,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_m64 ?= $(call VBOX_GCC_CHECK_CC,-m64,)'
+ $(QUIET)$(APPEND) '$@' 'VBOX_GCC_no-pie ?= $(call VBOX_GCC_CHECK_CC,-no-pie,)'
+@@ -3843,8 +3844,8 @@
+
+ ifeq ($(VBOX_LDR_FMT32),elf)
+ TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC32_TOOL)
+- TEMPLATE_VBoxRc_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
+- TEMPLATE_VBoxRc_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
++ TEMPLATE_VBoxRc_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_fvisibility-inlines-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
++ TEMPLATE_VBoxRc_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-strict-aliasing $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_fvisibility-hidden) $(VBOX_GCC_IPRT_FMT_CHECK)
+ ifeq ($(KBUILD_TARGET),solaris)
+ TEMPLATE_VBoxRc_LDFLAGS = -r
+ else
+@@ -3864,8 +3865,8 @@
+ ifeq ($(VBOX_LDR_FMT32),macho)
+ TEMPLATE_VBoxRc_TOOL = $(VBOX_GCC_TOOL)
+ TEMPLATE_VBoxRc_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
+- TEMPLATE_VBoxRc_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-rtti
+- TEMPLATE_VBoxRc_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
++ TEMPLATE_VBoxRc_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing -fno-rtti
++ TEMPLATE_VBoxRc_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -m32 -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC32_Wno-variadic-macros) -fno-common -msoft-float -static $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-exceptions $(VBOX_GCC_GC_OPT) $(VBOX_GCC_GC_FP) -fno-strict-aliasing
+ TEMPLATE_VBoxRc_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -m32 -nostdlib
+ #TEMPLATE_VBoxRc_LDFLAGS.release = -Wl,-S ???
+ endif
+@@ -3903,9 +3904,9 @@
+ endif
+
+ ifeq ($(VBOX_LDR_FMT32),elf)
+- TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0
+- TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0
+- TEMPLATE_VBoxRcExe_LDFLAGS = -g
++ TEMPLATE_VBoxRcExe_CFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CFLAGS)) -O0 $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxRcExe_CXXFLAGS = $(filter-out -nostdinc,$(TEMPLATE_VBoxRc_CXXFLAGS)) -O0 $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxRcExe_LDFLAGS = -g $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxRcExe_LDFLAGS.dbgopt = -g
+ TEMPLATE_VBoxRcExe_LDFLAGS.strict = -g
+ TEMPLATE_VBoxRcExe_LDFLAGS.release = -g
+@@ -3984,8 +3985,8 @@
+
+ ifeq ($(VBOX_LDR_FMT),elf)
+ TEMPLATE_VBoxR0_TOOL = $(VBOX_GCC_TOOL)
+-TEMPLATE_VBoxR0_CFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
+-TEMPLATE_VBoxR0_CXXFLAGS = -fno-pie -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
++TEMPLATE_VBoxR0_CFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-common $(VBOX_GCC_fvisibility-hidden) -std=gnu99 $(VBOX_GCC_IPRT_FMT_CHECK)
++TEMPLATE_VBoxR0_CXXFLAGS = -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-exceptions $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) -fno-common $(VBOX_GCC_fvisibility-inlines-hidden) $(VBOX_GCC_fvisibility-hidden) -fno-rtti $(VBOX_GCC_IPRT_FMT_CHECK)
+ TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables -ffreestanding
+ TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mcmodel=kernel -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -fno-asynchronous-unwind-tables
+ ifeq ($(KBUILD_TARGET),solaris)
+@@ -4018,12 +4019,12 @@
+ TEMPLATE_VBoxR0_DEFS += $(VBOX_DARWIN_DEF_SDK_DEFS)
+ TEMPLATE_VBoxR0_CXXFLAGS = $(VBOX_DARWIN_DEF_SDK_CXXFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_CXX) $(VBOX_GCC_Wno-variadic-macros) \
+ -fno-common -msoft-float -static -fno-rtti -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
+- -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
++ -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxR0_CXXFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
+ TEMPLATE_VBoxR0_CXXFLAGS.x86 = -m32
+ TEMPLATE_VBoxR0_CFLAGS = $(VBOX_DARWIN_DEF_SDK_CFLAGS) -nostdinc -g $(VBOX_GCC_pipe) $(VBOX_GCC_WERR) $(VBOX_GCC_PEDANTIC_C) $(VBOX_GCC_Wno-variadic-macros) \
+ -fno-common -msoft-float -static -fno-exceptions $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing \
+- -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector)
++ -mno-sse -mno-mmx -mno-sse2 -mno-3dnow $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ TEMPLATE_VBoxR0_CFLAGS.amd64 = -m64 -mno-red-zone -mno-sse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-sse4a -fno-unwind-tables
+ TEMPLATE_VBoxR0_CFLAGS.x86 = -m32
+ TEMPLATE_VBoxR0_LDFLAGS = $(VBOX_DARWIN_DEF_SDK_LDFLAGS) -nostdlib
+@@ -4259,7 +4260,7 @@
+ -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
+ -Wimplicit-function-declaration -Werror-implicit-function-declaration \
+ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -std=c99
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-align-long-strings -mpreferred-stack-boundary=2 -mno-mmx -mno-3dnow -mno-sse -mno-sse2
+ TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 --param inline-unit-growth=100 --param large-function-growth=1000 \
+@@ -4268,7 +4269,7 @@
+ TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
+ $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
+ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
+@@ -4341,7 +4342,7 @@
+ -Wstrict-prototypes -Wmissing-prototypes -Wstrict-prototypes \
+ -Wimplicit-function-declaration -Werror-implicit-function-declaration \
+ -O2 -ffreestanding -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -std=c99 -msoft-float
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 \
+ -mpreferred-stack-boundary=2 -mno-mmx -mno-sse -mno-avx \
+@@ -4353,7 +4354,7 @@
+ TEMPLATE_VBOXR0DRV_CXXFLAGS = -fno-exceptions -fno-rtti \
+ $(VBOX_GCC_WARN) -Wpointer-arith -Winline \
+ -O2 -fno-strict-aliasing -fno-common -finline-limit=8000 \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) \
+ -nostdinc -msoft-float
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.x86 = $(TEMPLATE_VBOXR0DRV_CFLAGS.x86)
+ TEMPLATE_VBOXR0DRV_CXXFLAGS.amd64 = $(TEMPLATE_VBOXR0DRV_CFLAGS.amd64)
+@@ -4394,7 +4395,7 @@
+ TEMPLATE_VBOXR0DRV_LDFLAGS = -shared -no-undefined -dc -dy -lroot -rpath-link /boot/system/develop/lib/x86 --no-add-needed /boot/system/develop/lib/_KERNEL_ --no-add-needed /boot/system/develop/lib/haiku_version_glue.o
+ TEMPLATE_VBOXR0DRV_CFLAGS = -fno-PIC \
+ $(VBOX_GCC_WARN) -Wstrict-prototypes $(VBOX_GCC_Wno-pointer-sign) -Wno-sign-compare \
+- $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
++ $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie) $(VBOX_GCC_R0_OPT) $(VBOX_GCC_R0_FP) -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
+ TEMPLATE_VBOXR0DRV_CFLAGS.x86 = -m32 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
+ TEMPLATE_VBOXR0DRV_CFLAGS.amd64 = -m64 -mno-sse -mno-mmx -mno-sse2 -mno-3dnow \
+@@ -5210,8 +5211,8 @@
+ TEMPLATE_VBoxNoCrtGccLib_TOOL = $(VBOX_GCC_TOOL)
+ TEMPLATE_VBoxNoCrtGccLib_ASTOOL = $(VBOX_ASTOOL)
+ TEMPLATE_VBoxNoCrtGccLib_ASFLAGS = $(VBOX_ASFLAGS)
+- TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector)
+- TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector)
++ TEMPLATE_VBoxNoCrtGccLib_CFLAGS += $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
++ TEMPLATE_VBoxNoCrtGccLib_CXXFLAGS += $(VBOX_GCC_fno-stack-protector) $(VBOX_GCC_nopie)
+ ifeq ($(KBUILD_TARGET_ARCH),amd64)
+ # in 64-bit mode we'll build a sys-module (VBoxREM2).
+ if1of ($(KBUILD_TARGET), darwin solaris)
+diff -Naur VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk
+--- VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk 2017-07-26 13:55:27.746972186 -0400
++++ VirtualBox-5.1.24/src/VBox/Devices/PC/ipxe/Makefile.kmk 2017-07-26 13:53:10.641974329 -0400
+@@ -132,6 +132,7 @@
+ -W \
+ -Wformat-nonliteral \
+ $(VBOX_GCC_fno-stack-protector) \
++ $(VBOX_GCC_nopie) \
+ $(VBOX_GCC_fno-dwarf2-cfi-asm) \
+ $(VBOX_GCC_Wno-address)
+ TEMPLATE_iPxe_ASFLAGS = \
+@@ -155,6 +156,7 @@
+ -W \
+ -Wformat-nonliteral \
+ $(VBOX_GCC_fno-stack-protector) \
++ $(VBOX_GCC_nopie) \
+ $(VBOX_GCC_fno-dwarf2-cfi-asm) \
+ $(VBOX_GCC_Wno-address) \
+ -DASSEMBLY
diff --git a/app-emulation/virtualbox/files/10-virtualbox.rules b/app-emulation/virtualbox/files/10-virtualbox.rules
new file mode 100644
index 000000000000..014c164a37f5
--- /dev/null
+++ b/app-emulation/virtualbox/files/10-virtualbox.rules
@@ -0,0 +1,7 @@
+# create second tree of USB devices according to
+# http://www.virtualbox.org/ticket/7759#comment:5
+
+SUBSYSTEM=="usb_device", ACTION!="remove", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb", ACTION!="remove", ENV{DEVTYPE}=="usb_device", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh $major $minor $attr{bDeviceClass}"
+SUBSYSTEM=="usb_device", ACTION=="remove", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh --remove $major $minor"
+SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN="%UDEVDIR%/VBoxCreateUSBNode.sh --remove $major $minor"
diff --git a/app-emulation/virtualbox/files/test_python.py b/app-emulation/virtualbox/files/test_python.py
new file mode 100644
index 000000000000..da03af795501
--- /dev/null
+++ b/app-emulation/virtualbox/files/test_python.py
@@ -0,0 +1,16 @@
+#!/usr/bin/python3
+
+# Smoke test for python:
+# Test if the python bindings have been built and if python is crashing when creating a manager
+
+def test_module_was_built():
+ import os
+ assert os.path.isfile(os.getenv('VBOX_PROGRAM_PATH') + '/VBoxPython3.so')
+
+def test_VirtualBoxManager():
+ from vboxapi import VirtualBoxManager
+ try:
+ manager = VirtualBoxManager()
+ except:
+ # if it reaches here, it did not crash
+ pass
diff --git a/app-emulation/virtualbox/files/vboxwebsrv-confd b/app-emulation/virtualbox/files/vboxwebsrv-confd
new file mode 100644
index 000000000000..fdcd17e9ba0c
--- /dev/null
+++ b/app-emulation/virtualbox/files/vboxwebsrv-confd
@@ -0,0 +1,19 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# The host to bind to (defaults to "localhost").
+VBOXWEBSRV_HOST="localhost"
+
+# Which port to on the host (defaults to 18083).
+VBOXWEBSRV_PORT="18083"
+
+# Session timeout, in seconds. (defaults to 20).
+VBOXWEBSRV_TIMEOUT=20
+
+# The interval in which the webservice checks for
+# timed-out clients, in seconds. Normally does not
+# need to be changed (defaults to 5).
+VBOXWEBSRV_INTERVAL=5
+
+# User under which vboxwebsrv is running
+VBOXWEBSRV_USER="root"
diff --git a/app-emulation/virtualbox/files/vboxwebsrv-initd b/app-emulation/virtualbox/files/vboxwebsrv-initd
new file mode 100644
index 000000000000..f50c3ec099d6
--- /dev/null
+++ b/app-emulation/virtualbox/files/vboxwebsrv-initd
@@ -0,0 +1,21 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need net
+}
+
+start() {
+ ebegin "Starting VirtualBox WebService"
+ start-stop-daemon --start --quiet --user ${VBOXWEBSRV_USER} --pidfile /var/run/vboxwebsrv.pid \
+ --background --make-pidfile --exec /usr/bin/vboxwebsrv \
+ -- -H ${VBOXWEBSRV_HOST} -p ${VBOXWEBSRV_PORT} -t ${VBOXWEBSRV_TIMEOUT} -i ${VBOXWEBSRV_INTERVAL}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping VirtualBox WebService"
+ start-stop-daemon --stop --user ${VBOXWEBSRV_USER} --quiet --pidfile /var/run/vboxwebsrv.pid
+ eend $?
+}
diff --git a/app-emulation/virtualbox/files/virtualbox-4-config b/app-emulation/virtualbox/files/virtualbox-4-config
new file mode 100644
index 000000000000..af7822146560
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-4-config
@@ -0,0 +1 @@
+INSTALL_DIR=/usr/MY_LIBDIR/virtualbox
diff --git a/app-emulation/virtualbox/files/virtualbox-5-localconfig b/app-emulation/virtualbox/files/virtualbox-5-localconfig
new file mode 100644
index 000000000000..05e7dbabdaed
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-5-localconfig
@@ -0,0 +1,47 @@
+# -*- Makefile -*-
+#
+# Overwrite some default kBuild settings
+#
+
+#
+# Copyright (C) 2006-2008 Sun Microsystems, Inc.
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License as published by the Free Software Foundation,
+# in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
+# distribution. VirtualBox OSE is distributed in the hope that it will
+# be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# shut up wine complaining about unknown locale
+EXEC_X86_WIN32 := wine
+
+# don't build testcases to save time, they are not needed for the package
+VBOX_WITH_TESTCASES :=
+VBOX_WITH_VALIDATIONKIT :=
+VBOX_DOCBOOK_WITH_LATEX := 1
+
+KBUILD_MSG_STYLE := brief
+
+## paths, origin, hardening
+VBOX_WITH_HARDENING := 1
+VBOX_WITH_ORIGIN :=
+VBOX_PATH_APP_PRIVATE_ARCH := /usr/MY_LIBDIR/virtualbox
+VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
+VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
+VBOX_PATH_APP_DOCS = $(VBOX_PATH_PACKAGE_DOCS)
+
+## don't build unwanted/splitted stuff
+VBOX_WITHOUT_ADDITIONS := 1
+VBOX_WITH_VBOXDRV :=
+VBOX_WITH_VBOXBFE :=
+VBOX_WITH_KCHMVIEWER :=
+
+## don't build with -Werror
+VBOX_WITH_WARNINGS_AS_ERRORS :=
+
+## fix compilation with USE="doc" (Gentoo bug #554932)
+VBOX_PATH_DOCBOOK_DTD := /usr/share/sgml/docbook/sgml-dtd-4.4
diff --git a/app-emulation/virtualbox/files/virtualbox-7.0.8-disable-rebuild-iPxeBiosBin.patch b/app-emulation/virtualbox/files/virtualbox-7.0.8-disable-rebuild-iPxeBiosBin.patch
new file mode 100644
index 000000000000..29ec3aee72c1
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-7.0.8-disable-rebuild-iPxeBiosBin.patch
@@ -0,0 +1,18 @@
+When compiling with clang we get:
+
+src/VBox/Devices/PC/ipxe/src/core/settings.c:310:8: error: fields must have a constant size: 'variable length array in structure' extension will never be supported
+
+Apply this patch conditionally to disable rebuilding iPxeBiosBin.rom when using clang.
+
+--- a/src/VBox/Devices/PC/ipxe/Makefile.kmk
++++ b/src/VBox/Devices/PC/ipxe/Makefile.kmk
+@@ -45,7 +45,8 @@
+ iPxeBiosBin_CLEAN = \
+ $(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c \
+
+-if1of ($(KBUILD_TARGET), darwin os2 solaris win)
++# Disable building on Linux if using clang
++if1of ($(KBUILD_TARGET), darwin os2 solaris win linux)
+ $$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c: $(PATH_SUB_CURRENT)/iPxeBiosBin.rom $(VBOX_BIN2C) | $$(dir $$@)
+ $(call MSG_TOOL,bin2c,iPxeBiosBin,$<,$@)
+ $(QUIET)$(VBOX_BIN2C) -min 32 -max 56 -mask 0x1ff -export NetBiosBinary $< $@
diff --git a/app-emulation/virtualbox/files/virtualbox-7.1.0-disable-rebuild-iPxeBiosBin.patch b/app-emulation/virtualbox/files/virtualbox-7.1.0-disable-rebuild-iPxeBiosBin.patch
new file mode 100644
index 000000000000..85e3f8cbaff8
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-7.1.0-disable-rebuild-iPxeBiosBin.patch
@@ -0,0 +1,18 @@
+When compiling with clang we get:
+
+src/VBox/Devices/PC/ipxe/src/core/settings.c:310:8: error: fields must have a constant size: 'variable length array in structure' extension will never be supported
+
+Apply this patch conditionally to disable rebuilding iPxeBiosBin.rom when using clang.
+
+--- a/src/VBox/Devices/PC/ipxe/Makefile.kmk
++++ b/src/VBox/Devices/PC/ipxe/Makefile.kmk
+@@ -45,7 +45,8 @@
+ iPxeBiosBin_CLEAN = \
+ $(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c \
+
+-if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.amd64 darwin.arm64 linux.arm64 os2.x86 solaris.amd64 win.amd64 win.arm64)
++# Disable building on Linux if using clang
++if1of ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH), darwin.amd64 darwin.arm64 linux.arm64 linux.amd64 os2.x86 solaris.amd64 win.amd64 win.arm64)
+ $$(iPxeBiosBin_0_OUTDIR)/iPxeBiosBin.c: $(PATH_SUB_CURRENT)/iPxeBiosBin.rom $(VBOX_BIN2C) | $$(dir $$@)
+ $(call MSG_TOOL,bin2c,iPxeBiosBin,$<,$@)
+ $(QUIET)$(VBOX_BIN2C) -min 32 -max 56 -mask 0x1ff -export NetBiosBinary $< $@
diff --git a/app-emulation/virtualbox/files/virtualbox-7.2.2-curl-8.16.patch b/app-emulation/virtualbox/files/virtualbox-7.2.2-curl-8.16.patch
new file mode 100644
index 000000000000..6a1d401cca98
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-7.2.2-curl-8.16.patch
@@ -0,0 +1,54 @@
+Breaking change in curl 8.16:
+https://github.com/curl/curl/commit/1a12663d06d9c42fd40a8655d5247f7afeeb8e1e
+
+Change curl_proxytype to long.
+
+See also: https://bugs.gentoo.org/962744
+
+--- a/src/VBox/Runtime/generic/http-curl.cpp
++++ b/src/VBox/Runtime/generic/http-curl.cpp
+@@ -188,7 +188,7 @@
+ /** Proxy port number (UINT32_MAX if not specified). */
+ uint32_t uProxyPort;
+ /** The proxy type (CURLPROXY_HTTP, CURLPROXY_SOCKS5, ++). */
+- curl_proxytype enmProxyType;
++ long enmProxyType;
+ /** Proxy username (RTStrFree). */
+ char *pszProxyUsername;
+ /** Proxy password (RTStrFree). */
+@@ -591,7 +591,7 @@
+ * @param pszUsername The proxy username, or NULL if none.
+ * @param pszPassword The proxy password, or NULL if none.
+ */
+-static int rtHttpUpdateProxyConfig(PRTHTTPINTERNAL pThis, curl_proxytype enmProxyType, const char *pszHost,
++static int rtHttpUpdateProxyConfig(PRTHTTPINTERNAL pThis, long enmProxyType, const char *pszHost,
+ uint32_t uPort, const char *pszUsername, const char *pszPassword)
+ {
+ CURLcode rcCurl;
+@@ -610,7 +610,7 @@
+ if ( pThis->fReapplyProxyInfo
+ || enmProxyType != pThis->enmProxyType)
+ {
+- rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_PROXYTYPE, (long)enmProxyType);
++ rcCurl = curl_easy_setopt(pThis->pCurl, CURLOPT_PROXYTYPE, enmProxyType);
+ AssertMsgReturn(CURL_SUCCESS(rcCurl), ("CURLOPT_PROXYTYPE=%d: %d (%#x)\n", enmProxyType, rcCurl, rcCurl),
+ VERR_HTTP_CURL_PROXY_CONFIG);
+ pThis->enmProxyType = enmProxyType;
+@@ -871,7 +871,7 @@
+ char *pszPassword = RTUriParsedAuthorityPassword(pszProxyUrl, &Parsed);
+ uint32_t uProxyPort = RTUriParsedAuthorityPort(pszProxyUrl, &Parsed);
+ bool fUnknownProxyType = false;
+- curl_proxytype enmProxyType;
++ long enmProxyType;
+ if (RTUriIsSchemeMatch(pszProxyUrl, "http"))
+ {
+ enmProxyType = CURLPROXY_HTTP;
+@@ -1352,7 +1352,7 @@
+ * Determine the proxy type (not entirely sure about type == proxy type and
+ * not scheme/protocol)...
+ */
+- curl_proxytype enmProxyType = CURLPROXY_HTTP;
++ long enmProxyType = CURLPROXY_HTTP;
+ uint32_t uDefaultProxyPort = 8080;
+ if ( CFEqual(hStrProxyType, kCFProxyTypeHTTP)
+ || CFEqual(hStrProxyType, kCFProxyTypeHTTPS))
diff --git a/app-emulation/virtualbox/files/virtualbox-7.2.8-parallel-make.patch b/app-emulation/virtualbox/files/virtualbox-7.2.8-parallel-make.patch
new file mode 100644
index 000000000000..799c6b01f0fc
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-7.2.8-parallel-make.patch
@@ -0,0 +1,17 @@
+Attempt to fix a parallel make issue (code here depends on included sdk/bindings/xpcom
+ but can run before the sdk is copied to out/linux)
+
+https://bugs.gentoo.org/973421
+https://bugs.gentoo.org/950489
+https://bugs.gentoo.org/675646
+
+--- a/src/VBox/HostServices/SharedFolders/Makefile.kmk
++++ b/src/VBox/HostServices/SharedFolders/Makefile.kmk
+@@ -67,5 +67,7 @@
+ VBoxSharedFolders_LIBS = \
+ $(LIB_RUNTIME)
+
++VBoxSharedFolders_DEPS = $(VBOX_PATH_SDK)/bindings/xpcom/include/xpcom/xpcom-config.h
++
+ include $(FILE_KBUILD_SUB_FOOTER)
+
diff --git a/app-emulation/virtualbox/files/virtualbox-ose-6-wrapper b/app-emulation/virtualbox/files/virtualbox-ose-6-wrapper
new file mode 100644
index 000000000000..57b15cc93eba
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-ose-6-wrapper
@@ -0,0 +1,119 @@
+#!/bin/sh
+## @file
+# Oracle VM VirtualBox startup script, Linux hosts.
+#
+
+#
+# Copyright (C) 2006-2017 Oracle Corporation
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+PATH="/usr/bin:/bin:/usr/sbin:/sbin"
+CONFIG="/etc/vbox/vbox.cfg"
+
+test -r "${CONFIG}" &&
+ . "${CONFIG}"
+test -z "${INSTALL_DIR}" &&
+ if test -f /usr/lib/virtualbox/VirtualBox &&
+ test -x /usr/lib/virtualbox/VirtualBox; then
+ INSTALL_DIR=/usr/lib/virtualbox
+ else
+ echo "Could not find VirtualBox installation. Please reinstall."
+ exit 1
+ fi
+
+# Note: This script must not fail if the module was not successfully installed
+# because the user might not want to run a VM but only change VM params!
+
+if [ "$1" = "shutdown" ]; then
+ SHUTDOWN="true"
+elif ! lsmod|grep -q vboxdrv; then
+ cat << EOF
+WARNING: The vboxdrv kernel module is not loaded. Either there is no module
+ available for the current kernel (`uname -r`) or it failed to
+ load. Please recompile the kernel module and install it by
+
+ for m in vbox{drv,netadp,netflt}; do modprobe \$m; done
+
+ You will not be able to start VMs until this problem is fixed.
+EOF
+elif [ ! -c /dev/vboxdrv ]; then
+ cat << EOF
+WARNING: The character device /dev/vboxdrv does not exist.
+ Please try to reload all the needed kernel modules by:
+
+ for m in vbox{netflt,netadp,drv}; do rmmod \$m; done
+ for m in vbox{drv,netadp,netflt}; do modprobe \$m; done
+
+ and if that is not successful, try to re-install the package by:
+
+ emerge -1av app-emulation/virtualbox-modules
+
+ You will not be able to start VMs until this problem is fixed.
+EOF
+fi
+
+SERVER_PID=$(ps -U ${LOGNAME:-$USER} | grep VBoxSVC | awk '{ print $1 }')
+if [ -z "$SERVER_PID" ]; then
+ # Server not running yet/anymore, cleanup socket path.
+ # See IPC_GetDefaultSocketPath()!
+ if [ -n "$LOGNAME" ]; then
+ rm -rf /tmp/.vbox-$LOGNAME-ipc > /dev/null 2>&1
+ else
+ rm -rf /tmp/.vbox-$USER-ipc > /dev/null 2>&1
+ fi
+fi
+
+if [ "$SHUTDOWN" = "true" ]; then
+ if [ -n "$SERVER_PID" ]; then
+ kill -TERM $SERVER_PID
+ sleep 2
+ fi
+ exit 0
+fi
+
+APP=`basename $0`
+case "$APP" in
+ VirtualBox|virtualbox)
+ exec "$INSTALL_DIR/VirtualBox" "$@"
+ ;;
+ VirtualBoxVM|virtualboxvm)
+ exec "$INSTALL_DIR/VirtualBoxVM" "$@"
+ ;;
+ VBoxManage|vboxmanage)
+ exec "$INSTALL_DIR/VBoxManage" "$@"
+ ;;
+ VBoxSDL|vboxsdl)
+ exec "$INSTALL_DIR/VBoxSDL" "$@"
+ ;;
+ VBoxVRDP|VBoxHeadless|vboxheadless)
+ exec "$INSTALL_DIR/VBoxHeadless" "$@"
+ ;;
+ VBoxAutostart|vboxautostart)
+ exec "$INSTALL_DIR/VBoxAutostart" "$@"
+ ;;
+ VBoxBalloonCtrl|vboxballoonctrl)
+ exec "$INSTALL_DIR/VBoxBalloonCtrl" "$@"
+ ;;
+ VBoxBugReport|vboxbugreport)
+ exec "$INSTALL_DIR/VBoxBugReport" "$@"
+ ;;
+ VBoxDTrace|vboxdtrace)
+ exec "$INSTALL_DIR/VBoxDTrace" "$@"
+ ;;
+ vboxwebsrv)
+ exec "$INSTALL_DIR/vboxwebsrv" "$@"
+ ;;
+ *)
+ echo "Unknown application - $APP"
+ exit 1
+ ;;
+esac
+exit 0
diff --git a/app-emulation/virtualbox/files/virtualbox-vboxusb_tmpfilesd b/app-emulation/virtualbox/files/virtualbox-vboxusb_tmpfilesd
new file mode 100644
index 000000000000..39378536a8b2
--- /dev/null
+++ b/app-emulation/virtualbox/files/virtualbox-vboxusb_tmpfilesd
@@ -0,0 +1 @@
+d /dev/vboxusb 0750 root vboxusers
diff --git a/app-emulation/virtualbox/metadata.xml b/app-emulation/virtualbox/metadata.xml
new file mode 100644
index 000000000000..1c5d74ca4ec3
--- /dev/null
+++ b/app-emulation/virtualbox/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ceamac@gentoo.org</email>
+ <name>Viorel Munteanu</name>
+ </maintainer>
+ <use>
+ <flag name="dtrace">Install dtrace Extension Pack.</flag>
+ <flag name="lvm">Build VBoxVolInfo that needs devicemapper from <pkg>sys-fs/lvm2</pkg>.</flag>
+ <flag name="sdk">Enable building of SDK.</flag>
+ <flag name="udev">Controls installation of special USB udev rules.</flag>
+ <flag name="vboxwebsrv">Build and install the VirtualBox webservice.</flag>
+ <flag name="vde">Support for VDE networking via <pkg>net-misc/vde</pkg>.</flag>
+ <flag name="vmmraw">Enable 32-bit support on a 64-bit kernel.</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/virtualbox/virtualbox-7.0.26-r1.ebuild b/app-emulation/virtualbox/virtualbox-7.0.26-r1.ebuild
new file mode 100644
index 000000000000..a7f7959bbbf7
--- /dev/null
+++ b/app-emulation/virtualbox/virtualbox-7.0.26-r1.ebuild
@@ -0,0 +1,693 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{11..12} )
+
+inherit edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+MY_PN="VirtualBox"
+MY_P=${MY_PN}-${PV}
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/VirtualBox/virtualbox"
+SRC_URI="
+ https://download.virtualbox.org/virtualbox/${PV}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-7.0.22-r1.tar.bz2
+"
+S="${WORKDIR}/${MY_PN}-${PV}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+IUSE="alsa dbus debug doc dtrace java lvm pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde +vmmraw vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ ~app-emulation/virtualbox-modules-${PV}
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libpng:0=
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXcursor
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? ( x11-libs/libXinerama )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-libs/libIDL
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3592
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-7.0.22-r1/patches
+
+ "${FILESDIR}"/${PN}-7.2.2-curl-8.16.patch
+)
+
+pkg_pretend() {
+ einfo
+ einfo "QT 5 is going away. This build will not include any QT frontend."
+ einfo "Please upgrade to virtualbox 7.1.x, which uses QT 6."
+ einfo
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ #856811 #864274
+ # cannot filter out only one flag, some combinations of these flags produce buggy executables
+ for i in abm avx avx2 bmi bmi2 fma fma4 popcnt; do
+ append-cflags $(test-flags-CC -mno-$i)
+ append-cxxflags $(test-flags-CXX -mno-$i)
+ done
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang assembler chokes on comments starting with /
+ sed -i -e '/^\//d' src/libs/xpcom18a4/nsprpub/pr/src/md/unix/os_Linux_x86_64.s || die
+
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.0.8-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VM.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ # because nls support depends on QT5, disable it
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ VBOX_WITH_DOCS_QHELP :=
+ EOF
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev !vmmraw --disable-vmmraw)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use sdl || use opengl; then
+ myconf+=(
+ --disable-qt
+ $(usev !opengl --disable-opengl)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ fi
+
+ if use amd64 && ! has_multilib_profile; then
+ myconf+=( --disable-vmmraw )
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_PROGRAM_PATH="${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload,XPCOMIPCD} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root.
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} 4750
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{32,64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL 4750
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo 4750
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf
+ docompress -x /usr/share/doc/${PF}
+ fi
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+ sed -e "1 i\#! ${PYTHON}" -i vboxshell.py || die
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${PN}-vboxusb_tmpfilesd ${PN}-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox/virtualbox-7.1.18.ebuild b/app-emulation/virtualbox/virtualbox-7.1.18.ebuild
new file mode 100644
index 000000000000..31393f5737a2
--- /dev/null
+++ b/app-emulation/virtualbox/virtualbox-7.1.18.ebuild
@@ -0,0 +1,782 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{12..14} )
+
+inherit desktop edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+MY_PN="VirtualBox"
+MY_P=${MY_PN}-${PV}
+HELP_PV=${PV}
+PATCHES_PV="7.1.16"
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/VirtualBox/virtualbox"
+SRC_URI="
+ https://download.virtualbox.org/virtualbox/${PV%*a}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2
+ gui? ( !doc? ( https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${PN}-help-${HELP_PV}.tar.xz ) )
+"
+S="${WORKDIR}/${MY_PN}-${PV%*a}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="~amd64"
+IUSE="alsa dbus debug doc dtrace +gui java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde +vmmraw vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ ~app-emulation/virtualbox-modules-${PV%*a}
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libogg
+ media-libs/libpng:0=
+ media-libs/libvorbis
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3592
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_PV}/patches
+)
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VM.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev !vmmraw --disable-vmmraw)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ if use amd64 && ! has_multilib_profile; then
+ myconf+=( --disable-vmmraw )
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root.
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} 4750
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{32,64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL 4750
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM 4750
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ domenu ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${PN}-${size}px.png ${PN}.png
+ done
+ newicon ${PN}-48px.png ${PN}.png
+ doicon -s scalable ${PN}.svg
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo 4750
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${PN}-help-${HELP_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ fi
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${PN}-vboxusb_tmpfilesd ${PN}-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox/virtualbox-7.2.6-r1.ebuild b/app-emulation/virtualbox/virtualbox-7.2.6-r1.ebuild
new file mode 100644
index 000000000000..a9d6ba35d169
--- /dev/null
+++ b/app-emulation/virtualbox/virtualbox-7.2.6-r1.ebuild
@@ -0,0 +1,777 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit desktop edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+MY_PN="VirtualBox"
+MY_P=${MY_PN}-${PV^^}
+HELP_PV=${PV}
+PATCHES_PV="7.2.6"
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/VirtualBox/virtualbox"
+SRC_URI="
+ https://download.virtualbox.org/virtualbox/${PV^^}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2
+ gui? ( !doc? ( https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${PN}-help-${HELP_PV}.tar.xz ) )
+"
+S="${WORKDIR}/${MY_PN}-${PV^^}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+IUSE="alsa dbus debug doc dtrace +gui java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ ~app-emulation/virtualbox-modules-${PV%*a}
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libogg
+ media-libs/libpng:0=
+ media-libs/libvorbis
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,wayland,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_PV}/patches
+)
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VMR3.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root.
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} 4750
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{-x86,-amd64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL 4750
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM 4750
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ domenu ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${PN}-${size}px.png ${PN}.png
+ done
+ newicon ${PN}-48px.png ${PN}.png
+ doicon -s scalable ${PN}.svg
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo 4750
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${PN}-help-${HELP_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ fi
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${PN}-vboxusb_tmpfilesd ${PN}-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox/virtualbox-7.2.8.ebuild b/app-emulation/virtualbox/virtualbox-7.2.8.ebuild
new file mode 100644
index 000000000000..c27a8191b3d9
--- /dev/null
+++ b/app-emulation/virtualbox/virtualbox-7.2.8.ebuild
@@ -0,0 +1,780 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{12..14} )
+
+inherit desktop edo flag-o-matic java-pkg-opt-2 linux-info multilib optfeature pax-utils \
+ python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+MY_PN="VirtualBox"
+MY_P=${MY_PN}-${PV^^}
+HELP_PV=${PV}
+PATCHES_PV="7.2.6"
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/VirtualBox/virtualbox"
+SRC_URI="
+ https://download.virtualbox.org/virtualbox/${PV^^}/${MY_P}.tar.bz2
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_PV}.tar.bz2
+ gui? ( !doc? ( https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${PN}-help-${HELP_PV}.tar.xz ) )
+"
+S="${WORKDIR}/${MY_PN}-${PV^^}"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+KEYWORDS="amd64"
+IUSE="alsa dbus debug doc dtrace +gui java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ ~app-emulation/virtualbox-modules-${PV%*a}
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libogg
+ media-libs/libpng:0=
+ media-libs/libvorbis
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,wayland,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ test? ( !debug )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-parallel-make.patch
+
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_PV}/patches
+)
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove shipped binaries (kBuild, yasm) and tools, see bug #232775
+ rm -r kBuild/bin || die
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VMR3.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root.
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} 4750
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{-x86,-amd64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL 4750
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM 4750
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ domenu ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${PN}-${size}px.png ${PN}.png
+ done
+ newicon ${PN}-48px.png ${PN}.png
+ doicon -s scalable ${PN}.svg
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo 4750
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${PN}-help-${HELP_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ fi
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${PN}-vboxusb_tmpfilesd ${PN}-vboxusb.conf
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/virtualbox/virtualbox-9999.ebuild b/app-emulation/virtualbox/virtualbox-9999.ebuild
new file mode 100644
index 000000000000..586c035d01b2
--- /dev/null
+++ b/app-emulation/virtualbox/virtualbox-9999.ebuild
@@ -0,0 +1,815 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Important!
+# This compiles the latest git version.
+# It also compiles the kernel modules. Does not depend on virtualbox-modules.
+# It is not meant to be used, might be very unstable.
+#
+#
+#
+# To add a new Python here:
+# 1. Patch src/libs/xpcom18a4/python/Makefile.kmk (copy the previous impl's logic)
+# Do NOT skip this part. It'll end up silently not-building the Python extension
+# or otherwise misbehaving if you do.
+#
+# 2. Then update PYTHON_COMPAT & set PYTHON_SINGLE_TARGET for testing w/ USE=python.
+#
+# May need to look at other distros (e.g. Arch Linux) to find patches for newer
+# Python versions as upstream tends to lag. Upstream may have patches on their
+# trunk branch but not release branch.
+#
+# See bug #785835, bug #856121.
+PYTHON_COMPAT=( python3_{11..14} )
+
+inherit desktop edo flag-o-matic git-r3 java-pkg-opt-2 linux-mod-r1 multilib \
+ optfeature pax-utils python-single-r1 tmpfiles toolchain-funcs udev xdg
+
+MY_PN="VirtualBox"
+BASE_PV=7.1.0
+MY_P=${MY_PN}-${PV}
+PATCHES_TAG=7.2.4
+
+DESCRIPTION="Family of powerful x86 virtualization products for enterprise and home use"
+HOMEPAGE="https://www.virtualbox.org/ https://github.com/VirtualBox/virtualbox"
+EGIT_REPO_URI="https://github.com/VirtualBox/virtualbox.git"
+SRC_URI="
+ https://gitweb.gentoo.org/proj/virtualbox-patches.git/snapshot/virtualbox-patches-${PATCHES_TAG}.tar.bz2
+ gui? ( !doc? ( https://distfiles.gentoo.org/pub/dev/ceamac@gentoo.org/${CATEGORY}/${PN}/${PN}-help-${BASE_PV}.tar.xz ) )
+"
+
+LICENSE="GPL-2+ GPL-3 LGPL-2.1 MIT dtrace? ( CDDL )"
+SLOT="0/$(ver_cut 1-2)"
+IUSE="alsa dbus debug doc dtrace +gui java lvm nls pam pch pulseaudio +opengl python +sdk +sdl test +udev vboxwebsrv vde vnc"
+RESTRICT="!test? ( test )"
+
+unset WATCOM #856769
+
+COMMON_DEPEND="
+ acct-group/vboxusers
+ app-arch/xz-utils
+ dev-libs/libtpms
+ dev-libs/libxml2:=
+ dev-libs/openssl:0=
+ media-libs/libpng:0=
+ media-libs/libvpx:0=
+ net-misc/curl
+ virtual/zlib:=
+ dbus? ( sys-apps/dbus )
+ gui? (
+ dev-qt/qtbase:6[X,wayland,widgets]
+ dev-qt/qtscxml:6
+ dev-qt/qttools:6[assistant]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ lvm? ( sys-fs/lvm2 )
+ opengl? (
+ media-libs/libglvnd[X]
+ media-libs/vulkan-loader
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ pam? ( sys-libs/pam )
+ python? ( ${PYTHON_DEPS} )
+ sdl? (
+ media-libs/libsdl2[X,video]
+ x11-libs/libX11
+ x11-libs/libXt
+ )
+ vboxwebsrv? ( net-libs/gsoap[-gnutls(-),debug?] )
+ vde? ( net-misc/vde )
+ vnc? ( >=net-libs/libvncserver-0.9.9 )
+"
+# We're stuck on JDK (and JRE, I guess?) 1.8 because of need for wsimport
+# with USE="vboxwebsrv java". Note that we have to put things in DEPEND,
+# not (only, anyway) BDEPEND, as the eclass magic to set the environment variables
+# based on *DEPEND doesn't work for BDEPEND at least right now.
+#
+# There's a comment in Config.kmk about it
+# ("With Java 11 wsimport was removed, usually part of a separate install now.")
+# but it needs more investigation.
+#
+# See bug #878299 to track this issue.
+DEPEND="
+ ${COMMON_DEPEND}
+ >=dev-libs/libxslt-1.1.19
+ virtual/libcrypt:=
+ x11-libs/libXt
+ alsa? ( >=media-libs/alsa-lib-1.0.13 )
+ gui? (
+ x11-base/xorg-proto
+ x11-libs/libxcb:=
+ x11-libs/libXcursor
+ x11-libs/libXext
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ )
+ java? ( virtual/jdk:1.8 )
+ opengl? (
+ x11-base/xorg-proto
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ x11-libs/libXmu
+ x11-libs/libXrandr
+ virtual/glu
+ )
+ sdl? (
+ x11-libs/libXcursor
+ x11-libs/libXinerama
+ )
+ pulseaudio? ( media-libs/libpulse )
+ udev? ( >=virtual/udev-171 )
+"
+RDEPEND="
+ ${COMMON_DEPEND}
+ !app-emulation/virtualbox-modules
+ gui? ( x11-libs/libxcb:= )
+ java? ( virtual/jre:1.8 )
+"
+BDEPEND="
+ >=app-arch/tar-1.34-r2
+ >=dev-lang/yasm-0.6.2
+ dev-util/glslang
+ >=dev-build/kbuild-0.1.9998.3660
+ sys-apps/which
+ sys-devel/bin86
+ sys-libs/libcap
+ sys-power/iasl
+ virtual/pkgconfig
+ doc? (
+ app-doc/dita-ot-bin
+ app-text/docbook-sgml-dtd:4.4
+ app-text/docbook-xsl-ns-stylesheets
+ dev-texlive/texlive-basic
+ dev-texlive/texlive-latex
+ dev-texlive/texlive-latexrecommended
+ dev-texlive/texlive-latexextra
+ dev-texlive/texlive-fontsrecommended
+ dev-texlive/texlive-fontsextra
+ dev-qt/qttools:6[assistant]
+ sys-libs/nss_wrapper
+ )
+ gui? ( dev-qt/qttools:6[linguist] )
+ nls? ( dev-qt/qttools:6[linguist] )
+ java? ( virtual/jdk:1.8 )
+ python? (
+ ${PYTHON_DEPS}
+ test? (
+ $(python_gen_cond_dep '
+ dev-python/pytest[${PYTHON_USEDEP}]
+ ')
+ )
+ )
+"
+
+QA_FLAGS_IGNORED="
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_TEXTRELS="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+QA_EXECSTACK="
+ usr/lib64/virtualbox/iPxeBaseBin
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.debug
+"
+
+QA_WX_LOAD="
+ usr/lib64/virtualbox/iPxeBaseBin
+"
+
+QA_PRESTRIPPED="
+ usr/lib64/virtualbox/VMMR0.r0
+ usr/lib64/virtualbox/VBoxDDR0.r0
+ usr/lib64/virtualbox/ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack/linux.amd64/VBoxDTraceR0.r0
+"
+
+REQUIRED_USE="
+ java? ( sdk )
+ python? ( sdk ${PYTHON_REQUIRED_USE} )
+ vboxwebsrv? ( java )
+"
+
+PATCHES=(
+ # Downloaded patchset
+ "${WORKDIR}"/virtualbox-patches-${PATCHES_TAG}/patches
+)
+
+DOCS=() # Don't install the default README file during einstalldocs
+
+CONFIG_CHECK="~!SPINLOCK JUMP_LABEL ~PREEMPT_NOTIFIERS"
+
+pkg_pretend() {
+ if ! use gui; then
+ einfo "No USE=\"gui\" selected, this build will not include any Qt frontend."
+ fi
+
+ if ! use opengl; then
+ einfo "No USE=\"opengl\" selected, this build will lack"
+ einfo "the OpenGL feature."
+ fi
+ if ! use nls && use gui; then
+ einfo "USE=\"gui\" also selects USE=\"nls\". This build"
+ einfo "will have NLS support."
+ fi
+
+ # 749273
+ local d=${ROOT}
+ for i in usr "$(get_libdir)"; do
+ d="${d}/$i"
+ if [[ "$(stat -L -c "%g %u" "${d}")" != "0 0" ]]; then
+ die "${d} should be owned by root, VirtualBox will not start otherwise"
+ fi
+ done
+}
+
+pkg_setup() {
+ java-pkg-opt-2_pkg_setup
+ use python && python-single-r1_pkg_setup
+ linux-mod-r1_pkg_setup
+}
+
+src_unpack() {
+ git-r3_src_unpack
+ default
+}
+
+src_prepare() {
+ default
+
+ if use python; then
+ mkdir test
+ cp "${FILESDIR}"/test_python.py test/
+ python_fix_shebang test/test_python.py
+ fi
+
+ # Only add nopie patch when we're on hardened
+ if gcc-specs-pie; then
+ eapply "${FILESDIR}"/050_virtualbox-5.2.8-nopie.patch
+ fi
+
+ # Remove everything in tools except kBuildUnits
+ find tools -mindepth 1 -maxdepth 1 -name kBuildUnits -prune -o -exec rm -r {} \+ || die
+
+ # Disable things unused or split into separate ebuilds
+ sed -e "s@MY_LIBDIR@$(get_libdir)@" \
+ "${FILESDIR}"/${PN}-5-localconfig > LocalConfig.kmk || die
+
+ if ! use pch; then
+ # bug #753323
+ printf '\n%s\n' "VBOX_WITHOUT_PRECOMPILED_HEADERS=1" \
+ >> LocalConfig.kmk || die
+ fi
+
+ # bug #916002, #488176, #925347
+ tc-ld-is-mold || tc-ld-force-bfd
+
+ # Respect LDFLAGS
+ sed -e "s@_LDFLAGS\.${ARCH}*.*=@& ${LDFLAGS}@g" \
+ -i Config.kmk src/libs/xpcom18a4/Config.kmk || die
+
+ # Do not use hard-coded ld (related to bug #488176)
+ sed -e '/QUIET)ld /s@ld @$(LD) @' \
+ -i src/VBox/Devices/PC/ipxe/Makefile.kmk || die
+
+ # Use PAM only when pam USE flag is enbaled (bug #376531)
+ if ! use pam; then
+ einfo "Disabling PAM removes the possibility to use the VRDP features."
+ sed -i 's@^.*VBOX_WITH_PAM@#VBOX_WITH_PAM@' Config.kmk || die
+ sed -i 's@\(.*/auth/Makefile.kmk.*\)@#\1@' \
+ src/VBox/HostServices/Makefile.kmk || die
+ echo -e "\nIPRT_WITHOUT_PAM=1" >> LocalConfig.kmk || die
+ fi
+
+ # add correct java path
+ if use java; then
+ sed "s@/usr/lib/jvm/java-6-sun@$(java-config -O)@" \
+ -i "${S}"/Config.kmk || die
+ java-pkg-opt-2_src_prepare
+ fi
+
+ # bug #940482
+ filter-flags -fno-plt
+
+ # bug #908814
+ filter-lto
+
+ # bug #843437
+ cat >> LocalConfig.kmk <<-EOF || die
+ CXXFLAGS=${CXXFLAGS}
+ CFLAGS=${CFLAGS}
+ EOF
+
+ if use sdl; then
+ sed -i 's/sdl-config/sdl2-config/' configure || die
+ echo -e "\nVBOX_WITH_VBOXSDL=1" >> LocalConfig.kmk || die
+ fi
+
+ #443830
+ echo -e "\nVBOX_WITH_VBOX_IMG=1" >> LocalConfig.kmk || die
+
+ if tc-is-clang; then
+ # clang does not support this extension
+ eapply "${FILESDIR}"/${PN}-7.1.0-disable-rebuild-iPxeBiosBin.patch
+ fi
+
+ # fix doc generation
+ echo -e "\nVBOX_PATH_DOCBOOK=/usr/share/sgml/docbook/xsl-ns-stylesheets" >> LocalConfig.kmk || die
+ # replace xhtml names with numeric equivalents
+ find doc/manual -name \*.xml -exec sed -i \
+ -e 's/&nbsp;/\&#160;/g' \
+ -e 's/&ndash;/\&#8211;/g' \
+ -e 's/&larr;/\&#8592;/g' \
+ -e 's/&rarr;/\&#8594;/g' \
+ -e 's/&harr;/\&#8596;/g' {} \+ || die
+
+ # fix help path #891879
+ echo -e "\nVBOX_PATH_PACKAGE_DOCS=/usr/share/doc/${PF}" >> LocalConfig.kmk || die
+
+ # 489208
+ # Cannot patch the whole text, many translations. Use sed instead to replace the command
+ find src/VBox/Frontends/VirtualBox/nls -name \*.ts -exec sed -i \
+ 's/&apos;[^&]*\(vboxdrv setup\|vboxconfig\)&apos;/\&apos;emerge -1 virtualbox-modules\&apos;/' {} \+ || die
+ sed -i "s:'/sbin/vboxconfig':'emerge -1 virtualbox-modules':" \
+ src/VBox/Frontends/VirtualBox/src/main.cpp \
+ src/VBox/VMM/VMMR3/VMR3.cpp || die
+
+ # 890561
+ echo -e "\nVBOX_GTAR=gtar" >> LocalConfig.kmk || die
+
+ if ! use nls && ! use gui; then
+ cat >> LocalConfig.kmk <<-EOF || die
+ VBOX_WITH_NLS :=
+ VBOX_WITH_MAIN_NLS :=
+ VBOX_WITH_PUEL_NLS :=
+ VBOX_WITH_VBOXMANAGE_NLS :=
+ EOF
+ fi
+}
+
+src_configure() {
+ tc-export AR CC CXX LD RANLIB
+ export HOST_CC="$(tc-getBUILD_CC)"
+
+ # --enable-webservice is a no-op
+ # webservice is automagically enabled if gsoap is found
+ local myconf=(
+ --with-gcc="$(tc-getCC)"
+ --with-g++="$(tc-getCXX)"
+
+ --disable-kmods
+
+ $(usev !alsa --disable-alsa)
+ $(usev !dbus --disable-dbus)
+ $(usev debug --build-debug)
+ $(usev !doc --disable-docs)
+ $(usev !java --disable-java)
+ $(usev !lvm --disable-devmapper)
+ $(usev !pulseaudio --disable-pulse)
+ $(usev !python --disable-python)
+ $(usev !vboxwebsrv --with-gsoap-dir=/dev/null)
+ $(usev vde --enable-vde)
+ $(usev vnc --enable-vnc)
+ )
+
+ if use gui || use sdl || use opengl; then
+ myconf+=(
+ $(usev !opengl --disable-opengl)
+ $(usev !gui --disable-qt)
+ $(usev !sdl --disable-sdl)
+ )
+ else
+ myconf+=(
+ --build-headless
+ )
+ # disable shared clipboard when headless, it crashes when connecting with RDP: bug #955867
+ echo -e "\nVBOX_WITH_SHARED_CLIPBOARD :=" >> LocalConfig.kmk || die
+ fi
+
+ # not an autoconf script
+ edo ./configure "${myconf[@]}"
+
+ # Force usage of chosen Python implementation
+ # bug #856121, bug #785835
+ sed -i \
+ -e '/VBOX_WITH_PYTHON.*=/d' \
+ -e '/VBOX_PATH_PYTHON_INC.*=/d' \
+ -e '/VBOX_LIB_PYTHON.*=/d' \
+ AutoConfig.kmk || die
+
+ if use python; then
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON=$(usev python 1)
+ VBOX_PATH_PYTHON_INC=$(python_get_includedir)
+ VBOX_LIB_PYTHON=$(python_get_library_path)
+ EOF
+
+ local mangled_python="${EPYTHON#python}"
+ mangled_python="${mangled_python/.}"
+
+ # Stub out the script which defines what the Makefile ends up
+ # building for. gen_python_deps.py gets called by the Makefile
+ # with some args and it spits out a bunch of paths for a hardcoded
+ # list of Pythons. We just override it with what we're actually using.
+ # This minimises the amount of patching we have to do for new Pythons.
+ cat > src/libs/xpcom18a4/python/gen_python_deps.py <<-EOF || die
+ print("VBOX_PYTHON${mangled_python}_INC=$(python_get_includedir)")
+ print("VBOX_PYTHON${mangled_python}_LIB=$(python_get_library_path)")
+ print("VBOX_PYTHONDEF_INC=$(python_get_includedir)")
+ print("VBOX_PYTHONDEF_LIB=$(python_get_library_path)")
+ EOF
+
+ chmod +x src/libs/xpcom18a4/python/gen_python_deps.py || die
+ else
+ cat >> AutoConfig.kmk <<-EOF || die
+ VBOX_WITH_PYTHON:=
+ EOF
+ fi
+}
+
+src_compile() {
+ source ./env.sh || die
+
+ # Force kBuild to respect C[XX]FLAGS and MAKEOPTS (bug #178529)
+ MAKEJOBS=$(grep -Eo '(\-j|\-\-jobs)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKELOAD=$(grep -Eo '(\-l|\-\-load-average)(=?|[[:space:]]*)[[:digit:]]+' <<< ${MAKEOPTS})
+ MAKEOPTS="${MAKEJOBS} ${MAKELOAD}"
+
+ local myemakeargs=(
+ VBOX_BUILD_PUBLISHER=_Gentoo
+ VBOX_WITH_VBOXIMGMOUNT=1
+
+ KBUILD_VERBOSE=2
+
+ AS="$(tc-getCC)"
+ CC="$(tc-getCC)"
+ CXX="$(tc-getCXX)"
+
+ TOOL_GCC3_CC="$(tc-getCC)"
+ TOOL_GCC3_LD="$(tc-getCC)"
+ TOOL_GCC3_AS="$(tc-getCC)"
+ TOOL_GCC3_AR="$(tc-getAR)"
+ TOOL_GCC3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX3_CC="$(tc-getCC)"
+ TOOL_GXX3_CXX="$(tc-getCXX)"
+ TOOL_GXX3_LD="$(tc-getCXX)"
+ TOOL_GXX3_AS="$(tc-getCXX)"
+ TOOL_GXX3_AR="$(tc-getAR)"
+ TOOL_GXX3_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GCC3_CFLAGS="${CFLAGS}"
+ TOOL_GCC3_CXXFLAGS="${CXXFLAGS}"
+ VBOX_GCC_OPT="${CXXFLAGS}"
+ VBOX_NM="$(tc-getNM)"
+
+ TOOL_YASM_AS=yasm
+ )
+
+ if use amd64 && has_multilib_profile; then
+ myemakeargs+=(
+ CC32="$(tc-getCC) -m32"
+ CXX32="$(tc-getCXX) -m32"
+
+ TOOL_GCC32_CC="$(tc-getCC) -m32"
+ TOOL_GCC32_CXX="$(tc-getCXX) -m32"
+ TOOL_GCC32_LD="$(tc-getCC) -m32"
+ TOOL_GCC32_AS="$(tc-getCC) -m32"
+ TOOL_GCC32_AR="$(tc-getAR)"
+ TOOL_GCC32_OBJCOPY="$(tc-getOBJCOPY)"
+
+ TOOL_GXX32_CC="$(tc-getCC) -m32"
+ TOOL_GXX32_CXX="$(tc-getCXX) -m32"
+ TOOL_GXX32_LD="$(tc-getCXX) -m32"
+ TOOL_GXX32_AS="$(tc-getCXX) -m32"
+ TOOL_GXX32_AR="$(tc-getAR)"
+ TOOL_GXX32_OBJCOPY="$(tc-getOBJCOPY)"
+ )
+ fi
+
+ if use doc; then
+ # dita needs to write to ~/.fop and ~/.java
+ # but it ignores ${HOME} and tries to write to the real home of user portage
+ # resulting in a sandbox violation
+ # -Duser.home= does not work
+ # force using the temporary homedir with nss_wrapper
+ echo "${LOGNAME}::$(id -u):$(id -g):${USER}:${HOME}:/bin/bash" >> ~/passwd
+ echo "${LOGNAME}::$(id -g):" >> ~/group
+
+ local -x LD_PRELOAD=libnss_wrapper.so
+ local -x NSS_WRAPPER_PASSWD="${HOME}"/passwd
+ local -x NSS_WRAPPER_GROUP="${HOME}"/group
+ fi
+
+ MAKE="kmk" emake "${myemakeargs[@]}" all
+
+ local modlist=( {vboxdrv,vboxnetflt,vboxnetadp}=misc:"out/linux.${ARCH}/release/bin/src" )
+ local modargs=( KERN_DIR="${KV_OUT_DIR}" KERN_VER="${KV_FULL}" )
+ linux-mod-r1_src_compile
+}
+
+src_test() {
+ if use python; then
+ local -x VBOX_APP_HOME="${S}"/out/linux.${ARCH}/$(usex debug debug release)
+ local -x VBOX_INSTALL_PATH="${VBOX_APP_HOME}"
+ local -x VBOX_PROGRAM_PATH="${VBOX_APP_HOME}"/bin
+ local -x VBOX_SDK_PATH="${VBOX_PROGRAM_PATH}"/sdk
+ local -x PYTHONPATH="${VBOX_SDK_PATH}"/installer/python/vboxapi/src
+ einfo "VBOX_APP_HOME ${VBOX_APP_HOME}"
+ einfo "VBOX_PROGRAM_PATH ${VBOX_PROGRAM_PATH}"
+ einfo "VBOX_SDK_PATH ${VBOX_SDK_PATH}"
+ einfo "PYTHONPATH ${PYTHONPATH}"
+ LD_LIBRARY_PATH="${VBOX_PROGRAM_PATH}" epytest test/
+ fi
+}
+
+src_install() {
+ linux-mod-r1_src_install
+ insinto /usr/lib/modules-load.d/
+ newins - virtualbox.conf <<-EOF
+ vboxdrv
+ vboxnetflt
+ vboxnetadp
+ EOF
+ insinto /etc/modprobe.d # bug #945135
+ newins - virtualbox.conf <<-EOF
+ # modprobe.d configuration file for VBOXSF
+
+ # Starting with kernel 6.12,
+ # KVM initializes virtualization on module loading by default.
+ # This prevents VirtualBox VMs from starting.
+ # See also:
+ # https://bugs.gentoo.org/945135
+ # https://www.virtualbox.org/wiki/Changelog-7.1
+ # ------------------------------
+ options kvm enable_virt_at_load=0
+ EOF
+
+ cd "${S}"/out/linux.${ARCH}/$(usex debug debug release)/bin || die
+
+ local vbox_inst_path="/usr/$(get_libdir)/${PN}" each size ico icofile
+
+ vbox_inst() {
+ local binary="${1}"
+ local perms="${2:-0750}"
+ local path="${3:-${vbox_inst_path}}"
+
+ [[ -n "${binary}" ]] || die "vbox_inst: No binary given!"
+ [[ ${perms} =~ ^[[:digit:]]+{4}$ ]] || die "vbox_inst: perms must consist of four digits."
+
+ insinto ${path}
+ doins ${binary}
+ fowners root:vboxusers ${path}/${binary}
+ fperms ${perms} ${path}/${binary}
+ }
+
+ # Create configuration files
+ insinto /etc/vbox
+ newins "${FILESDIR}/${PN}-4-config" vbox.cfg
+
+ # Set the correct libdir
+ sed \
+ -e "s@MY_LIBDIR@$(get_libdir)@" \
+ -i "${ED}"/etc/vbox/vbox.cfg || die "vbox.cfg sed failed"
+
+ # Install the wrapper script
+ exeinto ${vbox_inst_path}
+ newexe "${FILESDIR}/${PN}-ose-6-wrapper" "VBox"
+ fowners root:vboxusers ${vbox_inst_path}/VBox
+ fperms 0750 ${vbox_inst_path}/VBox
+
+ # Install binaries and libraries
+ insinto ${vbox_inst_path}
+ doins -r components
+
+ for each in VBox{Autostart,BalloonCtrl,BugReport,CpuReport,ExtPackHelperApp,Manage,SVC,VMMPreload} \
+ vboximg-mount vbox-img *so *r0; do
+ vbox_inst ${each}
+ done
+
+ # These binaries need to be suid root.
+ for each in VBox{Headless,Net{AdpCtl,DHCP,NAT}} ; do
+ vbox_inst ${each} 4750
+ done
+
+ # Install EFI Firmware files (bug #320757)
+ for each in VBoxEFI{-x86,-amd64}.fd ; do
+ vbox_inst ${each} 0644
+ done
+
+ # VBoxSVC and VBoxManage need to be pax-marked (bug #403453)
+ # VBoxXPCOMIPCD (bug #524202)
+ for each in VBox{Headless,Manage,SVC,XPCOMIPCD} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ # Symlink binaries to the shipped wrapper
+ for each in vbox{autostart,balloonctrl,bugreport,headless,manage} \
+ VBox{Autostart,BalloonCtrl,BugReport,Headless,Manage,VRDP} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ dosym ${vbox_inst_path}/vboximg-mount /usr/bin/vboximg-mount
+ dosym ${vbox_inst_path}/vbox-img /usr/bin/vbox-img
+
+ if use pam; then
+ # VRDPAuth only works with this (bug #351949)
+ dosym VBoxAuth.so ${vbox_inst_path}/VRDPAuth.so
+ fi
+
+ # set an env-variable for 3rd party tools
+ echo "VBOX_APP_HOME=${vbox_inst_path}" > "${T}/90virtualbox"
+ # environment variables used during SDK binding installation
+ echo "VBOX_SDK_PATH=${vbox_inst_path}/sdk" >> "${T}/90virtualbox"
+ echo "VBOX_INSTALL_PATH=${vbox_inst_path}" >> "${T}/90virtualbox"
+ doenvd "${T}/90virtualbox"
+
+ if use sdl; then
+ vbox_inst VBoxSDL 4750
+ pax-mark -m "${ED}"${vbox_inst_path}/VBoxSDL
+
+ for each in vboxsdl VBoxSDL ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+ fi
+
+ if use gui; then
+ vbox_inst VirtualBox
+ vbox_inst VirtualBoxVM 4750
+ for each in VirtualBox{,VM} ; do
+ pax-mark -m "${ED}"${vbox_inst_path}/${each}
+ done
+
+ for each in virtualbox{,vm} VirtualBox{,VM} ; do
+ dosym ${vbox_inst_path}/VBox /usr/bin/${each}
+ done
+
+ insinto /usr/share/${PN}
+ doins -r nls
+ doins -r UnattendedTemplates
+
+ domenu ${PN}.desktop
+
+ pushd "${S}"/src/VBox/Artwork/OSE &>/dev/null || die
+ for size in 16 32 48 64 128 ; do
+ newicon -s ${size} ${PN}-${size}px.png ${PN}.png
+ done
+ newicon ${PN}-48px.png ${PN}.png
+ doicon -s scalable ${PN}.svg
+ popd &>/dev/null || die
+ pushd "${S}"/src/VBox/Artwork/other &>/dev/null || die
+ for size in 16 24 32 48 64 72 96 128 256 512 ; do
+ for ico in hdd ova ovf vbox{,-extpack} vdi vdh vmdk ; do
+ icofile="${PN}-${ico}-${size}px.png"
+ if [[ -f "${icofile}" ]]; then
+ newicon -s ${size} ${icofile} ${PN}-${ico}.png
+ fi
+ done
+ done
+ popd &>/dev/null || die
+ fi
+
+ if use lvm; then
+ vbox_inst VBoxVolInfo 4750
+ dosym ${vbox_inst_path}/VBoxVolInfo /usr/bin/VBoxVolInfo
+ fi
+
+ if use sdk; then
+ insinto ${vbox_inst_path}
+ doins -r sdk
+
+ if use java; then
+ java-pkg_regjar "${ED}/${vbox_inst_path}/sdk/bindings/xpcom/java/vboxjxpcom.jar"
+ java-pkg_regso "${ED}/${vbox_inst_path}/libvboxjxpcom.so"
+ fi
+ fi
+
+ if use udev; then
+ local udevdir="$(get_udevdir)"
+ local udev_file="VBoxCreateUSBNode.sh"
+ local rules_file="10-virtualbox.rules"
+
+ insinto ${udevdir}
+ doins ${udev_file}
+ fowners root:vboxusers ${udevdir}/${udev_file}
+ fperms 0750 ${udevdir}/${udev_file}
+
+ insinto ${udevdir}/rules.d
+ sed "s@%UDEVDIR%@${udevdir}@" "${FILESDIR}"/${rules_file} \
+ > "${T}"/${rules_file} || die
+ doins "${T}"/${rules_file}
+ fi
+
+ if use vboxwebsrv; then
+ vbox_inst vboxwebsrv
+ dosym ${vbox_inst_path}/VBox /usr/bin/vboxwebsrv
+ newinitd "${FILESDIR}"/vboxwebsrv-initd vboxwebsrv
+ newconfd "${FILESDIR}"/vboxwebsrv-confd vboxwebsrv
+ fi
+
+ # Remove dead symlinks (bug #715338)
+ find "${ED}"/usr/$(get_libdir)/${PN} -xtype l -delete || die
+
+ # Fix version string in extensions or else they don't get accepted
+ # by the virtualbox host process (see bug #438930)
+ find ExtensionPacks -type f -name "ExtPack.xml" -exec sed -i '/Version/s@_Gentoo@@' {} \+ || die
+
+ local extensions_dir="${vbox_inst_path}/ExtensionPacks"
+
+ if use vnc; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/VNC
+ fi
+
+ if use dtrace; then
+ insinto ${extensions_dir}
+ doins -r ExtensionPacks/Oracle_VBoxDTrace_Extension_Pack
+ fi
+
+ if use doc; then
+ dodoc UserManual.pdf UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ elif use gui; then
+ dodoc "${WORKDIR}"/${PN}-help-${BASE_PV}/UserManual.q{ch,hc}
+ docompress -x /usr/share/doc/${PF}
+ fi
+
+ if use python; then
+ local python_path_ext="${ED}/usr/$(get_libdir)/virtualbox/VBoxPython3.so"
+ if [[ ! -x "${python_path_ext}" ]]; then
+ eerror "Couldn't find ${python_path_ext}! Bindings were requested with USE=python"
+ eerror "but none were installed. This may happen if support for a Python target"
+ eerror "(listed in PYTHON_COMPAT in the ebuild) is incomplete within the Makefiles."
+ die "Incomplete installation of Python bindings! File a bug with Gentoo!"
+ fi
+
+ # 378871
+ local installer_dir="${ED}/usr/$(get_libdir)/virtualbox/sdk/installer/python/vboxapi/src"
+ pushd "${installer_dir}" &> /dev/null || die
+ sed -e "s;%VBOX_INSTALL_PATH%;${vbox_inst_path};" \
+ -e "s;%VBOX_SDK_PATH%;${vbox_inst_path}/sdk;" \
+ -i vboxapi/__init__.py || die
+ # insert shebang, the files come without one
+ find vboxapi -name \*.py -exec sed -e "1 i\#! ${PYTHON}" -i {} \+ || die
+ python_domodule vboxapi
+ popd &> /dev/null || die
+
+ # upstream added a /bin/sh stub here
+ # use /usr/bin/python3, python_doscript will take care of it
+ sed -e '1 i #! /usr/bin/python3' -i vboxshell.py
+ python_doscript vboxshell.py
+
+ # do not install the installer
+ rm -r "${installer_dir%vboxapi*}" || die
+ fi
+
+ newtmpfiles "${FILESDIR}"/${PN}-vboxusb_tmpfilesd ${PN}-vboxusb.conf
+}
+
+pkg_postinst() {
+ linux-mod-r1_pkg_postinst
+
+ xdg_pkg_postinst
+
+ if use udev; then
+ udev_reload
+ udevadm trigger --subsystem-match=usb
+ fi
+
+ tmpfiles_process virtualbox-vboxusb.conf
+
+ if use gui; then
+ elog "To launch VirtualBox just type: \"virtualbox\"."
+ fi
+
+ elog "You must be in the vboxusers group to use VirtualBox."
+ elog ""
+ elog "The latest user manual is available for download at:"
+ elog "https://download.virtualbox.org/virtualbox/${BASE_PV}/UserManual.pdf"
+ elog ""
+
+ optfeature "Advanced networking setups" net-misc/bridge-utils sys-apps/usermode-utilities
+ optfeature "USB2, USB3, PXE boot, and VRDP support" app-emulation/virtualbox-extpack-oracle
+ optfeature "Guest additions ISO" app-emulation/virtualbox-additions
+
+ if ! use udev; then
+ ewarn "Without USE=udev, USB devices will likely not work in ${PN}."
+ fi
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+
+ use udev && udev_reload
+}
diff --git a/app-emulation/vkd3d-proton/Manifest b/app-emulation/vkd3d-proton/Manifest
new file mode 100644
index 000000000000..896cafb1fd46
--- /dev/null
+++ b/app-emulation/vkd3d-proton/Manifest
@@ -0,0 +1,18 @@
+DIST dxil-spirv-33cd5b2eee8a27da50ad7ed2762e56cca3a7b2c9.tar.gz 973752 BLAKE2B eed10947879c306e25041ff1f95334765c6823a2cfa24864ad1a265e62d32664b7b8f27fcb4a2c36d470a2de6a3224a82eafdffbcab401b2484b225a6d66187b SHA512 fef6e2f37a08ab1c910dc20e63f67738efcceb74b32f0ce6d47db3e9da6d78736d51e71a34d6bafce40bdca1b2be12c7bd370489ed6aee2522511490fb1d37ca
+DIST dxil-spirv-41dae24cdba6771ceede9d45dae1c8580c147ce4.tar.gz 929766 BLAKE2B b37d857f00b2a6b19bd5e152df17834c5b0bd9ceee0e9c9c1c73ea5d602f2d14554868db7dace93eaa6d27410c039eb906c6319225e8ff914cf35a6fa8f9092b SHA512 39d0692cf8ad46d15d016a21f25e5165bb3eb43302c6be3ace8a96c88d0e9662408033933af1fc037dcc7cf4979219c06e59a88f30c2f2b04657f11c65017b08
+DIST dxil-spirv-b03d68d6ed30e87a3bcef9a861fa3c6b4429e5cc.tar.gz 915224 BLAKE2B 137f4b187300261d922ecc66542c5b38e6fa825cbb4e9adb43a7ca15ea9b968e24111bcaf9142782a44a6a7abb342a4ccfbd863af3c01287936e47b6162b7139 SHA512 890c0a0e638b9bffc9ce2cee871c60a2a552d691e60ad6ffa087dfae988e559151b7025e025e4346d1389b7d8f39f8b9bf93e43c7427c883662c1d6c86ff9b1a
+DIST spirv-headers-4f7b471f1a66b6d06462cd4ba57628cc0cd087d7.tar.gz 472655 BLAKE2B 5021f997445539ecaf825460f7e675a1e8d9be7457245a3db31f6fdc63956b8b4987da63f813ece3b8158a8eec4e56760693d1d2dfc49be37ee09a29e299ba82 SHA512 adfdf80baf8c8e83595dfbd9245b821b00918f342174d2ff643b426c0da16a9c79877131a697b39b579a2ec691daeae24f846517eac017e41ba6209098f25eab
+DIST spirv-headers-8b246ff75c6615ba4532fe4fde20f1be090c3764.tar.gz 472513 BLAKE2B f1ad7e11c306c62509655eb41d74efc5fb88688780d006c6944844e964b339baa000f70e115c4df2947e882c9ac33186e301b31138c38fe5f997f7af7260f521 SHA512 fe1d9d70b217b194c92dd397bca386ce8452bc5ec3967d64a257b3a531386fe6a6ecb5e9ed8ab5bc5a2707c5378f02f05809d6d197dcfb3f87cd33304c3b1959
+DIST spirv-headers-ec59c77a3bb5c747a369931ef101ac7c14823f2f.tar.gz 524120 BLAKE2B c0207283d22d72b4a3914f40161b8dec6fa6e8ed55fd91ae14da4499575d9f3a03c932dc7bcbdab084eec7f34d3657d00ce5b1a1398f0b815ec3aeb1e5589c58 SHA512 0523f5001414b6cb945d36a0551e848a586a07dc9893ffcf8b4360f5ce87d6c42315298b3386e3e2073cf4f11122a5a06b157ad88c49318d7ac93e92056d50d2
+DIST vkd3d-proton-2.12.tar.gz 2109289 BLAKE2B 805298efa2f49a82dcc4b989856fb24469a1de9a1d175d5844be3e72187d14f3454ced52bcd65f557ec6776fda00112f4b9849dd48679e10aadf277d82b928ca SHA512 fbd4102fc9917a8e7c28edcaa500c26352a0652a008da453108cd21325ef2c757b5c0842a50e2e5ea6efcacdabe86b2ce570647313d0036967a135b01850fbe8
+DIST vkd3d-proton-2.13.tar.gz 2210823 BLAKE2B 106d7c204b3761c119001af9cda7bd32443e3dcda4426b49f4a2d5f5c8bd19cb16fad21e6a73f6b6eaca8a8501e2d65db6f8b10fd31c488df01cf7f1ceedf8f6 SHA512 a39fc8fb5db379e91fabf10cf81b5087ead7fd7eb833620803acfbc3bd3eec32a81ad193030e8521013bcd55df59a0dee49320313493eac79aa32203a0742e28
+DIST vkd3d-proton-2.14.1.tar.gz 2271935 BLAKE2B c136ba61511bcf8c3202bfd3ab63c663739c2bb6085f04c43227f270e2314e66ba0eb1dcb0e44e0a7aa9d04b24397a7e5b3684530ffe7165997aaaa014d5d4e1 SHA512 7c401a5b100d85b5f674488ff2591034b974eae2ed02e878a21959e23a7682d090e377d5caa8d5508ceeb35f5750fedea36d2fdb3cf0997d5bc171410171ff82
+DIST vkd3d-proton-2.6.tar.gz 1271948 BLAKE2B 02d2574a66614613748fe3471a6fd5aac2650fdae15a17b17ea2ed028fa53a0579b866e7240036a26108afc343395826474bb99e015b9299c2abec811bb872ab SHA512 6f27d213652e2380a9ba4534ac9ffe4b752b4608fbc2e8acd273fa151ab19ad0b132e3436384d2b8591cd1a59f0b69d342c893dc3a64be85188b5e3274bcf3f1
+DIST vkd3d-proton-3.0.1.tar.xz 22916888 BLAKE2B 2bb5f2e65a5da7312d7cac0e09eca5b96b6477772f0e6faa5b4b80052072dcfe803b63dde0279ac104a286b30624dcc556ec363f7a6e645f30affce5eef21f35 SHA512 c548c69e2823a6e9189c8469154e6cf9a6f34dd9c93eda2b47986e4682d62d9a244adce4049439231c86fd02efe528ab0b71fb2e52afbba4c288e1037cea42b0
+DIST vkd3d-proton-3.0b.tar.xz 22435172 BLAKE2B d1d745dd66e74b4470c558019f70e7d2e686cdf68de9875366ef9323a61c0b9ff1482b3e50329a57d59f3c36198e38ea1a34b42f4f522584e986dde191a536bb SHA512 780aee4f2d7fce3fe075a0a0691892e55cd98e60f0bdb26ca57108dbeea28308745f70b4b40c79eb2d7c696ba291d0627eef5ad18c45302af099cd075bb20bee
+DIST vkd3d-proton-dxil-spirv-b537bbb91b.tar.gz 631130 BLAKE2B 99f40c5efde87d0af86542b427e5b0429be68ca69ba0c2b6d10a821811756d8dadff4449f268ae404f8ace09a91b3e8aaa135e534a77c0239e58c1a970a044cc SHA512 3c20090b7a1b53c30fd4967622fc7384e1bcc504c30d8075068b87dad1bd2c6f4a12459bf42e61bf76b9dd454ec17a9d529f74ab0d5583627e966d94bb341dc3
+DIST vkd3d-proton-spirv-headers-ae217c1780.tar.gz 415130 BLAKE2B 0c6444c4c1cb43b9c69757d7c2257ce2fe1bc6be308341f3189766f120994e4920bc738b737d9eefc299359dab568fb8809782e3663dd589c0e4d13aecb8873a SHA512 02cf1d63b29e48ef0efe489eb32237ba2f9f4bf58a182b00dc96aab18faba94de79283398e9e945cd81130f83fff228c59b04e496716ea9ccc148a5f4465282c
+DIST vkd3d-proton-vulkan-headers-83e1a9ed8c.tar.gz 1299014 BLAKE2B 0b1e635aaa6eebec3525b13698a064e0e5b8a78829a772cbe9e1890148059bf396bc5c830e8d6ee3070a3343775991642565283994c65acfa0d82a91590b7d84 SHA512 ecb2158cad55edb4ba069383668f3b311a2f6aa6777b5b7ed94795d454622426ee34fee52b13c97d2f07b5b2f965815ee61a0203b76a0b0d2c708a4786d06b96
+DIST vulkan-headers-29f979ee5aa58b7b005f805ea8df7a855c39ff37.tar.gz 2359246 BLAKE2B 4208b0837789cb26bcb5309d8f1f56aa58dca2f06f61557b6624aa9e63566e62b1e544da33050a48489e58c3e71022ff58dd10ebca00008105c8a909cc07a44c SHA512 15618de42ee2bc019053f00e51afdf37dbdedc1ce6ec18e806e169ba002ac7720c8b3c75e57adb01e56d2c0f5888ddf6418f688bcb666859549befdfa3beb8b5
+DIST vulkan-headers-5677bafb820e476441e9e1f745371b72133407d3.tar.gz 2281652 BLAKE2B 03c55bf485214631d2e669165d3ed2dc068a3bc7bdffe59c5173a15885281cef4e57c5327b22de857ab9604f8e52bbcd6de0d9f5ff7cb3eee407845de722621d SHA512 d5d8eccae8f577d712ada89e42d88e0602f6eb499bf2e08f93505e5ffd554b0df8de74751fbe321184a0cfdaf60ce475273e9becca7a8f837afe6c5597b19671
+DIST vulkan-headers-f030d9dd8ca297b84b10330cee87f72acc3b0aab.tar.gz 2255357 BLAKE2B 07cfa8ccdd26966116e7c35e0d350be94936469f2b9af77c84b8c61495b6ba76813047b5d26bba1fabd44a8f35396b32b6ad32c3b93b0b1a818ce9ed45f93db2 SHA512 6adf81d16d07710322b7c92a0e0436ee33be94d55116e3c460eabb4196a180f8c7b481c19a84a8bbea4e98dda6cf63ff2876f196348921a0c1d9c8c1005cd521
diff --git a/app-emulation/vkd3d-proton/files/vkd3d-proton-2.6-wow64-setup.patch b/app-emulation/vkd3d-proton/files/vkd3d-proton-2.6-wow64-setup.patch
new file mode 100644
index 000000000000..413852460d54
--- /dev/null
+++ b/app-emulation/vkd3d-proton/files/vkd3d-proton-2.6-wow64-setup.patch
@@ -0,0 +1,14 @@
+Dirty workaround to try syswow64 if paths are the same. This can happen
+with USE=wow64 on wine where wine64 is a symlink to wine.
+
+TODO: dxvk's and vkd3d-proton's setup script should be rewritten and packaged
+separately (shared) as upstream hardly support these (dxvk dropped altogether).
+--- a/setup_vkd3d_proton.sh
++++ b/setup_vkd3d_proton.sh
+@@ -81,2 +81,6 @@
+ win32_sys_path="${win32_sys_path/$'\r'/}"
++ if [ "$win32_sys_path" = "$win64_sys_path" ]; then
++ win32_sys_path=$($wine winepath -u 'C:\windows\syswow64' 2> /dev/null)
++ win32_sys_path="${win32_sys_path/$'\r'/}"
++ fi
+ fi
diff --git a/app-emulation/vkd3d-proton/metadata.xml b/app-emulation/vkd3d-proton/metadata.xml
new file mode 100644
index 000000000000..700faadbc714
--- /dev/null
+++ b/app-emulation/vkd3d-proton/metadata.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <use>
+ <flag name="crossdev-mingw">
+ Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+ <pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up
+ and is mostly unsupported, try disabling if have issues)
+ </flag>
+ <flag name="extras">Install extra tools and demos in /usr/lib/vkd3d-proton</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-2.12.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-2.12.ebuild
new file mode 100644
index 000000000000..024c5bb46c87
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-2.12.ebuild
@@ -0,0 +1,205 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+ EGIT_SUBMODULES=(
+ # uses hacks / recent features and easily breaks, keep bundled headers
+ # (also cross-compiled and -I/usr/include is troublesome)
+ khronos/{SPIRV,Vulkan}-Headers
+ subprojects/dxil-spirv
+ subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools
+ )
+else
+ HASH_VKD3D=7460c70de0dff08de2f4a78a7ac7c71fd7f0ea6e # match tag on bumps
+ HASH_DXIL=b03d68d6ed30e87a3bcef9a861fa3c6b4429e5cc
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_SPIRV_DXIL=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_VULKAN=f030d9dd8ca297b84b10330cee87f72acc3b0aab
+ SRC_URI="
+ https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/HansKristian-Work/dxil-spirv/archive/${HASH_DXIL}.tar.gz
+ -> dxil-spirv-${HASH_DXIL}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV_DXIL}.tar.gz
+ -> spirv-headers-${HASH_SPIRV_DXIL}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.6-wow64-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir khronos/{SPIRV,Vulkan}-Headers subprojects/dxil-spirv || die
+ mv ../dxil-spirv-${HASH_DXIL} subprojects/dxil-spirv || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} khronos/SPIRV-Headers || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} khronos/Vulkan-Headers || die
+
+ rmdir subprojects/dxil-spirv/third_party/spirv-headers || die
+ # dxil and vkd3d's spirv headers sometime mismatch and are incompatible
+ if [[ ${HASH_SPIRV} == "${HASH_SPIRV_DXIL}" ]]; then
+ ln -s ../../../khronos/SPIRV-Headers \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ else
+ mv ../SPIRV-Headers-${HASH_SPIRV_DXIL} \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ fi
+ fi
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+
+ if [[ ${PV} != 9999 ]]; then
+ # without .git, meson sets vkd3d_build as 0x${PV} leading to failure
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::15}/" vkd3d_build.h.in || die
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::7}/" vkd3d_version.h.in || die
+ fi
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-2.13.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-2.13.ebuild
new file mode 100644
index 000000000000..47803cf8b2f6
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-2.13.ebuild
@@ -0,0 +1,205 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+ EGIT_SUBMODULES=(
+ # uses hacks / recent features and easily breaks, keep bundled headers
+ # (also cross-compiled and -I/usr/include is troublesome)
+ khronos/{SPIRV,Vulkan}-Headers
+ subprojects/dxil-spirv
+ subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools
+ )
+else
+ HASH_VKD3D=81ac2f2cc689fe6b0b729bf4eebfc3580b4b4fb9 # match tag on bumps
+ HASH_DXIL=41dae24cdba6771ceede9d45dae1c8580c147ce4
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_SPIRV_DXIL=4f7b471f1a66b6d06462cd4ba57628cc0cd087d7
+ HASH_VULKAN=5677bafb820e476441e9e1f745371b72133407d3
+ SRC_URI="
+ https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/HansKristian-Work/dxil-spirv/archive/${HASH_DXIL}.tar.gz
+ -> dxil-spirv-${HASH_DXIL}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV_DXIL}.tar.gz
+ -> spirv-headers-${HASH_SPIRV_DXIL}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.6-wow64-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir khronos/{SPIRV,Vulkan}-Headers subprojects/dxil-spirv || die
+ mv ../dxil-spirv-${HASH_DXIL} subprojects/dxil-spirv || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} khronos/SPIRV-Headers || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} khronos/Vulkan-Headers || die
+
+ rmdir subprojects/dxil-spirv/third_party/spirv-headers || die
+ # dxil and vkd3d's spirv headers sometime mismatch and are incompatible
+ if [[ ${HASH_SPIRV} == "${HASH_SPIRV_DXIL}" ]]; then
+ ln -s ../../../khronos/SPIRV-Headers \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ else
+ mv ../SPIRV-Headers-${HASH_SPIRV_DXIL} \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ fi
+ fi
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+
+ if [[ ${PV} != 9999 ]]; then
+ # without .git, meson sets vkd3d_build as 0x${PV} leading to failure
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::15}/" vkd3d_build.h.in || die
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::7}/" vkd3d_version.h.in || die
+ fi
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-2.14.1.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-2.14.1.ebuild
new file mode 100644
index 000000000000..0e0f6c245fea
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-2.14.1.ebuild
@@ -0,0 +1,205 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+ EGIT_SUBMODULES=(
+ # uses hacks / recent features and easily breaks, keep bundled headers
+ # (also cross-compiled and -I/usr/include is troublesome)
+ khronos/{SPIRV,Vulkan}-Headers
+ subprojects/dxil-spirv
+ subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools
+ )
+else
+ HASH_VKD3D=0d66699b1b1e250ef19d793f2649d9288b0808ff # match tag on bumps
+ HASH_DXIL=33cd5b2eee8a27da50ad7ed2762e56cca3a7b2c9
+ HASH_SPIRV=8b246ff75c6615ba4532fe4fde20f1be090c3764
+ HASH_SPIRV_DXIL=ec59c77a3bb5c747a369931ef101ac7c14823f2f
+ HASH_VULKAN=29f979ee5aa58b7b005f805ea8df7a855c39ff37
+ SRC_URI="
+ https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/HansKristian-Work/dxil-spirv/archive/${HASH_DXIL}.tar.gz
+ -> dxil-spirv-${HASH_DXIL}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> spirv-headers-${HASH_SPIRV}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV_DXIL}.tar.gz
+ -> spirv-headers-${HASH_SPIRV_DXIL}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> vulkan-headers-${HASH_VULKAN}.tar.gz
+ "
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.6-wow64-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir khronos/{SPIRV,Vulkan}-Headers subprojects/dxil-spirv || die
+ mv ../dxil-spirv-${HASH_DXIL} subprojects/dxil-spirv || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} khronos/SPIRV-Headers || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} khronos/Vulkan-Headers || die
+
+ rmdir subprojects/dxil-spirv/third_party/spirv-headers || die
+ # dxil and vkd3d's spirv headers sometime mismatch and are incompatible
+ if [[ ${HASH_SPIRV} == "${HASH_SPIRV_DXIL}" ]]; then
+ ln -s ../../../khronos/SPIRV-Headers \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ else
+ mv ../SPIRV-Headers-${HASH_SPIRV_DXIL} \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ fi
+ fi
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+
+ if [[ ${PV} != 9999 ]]; then
+ # without .git, meson sets vkd3d_build as 0x${PV} leading to failure
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::15}/" vkd3d_build.h.in || die
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::7}/" vkd3d_version.h.in || die
+ fi
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-2.6-r1.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-2.6-r1.ebuild
new file mode 100644
index 000000000000..e14b9bbd7175
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-2.6-r1.ebuild
@@ -0,0 +1,184 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# note: version 2.6 should be kept for longer given it's the
+# last version to support <wine-7.1 and <nvidia-drivers-510
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+ EGIT_SUBMODULES=(
+ # uses hacks / recent features and easily breaks, keep bundled headers
+ # (also cross-compiled and -I/usr/include is troublesome)
+ subprojects/{SPIRV,Vulkan}-Headers
+ subprojects/dxil-spirv
+ subprojects/dxil-spirv/third_party/spirv-headers # skip cross/tools
+ )
+else
+ HASH_VKD3D=3e5aab6fb3e18f81a71b339be4cb5cdf55140980 # match tag on bumps
+ HASH_DXIL=b537bbb91bccdbc695cb7e5211d608f8d1c205bd
+ HASH_SPIRV=ae217c17809fadb232ec94b29304b4afcd417bb4
+ HASH_VULKAN=83e1a9ed8ce289cebb1c02c8167d663dc1befb24
+ SRC_URI="
+ https://github.com/HansKristian-Work/vkd3d-proton/archive/refs/tags/v${PV}.tar.gz
+ -> ${P}.tar.gz
+ https://github.com/HansKristian-Work/dxil-spirv/archive/${HASH_DXIL}.tar.gz
+ -> ${PN}-dxil-spirv-${HASH_DXIL::10}.tar.gz
+ https://github.com/KhronosGroup/SPIRV-Headers/archive/${HASH_SPIRV}.tar.gz
+ -> ${PN}-spirv-headers-${HASH_SPIRV::10}.tar.gz
+ https://github.com/KhronosGroup/Vulkan-Headers/archive/${HASH_VULKAN}.tar.gz
+ -> ${PN}-vulkan-headers-${HASH_VULKAN::10}.tar.gz"
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.6-wow64-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ if [[ ${PV} != 9999 ]]; then
+ rmdir subprojects/{{SPIRV,Vulkan}-Headers,dxil-spirv} || die
+ mv ../dxil-spirv-${HASH_DXIL} subprojects/dxil-spirv || die
+ mv ../SPIRV-Headers-${HASH_SPIRV} subprojects/SPIRV-Headers || die
+ mv ../Vulkan-Headers-${HASH_VULKAN} subprojects/Vulkan-Headers || die
+ ln -s ../../../SPIRV-Headers/include \
+ subprojects/dxil-spirv/third_party/spirv-headers || die
+ fi
+
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+
+ if [[ ${PV} != 9999 ]]; then
+ # without .git, meson sets vkd3d_build as 0x${PV} leading to failure
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::15}/" vkd3d_build.h.in || die
+ sed -i "s/@VCS_TAG@/${HASH_VKD3D::7}/" vkd3d_version.h.in || die
+ fi
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ # preferring meson eclass' cross file over upstream's but, unlike
+ # dxvk, we lose static options in the process (from build-win*.txt)
+ append-ldflags -static -static-libgcc -static-libstdc++
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev !debug --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ # unnecesasry files, see package-release.sh
+ rm "${ED}"/usr/lib/${PN}/x*/libvkd3d-proton-utils-3.dll || die
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-3.0.1.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-3.0.1.ebuild
new file mode 100644
index 000000000000..2d83606597cc
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-3.0.1.ebuild
@@ -0,0 +1,157 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+else
+ # tarball is same as upstream except for including git submodules
+ SRC_URI="https://distfiles.gentoo.org/pub/dev/ionen@gentoo.org/${P}.tar.xz"
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-3.0b.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-3.0b.ebuild
new file mode 100644
index 000000000000..6e37e8e0e560
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-3.0b.ebuild
@@ -0,0 +1,171 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+else
+ # tarball is same as upstream except for including git submodules
+ SRC_URI="https://distfiles.gentoo.org/pub/dev/ionen@gentoo.org/${P}.tar.xz"
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-2.6-wow64-setup.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+
+ if [[ ${PV} != 9999 ]]; then
+ # update to match version+hash of release tag on bump
+ local tag_ver=3.0b
+ local tag_hash=21a49c975df83a7c5e7c0a68b5c1fb58f23df7c1
+ [[ ${PV} == ${tag_ver} ]] || die "hash has not been updated"
+
+ # without .git, meson sets vkd3d_build as 0x${PV} leading to failure
+ sed -i "s/@VCS_TAG@/${tag_hash::15}/" vkd3d_build.h.in || die
+ sed -i "s/@VCS_TAG@/${tag_hash::7}/" vkd3d_version.h.in || die
+ fi
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/vkd3d-proton/vkd3d-proton-9999.ebuild b/app-emulation/vkd3d-proton/vkd3d-proton-9999.ebuild
new file mode 100644
index 000000000000..a28b72a2e0ab
--- /dev/null
+++ b/app-emulation/vkd3d-proton/vkd3d-proton-9999.ebuild
@@ -0,0 +1,157 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_ABIS="amd64 x86" # allow usage on /no-multilib/
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit eapi9-ver flag-o-matic meson-multilib toolchain-funcs
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/HansKristian-Work/vkd3d-proton.git"
+else
+ # tarball is same as upstream except for including git submodules
+ SRC_URI="https://distfiles.gentoo.org/pub/dev/ionen@gentoo.org/${P}.tar.xz"
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Fork of VKD3D, development branches for Proton's Direct3D 12 implementation"
+HOMEPAGE="https://github.com/HansKristian-Work/vkd3d-proton/"
+
+LICENSE="LGPL-2.1+ Apache-2.0 MIT"
+SLOT="0"
+IUSE="+abi_x86_32 crossdev-mingw debug extras +strip"
+
+BDEPEND="
+ dev-util/glslang
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local tool=-w64-mingw32-g++
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, it is necessary to setup the mingw toolchain."
+ eerror "For instructions, please see: https://wiki.gentoo.org/wiki/Mingw"
+ use abi_x86_32 && use abi_x86_64 &&
+ eerror "Also, with USE=abi_x86_32, will need both i686 and x86_64 toolchains."
+ die "USE=crossdev-mingw is enabled, but ${tool} was not found"
+ elif [[ ! $(LC_ALL=C ${tool} -v 2>&1) =~ "Thread model: posix" ]]; then
+ eerror "${PN} requires GCC to be built with --enable-threads=posix"
+ eerror "Please see: https://wiki.gentoo.org/wiki/Mingw#POSIX_threads_for_Windows"
+ die "USE=crossdev-mingw is enabled, but ${tool} does not use POSIX threads"
+ fi
+ done
+ tool=-w64-mingw32-widl
+ for tool in $(usev abi_x86_64 x86_64${tool}) $(usev abi_x86_32 i686${tool}); do
+ if ! type -P widl >/dev/null && ! type -P ${tool} >/dev/null; then
+ eerror "With USE=crossdev-mingw, you need to provide the widl compiler by either"
+ eerror "building crossdev mingw64-runtime with USE=tools or installing wine."
+ die "USE=crossdev-mingw is set but neither widl nor ${tool} were found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ default
+
+ sed -i "/^basedir=/s|=.*|=${EPREFIX}/usr/lib/${PN}|" setup_vkd3d_proton.sh || die
+}
+
+src_configure() {
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # random segfaults been reported with LTO in some games, filter as
+ # a safety (note that optimizing this further won't really help
+ # performance, GPU does the actual work)
+ filter-lto
+
+ # -mavx and mingw-gcc do not mix safely here
+ # https://github.com/doitsujin/dxvk/issues/4746#issuecomment-2708869202
+ append-flags -mno-avx
+
+ if [[ ${CHOST} != *-mingw* ]]; then
+ if [[ ! -v MINGW_BYPASS ]]; then
+ unset AR CC CXX RC STRIP WIDL
+ filter-flags '-fuse-ld=*'
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*' #928038
+ fi
+
+ CHOST_amd64=x86_64-w64-mingw32
+ CHOST_x86=i686-w64-mingw32
+ CHOST=$(usex x86 ${CHOST_x86} ${CHOST_amd64})
+
+ strip-unsupported-flags
+ fi
+
+ multilib-minimal_src_configure
+}
+
+multilib_src_configure() {
+ # multilib's ${CHOST_amd64}-gcc -m32 is unusable with crossdev,
+ # unset again so meson eclass will set ${CHOST}-gcc + others
+ use crossdev-mingw && [[ ! -v MINGW_BYPASS ]] && unset AR CC CXX STRIP WIDL
+
+ # prefer ${CHOST}'s widl (mingw) over wine's as used by upstream if
+ # possible, but eclasses don't handle that so setup machine files
+ local widl=$(tc-getPROG WIDL widl)
+ use amd64 && [[ ${widl} == widl && ${ABI} == x86 ]] && widl="widl','-m32"
+ printf "[binaries]\nwidl = ['${widl}']\n" > "${T}"/widl.${ABI}.ini || die
+
+ local emesonargs=(
+ --prefix="${EPREFIX}"/usr/lib/${PN}
+ --{bin,lib}dir=x${ABI: -2}
+ --{cross,native}-file="${T}"/widl.${ABI}.ini
+ $(meson_use {,enable_}extras)
+ $(meson_use debug enable_trace)
+ $(usev strip --strip) # portage won't strip .dll, so allow it here
+ -Denable_tests=false # needs wine/vulkan and is intended for manual use
+ )
+
+ meson_src_configure
+}
+
+multilib_src_install_all() {
+ dobin setup_vkd3d_proton.sh
+ einstalldocs
+
+ find "${ED}" -type f -name '*.a' -delete || die
+}
+
+pkg_postinst() {
+ if [[ ! ${REPLACING_VERSIONS} ]]; then
+ elog "To enable ${PN} on a wine prefix, you can run the following command:"
+ elog
+ elog " WINEPREFIX=/path/to/prefix setup_vkd3d_proton.sh install --symlink"
+ elog
+ elog "Should also ensure that >=app-emulation/dxvk-2.1's dxgi.dll is available"
+ elog "on it, not meant to function independently even if only using d3d12."
+ elog
+ elog "See ${EROOT}/usr/share/doc/${PF}/README.md* for details."
+ fi
+
+ if ver_replacing -lt 2.7; then
+ elog
+ elog ">=${PN}-2.7 requires drivers and Wine to support vulkan-1.3, meaning:"
+ elog ">=wine-*-7.1 (or >=wine-proton-7.0), and >=mesa-22.0 (or >=nvidia-drivers-510)"
+ fi
+
+ if ver_replacing -lt 2.9; then
+ elog
+ elog ">=${PN}-2.9 has a new file to install (d3d12core.dll), old Wine prefixes that"
+ elog "relied on '--symlink' may need updates by using the setup_vkd3d_proton.sh."
+ elog
+ elog "Furthermore, it may not function properly if >=app-emulation/dxvk-2.1's"
+ elog "dxgi.dll is not available on that prefix (even if only using d3d12)."
+ fi
+}
diff --git a/app-emulation/wine-desktop-common/Manifest b/app-emulation/wine-desktop-common/Manifest
new file mode 100644
index 000000000000..06c178be8d95
--- /dev/null
+++ b/app-emulation/wine-desktop-common/Manifest
@@ -0,0 +1 @@
+DIST wine-desktop-common-20150204.tar.gz 99491 BLAKE2B 7427c08d00a7ec11319908c908c5833e1a3fc297ec2ebfd942ccdf2adb9e657d1fd751da74bd67e7efb3d4b8ad769a11b1aa5e1a56e33e181f149f4f6245fac3 SHA512 1f3d7022c5cff87ed3b8fd3b7cd14397c6f23b98fe6a7c583ac0d2f439ff29d943f57375f23687aa6519ff1d84ff07624a9a712d6f19fa207fd26d01edcb6688
diff --git a/app-emulation/wine-desktop-common/metadata.xml b/app-emulation/wine-desktop-common/metadata.xml
new file mode 100644
index 000000000000..fc72d132ecb0
--- /dev/null
+++ b/app-emulation/wine-desktop-common/metadata.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <stabilize-allarches />
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-desktop-common/wine-desktop-common-20150204-r2.ebuild b/app-emulation/wine-desktop-common/wine-desktop-common-20150204-r2.ebuild
new file mode 100644
index 000000000000..2987d1694d5b
--- /dev/null
+++ b/app-emulation/wine-desktop-common/wine-desktop-common-20150204-r2.ebuild
@@ -0,0 +1,36 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit xdg
+
+DESCRIPTION="Various desktop menu items and icons for wine"
+HOMEPAGE="
+ https://github.com/NP-Hardass/wine-desktop-common
+ https://bazaar.launchpad.net/~ubuntu-wine/wine/ubuntu-debian-dir/files/head:/debian/
+"
+SRC_URI="
+ https://github.com/NP-Hardass/${PN}/archive/${PV//./}.tar.gz
+ -> ${P}.tar.gz
+"
+S=${WORKDIR}/${PN}-${PV//./}
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+KEYWORDS="amd64 ~arm64 x86"
+
+PDEPEND="app-eselect/eselect-wine"
+
+# These use a non-standard "Wine" category, which is provided by
+# /etc/xdg/applications-merged/wine.menu
+QA_DESKTOP_FILE="
+ usr/share/applications/wine-browsedrive.desktop
+ usr/share/applications/wine-notepad.desktop
+ usr/share/applications/wine-uninstaller.desktop
+ usr/share/applications/wine-winecfg.desktop
+"
+
+src_install() {
+ emake install DESTDIR="${D}" EPREFIX="${EPREFIX}"
+}
diff --git a/app-emulation/wine-gecko/Manifest b/app-emulation/wine-gecko/Manifest
new file mode 100644
index 000000000000..2b42161e2a28
--- /dev/null
+++ b/app-emulation/wine-gecko/Manifest
@@ -0,0 +1,8 @@
+DIST wine-gecko-2.47.3-x86.msi 55686144 BLAKE2B ce428b35ce70968c12141832aab6044a4e9ecb198b7ce0af69264de2ef16aa7045b154e8dbcb17ef068e5a30a19224014a07210583166394353c0b67ad3f119b SHA512 988390450e5e64bde903595e8cbed39b6e9c6ea928130f6f20cc3c6692c46db8c2a2e0c5dc49ea324e96ee65af3749414aad8b092a02bf7453499178e01c7527
+DIST wine-gecko-2.47.3-x86.tar.xz 43291212 BLAKE2B 441659dd002c14b7774b0c2dc4bbc8d29f16bda7b9d1b5ff7d75dca53a6b01366c62270fa617f8bcd7ac07871de72c016d66e557b4d4f734227c0c4ec0b74013 SHA512 c1530c4aec4743b5acb14cecac909ece6e140eec2171ad4b154513de9aead7a323789251e27f4f1c3ff0d6af9cd2590193db99380e2c91a1640dcff49f78b84e
+DIST wine-gecko-2.47.3-x86_64.msi 54623744 BLAKE2B 2783e060e2277925ca4b1193f4c13d7af88c7605d48d4bdd118826340e293547edc83fa185e2c64fddb629c632480062bedf995b6f65b07360cf9496bbd21f9a SHA512 c8d617695426c19bdb8a415fb0f00dc3ff9aa6c023599d24313f1c6ac50bbf36bc42dc0cdd58dee93c5ad4998468000d123080cbea09efe1bca3d8f7bfa2bd1d
+DIST wine-gecko-2.47.3-x86_64.tar.xz 42325312 BLAKE2B dd7b8516ce38c2baa5fc6c73d7292a78c03136a9bffe50ceb4bd32df0754e7f8d6adbc7689e2d00e0a5fb9806d6da736b5d15acc2fca3f2210015ac55892ed6b SHA512 3d4ff51e0dede5b52929b3babc91b16c06fdd89e75f0d6911e2262142c7422405676238d0d6cb90b6705a18b975de21dd58036a78f856523bab28c5bf52879f9
+DIST wine-gecko-2.47.4-x86.msi 55187968 BLAKE2B f0ecd9cf41290082918be54eb9646aa31973db01993b778d06f6fd82e9f948751e54199a4a8db138870641dfb052fec77af0836613eb95018f603b23bf214d36 SHA512 7adb6c9b59444245d3a0ceb372e5054297723f517ea62d37e7bf02db76f2c0e9a4a64777ea7300ad051ea2281668df2d8680f3889e53f295b40aa1919fe453e5
+DIST wine-gecko-2.47.4-x86.tar.xz 43025064 BLAKE2B 2a73c12585b502ae11188482cbc9fb1f45f95bfe4383a7615011104b132f4845f9813d01fb40277e1934fab5f1b35ab40b4f4a66a9967463dd1d666a666904e9 SHA512 1279456eca4439e9adc3c97678fabeca42cc89f683246805ca14f85fc104bf4ba970fb6490f4ebd0938fc8e0a0ca372b000fdd5165f900070eeee30a1aeec117
+DIST wine-gecko-2.47.4-x86_64.msi 53898752 BLAKE2B dabc9957670d388b3c24fb850c444f28561b200f608f8cb6434d661198dc09786d8c61d5ad007fa9f3a1820425b5b9b46253a6b825d5461539a76c0c4d8e8315 SHA512 075f95ff7a33ad0af6ad53fe8f0f6e2ab233ceb950957d2fbf7d4955543dfe143d14fade283061df14562e6345a7cbaf754fc92d591ea03a5573accb290ae530
+DIST wine-gecko-2.47.4-x86_64.tar.xz 41935496 BLAKE2B 62856a88266b4757602c0646e024f832974a93f03b9df253fd4895d4f11a41b435840ad8f7003ec85a0d8087dec15f2e096dbfb4b01ebe4d365521e48fd0c5c0 SHA512 1defbbc1fb5029bf43872a4e1c49995b61e0f106b1fcc4c99159bf4788226981b9ba8a25a2296d3a9312dbfa7e27b469ca27c0867afb218990d45f68705dbfbe
diff --git a/app-emulation/wine-gecko/metadata.xml b/app-emulation/wine-gecko/metadata.xml
new file mode 100644
index 000000000000..84576e261b0a
--- /dev/null
+++ b/app-emulation/wine-gecko/metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <use>
+ <flag name="shared">Install pre-unpacked files which do not need to be copied into the Wine prefix</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-gecko/wine-gecko-2.47.3.ebuild b/app-emulation/wine-gecko/wine-gecko-2.47.3.ebuild
new file mode 100644
index 000000000000..11113939eae9
--- /dev/null
+++ b/app-emulation/wine-gecko/wine-gecko-2.47.3.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Mozilla Gecko based version of Internet Explorer for Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Gecko/
+ https://gitlab.winehq.org/wine/wine-gecko/
+"
+SRC_URI="
+ shared? (
+ abi_x86_32? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ abi_x86_64? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86_64.tar.xz )
+ )
+ !shared? (
+ abi_x86_32? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+ abi_x86_64? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86_64.msi )
+ )
+"
+S=${WORKDIR}
+
+LICENSE="Apache-2.0 BSD BSD-2 MIT MPL-2.0"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+abi_x86_32 abi_x86_64 +shared"
+REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )"
+
+src_install() {
+ insinto /usr/share/wine/gecko
+
+ if use shared; then
+ use abi_x86_32 && doins -r ${P}-x86
+ use abi_x86_64 && doins -r ${P}-x86_64
+ else
+ use abi_x86_32 && doins "${DISTDIR}"/${P}-x86.msi
+ use abi_x86_64 && doins "${DISTDIR}"/${P}-x86_64.msi
+ fi
+}
diff --git a/app-emulation/wine-gecko/wine-gecko-2.47.4.ebuild b/app-emulation/wine-gecko/wine-gecko-2.47.4.ebuild
new file mode 100644
index 000000000000..11113939eae9
--- /dev/null
+++ b/app-emulation/wine-gecko/wine-gecko-2.47.4.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Mozilla Gecko based version of Internet Explorer for Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Gecko/
+ https://gitlab.winehq.org/wine/wine-gecko/
+"
+SRC_URI="
+ shared? (
+ abi_x86_32? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ abi_x86_64? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86_64.tar.xz )
+ )
+ !shared? (
+ abi_x86_32? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+ abi_x86_64? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86_64.msi )
+ )
+"
+S=${WORKDIR}
+
+LICENSE="Apache-2.0 BSD BSD-2 MIT MPL-2.0"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+abi_x86_32 abi_x86_64 +shared"
+REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )"
+
+src_install() {
+ insinto /usr/share/wine/gecko
+
+ if use shared; then
+ use abi_x86_32 && doins -r ${P}-x86
+ use abi_x86_64 && doins -r ${P}-x86_64
+ else
+ use abi_x86_32 && doins "${DISTDIR}"/${P}-x86.msi
+ use abi_x86_64 && doins "${DISTDIR}"/${P}-x86_64.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/Manifest b/app-emulation/wine-mono/Manifest
new file mode 100644
index 000000000000..7c0262c0d6ec
--- /dev/null
+++ b/app-emulation/wine-mono/Manifest
@@ -0,0 +1,18 @@
+DIST wine-mono-10.0.0-x86.msi 84493824 BLAKE2B 013d38f30525295d83f430650269bdab12e73d8c7cf5084882eb7a4c4dd4fcca895128d51467154d94597ca67526696e55107bc8ed7418fc248ea2e20553195a SHA512 4238cef9a42b75fd8fc39ae042594266da971f00cb3f91d9bcb5e39454be7f9db403fd9f71c3d731fb692e5e25578a790723e2eac6a4cfbc34156e3c4cf4fb65
+DIST wine-mono-10.0.0-x86.tar.xz 38907080 BLAKE2B a7efb7e9e3c03a92f3fc2c66172a2597ab4febfbf23a98c20d9ba46c48f0b96f568b21ea61f43cfa0cbbad2557cfafd665b63f3115611f0df9dd75ab358ecf43 SHA512 e7e5867d34b64a9603fb919280d31cc3ae726fcfd22b4972bbfeda470aaddeb618b50f7d63b0a0ea15fd40f7d5e242c335bd84504a67d4e49b457591741acf5c
+DIST wine-mono-10.3.0-x86.msi 85515264 BLAKE2B 9cc4800695411a1de61c3b3e52d52edc2802fa7c99c18697e51cf200c284939e93434a03ff3227d6e8c652d046b30f38331f2ad3f11d6e0e9bf4f98d277d56e6 SHA512 fe8bed279d06522f8d0351b4026e6c24cda525f3911b6c7b900f49260e1027fd9f0504fa974b6af69262c5ddd02ee3eb24c0438400d0d33031c436e89e2badb5
+DIST wine-mono-10.3.0-x86.tar.xz 39584548 BLAKE2B a3a63b1e8cf072923512923ccd7419fbdb4c9747b0a3c29111d2bda36ab1fd95d0fd4283f74126cfe0c60e639ce3d173d69efdb3d97bf2b39142eb3ed3a27ef7 SHA512 fc67b9524b6b53e9a773bf514b7faab5b699fa4c10f457ddfb8ee564788e262c43241dbd64bcc427420da51ce83a89436f32f42b14c5867ae8a7a5c83960be5f
+DIST wine-mono-10.4.1-x86.msi 85504000 BLAKE2B 53595a97191d33c2423f3dda1520c71101a6d018c6326c064851f38c07c2a12a364823888230f855b87516625af9b7eb85801e385e0bcfd23af12609ee0ed72e SHA512 e71294f2b095303d5af7ae7dd194aea683edb2b5ca00b8a54e889d927c80253e87adb1c8dd7ec90a7bf99a93e17c376549c413b6f148694d22a9b6c5b811965f
+DIST wine-mono-10.4.1-x86.tar.xz 39590692 BLAKE2B 9ca53dee272470806432c61587080e6dc04fd9eaafde4f55f5d57d5557ec6859d77a74b74c9e3f472da04b8ace9609f0927573faab368a25249c76b3e37e65c1 SHA512 9274a1f167e76535c521ba47335fd596ba6413d4e8e9301502eea4f2646f077e172efb326278147700ebcb2d0d351a568ab142221793821ee3174bcb68e77099
+DIST wine-mono-11.0.0-x86.msi 86029824 BLAKE2B d43ea2fd80986c12988edab5c46adc937bd33588057f94171d76d76ad7b24eb37af26e58e452816aa3984d5644ceeaccf6432419677b0a1a8b3f4b31c37bbe78 SHA512 27fc33f4cc4db1e82a7b062dc7419e7e5173c3673875b4299513aadcb7be3a1f8f4112278d1b77569956f029d66856827edc681be788312f02afdf45af7a8dfe
+DIST wine-mono-11.0.0-x86.tar.xz 41643568 BLAKE2B 76bdc625c6c14a6c3e3892649c1fbb7ed127d8ce90079a3f8d317c8e6fd567c763d71dd838f8422c921ed315e9d2735849b223a94a9517ad73d0734d313c1a6f SHA512 8aedad2ca90c1e8839827aaf11976a0bb25a3d629d7f4b2f5b399ba3b8682ecd468f484d316aea2f058bc8cd5d2c4d21943cb35c041cd1fdeaac5c13ce74491f
+DIST wine-mono-11.1.0-x86.msi 83268096 BLAKE2B 756ccfa075e56d5acc6f48434f7103a0f1c04720ba50ecf4d5e1d6af0720911cebe3ad1bde005eae08de9a13c6566d5e4bd80b9acddcef5c17a65e602dc6e9e2 SHA512 4df3e7a6a532f8cebf9670886e0d89f2a7b8c97e5e879eea321be22e32537a36810c5a6ee550c96273a6ee8c1862c581ac15e77bb1f2183d5c33d4642f2eabc6
+DIST wine-mono-11.1.0-x86.tar.xz 39385356 BLAKE2B d02a4d68d6ecc3a984db5793ccf0522a86efa04590c09086776ae75d0eae1c5914941daae71b65167a22028c75ce5252db11982366ab5cad9e4a3a29f96feae3 SHA512 72f16c4c22ec0891c7648c89b02e7162ec5e5e543f003f486943c8b5855433e7b86116ac850ce0dffded10e4fda4745d225c0de25baf37631f39eee47ef33844
+DIST wine-mono-7.4.0-x86.msi 87334912 BLAKE2B c0b778f9db59d1a2917631f1d6ca1a1798972a6a42e27975da78f3a35b77018a99228d7d95e5640c57618533a6b01bf2252859e3e978e2aa8dbdc8cd62afcc28 SHA512 cf35513b368324487c387d4339e5b05a90c4825b25ea603140524b79e69786ccc20dfb898213a9548c0313c0b0e4b160acb88364e4b280dd6712d185d9e5ae57
+DIST wine-mono-7.4.0-x86.tar.xz 45404344 BLAKE2B 3a74106b9b3f21a88c2435f7988d66a54e08beea931a0ce0df6431c21add4ee2685bf9c9cb2404ee1a685736d61b1aee3cdd507130e5c5dddba7e506a2ff18bb SHA512 108cb5d969e84deeda3d2b11dba7cd73853fc3b088ecf2bcdb9bc5c5bbaaff03e72cd4f485d1935eda43cdd95b927886441be1d2204edeaee1ff1fea75735d22
+DIST wine-mono-8.1.0-x86.msi 84905984 BLAKE2B 948b014fc6fba94bc97642b8aae266b8179b119ea3d8a0fdf47daee33eac65b8cc5dd1bc483ae4c66bdd1bdc10f4b73258bb6c83bca0911a30e86e358faafd20 SHA512 5c788dfa0c9b664242f3ce0ab24f3f9256dabf1e9fadc516140f267c763da1865b4536c707660acaf66e4a37d93198f5499971b4261e63d91252f6a7fc3eae4e
+DIST wine-mono-8.1.0-x86.tar.xz 40854944 BLAKE2B 0e0dd83b92016da328547173d25dc396a895a7a161cd54796c9bda34ae958856f1bee342c1bb5fcffcf695b35adf66b2bf83cfa61e01790bf4b0f2d198f84feb SHA512 ba87105a6527b9c392e9ad406e92fd90164e0abb3a348a1e343e63eff0ee8632399badb98f7fbc3581ce697ba09d98aafbf5033bf52fb14b7c7c280c64f25a84
+DIST wine-mono-9.3.1-x86.msi 84572160 BLAKE2B 82f0aaec4cb816b28708c8bd8f347a128451046f33958b63d8cf6b6009d2f426f03d419017de4303f722ac0232bb2c9a1aba957411114ffc0b392db930888f69 SHA512 6653c6dd5484f3687be7ce13ca74e95abb5b0fa3c6901d57a97f4a218986e68154846ef19bf8ef5667f375b61600bb37e2e339b62a638a5eacd6f15a0022fc8a
+DIST wine-mono-9.3.1-x86.tar.xz 43896120 BLAKE2B 5f4c2a07355a3d394086467f1b0c45698cd83731a4137b59975abdeda2d564f44922a67b1bec111e4209c4fe74247486076e95dffc84d88b5b7a02774efd070b SHA512 cc4faff237b46d870e1afeb99be1e77f8f0d599c8567dfc365256558b4ec533efee3d5324bfe1bd5bc7f318112899dd800e3e2ef9cbc6d50063f47fc7039c879
+DIST wine-mono-9.4.0-x86.msi 84639232 BLAKE2B fc53dadf9c73c489f0333ab25aa2ce85df7f1dcf82fd475ea0265772441f1b29804bd378e555f71eafc851393c833c5aef97f10103257ccb6c6951c46fcb5bd9 SHA512 c8907d1f3b04bfc86a4d230148558964984f4ce33a732802ccbbc89b3593bce1c32b2fae105db0efa7e1e7ee97e955e51b682f06efe595408ba4031b55b8fe0f
+DIST wine-mono-9.4.0-x86.tar.xz 43941584 BLAKE2B a4d88b274e06a8f8f02e2f74e55fd0df5e4836f45295af711f2f3d3f2bf18432bc7c41c9c2392a0e6b584b67358740acd7f3572cafd32afd08060e8c9e060c0a SHA512 2ea3fa22f64019ff71b4c368e3b83608c2b0cf4ffb63fc349b29e41ddc17d015bf431d41788ce3139ddc19336690b9460c983d18eea514351f069671012895f2
diff --git a/app-emulation/wine-mono/metadata.xml b/app-emulation/wine-mono/metadata.xml
new file mode 100644
index 000000000000..d26b8d5915a1
--- /dev/null
+++ b/app-emulation/wine-mono/metadata.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <longdescription>
+ Wine Mono is a package containing Mono and other projects,
+ intended as a replacement for the .NET runtime and class
+ libraries in Wine. It works in conjunction with Wine's builtin
+ mscoree.dll, and it is not intended to be useful for any other
+ purpose.
+ </longdescription>
+ <use>
+ <flag name="shared">
+ Install pre-unpacked files which do not need to
+ be copied into the Wine prefix (note that this
+ requires the default top-level Z: drive to be
+ kept for out-of-prefix files to be readable)
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-mono/wine-mono-10.0.0.ebuild b/app-emulation/wine-mono/wine-mono-10.0.0.ebuild
new file mode 100644
index 000000000000..7fd66b53f70a
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-10.0.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-10.3.0.ebuild b/app-emulation/wine-mono/wine-mono-10.3.0.ebuild
new file mode 100644
index 000000000000..7fd66b53f70a
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-10.3.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-10.4.1.ebuild b/app-emulation/wine-mono/wine-mono-10.4.1.ebuild
new file mode 100644
index 000000000000..7fd66b53f70a
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-10.4.1.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-11.0.0.ebuild b/app-emulation/wine-mono/wine-mono-11.0.0.ebuild
new file mode 100644
index 000000000000..443ea8cff9cb
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-11.0.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-11.1.0.ebuild b/app-emulation/wine-mono/wine-mono-11.1.0.ebuild
new file mode 100644
index 000000000000..443ea8cff9cb
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-11.1.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-7.4.0.ebuild b/app-emulation/wine-mono/wine-mono-7.4.0.ebuild
new file mode 100644
index 000000000000..a422ad716d3b
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-7.4.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-8.1.0.ebuild b/app-emulation/wine-mono/wine-mono-8.1.0.ebuild
new file mode 100644
index 000000000000..a422ad716d3b
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-8.1.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-9.3.1.ebuild b/app-emulation/wine-mono/wine-mono-9.3.1.ebuild
new file mode 100644
index 000000000000..5addc85e06a4
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-9.3.1.ebuild
@@ -0,0 +1,34 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+# (this release wasn't uploaded to winehq/gitlab and is only on github)
+SRC_URI="
+ shared? ( https://github.com/madewokherd/wine-mono/releases/download/${P}/${P}-x86.tar.xz )
+ !shared? ( https://github.com/madewokherd/wine-mono/releases/download/${P}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-mono/wine-mono-9.4.0.ebuild b/app-emulation/wine-mono/wine-mono-9.4.0.ebuild
new file mode 100644
index 000000000000..a422ad716d3b
--- /dev/null
+++ b/app-emulation/wine-mono/wine-mono-9.4.0.ebuild
@@ -0,0 +1,33 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DESCRIPTION="Replacement for the .NET runtime and class libraries in Wine"
+HOMEPAGE="
+ https://gitlab.winehq.org/wine/wine/-/wikis/Wine-Mono/
+ https://gitlab.winehq.org/mono/wine-mono/
+"
+SRC_URI="
+ shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.tar.xz )
+ !shared? ( https://dl.winehq.org/wine/${PN}/${PV}/${P}-x86.msi )
+"
+S=${WORKDIR}
+
+LICENSE="BSD-2 GPL-2 LGPL-2.1 MIT MPL-1.1"
+SLOT="${PV}"
+# keep straight-to-stable, builds nothing and the stabilization process
+# is wasteful and annoying for users using ~testing wine in stable
+# (wine also pins to specific versions, so stable won't use latest)
+KEYWORDS="amd64 x86"
+IUSE="+shared"
+
+src_install() {
+ insinto /usr/share/wine/mono
+
+ if use shared; then
+ doins -r ${P}
+ else
+ doins "${DISTDIR}"/${P}-x86.msi
+ fi
+}
diff --git a/app-emulation/wine-proton/Manifest b/app-emulation/wine-proton/Manifest
new file mode 100644
index 000000000000..ea32e6a846ca
--- /dev/null
+++ b/app-emulation/wine-proton/Manifest
@@ -0,0 +1,7 @@
+DIST proton-wine-10.0-3.tar.gz 52629264 BLAKE2B 14edd27b736e3c980d8b92ed8e9c1f3c07084431ffbc9253ddf3b800fa47ac0b21ef22e402decb6e3ad505574b9b37aa4ac1fe8e210f9df2d2f0ca7762326571 SHA512 0140fcb4a145542d4163ad2a25fb0da8d361b202e4d77bad852e533487524d0abe772e38feec91ca0b14bad7c6ac8e44282d776adf31b9bcba1d95d31b5551b8
+DIST proton-wine-10.0-4.tar.gz 52736432 BLAKE2B 71986c2362934879d5d9a74ea13e29593240a9e7a5dc6b9a9ffdfdaf528be4dec2ac34500afcd525fa256d2fed2efc1e3cb6bd7c5f51b4e4249d714ca9bbc3ef SHA512 e74aece7dad25fd1e8041d370718bfd0dd695469c7b74d95209ac6030d0fb30221d1ccce7c8483dddb097c0f1b2df768452de79fd4041c46dd3695934816dd2a
+DIST proton-wine-11.0-1-beta1.tar.gz 53902344 BLAKE2B 759d53ac8936ff237d6e232a9f2a37603cebd7fc4932a615c16dea14a8b90d25788fc73f897fa28371390d01ba1995df5d1f47d201213300a478f8e4eb746113 SHA512 e63df1fce8cae09e82c626a172cc58625e027da1247eab571eebd8798fece028ae606573ab73720ca087078d67c0403e27b91e94cddd62710affda4b3de4265d
+DIST proton-wine-11.0-1-beta2.tar.gz 53908987 BLAKE2B 9ce53b6fc0a4cb9f09e1e1e5db8a7109ddf400cfa229d1af0884f901a42260fc7e9916056c99e6e8cb784ef052838a3bf73a83465811a893568a044ae936d114 SHA512 94d4a6b0a8c709619f3653ca50a393c2f84bd91fa7deaaab8ec6391bf10c71657db460058ca83974e8eb571e2acb968b2a130134bffa736897b42f1c92524066
+DIST proton-wine-11.0-1-beta5.tar.gz 53906737 BLAKE2B ddaae0ab842eb46b3b9f2d482a3a6d447c23d48edc89262ea9b4457f9c0ad5f67cdf08c8dc90323a02766ff6260ede5d3ed4ee743825a8d292f0dcfd68814ec6 SHA512 e5849b3b8a22d010fd11f34902d882a5bab2b6eceb5c59d9c0972dc3367c24b8b1da1fd2ee024b46808163f0b8e33930e55ca675a9e08fd9d2e6c405e8d496f3
+DIST proton-wine-8.0-5c.tar.gz 48710071 BLAKE2B 99627baea6fb3d51231aa1e75a2734c3c1baba88326baf15b3d421d57a00472d25ba51c2140b51152c8aeae7dd240d3d77bb0d8835aa7eb3b745a51be120f8bb SHA512 0cf98d4e67866e55cc8cd5ea8da0d76aee8e37b130b3cbca604083c913e98ddf9038ecd6f9761d2e11443e282b372977400e251456c6d40e1365210c7578234d
+DIST proton-wine-9.0-4.tar.gz 49339922 BLAKE2B 914ca093ac288c26400e4eeb2ea33943fc8ad89052aa7c97b5c44286dc175745720455d65163baa90b0d0271eb8028549315a3e8095b91947db2bd96c6fc4852 SHA512 e061f0a55b25493f67ca3add8c7e41020bb57cb15e8fb4fdf3c23f0cab2d00b703c90fbcf0dc1ca8b67e1726a76cee910e9ea6f567c88bc6c520dd6c9dbb75e9
diff --git a/app-emulation/wine-proton/files/README.gentoo b/app-emulation/wine-proton/files/README.gentoo
new file mode 100644
index 000000000000..f0a78f7b2db8
--- /dev/null
+++ b/app-emulation/wine-proton/files/README.gentoo
@@ -0,0 +1,51 @@
+While this version of Wine is usable independently, it does contain some
+Steam-oriented changes that may be unexpected. Notably C:\users\steamuser
+is used rather than C:\users\<user-name> and it may be necessary to move
+files if converting from non-proton Wine prefixes (like games' save files).
+
+To keep a low maintenance cost, these changes are not reverted in Gentoo
+with the exception of re-enabling winemenubuilder for desktop entries.
+
+Also, given this Wine variant is oriented toward running games, some
+normally unrelated features (e.g. cups) may not have real upstream
+(Valve) support. Because of this, some are left always disabled.
+
+If needed, use other variants for the more expected Wine behavior.
+
+---
+
+Given Proton is not creating the Wine prefixes, some features are not
+enabled by default and PROTON_* variables to control them are unrecognized.
+
+To (optionally) setup some notable defaults of Proton:
+- export WINEFSYNC=1
+. Often improves performance for CPU-bound applications.
+. Note: in >=wine-proton-11, that is *not* necessary if /dev/ntsync
+. exists, it will be used by default (unless PROTON_NO_NTSYNC=1)
+. as a superior alternative to WINEFSYNC. Requires CONFIG_NTSYNC in
+. the Linux kernel and, if built as a module, will need a file
+. containing ntsync in /etc/modules-load.d/ to be auto-loaded.
+- export WINE_LARGE_ADDRESS_AWARE=1
+. Allows 32bit applications to access more memory, notably helps
+. prevent crashes on memory-heavy applications while using dxvk below.
+- WINEPREFIX=/path/to setup_dxvk.sh install --symlink
+. Vulkan-based d3d9/10/11 that often provides both better performance
+. and compatibility (strongly recommended).
+. >Requires app-emulation/dxvk
+- WINEPREFIX=/path/to setup_vkd3d_proton.sh install --symlink
+. Like above, but for d3d12. Wine also supports vkd3d as-is but this
+. is the modified fork used by Proton (may or may not be better).
+. Intended to work with dxvk's dxgi.dll so, if used, install both.
+. >Requires app-emulation/vkd3d-proton
+
+For some applications it may be better to disable these or do other
+workarounds, see https://www.protondb.com/ for specific information.
+
+Many other proton-specific improvements / fixes are always enabled, and
+some game-specific quirks are auto-enabled as needed (can see a few from
+running winecfg).
+
+---
+
+If have other Wine variants installed, remember to either use `eselect wine`
+to select this variant or call it as wine-proton.
diff --git a/app-emulation/wine-proton/files/wine-proton-11.0.1-restore-menubuilder.patch b/app-emulation/wine-proton/files/wine-proton-11.0.1-restore-menubuilder.patch
new file mode 100644
index 000000000000..fd9bc28220f3
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-11.0.1-restore-menubuilder.patch
@@ -0,0 +1,8 @@
+Without Steam there is no launcher by default, users with more custom
+setups may not need this but others will want access to desktop entries.
+--- a/loader/wine.inf.in
++++ b/loader/wine.inf.in
+@@ -1160,2 +1160,3 @@
+ [Services]
++HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
+ HKLM,"System\CurrentControlSet\Services\Dnscache\Parameters",,16
diff --git a/app-emulation/wine-proton/files/wine-proton-7.0.4-musl.patch b/app-emulation/wine-proton/files/wine-proton-7.0.4-musl.patch
new file mode 100644
index 000000000000..0776df12f241
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-7.0.4-musl.patch
@@ -0,0 +1,17 @@
+Wrongly assumes that futex_waitv is missing if no glibc-only __NR_futex_waitv.
+https://bugs.gentoo.org/868747
+--- a/configure.ac
++++ b/configure.ac
+@@ -2153,2 +2153,5 @@
+
++dnl Check for futex_waitv structure members
++AC_CHECK_MEMBERS(struct futex_waitv.val,,,[#include <linux/futex.h>])
++
+ dnl Check for socket structure members
+--- a/dlls/ntdll/unix/fsync.c
++++ b/dlls/ntdll/unix/fsync.c
+@@ -67,2 +67,4 @@
+ # define __NR_futex_waitv 449
++#endif
++#ifndef HAVE_STRUCT_FUTEX_WAITV_VAL
+ # define FUTEX_32 2
diff --git a/app-emulation/wine-proton/files/wine-proton-7.0.4-noexecstack.patch b/app-emulation/wine-proton/files/wine-proton-7.0.4-noexecstack.patch
new file mode 100644
index 000000000000..92aa0b4b5c5d
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-7.0.4-noexecstack.patch
@@ -0,0 +1,7 @@
+Also write GNU-stack note on dummy files used for stub libraries.
+--- a/tools/winebuild/import.c
++++ b/tools/winebuild/import.c
+@@ -1675,2 +1675,3 @@
+ output( "\t.text\n" );
++ output_gnu_stack_note();
+ }
diff --git a/app-emulation/wine-proton/files/wine-proton-8.0.1c-unwind.patch b/app-emulation/wine-proton/files/wine-proton-8.0.1c-unwind.patch
new file mode 100644
index 000000000000..50fc5be57abc
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-8.0.1c-unwind.patch
@@ -0,0 +1,36 @@
+Fix build with llvm-libunwind, and also fix for non-llvm libunwind
+when using clang+bfd given clang doesn't have _Unwind_Find_FDE in
+its rtlib and expects it from llvm-libunwind.
+
+The _CONFIG_H_ check is for <llvm-libunwind-15 (adds _VERSION).
+--- a/dlls/ntdll/unix/dwarf.h
++++ b/dlls/ntdll/unix/dwarf.h
+@@ -257,5 +257,7 @@
+ };
+
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ extern const struct dwarf_fde *_Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
++#endif
+
+ static unsigned char dwarf_get_u1( const unsigned char **p )
+--- a/dlls/ntdll/unix/signal_x86_64.c
++++ b/dlls/ntdll/unix/signal_x86_64.c
+@@ -648,5 +648,5 @@
+ int rc;
+
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__)
+ rc = unw_getcontext( &unw_context );
+ if (rc == UNW_ESUCCESS)
+@@ -774,4 +774,5 @@
+ CONTEXT *context = params->context;
+ struct dwarf_eh_bases bases;
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ const struct dwarf_fde *fde = _Unwind_Find_FDE( (void *)(context->Rip - 1), &bases );
+
+@@ -779,4 +780,5 @@
+ return dwarf_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context, fde,
+ &bases, &dispatch->LanguageHandler, &dispatch->HandlerData );
++#endif
+ #ifdef HAVE_LIBUNWIND
+ return libunwind_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context,
diff --git a/app-emulation/wine-proton/files/wine-proton-8.0.4-restore-menubuilder.patch b/app-emulation/wine-proton/files/wine-proton-8.0.4-restore-menubuilder.patch
new file mode 100644
index 000000000000..f278a2cbc264
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-8.0.4-restore-menubuilder.patch
@@ -0,0 +1,8 @@
+Without Steam there is no launcher by default, users with more custom
+setups may not need this but others will want access to desktop entries.
+--- a/loader/wine.inf.in
++++ b/loader/wine.inf.in
+@@ -5630,2 +5630,3 @@
+ [Services]
++HKLM,%CurrentVersion%\RunServices,"winemenubuilder",2,"%11%\winemenubuilder.exe -a -r"
+ HKLM,"System\CurrentControlSet\Services\Eventlog\Application",,16
diff --git a/app-emulation/wine-proton/files/wine-proton-8.0.5c-vulkan-libm.patch b/app-emulation/wine-proton/files/wine-proton-8.0.5c-vulkan-libm.patch
new file mode 100644
index 000000000000..c3d9794fbbfe
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-8.0.5c-vulkan-libm.patch
@@ -0,0 +1,12 @@
+Valve's patches add use of "ceil" without using libm, it works
+by accident with -O2 but fails with -Os.
+
+ld: dlls/winevulkan/vulkan.o: in function `fshack_vk_queue_present':
+vulkan.c:(.text+0x12f46): undefined reference to `ceil'
+--- a/dlls/winevulkan/Makefile.in
++++ b/dlls/winevulkan/Makefile.in
+@@ -4,3 +4,3 @@
+ IMPORTS = user32 gdi32 advapi32 setupapi win32u
+-UNIX_LIBS = -lwin32u $(PTHREAD_LIBS)
++UNIX_LIBS = -lm -lwin32u $(PTHREAD_LIBS)
+
diff --git a/app-emulation/wine-proton/files/wine-proton-9.0-rpath.patch b/app-emulation/wine-proton/files/wine-proton-9.0-rpath.patch
new file mode 100644
index 000000000000..78e4393d390d
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-9.0-rpath.patch
@@ -0,0 +1,14 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -813,8 +813,11 @@
+ ;;
+ esac
+ ;;
+ esac
++
++ # do this at the end because it needs double dollar for makefile
++ WINE_TRY_CFLAGS([-Wl,-rpath,\\\$ORIGIN],[UNIXLDFLAGS="$UNIXLDFLAGS '-Wl,-rpath,\$\$ORIGIN'"])
+ ;;
+ esac
+
+ enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
diff --git a/app-emulation/wine-proton/files/wine-proton-9.0.4-binutils2.44.patch b/app-emulation/wine-proton/files/wine-proton-9.0.4-binutils2.44.patch
new file mode 100644
index 000000000000..c0d4ef6f5287
--- /dev/null
+++ b/app-emulation/wine-proton/files/wine-proton-9.0.4-binutils2.44.patch
@@ -0,0 +1,105 @@
+Note that this is only an issue when using mingw (PE) binutils-2.44,
+host (ELF) binutils-2.44 has no impact on this and, before this patch,
+using 2.44 could only happen with off-by-default USE=crossdev-mingw.
+
+https://bugs.winehq.org/show_bug.cgi?id=57819
+https://sourceware.org/PR32675
+https://gitlab.winehq.org/wine/wine/-/merge_requests/7328
+--- a/dlls/ntdll/loader.c
++++ b/dlls/ntdll/loader.c
+@@ -4047,5 +4047,5 @@
+ NTSTATUS nts;
+ FARPROC fp;
+- DWORD id;
++ INT_PTR id;
+
+ TRACE( "(%p, %p, %p, %p, %p, 0x%08lx)\n", base, desc, dllhook, syshook, addr, flags );
+--- a/tools/winebuild/import.c
++++ b/tools/winebuild/import.c
+@@ -1514,4 +1514,14 @@
+ }
+
++static void output_import_section( int index, int is_delay )
++{
++ if (!is_delay)
++ output( "\n\t.section .idata$%d\n", index );
++ else if (index == 5)
++ output( "\n\t.section .data$didat%d\n", index );
++ else
++ output( "\n\t.section .rdata$didat%d\n", index );
++}
++
+ /* create a Windows-style import library */
+ static void build_windows_import_lib( const char *lib_name, DLLSPEC *spec, struct strarray files )
+@@ -1633,18 +1643,18 @@
+ output( "\t.long 0\n" ); /* TimeDateStamp */
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* FirstThunk tail */
+ output( ".L__wine_import_addrs:\n" );
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* OriginalFirstThunk tail */
+ output( ".L__wine_import_names:\n" );
+
+ /* required to avoid internal linker errors with some binutils versions */
+- output( "\n\t.section .idata$2\n" );
++ output_import_section( 2, is_delay );
+ }
+ else
+ {
+- output( "\n\t.section .idata$2\n" );
++ output_import_section( 2, is_delay );
+ output( "%s\n", asm_globl( import_desc ) );
+ output_rva( ".L__wine_import_names" ); /* OriginalFirstThunk */
+@@ -1654,8 +1664,8 @@
+ output_rva( ".L__wine_import_addrs" ); /* FirstThunk */
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( ".L__wine_import_names:\n" ); /* OriginalFirstThunk head */
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( ".L__wine_import_addrs:\n" ); /* FirstThunk head */
+ }
+@@ -1668,9 +1678,9 @@
+ new_output_as_file();
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* OriginalFirstThunk tail */
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* FirstThunk tail */
+- output( "\n\t.section .idata$7\n" );
++ output_import_section( 7, is_delay );
+ output( "%s\n", asm_globl( import_name ) );
+ output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->file_name );
+@@ -1763,8 +1773,8 @@
+ }
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output_thunk_rva( by_name ? -1 : odp->ordinal, ".L__wine_import_name" );
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "%s\n", asm_globl( imp_name ) );
+ if (is_delay)
+@@ -1775,5 +1785,5 @@
+ if (by_name)
+ {
+- output( "\n\t.section .idata$6\n" );
++ output_import_section( 6, is_delay );
+ output( ".L__wine_import_name:\n" );
+ output( "\t.short %d\n", odp->hint );
+@@ -1782,5 +1792,5 @@
+
+ /* reference head object to always pull its sections */
+- output( "\n\t.section .idata$7\n" );
++ output_import_section( 7, is_delay );
+ output_rva( "%s", asm_name( import_desc ) );
+
diff --git a/app-emulation/wine-proton/metadata.xml b/app-emulation/wine-proton/metadata.xml
new file mode 100644
index 000000000000..02edb2c11c4d
--- /dev/null
+++ b/app-emulation/wine-proton/metadata.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ionen@gentoo.org</email>
+ <name>Ionen Wolkens</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <use>
+ <flag name="arm64ec">Enable support for running x86_64 applications on arm64 via binary translation</flag>
+ <flag name="crossdev-mingw">
+ Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+ <pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up
+ and is mostly unsupported, try disabling if have issues)
+ </flag>
+ <flag name="gecko">Enable mshtml support using <pkg>app-emulation/wine-gecko</pkg>
+ </flag>
+ <flag name="mingw">Build PE files using <pkg>dev-util/mingw64-toolchain</pkg> (more tested) rather than <pkg>llvm-core/clang</pkg> (newer)</flag>
+ <flag name="mono">Enable .NET support using <pkg>app-emulation/wine-mono</pkg>
+ </flag>
+ <flag name="perl">Install helpers that require perl (winedump/winemaker)</flag>
+ <flag name="sdl">Enable gamepad support using <pkg>media-libs/libsdl2</pkg>
+ </flag>
+ <flag name="wow64">
+ Enable the "new" wow64 mode that allows running 32bit
+ applications without 32bit ELF multilib by mapping to
+ 64bit calls. Generally works well with wine-11.0 or
+ newer, but may or may not have a small perforamce
+ impact or other issues. If USE=mingw is set, still need
+ the default abi_x86_32 set on
+ <pkg>dev-util/mingw64-toolchain</pkg> but that can be
+ done even with /no-multilib/ profiles.
+
+ This can also be enabled on arm64 to allow running x86
+ applications via binary translation.
+ </flag>
+ </use>
+ <upstream>
+ <changelog>https://github.com/ValveSoftware/Proton/wiki/Changelog</changelog>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-proton/wine-proton-10.0.3.ebuild b/app-emulation/wine-proton/wine-proton-10.0.3.ebuild
new file mode 100644
index 000000000000..2c08cd988268
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-10.0.3.ebuild
@@ -0,0 +1,256 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.0.0
+WINE_PV=$(ver_rs 2 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu +xcomposite xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xcomposite? ( x11-libs/libXcomposite[${WINE_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ sys-kernel/linux-headers
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-8.0.4-restore-menubuilder.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-9.0.4-binutils2.44.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+}
diff --git a/app-emulation/wine-proton/wine-proton-10.0.4.ebuild b/app-emulation/wine-proton/wine-proton-10.0.4.ebuild
new file mode 100644
index 000000000000..0d312dbf7866
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-10.0.4.ebuild
@@ -0,0 +1,256 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_PV=$(ver_rs 2 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ sys-kernel/linux-headers
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-8.0.4-restore-menubuilder.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-9.0.4-binutils2.44.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ --without-vosk # unpackaged, file a bug if you need this
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+}
diff --git a/app-emulation/wine-proton/wine-proton-11.0.1_beta1.ebuild b/app-emulation/wine-proton/wine-proton-11.0.1_beta1.ebuild
new file mode 100644
index 000000000000..3a1217305ed3
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-11.0.1_beta1.ebuild
@@ -0,0 +1,269 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit eapi9-ver optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_PV=$(ver_rs 2-3 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine.*-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-11.0.1-restore-menubuilder.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-hwloc
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ --without-vosk # unpackaged, file a bug if you need this
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+
+ if ver_replacing -lt 11; then
+ elog
+ elog "Note that >=${PN}-11 now has ntsync support that can be used"
+ elog "rather than setting WINEFSYNC=1. It is used by default if /dev/ntsync"
+ elog "exists unless PROTON_NO_NTSYNC=1 is set. Requires CONFIG_NTSYNC in"
+ elog "the kernel and, if built as a module, will need a file containing"
+ elog "ntsync in ${EROOT}/etc/modules-load.d/ to be auto-loaded."
+ fi
+}
diff --git a/app-emulation/wine-proton/wine-proton-11.0.1_beta2.ebuild b/app-emulation/wine-proton/wine-proton-11.0.1_beta2.ebuild
new file mode 100644
index 000000000000..3a1217305ed3
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-11.0.1_beta2.ebuild
@@ -0,0 +1,269 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit eapi9-ver optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_PV=$(ver_rs 2-3 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine.*-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-11.0.1-restore-menubuilder.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-hwloc
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ --without-vosk # unpackaged, file a bug if you need this
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+
+ if ver_replacing -lt 11; then
+ elog
+ elog "Note that >=${PN}-11 now has ntsync support that can be used"
+ elog "rather than setting WINEFSYNC=1. It is used by default if /dev/ntsync"
+ elog "exists unless PROTON_NO_NTSYNC=1 is set. Requires CONFIG_NTSYNC in"
+ elog "the kernel and, if built as a module, will need a file containing"
+ elog "ntsync in ${EROOT}/etc/modules-load.d/ to be auto-loaded."
+ fi
+}
diff --git a/app-emulation/wine-proton/wine-proton-11.0.1_beta5.ebuild b/app-emulation/wine-proton/wine-proton-11.0.1_beta5.ebuild
new file mode 100644
index 000000000000..3a1217305ed3
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-11.0.1_beta5.ebuild
@@ -0,0 +1,269 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit eapi9-ver optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_PV=$(ver_rs 2-3 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine.*-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-11.0.1-restore-menubuilder.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-hwloc
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ --without-vosk # unpackaged, file a bug if you need this
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+
+ if ver_replacing -lt 11; then
+ elog
+ elog "Note that >=${PN}-11 now has ntsync support that can be used"
+ elog "rather than setting WINEFSYNC=1. It is used by default if /dev/ntsync"
+ elog "exists unless PROTON_NO_NTSYNC=1 is set. Requires CONFIG_NTSYNC in"
+ elog "the kernel and, if built as a module, will need a file containing"
+ elog "ntsync in ${EROOT}/etc/modules-load.d/ to be auto-loaded."
+ fi
+}
diff --git a/app-emulation/wine-proton/wine-proton-8.0.5c.ebuild b/app-emulation/wine-proton/wine-proton-8.0.5c.ebuild
new file mode 100644
index 000000000000..4d2dc332f54f
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-8.0.5c.ebuild
@@ -0,0 +1,421 @@
+# Copyright 2022-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+PYTHON_COMPAT=( python3_{13..14} )
+inherit autotools flag-o-matic multilib multilib-build prefix
+inherit python-any-r1 readme.gentoo-r1 toolchain-funcs wrapper
+
+WINE_GECKO=2.47.3
+WINE_MONO=8.1.0
+WINE_PV=$(ver_rs 2 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S="${WORKDIR}/${PN}-wine-${WINE_PV}"
+ KEYWORDS="-* amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="LGPL-2.1+ BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff"
+SLOT="${PV}"
+IUSE="
+ +abi_x86_32 +abi_x86_64 +alsa crossdev-mingw custom-cflags +dbus
+ +fontconfig +gecko +gstreamer llvm-libunwind +mono nls perl
+ pulseaudio +sdl selinux +ssl +strip udev +unwind usb v4l
+ video_cards_amdgpu +xcomposite xinerama
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${MULTILIB_USEDEP}]
+ media-libs/freetype[${MULTILIB_USEDEP}]
+ media-libs/libglvnd[X,${MULTILIB_USEDEP}]
+ media-libs/vulkan-loader[X,${MULTILIB_USEDEP}]
+ x11-libs/libXcursor[${MULTILIB_USEDEP}]
+ x11-libs/libXfixes[${MULTILIB_USEDEP}]
+ x11-libs/libXi[${MULTILIB_USEDEP}]
+ x11-libs/libXrandr[${MULTILIB_USEDEP}]
+ x11-libs/libXrender[${MULTILIB_USEDEP}]
+ x11-libs/libXxf86vm[${MULTILIB_USEDEP}]
+ dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${MULTILIB_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${MULTILIB_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${MULTILIB_USEDEP}]
+ net-libs/gnutls:=[${MULTILIB_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${MULTILIB_USEDEP}] )
+ xcomposite? ( x11-libs/libXcomposite[${MULTILIB_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ x11-libs/libX11[${MULTILIB_USEDEP}]
+ x11-libs/libXext[${MULTILIB_USEDEP}]
+ alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${MULTILIB_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${MULTILIB_USEDEP}]
+ media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${MULTILIB_USEDEP}] )
+ udev? ( virtual/libudev:=[${MULTILIB_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${MULTILIB_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${MULTILIB_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${MULTILIB_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${MULTILIB_USEDEP}] )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? ( app-emulation/wine-gecko:${WINE_GECKO}[${MULTILIB_USEDEP}] )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${MULTILIB_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${MULTILIB_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${MULTILIB_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ sys-kernel/linux-headers
+ x11-base/xorg-proto
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/binutils
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ !crossdev-mingw? ( dev-util/mingw64-toolchain[${MULTILIB_USEDEP}] )
+"
+IDEPEND=">=app-eselect/eselect-wine-2"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-8.0.4-restore-menubuilder.patch
+ "${FILESDIR}"/${PN}-8.0.5c-vulkan-libm.patch
+ "${FILESDIR}"/${PN}-9.0.4-binutils2.44.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local mingw=-w64-mingw32
+ for mingw in $(usev abi_x86_64 x86_64${mingw}) $(usev abi_x86_32 i686${mingw}); do
+ if ! type -P ${mingw}-gcc >/dev/null; then
+ eerror "With USE=crossdev-mingw, you must prepare the MinGW toolchain"
+ eerror "yourself by installing sys-devel/crossdev then running:"
+ eerror
+ eerror " crossdev --target ${mingw}"
+ eerror
+ eerror "For more information, please see: https://wiki.gentoo.org/wiki/Mingw"
+ eerror "--> Note that mingw builds are default for ${PN} even without this USE."
+ die "USE=crossdev-mingw is enabled, but ${mingw}-gcc was not found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ # sanity check, bumping these has a history of oversights
+ local geckomono=$(sed -En '/^#define (GECKO|MONO)_VER/{s/[^0-9.]//gp}' \
+ dlls/appwiz.cpl/addons.c || die)
+ if [[ ${WINE_GECKO}$'\n'${WINE_MONO} != "${geckomono}" ]]; then
+ local gmfatal=
+ [[ ${PV} == *9999 ]] && gmfatal=nonfatal
+ ${gmfatal} die -n "gecko/mono mismatch in ebuild, has: " ${geckomono} " (please file a bug)"
+ fi
+
+ default
+
+ if tc-is-clang; then
+ # -mabi=ms was ignored by <clang:16 then turned error in :17
+ # and it still gets used in install phase despite --with-mingw,
+ # drop as a quick fix for now which hopefully should be safe
+ sed -i '/MSVCRTFLAGS=/s/-mabi=ms//' configure.ac || die
+
+ # note: this is kind-of best effort and ignores llvm slots, rather
+ # than do LLVM_SLOT it may(?) be better to force atomic-builtins
+ # then could drop this altogether in the future
+ if [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+ fi
+
+ # ensure .desktop calls this variant + slot
+ sed -i "/^Exec=/s/wine /${P} /" loader/wine.desktop || die
+
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ # datadir is not where wine-mono is installed, so prefixy alternate paths
+ hprefixify -w /get_mono_path/ dlls/mscoree/metahost.c
+
+ # always update for patches (including user's wrt #432348)
+ eautoreconf
+ tools/make_requests || die # perl
+ dlls/winevulkan/make_vulkan -x vk.xml || die # python, needed for proton's
+ # tip: if need more for user patches, with portage can e.g. do
+ # echo "post_src_prepare() { tools/make_specfiles || die; }" \
+ # > /etc/portage/env/app-emulation/wine-proton
+}
+
+src_configure() {
+ WINE_PREFIX=/usr/lib/${P}
+ WINE_DATADIR=/usr/share/${P}
+
+ local conf=(
+ --prefix="${EPREFIX}"${WINE_PREFIX}
+ --datadir="${EPREFIX}"${WINE_DATADIR}
+ --includedir="${EPREFIX}"/usr/include/${P}
+ --libdir="${EPREFIX}"${WINE_PREFIX}
+ --mandir="${EPREFIX}"${WINE_DATADIR}/man
+
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some major options that are typically needed by games either way
+ # TODO?: --without-mingw could make sense *if* using clang, assuming
+ # bug #912237 is resolved (consider when do USE=wow64 in proton-9)
+ --with-freetype
+ --with-mingw # needed by many, notably Blizzard titles
+ --with-opengl
+ --with-vulkan
+ --with-x
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-sane
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+ )
+
+ tc-ld-force-bfd # builds with non-bfd but broken at runtime (bug #867097)
+ filter-lto # build failure
+ filter-flags -Wl,--gc-sections # runtime issues (bug #931329)
+ use custom-cflags || strip-flags # can break in obscure ways at runtime
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # broken with gcc-15's c23 default (TODO: try w/o occasionally, bug #943849)
+ append-cflags -std=gnu17
+
+ # temporary workaround for tc-ld-force-bfd not yet enforcing with mold
+ # https://github.com/gentoo/gentoo/pull/28355
+ [[ $($(tc-getCC) ${LDFLAGS} -Wl,--version 2>/dev/null) == mold* ]] &&
+ append-ldflags -fuse-ld=bfd
+
+ # >=wine-proton-9 has proper fixes and builds with gcc-14, but would
+ # rather not have to worry about fixing old branches (bug #924486)
+ append-cflags $(test-flags-CC -Wno-error=incompatible-pointer-types)
+
+ # build using upstream's way (--with-wine64)
+ # order matters: configure+compile 64->32, install 32->64
+ local -i bits
+ for bits in $(usev abi_x86_64 64) $(usev abi_x86_32 32); do
+ (
+ einfo "Configuring ${PN} for ${bits}bits in ${WORKDIR}/build${bits} ..."
+
+ mkdir ../build${bits} || die
+ cd ../build${bits} || die
+
+ pe_arch=i386
+ if (( bits == 64 )); then
+ pe_arch=x86_64
+ : "${CROSSCC:=${CROSSCC_amd64:-x86_64-w64-mingw32-gcc}}"
+ conf+=( --enable-win64 )
+ elif use amd64; then
+ conf+=(
+ $(usev abi_x86_64 --with-wine64=../build64)
+ TARGETFLAGS=-m32 # for widl
+ )
+ # _setup is optional, but use over Wine's auto-detect (+#472038)
+ multilib_toolchain_setup x86
+ fi
+ : "${CROSSCC:=${CROSSCC_x86:-i686-w64-mingw32-gcc}}"
+
+ # CROSSCC is no longer recognized by Wine, but still use for now
+ # (future handling for CROSS* variables is subject to changes)
+ conf+=( ac_cv_prog_${pe_arch}_CC="${CROSSCC}" )
+
+ # use *FLAGS for mingw, but strip unsupported
+ : "${CROSSCFLAGS:=$(
+ # >=wine-7.21 <8.10's configure.ac does not pass -fno-strict when
+ # it should (can be removed when proton is rebased on >=8.10)
+ append-cflags -fno-strict-aliasing
+
+ filter-flags '-fstack-protector*' #870136
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*'
+
+ # -mavx with mingw-gcc has a history of obscure issues and
+ # disabling is seen as safer, e.g. `WINEARCH=win32 winecfg`
+ # crashes with -march=skylake >=wine-8.10, similar issues with
+ # znver4: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110273
+ append-cflags -mno-avx #912268
+
+ CC=${CROSSCC} test-flags-CC ${CFLAGS:--O2})}"
+ : "${CROSSLDFLAGS:=$(
+ filter-flags '-fuse-ld=*'
+ CC=${CROSSCC} test-flags-CCLD ${LDFLAGS})}"
+ export CROSS{C,LD}FLAGS
+
+ ECONF_SOURCE=${S} econf "${conf[@]}"
+ )
+ done
+}
+
+src_compile() {
+ use abi_x86_64 && emake -C ../build64 # do first
+ use abi_x86_32 && emake -C ../build32
+}
+
+src_install() {
+ use abi_x86_32 && emake DESTDIR="${D}" -C ../build32 install
+ use abi_x86_64 && emake DESTDIR="${D}" -C ../build64 install # do last
+
+ # symlink for plain 'wine' and install its man pages if 64bit-only #404331
+ if use abi_x86_64 && use !abi_x86_32; then
+ dosym wine64 ${WINE_PREFIX}/bin/wine
+ dosym wine64-preloader ${WINE_PREFIX}/bin/wine-preloader
+ local man
+ for man in ../build64/loader/wine.*man; do
+ : "${man##*/wine}"
+ : "${_%.*}"
+ insinto ${WINE_DATADIR}/man/${_:+${_#.}/}man1
+ newins ${man} wine.1
+ done
+ fi
+
+ use perl || rm "${ED}"${WINE_DATADIR}/man/man1/wine{dump,maker}.1 \
+ "${ED}"${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}} || die
+
+ # create variant wrappers for eselect-wine
+ local bin
+ for bin in "${ED}"${WINE_PREFIX}/bin/*; do
+ make_wrapper "${bin##*/}-${P#wine-}" "${bin#"${ED}"}"
+ done
+
+ # don't let portage try to strip PE files with the wrong
+ # strip executable and instead handle it here (saves ~120MB)
+ dostrip -x ${WINE_PREFIX}/wine/{i386,x86_64}-windows
+
+ if use strip; then
+ ebegin "Stripping Windows (PE) binaries"
+ find "${ED}"${WINE_PREFIX}/wine/*-windows -regex '.*\.\(a\|dll\|exe\)' \
+ -exec $(usex abi_x86_64 x86_64 i686)-w64-mingw32-strip --strip-unneeded {} +
+ eend ${?} || die
+ fi
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ if use abi_x86_32; then
+ # difficult to tell what is needed from here, but try to warn
+ if has_version 'x11-drivers/nvidia-drivers'; then
+ if has_version 'x11-drivers/nvidia-drivers[-abi_x86_32]'; then
+ ewarn "x11-drivers/nvidia-drivers is installed but is built without"
+ ewarn "USE=abi_x86_32 (ABI_X86=32), hardware acceleration with 32bit"
+ ewarn "applications under ${PN} will likely not be usable."
+ ewarn "Multi-card setups may need this on media-libs/mesa as well."
+ fi
+ elif has_version 'media-libs/mesa[-abi_x86_32]'; then
+ ewarn "media-libs/mesa seems to be in use but is built without"
+ ewarn "USE=abi_x86_32 (ABI_X86=32), hardware acceleration with 32bit"
+ ewarn "applications under ${PN} will likely not be usable."
+ fi
+ fi
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+
+ eselect wine update --if-unset || die
+}
+
+pkg_postrm() {
+ if has_version -b app-eselect/eselect-wine; then
+ eselect wine update --if-unset || die
+ fi
+}
diff --git a/app-emulation/wine-proton/wine-proton-9.0.4-r2.ebuild b/app-emulation/wine-proton/wine-proton-9.0.4-r2.ebuild
new file mode 100644
index 000000000000..7f60cc35db75
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-9.0.4-r2.ebuild
@@ -0,0 +1,235 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=9.3.1
+WINE_PV=$(ver_rs 2 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="LGPL-2.1+ BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff"
+SLOT="${PV}"
+IUSE="
+ +alsa crossdev-mingw +dbus +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l video_cards_amdgpu +xcomposite xinerama
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X,${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ xcomposite? ( x11-libs/libXcomposite[${WINE_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ sys-kernel/linux-headers
+ x11-base/xorg-proto
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-8.0.4-restore-menubuilder.patch
+ "${FILESDIR}"/${PN}-8.0.5c-vulkan-libm.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-9.0.4-binutils2.44.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some major options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+ --with-x
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_lib_soname_odbc=
+
+ # afaik wayland support in 9.0.x currently cannot do opengl/vulkan
+ # yet making it mostly pointless for a gaming-oriented build
+ # (IUSE="X wayland" will likely be added in wine-proton-10)
+ --without-wayland
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+}
diff --git a/app-emulation/wine-proton/wine-proton-9999.ebuild b/app-emulation/wine-proton/wine-proton-9999.ebuild
new file mode 100644
index 000000000000..7f80f5085ff5
--- /dev/null
+++ b/app-emulation/wine-proton/wine-proton-9999.ebuild
@@ -0,0 +1,269 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit eapi9-ver optfeature python-any-r1 readme.gentoo-r1 toolchain-funcs wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_PV=$(ver_rs 2-3 -)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://github.com/ValveSoftware/wine.git"
+ EGIT_BRANCH="bleeding-edge"
+else
+ SRC_URI="https://github.com/ValveSoftware/wine/archive/refs/tags/proton-wine-${WINE_PV}.tar.gz"
+ S=${WORKDIR}/${PN}-wine-${WINE_PV}
+ KEYWORDS="-* ~amd64 ~x86"
+fi
+
+DESCRIPTION="Valve Software's fork of Wine"
+HOMEPAGE="https://github.com/ValveSoftware/wine/"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa crossdev-mingw +dbus ffmpeg +fontconfig +gecko +gstreamer
+ llvm-libunwind +mono nls perl pulseaudio +sdl selinux +ssl udev
+ +unwind usb v4l wayland video_cards_amdgpu xinerama
+"
+# headless is not really supported here, and udev needs sdl due to Valve's
+# changes (bug #959263), use normal wine instead if need to avoid these
+REQUIRED_USE="
+ || ( X wayland )
+ udev? ( sdl )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ dev-libs/libgcrypt:=[${WINE_USEDEP}]
+ media-libs/freetype[${WINE_USEDEP}]
+ media-libs/libglvnd[X?,${WINE_USEDEP}]
+ media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}]
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? (
+ dev-libs/gmp:=[${WINE_USEDEP}]
+ net-libs/gnutls:=[${WINE_USEDEP}]
+ )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[opengl,${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ video_cards_amdgpu? ( x11-libs/libdrm[video_cards_amdgpu,${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? (
+ media-libs/gst-plugins-bad:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-libav:1.0[${WINE_USEDEP}]
+ media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}]
+ )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ || (
+ sys-devel/gcc:*
+ llvm-runtimes/compiler-rt:*[atomic-builtins(-)]
+ )
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-lang/perl
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900332)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine.*-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0.4-musl.patch
+ "${FILESDIR}"/${PN}-7.0.4-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.0.1c-unwind.patch
+ "${FILESDIR}"/${PN}-9.0-rpath.patch
+ "${FILESDIR}"/${PN}-11.0.1-restore-menubuilder.patch
+)
+
+src_prepare() {
+ # similarly to staging, append to `wine --version` for identification
+ sed -i "s/wine_build[^1]*1/& (Proton-${WINE_PV})/" configure.ac || die
+
+ wine_src_prepare
+
+ # this is kind-of best effort and ignores llvm slots, ideally
+ # atomic-builtins should be package.use.force then could drop this
+ if tc-is-clang && [[ $(tc-get-c-rtlib) == compiler-rt ]] &&
+ has_version -d 'llvm-runtimes/compiler-rt[-atomic-builtins(-)]'
+ then
+ # needed by Valve's fsync patches if using compiler-rt w/o atomics
+ sed -e '/^UNIX_LIBS.*=/s/$/ -latomic/' \
+ -i dlls/{ntdll,winevulkan}/Makefile.in || die
+ fi
+
+ # proton variant also needs specfiles and vulkan
+ tools/make_specfiles || die # perl
+ dlls/winevulkan/make_vulkan -X video.xml -x vk.xml || die # python
+}
+
+src_configure() {
+ local wineconfargs=(
+ # upstream (Valve) doesn't really support misc configurations (e.g.
+ # adds vulkan code not always guarded by --with-vulkan), so force
+ # some options that are typically needed by games either way
+ --with-freetype
+ --with-opengl
+ --with-vulkan
+
+ # ...and disable most options unimportant for games and unused by
+ # Proton rather than expose as volatile USEs with little support
+ --without-capi
+ --without-cups
+ --without-gphoto
+ --without-gssapi
+ --without-hwloc
+ --without-krb5
+ --without-netapi
+ --without-opencl
+ --without-pcap
+ --without-pcsclite
+ --without-sane
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ac_cv_lib_soname_odbc=
+
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ $(use_enable video_cards_amdgpu amd_ags_x64)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gstreamer)
+ $(use_with nls gettext)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pulseaudio pulse)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ --without-piper # unpackaged, for tts but unusable without steam
+ --without-vosk # unpackaged, file a bug if you need this
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+ readme.gentoo_create_doc
+}
+
+pkg_preinst() {
+ has_version ${CATEGORY}/${PN} && WINE_HAD_ANY_SLOT=
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ [[ -v WINE_HAD_ANY_SLOT ]] || readme.gentoo_print_elog
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+
+ ewarn
+ ewarn "Warning: please consider ${PN} provided as-is without real"
+ ewarn "support. Upstream does not want bug reports unless can reproduce"
+ ewarn "with real Steam+Proton, and Gentoo is largely unable to help"
+ ewarn "unless it is a build/packaging issue. So, if need support, try"
+ ewarn "normal Wine or Proton instead."
+
+ if ver_replacing -lt 11; then
+ elog
+ elog "Note that >=${PN}-11 now has ntsync support that can be used"
+ elog "rather than setting WINEFSYNC=1. It is used by default if /dev/ntsync"
+ elog "exists unless PROTON_NO_NTSYNC=1 is set. Requires CONFIG_NTSYNC in"
+ elog "the kernel and, if built as a module, will need a file containing"
+ elog "ntsync in ${EROOT}/etc/modules-load.d/ to be auto-loaded."
+ fi
+}
diff --git a/app-emulation/wine-staging/Manifest b/app-emulation/wine-staging/Manifest
new file mode 100644
index 000000000000..5827b1d583aa
--- /dev/null
+++ b/app-emulation/wine-staging/Manifest
@@ -0,0 +1,8 @@
+DIST wine-11.0.tar.xz 33172240 BLAKE2B 2e4ef52f53e80c04bf8fc69345632db05e2ade00b8b5e485505e0790717e42f5e2568279565d6bf4edc2767b7a4eed3116914e54026fc4f06067bbf73b97a101 SHA512 a2c3db14f8cf0d19927466805c8f17c68ee7e93d1196d1162dd2279af497c21ec611a63f7a9de59953bbdfdb44c87d7bf55373c6533224a5d54e434c29428d1b
+DIST wine-11.10.tar.xz 45603064 BLAKE2B 3885760203ff937823e599ec0ffc25484ac39f2dd1169c47e09051df7db9329e5009bc6c3b9d040a05d0f21911cb2da73e54bd2d9e16218aeaba758be807cc75 SHA512 fd1eeac9b2f2fb14edc1d21795ebb29c49be0333493357481db5eca8de9681de3f07fbf4a6876a73ab2ab5369f545d9cf59a6f51f0ee29373ce4c12f76c24679
+DIST wine-11.8.tar.xz 43789212 BLAKE2B e83e6571bdb09ca46d4de99fd32e5a913deb4c19b9fea0f9c1f318ad14f7718d1bee8490183e405c70fd5303e8df1738e204832b524076e1d0cd44bba1f4a24f SHA512 ca657cf23d0c7a10f07d9eca0938ab182e85b012a38f151c9a7fb6681dd2e93aea77bb14320e99b17c58d30b848dc56a757f5dd0124782d3610589bc365d3ad4
+DIST wine-11.9.tar.xz 45515640 BLAKE2B b808587d57554faad6c5d61a9b5560ed2223c217a18b7135e4c44b018b826c147ed9403758b7690f5a92f35658232068b3f289ec63ae608e522a6f9722fb4d90 SHA512 b76d8eb53a5145180b3ec4b25958dc4b7dcf7ef9918decfafb3afadb38a71919c1a1fdf2fc54a883830bb6aefd9da9e0e223fd3d0874c794c53d4bf739632e38
+DIST wine-staging-11.0.tar.gz 9323019 BLAKE2B 2d1073205f1f9b5cef5f05445b57f4865dc2290302375f7295855b3200b3039f4eeee49f4c2e4b4e4c85ea6603548d9d4de9825d0f6db62913545e5fc3d7f587 SHA512 27eecce0cc1974e97d2aaffc0bf5a5d114f5fd8d3d6a349d9f984058a316b6654dd07bc2223c38df16fd2862f59aa79518d2d109ea0ac41c957144377ddd39a7
+DIST wine-staging-11.10.tar.gz 9259352 BLAKE2B 3b2bd846c23c533c5113c11fbfcf63faa79c707b2b0319e8af796f7cf7094df06265f1beacf0697e8422f5b3092790d678b1d094a859fbc3b416752f048cb754 SHA512 c25d246223511c6be30a199dccf35125236612910f52607ca32090c74c69c5f4c6e7c2500fdfa90a2a063b6556602641c10805edd594bc3a4e993084c0f6c788
+DIST wine-staging-11.8.tar.gz 9321144 BLAKE2B d0bc34a60713921ca2f97818fa4044cc430ca600f8fca7bc277955be43eb9e948924a7386be10e3e4d4fa318a57390c135200862ccd16ffc592f89f9884786ab SHA512 86c3a4c2767c78e000e493cc4dcee97851995193c4bea26f2e59f38ad2b4e4f73897d90e7d5f13493f881b5965803aebc62ea9b8baf87d8c200998fb636a6c3c
+DIST wine-staging-11.9.tar.gz 9323349 BLAKE2B 8f803206cea94e7dffd6f51f32d4176a06a36a75f1d9e34c08be7924a1555ba7b93bc74489f172ebbfffd0ecf66be83275e3291d22de6b7abc6d92e09168f0f5 SHA512 a2c61ef9068b5f736df8df09639edea4579bbd2da12e03b8d4b7259037c814f7101dc13867c9973d9648747b14ff3126894a87bcda3774e2ec7a7c9f03c005fd
diff --git a/app-emulation/wine-staging/files/wine-staging-7.17-noexecstack.patch b/app-emulation/wine-staging/files/wine-staging-7.17-noexecstack.patch
new file mode 100644
index 000000000000..4baa48cfc140
--- /dev/null
+++ b/app-emulation/wine-staging/files/wine-staging-7.17-noexecstack.patch
@@ -0,0 +1,7 @@
+Also write GNU-stack note on dummy files used for stub libraries.
+--- a/tools/winebuild/import.c
++++ b/tools/winebuild/import.c
+@@ -1676,2 +1676,3 @@
+ output( "\t.text\n" );
++ output_gnu_stack_note();
+ }
diff --git a/app-emulation/wine-staging/files/wine-staging-7.20-unwind.patch b/app-emulation/wine-staging/files/wine-staging-7.20-unwind.patch
new file mode 100644
index 000000000000..f130ef5c23b3
--- /dev/null
+++ b/app-emulation/wine-staging/files/wine-staging-7.20-unwind.patch
@@ -0,0 +1,36 @@
+Fix build with llvm-libunwind, and also fix for non-llvm libunwind
+when using clang+bfd given clang doesn't have _Unwind_Find_FDE in
+its rtlib and expects it from llvm-libunwind.
+
+The _CONFIG_H_ check is for <llvm-libunwind-15 (adds _VERSION).
+--- a/dlls/ntdll/unix/dwarf.h
++++ b/dlls/ntdll/unix/dwarf.h
+@@ -255,5 +255,7 @@
+ };
+
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ extern const struct dwarf_fde *_Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
++#endif
+
+ static unsigned char dwarf_get_u1( const unsigned char **p )
+--- a/dlls/ntdll/unix/signal_x86_64.c
++++ b/dlls/ntdll/unix/signal_x86_64.c
+@@ -632,5 +632,5 @@
+ int rc;
+
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__)
+ rc = unw_getcontext( &unw_context );
+ if (rc == UNW_ESUCCESS)
+@@ -755,4 +755,5 @@
+ {
+ struct dwarf_eh_bases bases;
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ const struct dwarf_fde *fde = _Unwind_Find_FDE( (void *)(context->Rip - 1), &bases );
+
+@@ -760,4 +761,5 @@
+ return dwarf_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context, fde,
+ &bases, &dispatch->LanguageHandler, &dispatch->HandlerData );
++#endif
+ #ifdef HAVE_LIBUNWIND
+ return libunwind_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context,
diff --git a/app-emulation/wine-staging/files/wine-staging-8.13-rpath.patch b/app-emulation/wine-staging/files/wine-staging-8.13-rpath.patch
new file mode 100644
index 000000000000..5f0d63b0ec33
--- /dev/null
+++ b/app-emulation/wine-staging/files/wine-staging-8.13-rpath.patch
@@ -0,0 +1,15 @@
+Patch Source: https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/wine/rpath.patch
+Alpine Bug: https://gitlab.alpinelinux.org/alpine/aports/-/issues/13249
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -784,6 +784,9 @@ case $host_os in
+ [WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-z,max-page-size=0x1000"])
+ ;;
+ esac
++
++ # do this at the end because it needs double dollar for makefile
++ WINE_TRY_CFLAGS([-Wl,-rpath,\\\$ORIGIN],[UNIXLDFLAGS="$UNIXLDFLAGS '-Wl,-rpath,\$\$ORIGIN'"])
+ ;;
+ esac
+
diff --git a/app-emulation/wine-staging/metadata.xml b/app-emulation/wine-staging/metadata.xml
new file mode 100644
index 000000000000..aab1d6785000
--- /dev/null
+++ b/app-emulation/wine-staging/metadata.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <longdescription>
+Wine is an Open Source implementation of the Windows API on top of X and Unix.
+
+Think of Wine as a compatibility layer for running Windows programs. Wine does not require Microsoft Windows, as it is a completely free alternative implementation of the Windows API consisting of 100% non-Microsoft code, however Wine can optionally use native Windows DLLs if they are available. Wine provides both a development toolkit for porting Windows source code to Unix as well as a program loader, allowing many unmodified Windows programs to run on x86-based Unixes, including Linux, FreeBSD, and Solaris.
+
+This variant of the Wine packaging includes the Wine-Staging patchset.
+ </longdescription>
+ <use>
+ <flag name="arm64ec">Enable support for running x86_64 applications on arm64 via binary translation</flag>
+ <flag name="capi">Enable ISDN support using <pkg>net-libs/libcapi</pkg>
+ </flag>
+ <flag name="crossdev-mingw">
+ Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+ <pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up
+ and is mostly unsupported, try disabling if have issues)
+ </flag>
+ <flag name="dos">Pull in <pkg>games-emulation/dosbox</pkg> to run DOS applications</flag>
+ <flag name="gecko">Enable mshtml support using <pkg>app-emulation/wine-gecko</pkg>
+ </flag>
+ <flag name="mingw">Build PE files using <pkg>dev-util/mingw64-toolchain</pkg> (more tested) rather than <pkg>llvm-core/clang</pkg> (newer)</flag>
+ <flag name="mono">Enable .NET support using <pkg>app-emulation/wine-mono</pkg>
+ </flag>
+ <flag name="netapi">Enable support for configuring remote shares using <pkg>net-fs/samba</pkg>
+ </flag>
+ <flag name="pcap">Support packet capture software (e.g. wireshark)</flag>
+ <flag name="perl">Install helpers that require perl (winedump/winemaker)</flag>
+ <flag name="samba">Pull in <pkg>net-fs/samba</pkg> with winbind for NTLM auth support</flag>
+ <flag name="sdl">Enable gamepad support using <pkg>media-libs/libsdl2</pkg>
+ </flag>
+ <flag name="wow64">
+ Enable the "new" wow64 mode that allows running 32bit
+ applications without 32bit ELF multilib by mapping to
+ 64bit calls. Generally works well with wine-11.0 or
+ newer, but may or may not have a small perforamce
+ impact or other issues. If USE=mingw is set, still need
+ the default abi_x86_32 set on
+ <pkg>dev-util/mingw64-toolchain</pkg> but that can be
+ done even with /no-multilib/ profiles.
+
+ This can also be enabled on arm64 to allow running x86
+ applications via binary translation.
+ </flag>
+ </use>
+ <upstream>
+ <bugs-to>https://bugs.winehq.org/describecomponents.cgi?product=Wine-staging</bugs-to>
+ <remote-id type="cpe">cpe:/a:wine:wine</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-staging/wine-staging-11.0.ebuild b/app-emulation/wine-staging/wine-staging-11.0.ebuild
new file mode 100644
index 000000000000..add55d08c02a
--- /dev/null
+++ b/app-emulation/wine-staging/wine-staging-11.0.ebuild
@@ -0,0 +1,260 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo optfeature python-any-r1 wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+WINE_P=wine-$(ver_cut 1-2)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine-staging.git"
+ WINE_EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="
+ https://dl.winehq.org/wine/source/${WINE_SDIR}/${WINE_P}.tar.xz
+ https://github.com/wine-staging/wine-staging/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ "
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, with Wine-Staging patchset"
+HOMEPAGE="
+ https://wiki.winehq.org/Wine-Staging
+ https://gitlab.winehq.org/wine/wine-staging/
+"
+S=${WORKDIR}/${WINE_P}
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos llvm-libunwind ffmpeg
+ +fontconfig +gecko gphoto2 +gstreamer kerberos +mono netapi
+ nls odbc opencl +opengl pcap perl pulseaudio samba scanner
+ +sdl selinux smartcard +ssl +truetype udev +unwind usb v4l
+ +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-vcs/git
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900334)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.17-noexecstack.patch
+ "${FILESDIR}"/${PN}-7.20-unwind.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ EGIT_CHECKOUT_DIR=${WORKDIR}/${P}
+ git-r3_src_unpack
+
+ # hack: use subshell to preserve state (including what git-r3 unpack
+ # sets) for smart-live-rebuild as this is not the repo to look at
+ (
+ EGIT_COMMIT=$(<"${EGIT_CHECKOUT_DIR}"/staging/upstream-commit) || die
+ EGIT_REPO_URI=${WINE_EGIT_REPO_URI}
+ EGIT_CHECKOUT_DIR=${S}
+ einfo "Fetching Wine commit matching the current patchset by default (${EGIT_COMMIT})"
+ git-r3_src_unpack
+ )
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ local patchinstallargs=(
+ --all
+ --no-autoconf
+ ${MY_WINE_STAGING_CONF}
+ )
+
+ edo "${PYTHON}" ../${P}/staging/patchinstall.py "${patchinstallargs[@]}"
+
+ wine_src_prepare
+}
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-staging/wine-staging-11.10.ebuild b/app-emulation/wine-staging/wine-staging-11.10.ebuild
new file mode 100644
index 000000000000..1023384395a0
--- /dev/null
+++ b/app-emulation/wine-staging/wine-staging-11.10.ebuild
@@ -0,0 +1,253 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo optfeature python-any-r1 wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+WINE_P=wine-$(ver_cut 1-2)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine-staging.git"
+ WINE_EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="
+ https://dl.winehq.org/wine/source/${WINE_SDIR}/${WINE_P}.tar.xz
+ https://github.com/wine-staging/wine-staging/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ "
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, with Wine-Staging patchset"
+HOMEPAGE="
+ https://wiki.winehq.org/Wine-Staging
+ https://gitlab.winehq.org/wine/wine-staging/
+"
+S=${WORKDIR}/${WINE_P}
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-vcs/git
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900334)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.17-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ EGIT_CHECKOUT_DIR=${WORKDIR}/${P}
+ git-r3_src_unpack
+
+ # hack: use subshell to preserve state (including what git-r3 unpack
+ # sets) for smart-live-rebuild as this is not the repo to look at
+ (
+ EGIT_COMMIT=$(<"${EGIT_CHECKOUT_DIR}"/staging/upstream-commit) || die
+ EGIT_REPO_URI=${WINE_EGIT_REPO_URI}
+ EGIT_CHECKOUT_DIR=${S}
+ einfo "Fetching Wine commit matching the current patchset by default (${EGIT_COMMIT})"
+ git-r3_src_unpack
+ )
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ local patchinstallargs=(
+ --all
+ --no-autoconf
+ ${MY_WINE_STAGING_CONF}
+ )
+
+ edo "${PYTHON}" ../${P}/staging/patchinstall.py "${patchinstallargs[@]}"
+
+ wine_src_prepare
+}
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-staging/wine-staging-11.8.ebuild b/app-emulation/wine-staging/wine-staging-11.8.ebuild
new file mode 100644
index 000000000000..d997748110cb
--- /dev/null
+++ b/app-emulation/wine-staging/wine-staging-11.8.ebuild
@@ -0,0 +1,253 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo optfeature python-any-r1 wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+WINE_P=wine-$(ver_cut 1-2)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine-staging.git"
+ WINE_EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="
+ https://dl.winehq.org/wine/source/${WINE_SDIR}/${WINE_P}.tar.xz
+ https://github.com/wine-staging/wine-staging/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ "
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, with Wine-Staging patchset"
+HOMEPAGE="
+ https://wiki.winehq.org/Wine-Staging
+ https://gitlab.winehq.org/wine/wine-staging/
+"
+S=${WORKDIR}/${WINE_P}
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-vcs/git
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900334)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.17-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ EGIT_CHECKOUT_DIR=${WORKDIR}/${P}
+ git-r3_src_unpack
+
+ # hack: use subshell to preserve state (including what git-r3 unpack
+ # sets) for smart-live-rebuild as this is not the repo to look at
+ (
+ EGIT_COMMIT=$(<"${EGIT_CHECKOUT_DIR}"/staging/upstream-commit) || die
+ EGIT_REPO_URI=${WINE_EGIT_REPO_URI}
+ EGIT_CHECKOUT_DIR=${S}
+ einfo "Fetching Wine commit matching the current patchset by default (${EGIT_COMMIT})"
+ git-r3_src_unpack
+ )
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ local patchinstallargs=(
+ --all
+ --no-autoconf
+ ${MY_WINE_STAGING_CONF}
+ )
+
+ edo "${PYTHON}" ../${P}/staging/patchinstall.py "${patchinstallargs[@]}"
+
+ wine_src_prepare
+}
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-staging/wine-staging-11.9.ebuild b/app-emulation/wine-staging/wine-staging-11.9.ebuild
new file mode 100644
index 000000000000..1023384395a0
--- /dev/null
+++ b/app-emulation/wine-staging/wine-staging-11.9.ebuild
@@ -0,0 +1,253 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo optfeature python-any-r1 wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+WINE_P=wine-$(ver_cut 1-2)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine-staging.git"
+ WINE_EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="
+ https://dl.winehq.org/wine/source/${WINE_SDIR}/${WINE_P}.tar.xz
+ https://github.com/wine-staging/wine-staging/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ "
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, with Wine-Staging patchset"
+HOMEPAGE="
+ https://wiki.winehq.org/Wine-Staging
+ https://gitlab.winehq.org/wine/wine-staging/
+"
+S=${WORKDIR}/${WINE_P}
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-vcs/git
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900334)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.17-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ EGIT_CHECKOUT_DIR=${WORKDIR}/${P}
+ git-r3_src_unpack
+
+ # hack: use subshell to preserve state (including what git-r3 unpack
+ # sets) for smart-live-rebuild as this is not the repo to look at
+ (
+ EGIT_COMMIT=$(<"${EGIT_CHECKOUT_DIR}"/staging/upstream-commit) || die
+ EGIT_REPO_URI=${WINE_EGIT_REPO_URI}
+ EGIT_CHECKOUT_DIR=${S}
+ einfo "Fetching Wine commit matching the current patchset by default (${EGIT_COMMIT})"
+ git-r3_src_unpack
+ )
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ local patchinstallargs=(
+ --all
+ --no-autoconf
+ ${MY_WINE_STAGING_CONF}
+ )
+
+ edo "${PYTHON}" ../${P}/staging/patchinstall.py "${patchinstallargs[@]}"
+
+ wine_src_prepare
+}
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-staging/wine-staging-9999.ebuild b/app-emulation/wine-staging/wine-staging-9999.ebuild
new file mode 100644
index 000000000000..1023384395a0
--- /dev/null
+++ b/app-emulation/wine-staging/wine-staging-9999.ebuild
@@ -0,0 +1,253 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+inherit edo optfeature python-any-r1 wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+WINE_P=wine-$(ver_cut 1-2)
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine-staging.git"
+ WINE_EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="
+ https://dl.winehq.org/wine/source/${WINE_SDIR}/${WINE_P}.tar.xz
+ https://github.com/wine-staging/wine-staging/archive/v${PV}.tar.gz -> ${P}.tar.gz
+ "
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, with Wine-Staging patchset"
+HOMEPAGE="
+ https://wiki.winehq.org/Wine-Staging
+ https://gitlab.winehq.org/wine/wine-staging/
+"
+S=${WORKDIR}/${WINE_P}
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ ${PYTHON_DEPS}
+ dev-vcs/git
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900334)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.17-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_unpack() {
+ if [[ ${PV} == 9999 ]]; then
+ EGIT_CHECKOUT_DIR=${WORKDIR}/${P}
+ git-r3_src_unpack
+
+ # hack: use subshell to preserve state (including what git-r3 unpack
+ # sets) for smart-live-rebuild as this is not the repo to look at
+ (
+ EGIT_COMMIT=$(<"${EGIT_CHECKOUT_DIR}"/staging/upstream-commit) || die
+ EGIT_REPO_URI=${WINE_EGIT_REPO_URI}
+ EGIT_CHECKOUT_DIR=${S}
+ einfo "Fetching Wine commit matching the current patchset by default (${EGIT_COMMIT})"
+ git-r3_src_unpack
+ )
+ else
+ default
+ fi
+}
+
+src_prepare() {
+ local patchinstallargs=(
+ --all
+ --no-autoconf
+ ${MY_WINE_STAGING_CONF}
+ )
+
+ edo "${PYTHON}" ../${P}/staging/patchinstall.py "${patchinstallargs[@]}"
+
+ wine_src_prepare
+}
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/Manifest b/app-emulation/wine-vanilla/Manifest
new file mode 100644
index 000000000000..ba2fdb2b83c7
--- /dev/null
+++ b/app-emulation/wine-vanilla/Manifest
@@ -0,0 +1,7 @@
+DIST wine-10.0.tar.xz 32011244 BLAKE2B 92178cf484cf33e9f3b8340429ee8e68c36e0d25eee4a892f059ab73f103cfcb9eb15e1883bc9fd8c8fe311d4ccbb56582d1f780da7b1406a7839a13addd29ae SHA512 effb41c5641993e2e52eaa825cc19b7d9846e084992c5a5b066ead2339b24384d320898a9cee347a9a87106bcb3b0f54c8cd2c8d4de3a887a658052ddd5168d6
+DIST wine-11.0.tar.xz 33172240 BLAKE2B 2e4ef52f53e80c04bf8fc69345632db05e2ade00b8b5e485505e0790717e42f5e2568279565d6bf4edc2767b7a4eed3116914e54026fc4f06067bbf73b97a101 SHA512 a2c3db14f8cf0d19927466805c8f17c68ee7e93d1196d1162dd2279af497c21ec611a63f7a9de59953bbdfdb44c87d7bf55373c6533224a5d54e434c29428d1b
+DIST wine-11.10.tar.xz 45603064 BLAKE2B 3885760203ff937823e599ec0ffc25484ac39f2dd1169c47e09051df7db9329e5009bc6c3b9d040a05d0f21911cb2da73e54bd2d9e16218aeaba758be807cc75 SHA512 fd1eeac9b2f2fb14edc1d21795ebb29c49be0333493357481db5eca8de9681de3f07fbf4a6876a73ab2ab5369f545d9cf59a6f51f0ee29373ce4c12f76c24679
+DIST wine-11.8.tar.xz 43789212 BLAKE2B e83e6571bdb09ca46d4de99fd32e5a913deb4c19b9fea0f9c1f318ad14f7718d1bee8490183e405c70fd5303e8df1738e204832b524076e1d0cd44bba1f4a24f SHA512 ca657cf23d0c7a10f07d9eca0938ab182e85b012a38f151c9a7fb6681dd2e93aea77bb14320e99b17c58d30b848dc56a757f5dd0124782d3610589bc365d3ad4
+DIST wine-11.9.tar.xz 45515640 BLAKE2B b808587d57554faad6c5d61a9b5560ed2223c217a18b7135e4c44b018b826c147ed9403758b7690f5a92f35658232068b3f289ec63ae608e522a6f9722fb4d90 SHA512 b76d8eb53a5145180b3ec4b25958dc4b7dcf7ef9918decfafb3afadb38a71919c1a1fdf2fc54a883830bb6aefd9da9e0e223fd3d0874c794c53d4bf739632e38
+DIST wine-8.0.2.tar.xz 29060452 BLAKE2B dcffaba6c90c4e02a7bc591a81e11aced06c006370c4c316c8a367b2f5814926063482959fabfe9d674ee1b5a560e59087e9b711e28360ced3aee2bbd6bb8fdb SHA512 e86dd31247d757d48ffb2d24f20edab3fc6ef9c3e395567a7b363951bb681335ba3adb8b84639011b24b6eb274582d56880298d6d95fb100acc072383d4e973f
+DIST wine-9.0.1.tar.xz 30166464 BLAKE2B 120a4556b18f3336c348e9984afc8c6d3d3d69ef64aa29224dd09ad69684e32ab193f23eb8edceb08e37aff0c96be25b4a3b54874045583dd9c1dabc71ac3a32 SHA512 510ec92b442b5410c05eca5012384669f0bb06acdab9f790527a82276a8ee679a6d2cd2b769a75815d7233ce7421de05457a64596d056552f4507a7a12c9f1a8
diff --git a/app-emulation/wine-vanilla/files/wine-vanilla-10.0-binutils2.44.patch b/app-emulation/wine-vanilla/files/wine-vanilla-10.0-binutils2.44.patch
new file mode 100644
index 000000000000..d7e30393569e
--- /dev/null
+++ b/app-emulation/wine-vanilla/files/wine-vanilla-10.0-binutils2.44.patch
@@ -0,0 +1,105 @@
+Note that this is only an issue when using mingw (PE) binutils-2.44,
+host (ELF) binutils-2.44 has no impact on this and, before this patch,
+using 2.44 could only happen with off-by-default USE=crossdev-mingw.
+
+https://bugs.winehq.org/show_bug.cgi?id=57819
+https://sourceware.org/PR32675
+https://gitlab.winehq.org/wine/wine/-/merge_requests/7328
+--- a/dlls/ntdll/loader.c
++++ b/dlls/ntdll/loader.c
+@@ -3750,5 +3750,5 @@
+ NTSTATUS nts;
+ FARPROC fp;
+- DWORD id;
++ INT_PTR id;
+
+ TRACE( "(%p, %p, %p, %p, %p, 0x%08lx)\n", base, desc, dllhook, syshook, addr, flags );
+--- a/tools/winebuild/import.c
++++ b/tools/winebuild/import.c
+@@ -1332,4 +1332,14 @@
+ }
+
++static void output_import_section( int index, int is_delay )
++{
++ if (!is_delay)
++ output( "\n\t.section .idata$%d\n", index );
++ else if (index == 5)
++ output( "\n\t.section .data$didat%d\n", index );
++ else
++ output( "\n\t.section .rdata$didat%d\n", index );
++}
++
+ /* create a Windows-style import library */
+ static void build_windows_import_lib( const char *lib_name, DLLSPEC *spec, struct strarray files )
+@@ -1455,18 +1465,18 @@
+ output( "\t.long 0\n" ); /* TimeDateStamp */
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* FirstThunk tail */
+ output( ".L__wine_import_addrs:\n" );
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* OriginalFirstThunk tail */
+ output( ".L__wine_import_names:\n" );
+
+ /* required to avoid internal linker errors with some binutils versions */
+- output( "\n\t.section .idata$2\n" );
++ output_import_section( 2, is_delay );
+ }
+ else
+ {
+- output( "\n\t.section .idata$2\n" );
++ output_import_section( 2, is_delay );
+ output( "%s\n", asm_globl( import_desc ) );
+ output_rva( ".L__wine_import_names" ); /* OriginalFirstThunk */
+@@ -1476,8 +1486,8 @@
+ output_rva( ".L__wine_import_addrs" ); /* FirstThunk */
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( ".L__wine_import_names:\n" ); /* OriginalFirstThunk head */
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( ".L__wine_import_addrs:\n" ); /* FirstThunk head */
+ }
+@@ -1490,9 +1500,9 @@
+ new_output_as_file();
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* OriginalFirstThunk tail */
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "\t%s 0\n", get_asm_ptr_keyword() ); /* FirstThunk tail */
+- output( "\n\t.section .idata$7\n" );
++ output_import_section( 7, is_delay );
+ output( "%s\n", asm_globl( import_name ) );
+ output( "\t%s \"%s\"\n", get_asm_string_keyword(), spec->file_name );
+@@ -1585,8 +1595,8 @@
+ }
+
+- output( "\n\t.section .idata$4\n" );
++ output_import_section( 4, is_delay );
+ output_thunk_rva( by_name ? -1 : odp->ordinal, ".L__wine_import_name" );
+
+- output( "\n\t.section .idata$5\n" );
++ output_import_section( 5, is_delay );
+ output( "%s\n", asm_globl( imp_name ) );
+ if (is_delay)
+@@ -1597,5 +1607,5 @@
+ if (by_name)
+ {
+- output( "\n\t.section .idata$6\n" );
++ output_import_section( 6, is_delay );
+ output( ".L__wine_import_name:\n" );
+ output( "\t.short %d\n", odp->hint );
+@@ -1604,5 +1614,5 @@
+
+ /* reference head object to always pull its sections */
+- output( "\n\t.section .idata$7\n" );
++ output_import_section( 7, is_delay );
+ output_rva( "%s", asm_name( import_desc ) );
+
diff --git a/app-emulation/wine-vanilla/files/wine-vanilla-7.0-noexecstack.patch b/app-emulation/wine-vanilla/files/wine-vanilla-7.0-noexecstack.patch
new file mode 100644
index 000000000000..92aa0b4b5c5d
--- /dev/null
+++ b/app-emulation/wine-vanilla/files/wine-vanilla-7.0-noexecstack.patch
@@ -0,0 +1,7 @@
+Also write GNU-stack note on dummy files used for stub libraries.
+--- a/tools/winebuild/import.c
++++ b/tools/winebuild/import.c
+@@ -1675,2 +1675,3 @@
+ output( "\t.text\n" );
++ output_gnu_stack_note();
+ }
diff --git a/app-emulation/wine-vanilla/files/wine-vanilla-7.20-unwind.patch b/app-emulation/wine-vanilla/files/wine-vanilla-7.20-unwind.patch
new file mode 100644
index 000000000000..63f9a06a5de8
--- /dev/null
+++ b/app-emulation/wine-vanilla/files/wine-vanilla-7.20-unwind.patch
@@ -0,0 +1,36 @@
+Fix build with llvm-libunwind, and also fix for non-llvm libunwind
+when using clang+bfd given clang doesn't have _Unwind_Find_FDE in
+its rtlib and expects it from llvm-libunwind.
+
+The _CONFIG_H_ check is for <llvm-libunwind-15 (adds _VERSION).
+--- a/dlls/ntdll/unix/dwarf.h
++++ b/dlls/ntdll/unix/dwarf.h
+@@ -255,5 +255,7 @@
+ };
+
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ extern const struct dwarf_fde *_Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
++#endif
+
+ static unsigned char dwarf_get_u1( const unsigned char **p )
+--- a/dlls/ntdll/unix/signal_x86_64.c
++++ b/dlls/ntdll/unix/signal_x86_64.c
+@@ -623,5 +623,5 @@
+ int rc;
+
+-#ifdef __APPLE__
++#if defined(__APPLE__) || defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__)
+ rc = unw_getcontext( &unw_context );
+ if (rc == UNW_ESUCCESS)
+@@ -746,4 +746,5 @@
+ {
+ struct dwarf_eh_bases bases;
++#if defined(_LIBUNWIND_VERSION) || defined(____LIBUNWIND_CONFIG_H__) || !defined(__clang__)
+ const struct dwarf_fde *fde = _Unwind_Find_FDE( (void *)(context->Rip - 1), &bases );
+
+@@ -751,4 +752,5 @@
+ return dwarf_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context, fde,
+ &bases, &dispatch->LanguageHandler, &dispatch->HandlerData );
++#endif
+ #ifdef HAVE_LIBUNWIND
+ return libunwind_virtual_unwind( context->Rip, &dispatch->EstablisherFrame, context,
diff --git a/app-emulation/wine-vanilla/files/wine-vanilla-8.13-rpath.patch b/app-emulation/wine-vanilla/files/wine-vanilla-8.13-rpath.patch
new file mode 100644
index 000000000000..5f0d63b0ec33
--- /dev/null
+++ b/app-emulation/wine-vanilla/files/wine-vanilla-8.13-rpath.patch
@@ -0,0 +1,15 @@
+Patch Source: https://gitlab.alpinelinux.org/alpine/aports/-/blob/master/community/wine/rpath.patch
+Alpine Bug: https://gitlab.alpinelinux.org/alpine/aports/-/issues/13249
+
+--- a/configure.ac
++++ b/configure.ac
+@@ -784,6 +784,9 @@ case $host_os in
+ [WINELOADER_LDFLAGS="$WINELOADER_LDFLAGS -Wl,-z,max-page-size=0x1000"])
+ ;;
+ esac
++
++ # do this at the end because it needs double dollar for makefile
++ WINE_TRY_CFLAGS([-Wl,-rpath,\\\$ORIGIN],[UNIXLDFLAGS="$UNIXLDFLAGS '-Wl,-rpath,\$\$ORIGIN'"])
+ ;;
+ esac
+
diff --git a/app-emulation/wine-vanilla/metadata.xml b/app-emulation/wine-vanilla/metadata.xml
new file mode 100644
index 000000000000..4fbacf21f05f
--- /dev/null
+++ b/app-emulation/wine-vanilla/metadata.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <longdescription>
+Wine is an Open Source implementation of the Windows API on top of X and Unix.
+
+Think of Wine as a compatibility layer for running Windows programs. Wine does not require Microsoft Windows, as it is a completely free alternative implementation of the Windows API consisting of 100% non-Microsoft code, however Wine can optionally use native Windows DLLs if they are available. Wine provides both a development toolkit for porting Windows source code to Unix as well as a program loader, allowing many unmodified Windows programs to run on x86-based Unixes, including Linux, FreeBSD, and Solaris.
+
+This variant of the Wine packaging does not include external patchsets
+ </longdescription>
+ <use>
+ <flag name="arm64ec">Enable support for running x86_64 applications on arm64 via binary translation</flag>
+ <flag name="capi">Enable ISDN support using <pkg>net-libs/libcapi</pkg>
+ </flag>
+ <flag name="crossdev-mingw">
+ Use <pkg>sys-devel/crossdev</pkg> for the toolchain rather than
+ <pkg>dev-util/mingw64-toolchain</pkg> (requires manual setting up
+ and is mostly unsupported, try disabling if have issues)
+ </flag>
+ <flag name="dos">Pull in <pkg>games-emulation/dosbox</pkg> to run DOS applications</flag>
+ <flag name="gecko">Enable mshtml support using <pkg>app-emulation/wine-gecko</pkg>
+ </flag>
+ <flag name="mingw">Build PE files using <pkg>dev-util/mingw64-toolchain</pkg> (more tested) rather than <pkg>llvm-core/clang</pkg> (newer)</flag>
+ <flag name="mono">Enable .NET support using <pkg>app-emulation/wine-mono</pkg>
+ </flag>
+ <flag name="netapi">Enable support for configuring remote shares using <pkg>net-fs/samba</pkg>
+ </flag>
+ <flag name="pcap">Support packet capture software (e.g. wireshark)</flag>
+ <flag name="perl">Install helpers that require perl (winedump/winemaker)</flag>
+ <flag name="samba">Pull in <pkg>net-fs/samba</pkg> with winbind for NTLM auth support</flag>
+ <flag name="sdl">Enable gamepad support using <pkg>media-libs/libsdl2</pkg>
+ </flag>
+ <flag name="wow64">
+ Enable the "new" wow64 mode that allows running 32bit
+ applications without 32bit ELF multilib by mapping to
+ 64bit calls. Generally works well with wine-11.0 or
+ newer, but may or may not have a small perforamce
+ impact or other issues. If USE=mingw is set, still need
+ the default abi_x86_32 set on
+ <pkg>dev-util/mingw64-toolchain</pkg> but that can be
+ done even with /no-multilib/ profiles.
+
+ This can also be enabled on arm64 to allow running x86
+ applications via binary translation.
+ </flag>
+ </use>
+ <upstream>
+ <bugs-to>https://bugs.winehq.org/describecomponents.cgi?product=Wine</bugs-to>
+ <remote-id type="cpe">cpe:/a:wine:wine</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/wine-vanilla/wine-vanilla-10.0-r2.ebuild b/app-emulation/wine-vanilla/wine-vanilla-10.0-r2.ebuild
new file mode 100644
index 000000000000..668f9799239a
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-10.0-r2.ebuild
@@ -0,0 +1,210 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=9.4.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="LGPL-2.1+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff"
+SLOT="${PV}"
+IUSE="
+ +X +alsa capi cups +dbus dos llvm-libunwind ffmpeg +fontconfig
+ +gecko gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl
+ +opengl pcap perl pulseaudio samba scanner +sdl selinux smartcard
+ +ssl +truetype udev +unwind usb v4l +vulkan wayland +xcomposite
+ xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xcomposite? ( x11-libs/libXcomposite[${WINE_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ sys-kernel/linux-headers
+ X? ( x11-base/xorg-proto )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-7.20-unwind.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+ "${FILESDIR}"/${PN}-10.0-binutils2.44.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-11.0.ebuild b/app-emulation/wine-vanilla/wine-vanilla-11.0.ebuild
new file mode 100644
index 000000000000..36d8f87ae0a3
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-11.0.ebuild
@@ -0,0 +1,221 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=10.4.1
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* amd64 ~arm64 x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos llvm-libunwind ffmpeg
+ +fontconfig +gecko gphoto2 +gstreamer kerberos +mono netapi
+ nls odbc opencl +opengl pcap perl pulseaudio samba scanner
+ +sdl selinux smartcard +ssl +truetype udev +unwind usb v4l
+ +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-7.20-unwind.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-11.10.ebuild b/app-emulation/wine-vanilla/wine-vanilla-11.10.ebuild
new file mode 100644
index 000000000000..a5a967215998
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-11.10.ebuild
@@ -0,0 +1,214 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-11.8.ebuild b/app-emulation/wine-vanilla/wine-vanilla-11.8.ebuild
new file mode 100644
index 000000000000..95b5e7fb3029
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-11.8.ebuild
@@ -0,0 +1,214 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-11.9.ebuild b/app-emulation/wine-vanilla/wine-vanilla-11.9.ebuild
new file mode 100644
index 000000000000..a5a967215998
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-11.9.ebuild
@@ -0,0 +1,214 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-8.0.2.ebuild b/app-emulation/wine-vanilla/wine-vanilla-8.0.2.ebuild
new file mode 100644
index 000000000000..292345266954
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-8.0.2.ebuild
@@ -0,0 +1,400 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+inherit autotools flag-o-matic multilib multilib-build
+inherit prefix toolchain-funcs wrapper
+
+WINE_GECKO=2.47.3
+WINE_MONO=7.4.0
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S="${WORKDIR}/wine-${PV}"
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/"
+
+LICENSE="LGPL-2.1+ BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff"
+SLOT="${PV}"
+IUSE="
+ +X +abi_x86_32 +abi_x86_64 +alsa capi crossdev-mingw cups +dbus dos
+ llvm-libunwind custom-cflags +fontconfig +gecko gphoto2 +gstreamer
+ kerberos +mingw +mono netapi nls odbc opencl +opengl pcap perl
+ pulseaudio samba scanner +sdl selinux +ssl +strip +truetype udev
+ +unwind usb v4l +vulkan +xcomposite xinerama
+"
+# bug #551124 for truetype
+REQUIRED_USE="
+ X? ( truetype )
+ crossdev-mingw? ( mingw )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcursor[${MULTILIB_USEDEP}]
+ x11-libs/libXfixes[${MULTILIB_USEDEP}]
+ x11-libs/libXi[${MULTILIB_USEDEP}]
+ x11-libs/libXrandr[${MULTILIB_USEDEP}]
+ x11-libs/libXrender[${MULTILIB_USEDEP}]
+ x11-libs/libXxf86vm[${MULTILIB_USEDEP}]
+ opengl? ( media-libs/libglvnd[X,${MULTILIB_USEDEP}] )
+ xcomposite? ( x11-libs/libXcomposite[${MULTILIB_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${MULTILIB_USEDEP}] )
+ )
+ cups? ( net-print/cups[${MULTILIB_USEDEP}] )
+ dbus? ( sys-apps/dbus[${MULTILIB_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${MULTILIB_USEDEP}] )
+ kerberos? ( virtual/krb5[${MULTILIB_USEDEP}] )
+ netapi? ( net-fs/samba[${MULTILIB_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${MULTILIB_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${MULTILIB_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${MULTILIB_USEDEP}] )
+ truetype? ( media-libs/freetype[${MULTILIB_USEDEP}] )
+ v4l? ( media-libs/libv4l[${MULTILIB_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,${MULTILIB_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${MULTILIB_USEDEP}]
+ x11-libs/libXext[${MULTILIB_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${MULTILIB_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${MULTILIB_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${MULTILIB_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${MULTILIB_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${MULTILIB_USEDEP}]
+ media-libs/gstreamer:1.0[${MULTILIB_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${MULTILIB_USEDEP}] )
+ pcap? ( net-libs/libpcap[${MULTILIB_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${MULTILIB_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${MULTILIB_USEDEP}] )
+ udev? ( virtual/libudev:=[${MULTILIB_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${MULTILIB_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${MULTILIB_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${MULTILIB_USEDEP}] )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? ( app-emulation/wine-gecko:${WINE_GECKO}[${MULTILIB_USEDEP}] )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${MULTILIB_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ sys-kernel/linux-headers
+ X? ( x11-base/xorg-proto )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ dev-lang/perl
+ sys-devel/binutils
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ mingw? ( !crossdev-mingw? (
+ >=dev-util/mingw64-toolchain-10.0.0_p1-r2[${MULTILIB_USEDEP}]
+ ) )
+ nls? ( sys-devel/gettext )
+"
+IDEPEND=">=app-eselect/eselect-wine-2"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-7.20-unwind.patch
+ "${FILESDIR}"/${PN}-10.0-binutils2.44.patch
+)
+
+pkg_pretend() {
+ [[ ${MERGE_TYPE} == binary ]] && return
+
+ if use crossdev-mingw && [[ ! -v MINGW_BYPASS ]]; then
+ local mingw=-w64-mingw32
+ for mingw in $(usev abi_x86_64 x86_64${mingw}) $(usev abi_x86_32 i686${mingw}); do
+ if ! type -P ${mingw}-gcc >/dev/null; then
+ eerror "With USE=crossdev-mingw, you must prepare the MinGW toolchain"
+ eerror "yourself by installing sys-devel/crossdev then running:"
+ eerror
+ eerror " crossdev --target ${mingw}"
+ eerror
+ eerror "For more information, please see: https://wiki.gentoo.org/wiki/Mingw"
+ die "USE=crossdev-mingw is enabled, but ${mingw}-gcc was not found"
+ fi
+ done
+ fi
+}
+
+src_prepare() {
+ # sanity check, bumping these has a history of oversights
+ local geckomono=$(sed -En '/^#define (GECKO|MONO)_VER/{s/[^0-9.]//gp}' \
+ dlls/appwiz.cpl/addons.c || die)
+ if [[ ${WINE_GECKO}$'\n'${WINE_MONO} != "${geckomono}" ]]; then
+ local gmfatal=
+ [[ ${PV} == *9999 ]] && gmfatal=nonfatal
+ ${gmfatal} die -n "gecko/mono mismatch in ebuild, has: " ${geckomono} " (please file a bug)"
+ fi
+
+ default
+
+ if tc-is-clang; then
+ if use mingw; then
+ # -mabi=ms was ignored by <clang:16 then turned error in :17
+ # if used without --target *-windows, then gets used in install
+ # phase despite USE=mingw, drop as a quick fix for now
+ sed -i '/MSVCRTFLAGS=/s/-mabi=ms//' configure.ac || die
+ else
+ # ./configure will fail, abort early
+ die "building ${PN} with clang is only supported with USE=mingw"
+ fi
+ fi
+
+ # ensure .desktop calls this variant + slot
+ sed -i "/^Exec=/s/wine /${P} /" loader/wine.desktop || die
+
+ # datadir is not where wine-mono is installed, so prefixy alternate paths
+ hprefixify -w /get_mono_path/ dlls/mscoree/metahost.c
+
+ # always update for patches (including user's wrt #432348)
+ eautoreconf
+ tools/make_requests || die # perl
+ # tip: if need more for user patches, with portage can e.g. do
+ # echo "post_src_prepare() { tools/make_specfiles || die; }" \
+ # > /etc/portage/env/app-emulation/wine-vanilla
+}
+
+src_configure() {
+ WINE_PREFIX=/usr/lib/${P}
+ WINE_DATADIR=/usr/share/${P}
+
+ local conf=(
+ --prefix="${EPREFIX}"${WINE_PREFIX}
+ --datadir="${EPREFIX}"${WINE_DATADIR}
+ --includedir="${EPREFIX}"/usr/include/${P}
+ --libdir="${EPREFIX}"${WINE_PREFIX}
+ --mandir="${EPREFIX}"${WINE_DATADIR}/man
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with mingw)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ tc-ld-force-bfd # builds with non-bfd but broken at runtime (bug #867097)
+ filter-lto # build failure
+ filter-flags -Wl,--gc-sections # runtime issues (bug #931329)
+ use custom-cflags || strip-flags # can break in obscure ways at runtime
+ use crossdev-mingw || PATH=${BROOT}/usr/lib/mingw64-toolchain/bin:${PATH}
+
+ # broken with gcc-15's c23 default (TODO: try w/o occasionally, bug #943849)
+ append-cflags -std=gnu17
+
+ # temporary workaround for tc-ld-force-bfd not yet enforcing with mold
+ # https://github.com/gentoo/gentoo/pull/28355
+ [[ $($(tc-getCC) ${LDFLAGS} -Wl,--version 2>/dev/null) == mold* ]] &&
+ append-ldflags -fuse-ld=bfd
+
+ # >=wine-vanilla-9 has proper fixes and builds with gcc-14, but
+ # would rather not have to worry about fixing old branches
+ append-cflags $(test-flags-CC -Wno-error=incompatible-pointer-types)
+
+ # build using upstream's way (--with-wine64)
+ # order matters: configure+compile 64->32, install 32->64
+ local -i bits
+ for bits in $(usev abi_x86_64 64) $(usev abi_x86_32 32); do
+ (
+ einfo "Configuring ${PN} for ${bits}bits in ${WORKDIR}/build${bits} ..."
+
+ mkdir ../build${bits} || die
+ cd ../build${bits} || die
+
+ pe_arch=i386
+ if (( bits == 64 )); then
+ pe_arch=x86_64
+ : "${CROSSCC:=${CROSSCC_amd64:-x86_64-w64-mingw32-gcc}}"
+ conf+=( --enable-win64 )
+ elif use amd64; then
+ conf+=(
+ $(usev abi_x86_64 --with-wine64=../build64)
+ TARGETFLAGS=-m32 # for widl
+ )
+ # _setup is optional, but use over Wine's auto-detect (+#472038)
+ multilib_toolchain_setup x86
+ fi
+ : "${CROSSCC:=${CROSSCC_x86:-i686-w64-mingw32-gcc}}"
+
+ if use mingw; then
+ # CROSSCC is no longer recognized by Wine, but still use for now
+ # (future handling for CROSS* variables is subject to changes)
+ conf+=( ac_cv_prog_${pe_arch}_CC="${CROSSCC}" )
+
+ # use *FLAGS for mingw, but strip unsupported
+ : "${CROSSCFLAGS:=$(
+ # >=wine-7.21 configure.ac no longer adds -fno-strict by mistake
+ append-cflags -fno-strict-aliasing
+
+ filter-flags '-fstack-protector*' #870136
+ filter-flags '-mfunction-return=thunk*' #878849
+
+ # some bashrc-mv users tend to do CFLAGS="${LDFLAGS}" and then
+ # strip-unsupported-flags miss these during compile-only tests
+ # (primarily done for 23.0 profiles' -z, not full coverage)
+ filter-flags '-Wl,-z,*'
+
+ # -mavx with mingw-gcc has a history of obscure issues and
+ # disabling is seen as safer, e.g. `WINEARCH=win32 winecfg`
+ # crashes with -march=skylake >=wine-8.10, similar issues with
+ # znver4: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110273
+ append-cflags -mno-avx #912268
+
+ CC=${CROSSCC} test-flags-CC ${CFLAGS:--O2})}"
+ : "${CROSSLDFLAGS:=$(
+ filter-flags '-fuse-ld=*'
+ CC=${CROSSCC} test-flags-CCLD ${LDFLAGS})}"
+ export CROSS{C,LD}FLAGS
+ fi
+
+ ECONF_SOURCE=${S} econf "${conf[@]}"
+ )
+ done
+}
+
+src_compile() {
+ use abi_x86_64 && emake -C ../build64 # do first
+ use abi_x86_32 && emake -C ../build32
+}
+
+src_install() {
+ use abi_x86_32 && emake DESTDIR="${D}" -C ../build32 install
+ use abi_x86_64 && emake DESTDIR="${D}" -C ../build64 install # do last
+
+ # symlink for plain 'wine' and install its man pages if 64bit-only #404331
+ if use abi_x86_64 && use !abi_x86_32; then
+ dosym wine64 ${WINE_PREFIX}/bin/wine
+ dosym wine64-preloader ${WINE_PREFIX}/bin/wine-preloader
+ local man
+ for man in ../build64/loader/wine.*man; do
+ : "${man##*/wine}"
+ : "${_%.*}"
+ insinto ${WINE_DATADIR}/man/${_:+${_#.}/}man1
+ newins ${man} wine.1
+ done
+ fi
+
+ use perl || rm "${ED}"${WINE_DATADIR}/man/man1/wine{dump,maker}.1 \
+ "${ED}"${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}} || die
+
+ # create variant wrappers for eselect-wine
+ local bin
+ for bin in "${ED}"${WINE_PREFIX}/bin/*; do
+ make_wrapper "${bin##*/}-${P#wine-}" "${bin#"${ED}"}"
+ done
+
+ if use mingw; then
+ # don't let portage try to strip PE files with the wrong
+ # strip executable and instead handle it here (saves ~120MB)
+ dostrip -x ${WINE_PREFIX}/wine/{i386,x86_64}-windows
+
+ if use strip; then
+ ebegin "Stripping Windows (PE) binaries"
+ find "${ED}"${WINE_PREFIX}/wine/*-windows -regex '.*\.\(a\|dll\|exe\)' \
+ -exec $(usex abi_x86_64 x86_64 i686)-w64-mingw32-strip --strip-unneeded {} +
+ eend ${?} || die
+ fi
+ fi
+
+ dodoc ANNOUNCE AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ if use abi_x86_32 && { use opengl || use vulkan; }; then
+ # difficult to tell what is needed from here, but try to warn
+ if has_version 'x11-drivers/nvidia-drivers'; then
+ if has_version 'x11-drivers/nvidia-drivers[-abi_x86_32]'; then
+ ewarn "x11-drivers/nvidia-drivers is installed but is built without"
+ ewarn "USE=abi_x86_32 (ABI_X86=32), hardware acceleration with 32bit"
+ ewarn "applications under ${PN} will likely not be usable."
+ ewarn "Multi-card setups may need this on media-libs/mesa as well."
+ fi
+ elif has_version 'media-libs/mesa[-abi_x86_32]'; then
+ ewarn "media-libs/mesa seems to be in use but is built without"
+ ewarn "USE=abi_x86_32 (ABI_X86=32), hardware acceleration with 32bit"
+ ewarn "applications under ${PN} will likely not be usable."
+ fi
+ fi
+
+ eselect wine update --if-unset || die
+}
+
+pkg_postrm() {
+ if has_version -b app-eselect/eselect-wine; then
+ eselect wine update --if-unset || die
+ fi
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-9.0.1-r1.ebuild b/app-emulation/wine-vanilla/wine-vanilla-9.0.1-r1.ebuild
new file mode 100644
index 000000000000..c25cf9c4e272
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-9.0.1-r1.ebuild
@@ -0,0 +1,202 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=8.1.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* amd64 x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="LGPL-2.1+ BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff"
+SLOT="${PV}"
+IUSE="
+ +X +alsa capi cups +dbus dos llvm-libunwind +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev +unwind usb v4l +vulkan wayland +xcomposite
+ xinerama
+"
+# wrt opengl, wine-9 did not support EGL with wayland yet, use 10+
+REQUIRED_USE="
+ X? ( truetype )
+ opengl? ( X )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xcomposite? ( x11-libs/libXcomposite[${WINE_USEDEP}] )
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ unwind? (
+ llvm-libunwind? ( llvm-runtimes/libunwind[${WINE_USEDEP}] )
+ !llvm-libunwind? ( sys-libs/libunwind:=[${WINE_USEDEP}] )
+ )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ sys-kernel/linux-headers
+ X? ( x11-base/xorg-proto )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-7.20-unwind.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+ "${FILESDIR}"/${PN}-10.0-binutils2.44.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-osmesa # media-libs/mesa no longer supports this
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with unwind)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xcomposite)
+ $(use_with xinerama)
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
diff --git a/app-emulation/wine-vanilla/wine-vanilla-9999.ebuild b/app-emulation/wine-vanilla/wine-vanilla-9999.ebuild
new file mode 100644
index 000000000000..a5a967215998
--- /dev/null
+++ b/app-emulation/wine-vanilla/wine-vanilla-9999.ebuild
@@ -0,0 +1,214 @@
+# Copyright 2022-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit optfeature wine
+
+WINE_GECKO=2.47.4
+WINE_MONO=11.1.0
+
+if [[ ${PV} == 9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://gitlab.winehq.org/wine/wine.git"
+else
+ (( $(ver_cut 2) )) && WINE_SDIR=$(ver_cut 1).x || WINE_SDIR=$(ver_cut 1).0
+ SRC_URI="https://dl.winehq.org/wine/source/${WINE_SDIR}/wine-${PV}.tar.xz"
+ S=${WORKDIR}/wine-${PV}
+ KEYWORDS="-* ~amd64 ~arm64 ~x86"
+fi
+
+DESCRIPTION="Free implementation of Windows(tm) on Unix, without external patchsets"
+HOMEPAGE="
+ https://www.winehq.org/
+ https://gitlab.winehq.org/wine/wine/
+"
+
+LICENSE="
+ LGPL-2.1+
+ BSD BSD-2 IJG MIT OPENLDAP ZLIB gsm libpng2 libtiff public-domain
+ || ( WTFPL-2 public-domain )
+"
+SLOT="${PV}"
+IUSE="
+ +X +alsa bluetooth capi cups +dbus dos ffmpeg +fontconfig +gecko
+ gphoto2 +gstreamer kerberos +mono netapi nls odbc opencl +opengl
+ pcap perl pulseaudio samba scanner +sdl selinux smartcard +ssl
+ +truetype udev usb v4l +vulkan wayland xinerama
+"
+REQUIRED_USE="
+ X? ( truetype )
+ bluetooth? ( dbus )
+ opengl? ( || ( X wayland ) )
+"
+
+# tests are non-trivial to run, can hang easily, don't play well with
+# sandbox, and several need real opengl/vulkan or network access
+RESTRICT="test"
+
+# `grep WINE_CHECK_SONAME configure.ac` + if not directly linked
+WINE_DLOPEN_DEPEND="
+ X? (
+ x11-libs/libXcomposite[${WINE_USEDEP}]
+ x11-libs/libXcursor[${WINE_USEDEP}]
+ x11-libs/libXfixes[${WINE_USEDEP}]
+ x11-libs/libXi[${WINE_USEDEP}]
+ x11-libs/libXrandr[${WINE_USEDEP}]
+ x11-libs/libXrender[${WINE_USEDEP}]
+ x11-libs/libXxf86vm[${WINE_USEDEP}]
+ xinerama? ( x11-libs/libXinerama[${WINE_USEDEP}] )
+ )
+ cups? ( net-print/cups[${WINE_USEDEP}] )
+ dbus? ( sys-apps/dbus[${WINE_USEDEP}] )
+ fontconfig? ( media-libs/fontconfig[${WINE_USEDEP}] )
+ kerberos? ( virtual/krb5[${WINE_USEDEP}] )
+ netapi? ( net-fs/samba[${WINE_USEDEP}] )
+ odbc? ( dev-db/unixODBC[${WINE_USEDEP}] )
+ opengl? ( media-libs/libglvnd[X?,${WINE_USEDEP}] )
+ sdl? ( media-libs/libsdl2[haptic,joystick,${WINE_USEDEP}] )
+ ssl? ( net-libs/gnutls:=[${WINE_USEDEP}] )
+ truetype? ( media-libs/freetype[${WINE_USEDEP}] )
+ v4l? ( media-libs/libv4l[${WINE_USEDEP}] )
+ vulkan? ( media-libs/vulkan-loader[X?,wayland?,${WINE_USEDEP}] )
+"
+WINE_COMMON_DEPEND="
+ ${WINE_DLOPEN_DEPEND}
+ X? (
+ x11-libs/libX11[${WINE_USEDEP}]
+ x11-libs/libXext[${WINE_USEDEP}]
+ )
+ alsa? ( media-libs/alsa-lib[${WINE_USEDEP}] )
+ capi? ( net-libs/libcapi:=[${WINE_USEDEP}] )
+ ffmpeg? ( media-video/ffmpeg:=[${WINE_USEDEP}] )
+ gphoto2? ( media-libs/libgphoto2:=[${WINE_USEDEP}] )
+ gstreamer? (
+ dev-libs/glib:2[${WINE_USEDEP}]
+ media-libs/gst-plugins-base:1.0[${WINE_USEDEP}]
+ media-libs/gstreamer:1.0[${WINE_USEDEP}]
+ )
+ opencl? ( virtual/opencl[${WINE_USEDEP}] )
+ pcap? ( net-libs/libpcap[${WINE_USEDEP}] )
+ pulseaudio? ( media-libs/libpulse[${WINE_USEDEP}] )
+ scanner? ( media-gfx/sane-backends[${WINE_USEDEP}] )
+ smartcard? ( sys-apps/pcsc-lite[${WINE_USEDEP}] )
+ udev? ( virtual/libudev:=[${WINE_USEDEP}] )
+ usb? ( dev-libs/libusb:1[${WINE_USEDEP}] )
+ wayland? (
+ dev-libs/wayland[${WINE_USEDEP}]
+ x11-libs/libxkbcommon[${WINE_USEDEP}]
+ )
+"
+RDEPEND="
+ ${WINE_COMMON_DEPEND}
+ app-emulation/wine-desktop-common
+ dos? (
+ || (
+ games-emulation/dosbox
+ games-emulation/dosbox-staging
+ )
+ )
+ gecko? (
+ app-emulation/wine-gecko:${WINE_GECKO}[${WINE_USEDEP}]
+ wow64? ( app-emulation/wine-gecko[abi_x86_32] )
+ )
+ gstreamer? ( media-plugins/gst-plugins-meta:1.0[${WINE_USEDEP}] )
+ mono? ( app-emulation/wine-mono:${WINE_MONO} )
+ perl? (
+ dev-lang/perl
+ dev-perl/XML-LibXML
+ )
+ samba? ( net-fs/samba[winbind] )
+ selinux? ( sec-policy/selinux-wine )
+"
+DEPEND="
+ ${WINE_COMMON_DEPEND}
+ >=sys-kernel/linux-headers-6.14
+ X? ( x11-base/xorg-proto )
+ bluetooth? ( net-wireless/bluez )
+ opencl? ( dev-util/opencl-headers )
+"
+BDEPEND="
+ sys-devel/bison
+ sys-devel/flex
+ virtual/pkgconfig
+ nls? ( sys-devel/gettext )
+ wayland? ( dev-util/wayland-scanner )
+"
+
+QA_CONFIG_IMPL_DECL_SKIP=(
+ __clear_cache # unused on amd64+x86 (bug #900338)
+ res_getservers # false positive
+)
+QA_TEXTRELS="usr/lib/*/wine/i386-unix/*.so" # uses -fno-PIC -Wl,-z,notext
+# intentionally ignored: https://gitlab.winehq.org/wine/wine/-/commit/433c2f8c06
+QA_FLAGS_IGNORED="usr/lib/.*/wine/.*-unix/wine-preloader"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-7.0-noexecstack.patch
+ "${FILESDIR}"/${PN}-8.13-rpath.patch
+)
+
+src_configure() {
+ local wineconfargs=(
+ $(use_enable gecko mshtml)
+ $(use_enable mono mscoree)
+ --disable-tests
+
+ $(use_with X x)
+ $(use_with alsa)
+ $(use_with capi)
+ $(use_with cups)
+ $(use_with dbus)
+ $(use_with ffmpeg)
+ $(use_with fontconfig)
+ $(use_with gphoto2 gphoto)
+ $(use_with gstreamer)
+ --without-hwloc # currently only used on FreeBSD
+ $(use_with kerberos gssapi)
+ $(use_with kerberos krb5)
+ $(use_with netapi)
+ $(use_with nls gettext)
+ $(use_with opencl)
+ $(use_with opengl)
+ --without-oss # media-sound/oss is not packaged (OSSv4)
+ $(use_with pcap)
+ $(use_with pulseaudio pulse)
+ $(use_with scanner sane)
+ $(use_with sdl)
+ $(use_with smartcard pcsclite)
+ $(use_with ssl gnutls)
+ $(use_with truetype freetype)
+ $(use_with udev)
+ $(use_with usb)
+ $(use_with v4l v4l2)
+ $(use_with vulkan)
+ $(use_with wayland)
+ $(use_with xinerama)
+
+ $(usev !bluetooth '
+ ac_cv_header_bluetooth_bluetooth_h=no
+ ac_cv_header_bluetooth_rfcomm_h=no
+ ')
+ $(usev !odbc ac_cv_lib_soname_odbc=)
+ )
+
+ wine_src_configure
+}
+
+src_install() {
+ use perl || local WINE_SKIP_INSTALL=(
+ ${WINE_DATADIR}/man/man1/wine{dump,maker}.1
+ ${WINE_PREFIX}/bin/{function_grep.pl,wine{dump,maker}}
+ )
+
+ wine_src_install
+
+ dodoc ANNOUNCE* AUTHORS README* documentation/README*
+}
+
+pkg_postinst() {
+ wine_pkg_postinst
+
+ optfeature "/dev/hidraw* access used for *some* controllers (e.g. DualShock4)" \
+ games-util/game-device-udev-rules
+}
diff --git a/app-emulation/winetricks/Manifest b/app-emulation/winetricks/Manifest
new file mode 100644
index 000000000000..3f48d0d0a678
--- /dev/null
+++ b/app-emulation/winetricks/Manifest
@@ -0,0 +1,2 @@
+DIST winetricks-20250102.tar.gz 669468 BLAKE2B 4fc1170d3d0755f86744aa206204c993ad9efea56ec3193de81c62997179addc66b5c61b34d257ee97b8715fadbd27c07ec6845b5b3d1125ef2bcaa087081186 SHA512 f9dc94eb7bb35c180a403bf58337a82166314e8d55123ce720ed4664b8d6fa9415576b8d02697f973a74b8d1dc578047bd3b1ed62a3c455a4ae6575f3ab7fccd
+DIST winetricks-20260125.tar.gz 706134 BLAKE2B 0acedede3cc77723ec4feeab572bb402e088587c7409eda92136f823805f34cd0fb7172e6d2af6f69508e8df1892b03581095ddada6013f5da4b253629937f91 SHA512 ab29191c8032ba70ee8e807c7910916d47cbbdab658cdb5a1c1daa11f0eb7e219a8cd5555e4e681a154913237e4600a8c5056e8bdd9c1f44dac92f27ec875fcb
diff --git a/app-emulation/winetricks/metadata.xml b/app-emulation/winetricks/metadata.xml
new file mode 100644
index 000000000000..63f468b6dc00
--- /dev/null
+++ b/app-emulation/winetricks/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>chiitoo@gentoo.org</email>
+ <name>Jimi Huotari</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>wine@gentoo.org</email>
+ <name>Wine</name>
+ </maintainer>
+ <stabilize-allarches />
+ <use>
+ <flag name="rar">Pull in <pkg>app-arch/unrar</pkg> for extraction of
+ rar-compressed game files</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/winetricks/winetricks-20250102-r1.ebuild b/app-emulation/winetricks/winetricks-20250102-r1.ebuild
new file mode 100644
index 000000000000..3d70870fa646
--- /dev/null
+++ b/app-emulation/winetricks/winetricks-20250102-r1.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit xdg
+
+DESCRIPTION="Easy way to install DLLs needed to work around problems in Wine"
+HOMEPAGE="https://github.com/Winetricks/winetricks https://wiki.winehq.org/Winetricks"
+
+if [[ ${PV} == *99999999* ]] ; then
+ EGIT_REPO_URI="https://github.com/Winetricks/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/Winetricks/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 x86"
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+IUSE="gui rar"
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/cabextract
+ || (
+ >=app-arch/7zip-24.09[symlink(+)]
+ app-arch/p7zip
+ )
+ app-arch/unzip
+ net-misc/wget
+ virtual/wine
+ x11-misc/xdg-utils
+ gui? ( || (
+ gnome-extra/zenity
+ kde-apps/kdialog:*
+ ) )
+ rar? ( app-arch/unrar )
+"
+
+src_unpack() {
+ case ${PV} in
+ *99999999*) git-r3_src_unpack ;&
+ *) default ;;
+ esac
+}
+
+src_install() {
+ default
+
+ if ! use gui; then
+ rm -r "${ED}"/usr/share/{applications,icons} || die
+ fi
+}
diff --git a/app-emulation/winetricks/winetricks-20260125.ebuild b/app-emulation/winetricks/winetricks-20260125.ebuild
new file mode 100644
index 000000000000..8a3b340c11f6
--- /dev/null
+++ b/app-emulation/winetricks/winetricks-20260125.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit xdg
+
+DESCRIPTION="Easy way to install DLLs needed to work around problems in Wine"
+HOMEPAGE="https://github.com/Winetricks/winetricks https://wiki.winehq.org/Winetricks"
+
+if [[ ${PV} == *99999999* ]] ; then
+ EGIT_REPO_URI="https://github.com/Winetricks/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/Winetricks/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="amd64 x86"
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+IUSE="gui rar"
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/cabextract
+ || (
+ >=app-arch/7zip-24.09[symlink(+)]
+ app-arch/p7zip
+ )
+ app-arch/unzip
+ net-misc/wget
+ virtual/wine
+ x11-misc/xdg-utils
+ gui? ( || (
+ gnome-extra/zenity
+ kde-apps/kdialog:*
+ ) )
+ rar? ( app-arch/unrar )
+"
+
+src_unpack() {
+ case ${PV} in
+ *99999999*) git-r3_src_unpack ;&
+ *) default ;;
+ esac
+}
+
+src_install() {
+ default
+
+ if ! use gui; then
+ rm -r "${ED}"/usr/share/{applications,icons} || die
+ fi
+}
diff --git a/app-emulation/winetricks/winetricks-99999999.ebuild b/app-emulation/winetricks/winetricks-99999999.ebuild
new file mode 100644
index 000000000000..9a9324024d59
--- /dev/null
+++ b/app-emulation/winetricks/winetricks-99999999.ebuild
@@ -0,0 +1,54 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit xdg
+
+DESCRIPTION="Easy way to install DLLs needed to work around problems in Wine"
+HOMEPAGE="https://github.com/Winetricks/winetricks https://wiki.winehq.org/Winetricks"
+
+if [[ ${PV} == *99999999* ]] ; then
+ EGIT_REPO_URI="https://github.com/Winetricks/${PN}.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/Winetricks/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"
+ KEYWORDS="~amd64 ~x86"
+fi
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+IUSE="gui rar"
+RESTRICT="test"
+
+RDEPEND="
+ app-arch/cabextract
+ || (
+ >=app-arch/7zip-24.09[symlink(+)]
+ app-arch/p7zip
+ )
+ app-arch/unzip
+ net-misc/wget
+ virtual/wine
+ x11-misc/xdg-utils
+ gui? ( || (
+ gnome-extra/zenity
+ kde-apps/kdialog:*
+ ) )
+ rar? ( app-arch/unrar )
+"
+
+src_unpack() {
+ case ${PV} in
+ *99999999*) git-r3_src_unpack ;&
+ *) default ;;
+ esac
+}
+
+src_install() {
+ default
+
+ if ! use gui; then
+ rm -r "${ED}"/usr/share/{applications,icons} || die
+ fi
+}
diff --git a/app-emulation/x48/Manifest b/app-emulation/x48/Manifest
new file mode 100644
index 000000000000..48fd8a60ca83
--- /dev/null
+++ b/app-emulation/x48/Manifest
@@ -0,0 +1 @@
+DIST x48-0.6.4.tar.bz2 227991 BLAKE2B 8db2962860eeb161a8efc9d46730c71d95d0331157e3e2481a978385ad54b04b7a4eb601c68e7df966194b23e0cd04bed4e80511d22695bb7ccdd3959d8fd8d7 SHA512 60fdba1171a02e4a5f9bcefb29fff9398fdbda50553c3d3b952fab0b4ebf87b219d4615139ca3673b1c61ff6d6559aab3e93218334aa6cdb442d4861347138ce
diff --git a/app-emulation/x48/files/x48-0.6.4-configure.patch b/app-emulation/x48/files/x48-0.6.4-configure.patch
new file mode 100644
index 000000000000..ea3a883991a8
--- /dev/null
+++ b/app-emulation/x48/files/x48-0.6.4-configure.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac 2024-05-12 12:01:50.591368113 -0000
++++ b/configure.ac 2024-05-12 12:05:39.116023749 -0000
+@@ -10,6 +10,8 @@
+ AC_CONFIG_SRCDIR([config.h.in])
+ AC_CONFIG_HEADER([config.h])
+
++
++AC_USE_SYSTEM_EXTENSIONS
+ # Checks for programs.
+ AC_PROG_CC
+ AC_PROG_INSTALL
diff --git a/app-emulation/x48/files/x48-0.6.4-static.patch b/app-emulation/x48/files/x48-0.6.4-static.patch
new file mode 100644
index 000000000000..f832e877b76e
--- /dev/null
+++ b/app-emulation/x48/files/x48-0.6.4-static.patch
@@ -0,0 +1,12 @@
+diff -Naur x48-0.6.4.orig/src/emulate.c x48-0.6.4/src/emulate.c
+--- x48-0.6.4.orig/src/emulate.c 2011-11-15 04:03:40.000000000 +0100
++++ x48-0.6.4/src/emulate.c 2020-06-23 21:30:30.895538239 +0200
+@@ -695,7 +695,7 @@
+ }
+ }
+
+-inline int
++static inline int
+ #ifdef __FunctionProto__
+ decode_8_thru_f(int op1)
+ #else
diff --git a/app-emulation/x48/files/x48-0.6.4-void_return.patch b/app-emulation/x48/files/x48-0.6.4-void_return.patch
new file mode 100644
index 000000000000..521ab6cd0546
--- /dev/null
+++ b/app-emulation/x48/files/x48-0.6.4-void_return.patch
@@ -0,0 +1,24 @@
+diff -Naur x48-0.6.4.orig/src/debugger.c x48-0.6.4/src/debugger.c
+--- x48-0.6.4.orig/src/debugger.c 2011-11-15 04:03:40.000000000 +0100
++++ x48-0.6.4/src/debugger.c 2020-06-23 21:33:16.071667987 +0200
+@@ -1528,7 +1528,7 @@
+ struct se *se_next;
+ };
+
+-char *
++void
+ #ifdef __FunctionProto__
+ get_stack (void)
+ #else
+diff -Naur x48-0.6.4.orig/src/x48_x11.c x48-0.6.4/src/x48_x11.c
+--- x48-0.6.4.orig/src/x48_x11.c 2011-11-15 04:03:40.000000000 +0100
++++ x48-0.6.4/src/x48_x11.c 2020-06-23 21:33:32.132680745 +0200
+@@ -3833,7 +3833,7 @@
+
+ int last_button = -1;
+
+-extern char *get_stack(void);
++extern void get_stack(void);
+
+ int
+ #ifdef __FunctionProto__
diff --git a/app-emulation/x48/metadata.xml b/app-emulation/x48/metadata.xml
new file mode 100644
index 000000000000..e7778ddc74c3
--- /dev/null
+++ b/app-emulation/x48/metadata.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>voyageur@gentoo.org</email>
+ <name>Bernard Cafarelli</name>
+ </maintainer>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/x48/x48-0.6.4-r3.ebuild b/app-emulation/x48/x48-0.6.4-r3.ebuild
new file mode 100644
index 000000000000..644d5e3ed837
--- /dev/null
+++ b/app-emulation/x48/x48-0.6.4-r3.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools
+
+DESCRIPTION="HP48 Calculator Emulator"
+HOMEPAGE="https://sourceforge.net/projects/x48.berlios/"
+SRC_URI="https://downloads.sourceforge.net/x48.berlios/${P}.tar.bz2"
+S=${WORKDIR}
+
+LICENSE="GPL-3"
+
+SLOT="0"
+KEYWORDS="~alpha amd64 ~hppa ppc ppc64 ~sparc x86"
+IUSE="readline"
+
+RDEPEND="
+ x11-libs/libX11
+ x11-libs/libXext
+ readline? ( sys-libs/readline:= )"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig
+ x11-libs/libXt"
+
+DOCS=( AUTHORS ChangeLog README )
+
+PATCHES=(
+ "${FILESDIR}"/${P}-static.patch
+ "${FILESDIR}"/${P}-void_return.patch
+ "${FILESDIR}"/${P}-configure.patch
+)
+
+src_prepare() {
+ default
+ eautoreconf
+}
+
+src_configure() {
+ econf $(use_enable readline)
+}
+
+src_install() {
+ default
+
+ insinto /usr/share/"${PN}"/romdump
+ doins -r romdump/{README,ROMDump*}
+}
+
+pkg_postinst() {
+ elog "The X48 emulator requires an HP48 ROM image to run."
+ elog
+ elog "If you own an HP-48 calculator, you can use the ROMDump utility"
+ elog "included with this package to obtain it from your calculator."
+ elog "The instructions of how to do this are included in the package."
+ elog
+ elog "Alternatively, HP has provided the ROM images for non-commercial"
+ elog "use only."
+ elog
+ elog "Due to confusion over the legal status of these ROMs you must"
+ elog "manually download one from https://www.hpcalc.org/hp48/pc/emulators/"
+ elog
+ elog "If you do not know which one to use, try 'HP 48GX Revision R ROM.'"
+ elog
+ elog "Once you have a ROM, you will need to install it by running:"
+ elog
+ elog " $ x48 -rom gxrom-r"
+ elog
+ elog "You will only have to do this the first time you run X48. The"
+ elog "ROM will be stored in ~/.hp48/rom for future runs."
+}
diff --git a/app-emulation/xcpc/Manifest b/app-emulation/xcpc/Manifest
new file mode 100644
index 000000000000..23162f00274d
--- /dev/null
+++ b/app-emulation/xcpc/Manifest
@@ -0,0 +1 @@
+DIST xcpc-0.37.0.tar.gz 1094259 BLAKE2B 670de05f53d05d375c9cb252e672f8fa9027419302b521b88dc1904ec99571fa95b390bfdc5eea3eb2355730c02a955c10cbc2f29d7e4c52506173e8f5d6c540 SHA512 8579711595ac5234c1c8a6e9d0279950c97966a2a8919d4f0ba404c5bd5609f299ab0b5131d6973f5decfc12bff184facf3009522bef568a108b5cfb7e74be11
diff --git a/app-emulation/xcpc/metadata.xml b/app-emulation/xcpc/metadata.xml
new file mode 100644
index 000000000000..5f33304011d5
--- /dev/null
+++ b/app-emulation/xcpc/metadata.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/xcpc/xcpc-0.37.0-r1.ebuild b/app-emulation/xcpc/xcpc-0.37.0-r1.ebuild
new file mode 100644
index 000000000000..92304374a038
--- /dev/null
+++ b/app-emulation/xcpc/xcpc-0.37.0-r1.ebuild
@@ -0,0 +1,29 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit xdg
+
+DESCRIPTION="XCPC is a portable Amstrad CPC 464/664/6128 emulator written in C"
+HOMEPAGE="http://www.xcpc-emulator.net/doku.php/index"
+SRC_URI="https://bitbucket.org/ponceto/xcpc/downloads/${P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64"
+
+RDEPEND="
+ app-arch/bzip2
+ virtual/zlib:=
+ x11-libs/gtk+:3
+ x11-libs/libX11
+ x11-libs/libXext"
+DEPEND="${RDEPEND}"
+
+src_configure() {
+ econf \
+ --disable-athena \
+ --disable-motif2 \
+ --with-x11-toolkit=gtk3
+}
diff --git a/app-emulation/xe-guest-utilities/Manifest b/app-emulation/xe-guest-utilities/Manifest
new file mode 100644
index 000000000000..46d04c29c53a
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/Manifest
@@ -0,0 +1 @@
+DIST xe-guest-utilities-6.2.0-1120.src.rpm 566881 BLAKE2B b2c727c551996f218c021d509ba1841baa07c70cbaf7660c0ec9cbeae696c4e77921d8ca12e8dfdf934a6894058c62ee6bf4e86bd1918e304cc76ee28d396fad SHA512 b945b3bf8175816b41b3a07a7dd8f0d9d2fdb1a7144448a5bb7fb4b6729736c67cea88fd45031df41abdd99416addb17fa1ee9cfe1fc76acf610cde3b3213880
diff --git a/app-emulation/xe-guest-utilities/files/xe-daemon.initd b/app-emulation/xe-guest-utilities/files/xe-daemon.initd
new file mode 100644
index 000000000000..d2c6e51fb5bf
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/files/xe-daemon.initd
@@ -0,0 +1,27 @@
+#!/sbin/openrc-run
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need localmount
+ after bootmisc
+}
+
+start() {
+ einfo "Detecting Linux distribution version"
+ /usr/sbin/xe-linux-distribution /var/cache/xe-linux-distribution
+
+ ebegin "Starting xe daemon"
+ start-stop-daemon --start --exec /usr/sbin/xe-daemon \
+ --pidfile /var/run/xe-daemon.pid \
+ --background \
+ -- -p /var/run/xe-daemon.pid
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping xe daemon"
+ start-stop-daemon --stop --exec /usr/sbin/xe-daemon \
+ --pidfile /var/run/xe-daemon.pid
+ eend $?
+}
diff --git a/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Guest-Attributes.patch b/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Guest-Attributes.patch
new file mode 100644
index 000000000000..29c8ebc91074
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Guest-Attributes.patch
@@ -0,0 +1,127 @@
+--- a/xe-update-guest-attrs
++++ b/xe-update-guest-attrs
+@@ -1,6 +1,7 @@
+ #!/bin/sh
+
+ # Copyright (C) 2009 Citrix Systems Inc.
++# Copyright (C) 2014 Christopher J. Camisa
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License
+@@ -51,10 +52,10 @@
+
+ # parse command line opts
+
+-MEMORY_MODE=0 # do not update memory stats
+-while [ $# -ge 1 ] ; do
++MEMORY_MODE=0 # do not update memory stats
++while [ $# -ge 1 ] ; do
+ if [ "$1" = "--memory" ] ; then
+- MEMORY_MODE=1 # update only memory stats
++ MEMORY_MODE=1 # update only memory stats
+ fi
+ shift
+ done
+@@ -71,12 +72,12 @@
+ fi
+ else
+ # cache does not exist
+- if [ -e $cache ] ; then
++ if [ -e $cache ] ; then
+ # something (directory?) in its way
+ rm -rf $cache
+ fi
+ fi
+-
++
+ # try to write and update cache if successful
+ if $XENSTORE write "$key" "$newval" ; then
+ mkdir -p $(dirname "$cache")
+@@ -119,8 +120,8 @@
+ xenstore_list_interfaces_cached() {
+ topdir=$XS_CACHE/attr
+ if [ -d $topdir ] ; then
+- cd $topdir
+- for dir in * ; do
++ cd $topdir
++ for dir in * ; do
+ [ -f $dir/ip ] && echo $dir
+ done
+ fi
+@@ -131,7 +132,7 @@
+ eval $(cat /proc/meminfo | \
+ sed -n -e 's/MemTotal\: *\([0-9]*\)[^$]*/memtotal=\1/gp;' \
+ -e 's/MemFree\: *\([0-9]*\)[^$]*/memfree=\1/gp;')
+-
++
+ xenstore_write_cached "data/meminfo_total" "${memtotal}"
+ xenstore_write_cached "data/meminfo_free" "${memfree}"
+ fi
+@@ -140,17 +141,17 @@
+
+ # e.g.
+ # $ ip addr show
+-# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
++# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
+ # link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
+ # inet 127.0.0.1/8 scope host lo
+-# inet6 ::1/128 scope host
++# inet6 ::1/128 scope host
+ # valid_lft forever preferred_lft forever
+ # 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
+ # link/ether 00:13:20:95:e8:74 brd ff:ff:ff:ff:ff:ff
+ # inet 172.31.0.57/20 brd 172.31.15.255 scope global eth0
+-# inet6 fe80::213:20ff:fe95:e874/64 scope link
++# inet6 fe80::213:20ff:fe95:e874/64 scope link
+ # valid_lft forever preferred_lft forever
+-# 3: sit0: <NOARP> mtu 1480 qdisc noop
++# 3: sit0: <NOARP> mtu 1480 qdisc noop
+ # link/sit 0.0.0.0 brd 0.0.0.0
+
+ #eval $(ip addr show | \
+@@ -158,26 +159,26 @@
+ # -e 's/^[[:space:]]\{4\}inet \('${IPADDR_RE}'\)\/.*/eval inet_\${current}="\1"; /gp;')
+
+ # e.g.
+-# eth0 Link encap:Ethernet HWaddr 00:13:20:95:E8:74
++# eth0 Link encap:Ethernet HWaddr 00:13:20:95:E8:74
+ # inet addr:172.31.0.57 Bcast:172.31.15.255 Mask:255.255.240.0
+ # inet6 addr: fe80::213:20ff:fe95:e874/64 Scope:Link
+ # UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ # RX packets:98001128 errors:0 dropped:0 overruns:0 frame:0
+ # TX packets:87728920 errors:0 dropped:0 overruns:0 carrier:0
+-# collisions:0 txqueuelen:1000
++# collisions:0 txqueuelen:1000
+ # RX bytes:35864034092 (33.4 GiB) TX bytes:27544025180 (25.6 GiB)
+-# Interrupt:177
+-#
+-# lo Link encap:Local Loopback
++# Interrupt:177
++#
++# lo Link encap:Local Loopback
+ # inet addr:127.0.0.1 Mask:255.0.0.0
+ # inet6 addr: ::1/128 Scope:Host
+ # UP LOOPBACK RUNNING MTU:16436 Metric:1
+ # RX packets:32928 errors:0 dropped:0 overruns:0 frame:0
+ # TX packets:32928 errors:0 dropped:0 overruns:0 carrier:0
+-# collisions:0 txqueuelen:0
++# collisions:0 txqueuelen:0
+ # RX bytes:3604609 (3.4 MiB) TX bytes:3604609 (3.4 MiB)
+
+-ifs=`/sbin/ifconfig | sed -n -e 's/^\([a-z0-9]\+\).*/name \1/p' \
++ifs=`/bin/ifconfig | sed -n -e 's/^\([a-z0-9]\+\).*/name \1/p' \
+ -e 's/.*inet addr:\('$IPADDR_RE'\) .*/ipv4 \1/p' \
+ -e 's+.*inet6 addr: \('$IPADDR6_RE'\)/.*+ipv6 \1+p' | \
+ while read tag value; do
+@@ -225,9 +226,9 @@
+ # build time addons
+ xenstore_write_cached "attr/PVAddons/MajorVersion" "6"
+ xenstore_write_cached "attr/PVAddons/MinorVersion" "2"
+-xenstore_write_cached "attr/PVAddons/MicroVersion" "0"
++xenstore_write_cached "attr/PVAddons/MicroVersion" "0"
+ xenstore_write_cached "attr/PVAddons/BuildVersion" "70442"
+-xenstore_write_cached "attr/PVAddons/Installed" "1"
++xenstore_write_cached "attr/PVAddons/Installed" "1"
+
+ # update xenstore if necessary
+ if [ $XENSTORE_UPDATED -eq 1 ] ; then
diff --git a/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Linux-Distribution.patch b/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Linux-Distribution.patch
new file mode 100644
index 000000000000..d1ec22668603
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/files/xe-guest-utilities-6.2.0_p1120-Linux-Distribution.patch
@@ -0,0 +1,77 @@
+--- a/xe-linux-distribution
++++ b/xe-linux-distribution
+@@ -1,6 +1,7 @@
+ #! /bin/sh
+
+ # Copyright (C) 2009 Citrix Systems Inc.
++# Copyright (C) 2014 Christopher J. Camisa
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License
+@@ -68,7 +69,7 @@
+ eval $(awk -F. '/^[0-9]*\.[0-9]*/ \
+ { print "major="$1 ; print "minor="$2 ; exit 0 }' \
+ "${debian_version}")
+-
++
+ if [ -z "${major}" ] && [ -z "${minor}" ] && ! grep -q /sid "${debian_version}" ; then
+ return 1
+ fi
+@@ -118,7 +119,7 @@
+ # Enterprise Linux Enterprise Linux Server release 5 (Carthage)
+ # Enterprise Linux Enterprise Linux Server release 5.5 (Carthage)
+ # Oracle Linux Server release 5.6
+-
++
+ if [ ! -f "${redhat_release}" ] ; then
+ return 1
+ fi
+@@ -236,7 +237,7 @@
+ if [ ! -x "${lsb_release}" ] ; then
+ return 1
+ fi
+-
++
+ distro=$(${lsb_release} --short --id | tr 'A-Z' 'a-z')
+ description=$(${lsb_release} --short --description | sed -e 's/^"\(.*\)"$/\1/g')
+ release=$(${lsb_release} --short --release)
+@@ -254,6 +255,31 @@
+ write_to_output "${distro}" "${major}" "${minor}" "${description}"
+ }
+
++identify_gentoo()
++{
++ gentoo_release="$1"
++
++ if [ ! -e "${gentoo_release}" ] ; then
++ return 1
++ fi
++
++ distro="gentoo"
++
++ eval $(cat ${gentoo_release} | awk '{ print "release=" $5 }' )
++
++ if [ -z "${release}" ] ; then
++ return 1
++ fi
++
++ eval $(echo $release | awk -F. -- '{ print "major=" $1 ; print "minor=" $2 }' )
++
++ if [ -z "${major}" -o -z "$minor" ] ; then
++ return 1
++ fi
++
++ write_to_output "${distro}" "${major}" "${minor}" "${distro}"
++}
++
+ if [ $# -eq 1 ] ; then
+ exec 1>"$1"
+ fi
+@@ -265,6 +291,7 @@
+ identify_sles /etc/SuSE-release && exit 0
+ identify_lsb lsb_release && exit 0
+ identify_debian /etc/debian_version && exit 0
++ identify_gentoo /etc/gentoo-release && exit 0
+
+ if [ $# -eq 1 ] ; then
+ rm -f "$1"
diff --git a/app-emulation/xe-guest-utilities/metadata.xml b/app-emulation/xe-guest-utilities/metadata.xml
new file mode 100644
index 000000000000..e7eb2238d920
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/metadata.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>chicago@blkid.net</email>
+ <name>Chicago</name>
+ </maintainer>
+ <maintainer type="person">
+ <email>robbat2@gentoo.org</email>
+ </maintainer>
+ <maintainer type="project">
+ <email>openstack@gentoo.org</email>
+ <name>Openstack</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>virtualization@gentoo.org</email>
+ <name>Gentoo Virtualization Project</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>xen@gentoo.org</email>
+ <name>Gentoo Xen Project</name>
+ </maintainer>
+ <use>
+ <flag name="xenstore">Use xenstore binaries bundled by Citrix instead of building <pkg>app-emulation/xen-tools</pkg>
+ </flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/xe-guest-utilities/xe-guest-utilities-6.2.0_p1120-r1.ebuild b/app-emulation/xe-guest-utilities/xe-guest-utilities-6.2.0_p1120-r1.ebuild
new file mode 100644
index 000000000000..8b723ae3c2cf
--- /dev/null
+++ b/app-emulation/xe-guest-utilities/xe-guest-utilities-6.2.0_p1120-r1.ebuild
@@ -0,0 +1,66 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+RPM_COMPRESS_TYPE=none
+inherit rpm linux-info udev
+
+PV_BASE=${PV/_*}
+PV_FULL=${PV/_p/-}
+
+DESCRIPTION="XenServer Virtual Machine Tools"
+HOMEPAGE="https://www.citrix.com/"
+SRC_URI="http://updates.vmd.citrix.com/XenServer/${PV_BASE}/rhel4x/SRPMS/xe-guest-utilities-${PV_FULL}.src.rpm"
+S="${WORKDIR}"
+
+LICENSE="LGPL-3 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="xenstore"
+
+BDEPEND="app-arch/rpm2targz"
+RDEPEND="
+ !xenstore? ( app-emulation/xen-tools )
+ xenstore? ( !app-emulation/xen-tools )
+"
+
+CONFIG_CHECK="~XEN_COMPAT_XENFS ~XENFS"
+QA_PREBUILT="usr/bin/xenstore* usr/bin/xeninfo"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-6.2.0_p1120-Guest-Attributes.patch
+ "${FILESDIR}"/${PN}-6.2.0_p1120-Linux-Distribution.patch
+)
+
+src_unpack() {
+ rpm_src_unpack ${A}
+ # Upstream includes xenstore-sources.tar.bz2
+ # but it is NOT the complete source :-(
+}
+
+src_install() {
+ newinitd "${FILESDIR}"/xe-daemon.initd xe-daemon
+ dosbin xe-daemon
+ dosbin xe-linux-distribution
+ dosbin xe-update-guest-attrs
+
+ udev_newrules xen-vcpu-hotplug.rules 10-xen-vcpu-hotplug.rules
+
+ if use xenstore; then
+ dobin usr/bin/xeninfo
+ dobin usr/bin/xenstore
+ dobin usr/bin/xenstore-*
+ fi
+}
+
+pkg_postinst() {
+ udev_reload
+
+ if [ ! -e /etc/runlevels/boot/xe-daemon ]; then
+ elog "To start the xe-daemon automatically by default"
+ elog "you should add it to the boot runlevel :"
+ elog "'rc-update add xe-daemon boot'"
+ elog
+ fi
+}
diff --git a/app-emulation/xen-tools/Manifest b/app-emulation/xen-tools/Manifest
new file mode 100644
index 000000000000..82a1e37690ba
--- /dev/null
+++ b/app-emulation/xen-tools/Manifest
@@ -0,0 +1,22 @@
+DIST OpenSSL_1_1_1t.tar.gz 10061233 BLAKE2B aef89c338644230305bcc75dbc13d6799a04ed8c712b6aed07a782703031e977c3e300924f26e5854d0b89ecf39d2d516a50838167754e8f63322fba51de9478 SHA512 f28a323fd78be0b16ae6db9a8f163e64c74410e12ddd1a9836dfdda34c264112184f4e22583c84b6fa56716e5aaac9cb860cb183bd3d0cb064091eea1e21815e
+DIST berkeley-softfloat-b64af41c3276f97f0e181920400ee056b9c88037.tar.gz 148741 BLAKE2B 72014022926b636147e202d74c42df2ce9cfed00b91c275d5b2e0afbc5c68765445cbe7ac6389d7c2512bd1d45b0e16e999936552d09bbc733ab66c92968bd31 SHA512 8420c29faa7ff57e06d6758b03e81ca0630c59946bc031e8611f1449e23634cf901b502161f2c1423c0cff949b5481445e36a3aa53dc885b61ca2c673b3ba567
+DIST brotli-028fb5a23661f123017c060daa546b55cf4bde29.tar.gz 646475 BLAKE2B 23b406a6de2cdb0b8885b58d5ec947992423671bd75c52ee5a53308c381ab0278b1743b45fe463af577bd0e25a599087bdf787f4e3a5737de557dc4ea706dbdf SHA512 8230f86d0df8da33cb2856193ca2ab6854b925ceab9fb5d3dbd9637c5e9ed0f9a3f20b11e9e8401a4ba803beeeac157e451475867439b3ac6a9c84143eb5ee27
+DIST brotli-f4153a09f87cbb9c826d8fc12c74642bb2d879ea.tar.gz 512229 BLAKE2B cd86cc2cc7eefad24f87cda8006409bf764922b5f23ccfb951e7a41214b12004ce532b11f94f5fb858b3bf71f9abf8ef17ba219fa96bd5be23b51873afad0fd5 SHA512 7f48e794e738b31c2005e7cef6d8c0cc0d543f1cd8c137ae8ba14602cac2873de6299a3f32ad52be869f513e7548341353ed049609daef1063975694d9a9b80b
+DIST edk2-1c74842bd07a48070d1cf3458f0b6b377e3ec8b9.tar.gz 18490334 BLAKE2B 9292840d60f9afacc97fded4e32402f8badb708f09db3d759b615a0f8ecadb9b54e162a4c0c04c210be41ee9b46daf5922875fbf2a1c9fd28d6636734e4257c0 SHA512 46d448d8f4dedce76d3d7e509d8966acf63ef837a160d0b68fa766ecaf425b93fdf95232514cf36926fc6bd61e85f493c346e65c2fc8acc7f3cebb1e6e985bd6
+DIST edk2-b16284e2a0011489f6e16dfcc6af7623c3cbaf0b.tar.gz 15245558 BLAKE2B 33876c08040fa876b4e3741fe859d113654013c948fa8a8b391955226e6215bbbe26fc484e56ba5b399d2c4e4d198900f2de42eccfbac6901e01cd73a80e803b SHA512 7d71ec3d98c652b86194607dbcab767160c708991f49f69eda1f5d844ced0c4842e849d19bf99ea09b1db523b91ced1e5552a4ddcea32b94b9db6b8f6f5c5931
+DIST ipxe-git-1d1cf74a5e58811822bee4b3da3cff7282fcdfca.tar.gz 4074878 BLAKE2B d335d1e69bf736c53622e34e5ebeea77e294637f39bd5e2704f13b8e334b684130c259bd48b832050eebfabfc898f9786979a4c00903145fdb347a497b399f31 SHA512 e27644cbb030c43e2841058003bedea6deb979ba71591f967e01312527ed869bb863f9a03fc7b5a266752433d30164929ea1b935953a245600ad713c9fb25cb5
+DIST qemu-xen-4.20.1.tar.gz 38382785 BLAKE2B bb063ca73d71d990c03944f4be2e4782f359d2a11598b747009a403111b234e2fdf48e15cc1220dd341e8ab954127f8af64df3cef7caa8ea1216e4d018f41b2c SHA512 9fcb071766c3b321b811cd56dfc8efe354c5601d4091fe49c2a3b27a298e8ab1f87abfbe825fd4766de607384e19294ae7fd947c391e6d6f5de1630df4ebc569
+DIST qemu-xen-traditional-4.20.0.tar.gz 3762381 BLAKE2B 0e7163ae6f5cfe7ce38c6e5d9969d783eeeb9df79d172fb291d4013c9f836bcb22d6d4100a897280e6fc50ee511801f25ea93504672406473e81736061fb2e94 SHA512 9200912b71c3505fea2b25233997be8de265128c8018377d320c73d59dee520535335294cc40163c13627158e79ca3a665527d36eb6ea4d8aad38b1a2d656f07
+DIST seabios-1.16.0.tar.gz 635419 BLAKE2B b645f20bae341d56ce4fc4a7044446050d8490c6c136377f6dccf02c88100b0644bc13d210b4a517a8be6002d5671b0fba77120a2aca3a9bafbad5e88d037e40 SHA512 9daefcfb1c9edda4462a4b080c9bac552154d577ae19703a914928e43005e7a52edd86869c6507e94a7f0c61ce8b3e6f5dea38cd5146628cb138a130947c522f
+DIST seabios-1.16.3.tar.gz 637076 BLAKE2B 8b7c574bf8b0d3b02ea3127dabacda5ddc39c159f17a3a474b76ca79f3ec637ed5571f0d485712b5f9dc68d46db5b2b2c1e018ff63ae0206ca6354bccb714c6c SHA512 103aac0a7a890a681edb8950fee72d419899e20e8b06e2dd382987f98d3faf362789fca5aa4efabe27c4720e53ee19e0ae246d7aca2482b6661fa119efac648c
+DIST xen-4.19.3.tar.gz 52030969 BLAKE2B a83277e7af036d806168d6b7c61010f5828a437a9c8fa92f2a0e81a49372e21fb1840fb73cdc52d4548fbc3315033b9846c506cce9c62777211a5e7bb5dfb146 SHA512 1e4ea1d6f3e1ac9ec5cba85ebe12a1fdbf9a2b6fcec413b7d9da46c47cd40850596b8612508eecfa5e5e85657c63c5f01540a0774d10fc68f91187987395e746
+DIST xen-4.20.2.tar.gz 6962123 BLAKE2B afedd7ec1ab3a99962543072264fb21c1ca141b99df8c42f12d04ddb4c249c1b87ba7a7b47a0e1fe1325150297ce261e178bc487886b730ca291d6aa3c04e5eb SHA512 4a40668020cb142de0e182d6c7f846a58391828fb1db28c9325cd55d78ef0549c1187886cfe0c366c02803aa1b46c09334ab06748e30a2b509a9bbbb7886a8f1
+DIST xen-4.20.3.tar.gz 6963649 BLAKE2B a85e9f3de025f5fca51681e162f1d72206f27e26e68f231350c711922c9820baabf62c9d7ffc8c93b8657c532d383b0a78b2db6723a516906538436ee64096a0 SHA512 1d805584eab604497178fcbce76bef03d3daf3854bcb432520b9968ff86410dd90fcb43e674a646bc94fcebffa9e45291454861b89b8289cc338c9d7e4c217d1
+DIST xen-gentoo-patches-4.17.0-gentoo-patchset-2.tar.bz2 4001 BLAKE2B 7afce426759952e202a1dd819fe0a23108072bf9552ba14a0bd787a96ffe5e7a36f37e03dad8db9c46f5731acbc122c258eef6d517816aad9c8db1ca64700d19 SHA512 bcb1479f9ff5e194a4e452da9d0479febc2bcd465b4be69bb8f30e2e6b858fb77a71216dcb3e74dfb65e7ca6513742c294cd6b5eaa5ce82d0b122a00f1cbc450
+DIST xen-gentoo-patches-4.20.1-gentoo-patchset-0.tar.bz2 4041 BLAKE2B 3e30c276ad5b22109af59c820b1b86d2cf425afb331df3b8d0c1174549cdb1719781588c3417ad9a564dfd420e568bfc7c1d3fe96ac14b4b0238841804b10c44 SHA512 6d25aac735f3e977cb439bc0ceb4dcdde019e0c3fdbf79f1d51aac2966e0d22947def7c8bd08a67420bd1816fb794a8f5c719f605957a9f55262c2bc3d09118e
+DIST xen-ovmf-mipisyst-370b5944c046bab043dd8b133727b2135af7747a.tar.gz 378522 BLAKE2B d3f1033e78ad814ebb991e66d8c1437aa3583e91481af9785b97b6021c7c45fb9dcb8d2d58d0a0fe84fbd9f108d24a27234df298eb8a2ba2340e5c9c85c89c40 SHA512 de6888577ceab7ab6915d792f3c48248cfa53357ccd310fc7f7eae4d25a932de8c7c23e5b898c9ebf61cf86cb538277273f2eb131a628b3bf0d46c9a3b9b6686
+DIST xen-ovmf-openssl-3.5.1.tar.gz 53158817 BLAKE2B 172db56ac41cee78bcb5d2223c33d78baf3326d8d466115f39be414384d265ad4541e00096d3f53435f9f89119882ae587b20b1ac05dc2ace46a0d43d7cc6996 SHA512 0fa152ae59ab5ea066319de039dfb1d24cbb247172d7512feb5dd920db3740f219d76b0195ea562f84fe5eae36c23772302eddfbb3509df13761452b4dafb9d3
+DIST xen-qemu-dtc-1.6.1.tar.gz 205407 BLAKE2B 4eeee0a64c3ddb0c1d10c755911a804cb4f2593be02ad1105150403980a415561caf2005ed2267da55379a9b4cba84236108eb1cbb5712ee7a1046c0c631842a SHA512 0c5859e9de79f423f99e1ceb327506afeee392199055834b844de45dcd444a87a1ac22aad8c4aa5e0261f83a416638a02b0d9eb4ea70345f076536feab9b96a8
+DIST xen-qemu-keycodemapdb-.tar.gz 29580 BLAKE2B 5511922dc8c4011a2c96f17f733c068e090fbb2b25227701bf73f66ea164892bdae09f08fb6888805aa7d018d97dfbc9872a907f3c55d293b2c5949d54ec9730 SHA512 6131753ed017fcdbf1d6b428d3dff79fd11800f9417c35ec45003b0b77ae7a36b9e1d4aec8e7fe256661baa367d9b0952a296afde4ccf3ed9e2a427b91009504
+DIST xen-qemu-softload-b64af41c3276f97f0e181920400ee056b9c88037.tar.gz 148741 BLAKE2B 72014022926b636147e202d74c42df2ce9cfed00b91c275d5b2e0afbc5c68765445cbe7ac6389d7c2512bd1d45b0e16e999936552d09bbc733ab66c92968bd31 SHA512 8420c29faa7ff57e06d6758b03e81ca0630c59946bc031e8611f1449e23634cf901b502161f2c1423c0cff949b5481445e36a3aa53dc885b61ca2c673b3ba567
+DIST xen-qemu-testload-e7af9751d9f9fd3b47911f51a5cfd08af256a9ab.tar.gz 139308 BLAKE2B 21a741521aab53cda87fabba2bb37c4753726be43bd23f0f8dfa7ee9d3c37e172b933600003d66550bf5b859e5bb505ced0701ad6c46cc40d51de868a3539f36 SHA512 0b13bdb721062a14bd3ee50a364b4d29208ba46bafd858fa7b41d8848cff8ef32b74e846addfce4c56210719b490df744a181d23b2f694b5cee95df0afb2fc92
diff --git a/app-emulation/xen-tools/files/README.gentoo b/app-emulation/xen-tools/files/README.gentoo
new file mode 100644
index 000000000000..e0c84a5f3359
--- /dev/null
+++ b/app-emulation/xen-tools/files/README.gentoo
@@ -0,0 +1,16 @@
+Official Xen Guide and the offical wiki page:
+- https://wiki.gentoo.org/wiki/Xen
+- https://wiki.xen.org/wiki/Main_Page
+
+
+If you use OpenRC:
+It is recommended to utilise the xencommons script to configure the system at
+boot time.
+
+
+If you use QEMU:
+The qemu-bridge-helper is renamed to the xen-bridge-helper in the in
+source build of qemu. This allows for app-emulation/qemu to be emerged
+concurrently with the qemu capable xen. It is up to the user to
+distinguish between and utilise the qemu-bridge-helper and the
+xen-bridge-helper. File bugs of any issues that arise.
diff --git a/app-emulation/xen-tools/files/edk2-202202-binutils-2.41-textrels.patch b/app-emulation/xen-tools/files/edk2-202202-binutils-2.41-textrels.patch
new file mode 100644
index 000000000000..22d33c9097aa
--- /dev/null
+++ b/app-emulation/xen-tools/files/edk2-202202-binutils-2.41-textrels.patch
@@ -0,0 +1,21 @@
+https://bugs.gentoo.org/913110
+--- a/BaseTools/Conf/tools_def.template
++++ b/BaseTools/Conf/tools_def.template
+@@ -1906,7 +1906,7 @@ DEFINE GCC48_IA32_X64_DLINK_COMMON = -nostdlib -Wl,-n,-q,--gc-sections -z comm
+ DEFINE GCC48_IA32_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m32 -march=i586 -malign-double -fno-stack-protector -D EFI32 -fno-asynchronous-unwind-tables -Wno-address
+ DEFINE GCC48_X64_CC_FLAGS = DEF(GCC48_ALL_CC_FLAGS) -m64 -fno-stack-protector "-DEFIAPI=__attribute__((ms_abi))" -maccumulate-outgoing-args -mno-red-zone -Wno-address -mcmodel=small -fpie -fno-asynchronous-unwind-tables -Wno-address
+ DEFINE GCC48_IA32_X64_ASLDLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
+-DEFINE GCC48_IA32_X64_DLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
++DEFINE GCC48_IA32_X64_DLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive -Wl,-z,notext
+ DEFINE GCC48_IA32_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x220 DEF(GCC_DLINK2_FLAGS_COMMON)
+ DEFINE GCC48_X64_DLINK_FLAGS = DEF(GCC48_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64,-pie
+ DEFINE GCC48_X64_DLINK2_FLAGS = -Wl,--defsym=PECOFF_HEADER_SIZE=0x228 DEF(GCC_DLINK2_FLAGS_COMMON)
+@@ -1929,7 +1929,7 @@ DEFINE GCC49_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -fno-pic -fno-pi
+ DEFINE GCC49_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS)
+ DEFINE GCC49_IA32_X64_DLINK_COMMON = -nostdlib -Wl,-n,-q,--gc-sections -z common-page-size=0x40
+ DEFINE GCC49_IA32_X64_ASLDLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--defsym=PECOFF_HEADER_SIZE=0 DEF(GCC_DLINK2_FLAGS_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
+-DEFINE GCC49_IA32_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
++DEFINE GCC49_IA32_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive -Wl,-z,notext
+ DEFINE GCC49_IA32_DLINK2_FLAGS = DEF(GCC48_IA32_DLINK2_FLAGS)
+ DEFINE GCC49_X64_DLINK_FLAGS = DEF(GCC49_IA32_X64_DLINK_FLAGS) -Wl,-melf_x86_64,--oformat=elf64-x86-64,-pie
+ DEFINE GCC49_X64_DLINK2_FLAGS = DEF(GCC48_X64_DLINK2_FLAGS)
diff --git a/app-emulation/xen-tools/files/ipxe-force-gcc.patch b/app-emulation/xen-tools/files/ipxe-force-gcc.patch
new file mode 100644
index 000000000000..781de6591356
--- /dev/null
+++ b/app-emulation/xen-tools/files/ipxe-force-gcc.patch
@@ -0,0 +1,14 @@
+diff --git a/src/Makefile b/src/Makefile
+index 548a4e3f..de5ee7ac 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -16,7 +16,8 @@ SYMBOL_PREFIX :=
+ #
+ # Locations of tools
+ #
+-HOST_CC := gcc
++override CC := gcc
++HOST_CC := ${CC}
+ RM := rm -f
+ TOUCH := touch
+ MKDIR := mkdir
diff --git a/app-emulation/xen-tools/files/stubs-32.h b/app-emulation/xen-tools/files/stubs-32.h
new file mode 100644
index 000000000000..a421528deb74
--- /dev/null
+++ b/app-emulation/xen-tools/files/stubs-32.h
@@ -0,0 +1,20 @@
+/* This file is automatically generated.
+ It defines a symbol `__stub_FUNCTION' for each function
+ in the C library which is a stub, meaning it will fail
+ every time called, usually setting errno to ENOSYS. */
+
+#ifdef _LIBC
+ #error Applications may not define the macro _LIBC
+#endif
+
+#define __stub_chflags
+#define __stub_fattach
+#define __stub_fchflags
+#define __stub_fdetach
+#define __stub_gtty
+#define __stub_lchmod
+#define __stub_revoke
+#define __stub_setlogin
+#define __stub_sigreturn
+#define __stub_sstk
+#define __stub_stty
diff --git a/app-emulation/xen-tools/files/xen-consoles.logrotate b/app-emulation/xen-tools/files/xen-consoles.logrotate
new file mode 100644
index 000000000000..c6445239b42f
--- /dev/null
+++ b/app-emulation/xen-tools/files/xen-consoles.logrotate
@@ -0,0 +1,5 @@
+/var/log/xen-consoles/*.log {
+ rotate 7
+ missingok
+ compress
+}
diff --git a/app-emulation/xen-tools/files/xen-tools-4.19.1-gnu17.patch b/app-emulation/xen-tools/files/xen-tools-4.19.1-gnu17.patch
new file mode 100644
index 000000000000..82f0068f02bc
--- /dev/null
+++ b/app-emulation/xen-tools/files/xen-tools-4.19.1-gnu17.patch
@@ -0,0 +1,10 @@
+ipxe relies on () not being (void), so just force gnu17 for now for compat
+w/ compilers that default to gnu23.
+--- a/tools/firmware/etherboot/Config
++++ b/tools/firmware/etherboot/Config
+@@ -7,3 +7,5 @@ CFLAGS += -DNO_POST_PROMPT
+
+ CFLAGS += -UCONSOLE_SERIAL
+ CFLAGS += -DCONSOLE_SERIAL=1
++
++CFLAGS += -std=gnu17
diff --git a/app-emulation/xen-tools/files/xen-watchdog.initd b/app-emulation/xen-tools/files/xen-watchdog.initd
new file mode 100644
index 000000000000..6fbc54dfb2fa
--- /dev/null
+++ b/app-emulation/xen-tools/files/xen-watchdog.initd
@@ -0,0 +1,6 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+command="/usr/sbin/xenwatchdogd"
+command_args="30 15"
diff --git a/app-emulation/xen-tools/files/xencommons.confd b/app-emulation/xen-tools/files/xencommons.confd
new file mode 100644
index 000000000000..b9e22482966f
--- /dev/null
+++ b/app-emulation/xen-tools/files/xencommons.confd
@@ -0,0 +1,4 @@
+# /etc/conf.d/xencommons
+
+# Load xen's kernel modules, and this will override defaults
+XEN_KERNEL_MODULES=""
diff --git a/app-emulation/xen-tools/files/xencommons.initd b/app-emulation/xen-tools/files/xencommons.initd
new file mode 100644
index 000000000000..a7c1efed9abe
--- /dev/null
+++ b/app-emulation/xen-tools/files/xencommons.initd
@@ -0,0 +1,79 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ before xenstored
+}
+
+is_privileged_domain() {
+ grep -qsE '^control_d$' /proc/xen/capabilities
+ return $?
+}
+
+handle_kernel_modules() {
+ local XEN_DEFAULT_KERNEL_MODULES="
+ xen-evtchn
+ xen-gntdev
+ xen-gntalloc
+ xen-blkback
+ xen-netback
+ xen-pciback
+ gntdev
+ netbk
+ blkbk
+ xen-scsibk
+ usbbk
+ pciback
+ xen-acpi-processor
+ blktap2
+ blktap
+ "
+
+ [ "$1" = "remove" ] && OPTS="-r"
+
+ XEN_KERNEL_MODULES="${XEN_KERNEL_MODULES:-${XEN_DEFAULT_KERNEL_MODULES}}"
+ for i in ${XEN_KERNEL_MODULES}; do
+ modprobe ${OPTS} $i 2>/dev/null
+ done
+ return 0
+}
+
+start() {
+ ebegin "Starting xencommons daemon"
+
+ # not running in Xen dom0 or domU
+ if [ ! -d /proc/xen ]; then
+ eend 1 "Not running in Xen mode"
+ return 1
+ fi
+
+ # mount xenfs in dom0 or domU with a pv_ops kernel
+ if ! test -f /proc/xen/capabilities && \
+ ! grep '^xenfs ' /proc/mounts >/dev/null;
+ then
+ mount -t xenfs xenfs /proc/xen
+ fi
+
+ if ! is_privileged_domain; then
+ eend 1 "Not running on a privileged domain. xencommons not started"
+ return 1
+ fi
+
+ handle_kernel_modules
+
+ eend $? "Failed to start xencommons"
+}
+
+stop () {
+ ebegin "Stopping xencommons"
+ if ! is_privileged_domain; then
+ eend 1 "Not running on a privileged domain. xencommons not started"
+ return 1
+ fi
+
+ handle_kernel_modules remove
+
+ eend $? "Failed to stop xencommons"
+}
+
diff --git a/app-emulation/xen-tools/files/xenconsoled.confd b/app-emulation/xen-tools/files/xenconsoled.confd
new file mode 100644
index 000000000000..b2e194bde46f
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenconsoled.confd
@@ -0,0 +1,2 @@
+# /etc/conf.d/xenstored
+XENCONSOLED_OPTS=""
diff --git a/app-emulation/xen-tools/files/xenconsoled.initd b/app-emulation/xen-tools/files/xenconsoled.initd
new file mode 100644
index 000000000000..094871cd0478
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenconsoled.initd
@@ -0,0 +1,33 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need xenstored
+ after lvm
+}
+
+# bug #498720
+shutdown_all_domU() {
+ # Note: shutdown all domU, including manually started ones
+ local V=$(xl info| awk "/xen_minor/ { print \$3 }")
+ # 4.2.2 do not support "-a" option
+ [ $V -gt 2 ] && xl shutdown -a -w >/dev/null
+}
+
+start() {
+ ebegin "Starting xenconsoled daemon"
+ start-stop-daemon --start --exec /usr/sbin/xenconsoled \
+ --pidfile /run/xenconsoled.pid \
+ -- --pid-file=/run/xenconsoled.pid \
+ ${XENCONSOLED_OPTS}
+ eend $*
+}
+
+stop() {
+ ebegin "Stopping xenconsoled daemon"
+ shutdown_all_domU
+ start-stop-daemon --stop --exec /usr/sbin/xenconsoled \
+ --pidfile /run/xenconsoled.pid
+ eend $*
+}
diff --git a/app-emulation/xen-tools/files/xendomains-screen.confd b/app-emulation/xen-tools/files/xendomains-screen.confd
new file mode 100644
index 000000000000..e75e19d3be74
--- /dev/null
+++ b/app-emulation/xen-tools/files/xendomains-screen.confd
@@ -0,0 +1,25 @@
+# /etc/conf.d/xendomains
+
+# Directory of domains to boot. AUTODIR should contain one or more symlinks
+# to domain config files in /etc/xen
+# AUTODIR=/etc/xen/auto
+
+# Send shutdown commands to all domains in parallel instead of waiting for
+# each to shutdown individually
+# PARALLEL_SHUTDOWN=yes
+
+# When SCREEN="yes", domains in AUTODIR have their consoles connected to a
+# screen session named SCREEN_NAME, with output logged to individual files
+# named after each domain and written to /var/log/xen-consoles/ . These files
+# are rotated (using app-admin/logrotate) every time xendomains is started.
+
+SCREEN="yes"
+SCREEN_NAME="xen"
+
+# Number of seconds between writes to screen's logfiles.
+#
+# Lower values mean more disk activity and hence a possible performance
+# impact, but higher values mean a greater chance of loosing some output
+# in the event of a crash.
+
+SCREEN_LOG_INTERVAL="1"
diff --git a/app-emulation/xen-tools/files/xendomains.confd b/app-emulation/xen-tools/files/xendomains.confd
new file mode 100644
index 000000000000..90c1f5256c62
--- /dev/null
+++ b/app-emulation/xen-tools/files/xendomains.confd
@@ -0,0 +1,9 @@
+# /etc/conf.d/xendomains
+
+# Directory of domains to boot. AUTODIR should contain one or more symlinks
+# to domain config files in /etc/xen
+AUTODIR=/etc/xen/auto
+
+# Send shutdown commands to all domains in parallel instead of waiting for
+# each to shutdown individually
+PARALLEL_SHUTDOWN=yes
diff --git a/app-emulation/xen-tools/files/xendomains.initd-r2 b/app-emulation/xen-tools/files/xendomains.initd-r2
new file mode 100644
index 000000000000..0926498ceac4
--- /dev/null
+++ b/app-emulation/xen-tools/files/xendomains.initd-r2
@@ -0,0 +1,117 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+extra_commands="status"
+
+depend() {
+ need xenstored
+ after dhcp xend xenconsoled
+}
+
+get_domname() {
+ local name_from_file=$(sed -rn 's/^name\W*=\W*\"?([[:alnum:]_\.-]+)\"?\W*;?/\1/p' "${1}" | tail -n 1)
+
+ if [ -z ${name_from_file} ] ; then
+ basename "${1}"
+ else
+ echo ${name_from_file}
+ fi
+}
+
+is_running() {
+ /usr/sbin/xl list "${1}" >/dev/null 2>&1
+}
+
+using_screen() {
+ [ "${SCREEN}" = "yes" -o "${SCREEN}" = "YES" ]
+}
+
+set_screen_cmd() {
+ screen_cmd="screen -c ${SCREENRC:-/dev/null} -q -r ${SCREEN_NAME:=xen} -X"
+}
+
+start() {
+ set_screen_cmd
+
+ einfo "Starting Xen domains from ${AUTODIR:=/etc/xen/auto}"
+ if using_screen ; then
+ ebegin "Creating screen session to hold domain consoles"
+ ( screen -c ${SCREENRC:-/dev/null} -d -m -S ${SCREEN_NAME} -t dom0 \
+ && sleep 5 \
+ && ${screen_cmd} zombie dr \
+ && logrotate -f /etc/xen/xen-consoles.logrotate \
+ && ${screen_cmd} logfile /var/log/xen-consoles/%t.log \
+ && ${screen_cmd} logfile flush ${SCREEN_LOG_INTERVAL:-1} \
+ && ${screen_cmd} log on \
+ && ${screen_cmd} deflog on ) >/dev/null
+ if [ $? -ne 0 ] ; then
+ eend 1
+ return 1
+ else
+ eend
+ fi
+ fi
+ # Create all domains with config files in AUTODIR.
+ for dom in $(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort); do
+ name=$(get_domname ${dom})
+ if ! is_running ${name} ; then
+ ebegin " Starting domain ${name}"
+ if using_screen ; then
+ ${screen_cmd} screen -t ${name} xl create ${dom} -c
+ else
+ xl create --quiet ${dom}
+ fi
+ eend $?
+ else
+ einfo " Not starting domain ${name} - already running"
+ fi
+ done
+}
+
+stop() {
+ set_screen_cmd
+
+ einfo "Shutting down Xen domains from ${AUTODIR:=/etc/xen/auto}"
+ # Stop all domains with config files in AUTODIR.
+ DOMAINS="$(ls "${AUTODIR:=/etc/xen/auto}/"* 2>/dev/null | sort -r)"
+
+ if [ "$PARALLEL_SHUTDOWN" = "yes" ] ; then
+ for dom in $DOMAINS ; do
+ name=$(get_domname ${dom})
+ if is_running ${name} ; then
+ ebegin " Asking domain ${name} to shutdown in the background..."
+ xl shutdown -w ${name} >/dev/null &
+ else
+ einfo " Not stopping domain ${name} - not running"
+ fi
+ done
+ einfo " Waiting for shutdown of domains that are still running"
+ wait
+ eend $?
+ else
+ for dom in $DOMAINS ; do
+ name=$(get_domname ${dom})
+ if is_running ${name} ; then
+ ebegin " Waiting for domain ${name} to shutdown"
+ xl shutdown -w ${name} >/dev/null
+ eend $?
+ else
+ einfo " Not stopping domain ${name} - not running"
+ fi
+ done
+ fi
+ if using_screen ; then
+ if ${screen_cmd} sleep 0 >/dev/null 2>&1 ; then
+ ebegin "Closing screen session ${SCREEN_NAME}"
+ ${screen_cmd} quit
+ eend $?
+ else
+ eend 0
+ fi
+ fi
+}
+
+status() {
+ /usr/sbin/xl list
+}
diff --git a/app-emulation/xen-tools/files/xenqemudev.confd b/app-emulation/xen-tools/files/xenqemudev.confd
new file mode 100644
index 000000000000..5b49520aa0ee
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenqemudev.confd
@@ -0,0 +1,7 @@
+# /etc/conf.d/xenqemudev
+
+# To enable QEMU file backend, set to 'yes'
+XENQEMUDEV_FILE_BACKEND_ENABLE=""
+
+# Common options for xenqemudev
+XENQEMUDEV_OPTS=""
diff --git a/app-emulation/xen-tools/files/xenqemudev.initd b/app-emulation/xen-tools/files/xenqemudev.initd
new file mode 100644
index 000000000000..9dcbb3f2244e
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenqemudev.initd
@@ -0,0 +1,84 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ need xencommons xenstored xenconsoled
+}
+
+is_privileged_domain() {
+ grep -qsE '^control_d$' /proc/xen/capabilities
+ return $?
+}
+
+xen_setvars() {
+ . /etc/xen/scripts/hotplugpath.sh
+
+ XENQEMUDEV_PIDFILE=/run/xenqemudev.pid
+
+ # xen-4.5 change the path
+ XEN_QEMU="${LIBEXEC}/qemu-system-i386"
+ [ -e ${XEN_QEMU} ] && return
+ XEN_QEMU="${LIBEXEC_BIN}/qemu-system-i386"
+}
+
+xen_qemu_start() {
+ if [ -z "${XENQEMUDEV_FILE_BACKEND_ENABLE}" ]; then
+ ewarn " QEMU disk backend not enabled"
+ ewarn " enable XENQEMUDEV_FILE_BACKEND_ENABLE in /etc/conf.d/xenqemudev"
+ return 1
+ fi
+
+ xen_setvars
+
+ if [ ! -c /dev/xen/gntdev ]; then
+ einfo " Xen gntdev driver not loaded"
+ return 1
+ fi
+
+ if [ -e "${XEN_QEMU}" ]; then
+ einfo " Starting QEMU as disk backend for dom0"
+
+ XENQEMUDEV_DEFAULT_OPTS="-xen-domid 0 -xen-attach -name dom0 \
+ -nographic -M xenpv -daemonize \
+ -monitor /dev/null -serial /dev/null -parallel /dev/null"
+
+ XENQEMUDEV_OPTS=${XENQEMUDEV_OPTS:-${XENQEMUDEV_DEFAULT_OPTS}}
+
+ start-stop-daemon --start --exec ${XEN_QEMU} \
+ --pidfile ${XENQEMUDEV_PIDFILE} \
+ -- -pidfile ${XENQEMUDEV_PIDFILE} \
+ ${XENQEMUDEV_OPTS}
+ return $?
+ fi
+}
+
+start() {
+ ebegin "Starting xenqemudev daemon"
+
+ # not running in Xen dom0 or domU
+ if [ ! -d /proc/xen ]; then
+ eend 1 "Not running in Xen mode"
+ return 1
+ fi
+
+ if ! is_privileged_domain; then
+ eend 1 "Not running on a privileged domain. xenqemudev not started"
+ return 1
+ fi
+
+ xen_qemu_start
+
+ eend $? "Failed to start xenqemudev"
+}
+
+stop () {
+ ebegin "Stopping xenqemudev"
+
+ xen_setvars
+
+ start-stop-daemon --stop --exec ${XEN_QEMU} \
+ --pidfile ${XENQEMUDEV_PIDFILE}
+
+ eend $? "Stopping xenqemudev, as it cannot be restarted."
+}
diff --git a/app-emulation/xen-tools/files/xenstored.confd b/app-emulation/xen-tools/files/xenstored.confd
new file mode 100644
index 000000000000..31b9293aa328
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenstored.confd
@@ -0,0 +1,2 @@
+# /etc/conf.d/xenstored
+XENSTORED_OPTS=""
diff --git a/app-emulation/xen-tools/files/xenstored.initd-r1 b/app-emulation/xen-tools/files/xenstored.initd-r1
new file mode 100644
index 000000000000..0c420851937e
--- /dev/null
+++ b/app-emulation/xen-tools/files/xenstored.initd-r1
@@ -0,0 +1,42 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+ before xendomains xend sshd ntp-client ntpd nfs rsyncd portmap dhcp
+ need xencommons
+}
+
+xenstored_dir_check() {
+ # create dir dynamically
+ local i
+ for i in /var/lock/subsys /run/xen /run/xend/boot /run/xenstored; do
+ [ -x $i ] || mkdir -p $i
+ done
+}
+
+start() {
+ ebegin "Starting xenstored daemon"
+ xenstored_dir_check
+ start-stop-daemon --start --exec /usr/sbin/xenstored \
+ --pidfile /run/xenstored.pid \
+ -- --pid-file=/run/xenstored.pid \
+ $XENSTORED_OPTS
+ until xenstore-exists / || $((15 < ++i))
+ do
+ printf "."
+ sleep 1
+ done
+ einfo "Setting domain0 name record"
+ /usr/libexec/xen/bin/xen-init-dom0
+
+ eend $*
+}
+
+stop() {
+ ebegin "Stopping xenstored daemon"
+ start-stop-daemon --stop --exec /usr/sbin/xenstored \
+ --pidfile /run/xenstored.pid
+ eend $?
+}
+
diff --git a/app-emulation/xen-tools/metadata.xml b/app-emulation/xen-tools/metadata.xml
new file mode 100644
index 000000000000..cce6b73a31ef
--- /dev/null
+++ b/app-emulation/xen-tools/metadata.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>hydrapolic@gmail.com</email>
+ <name>Tomáš Mózes</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>xen@gentoo.org</email>
+ <name>Gentoo Xen Project</name>
+ </maintainer>
+ <use>
+ <flag name="api">Build the C libxenapi bindings</flag>
+ <flag name="hvm">Enable support for hardware based virtualization (VT-x,AMD-v)</flag>
+ <flag name="ipxe">Enable ipxe support</flag>
+ <flag name="ovmf">Enable support to boot UEFI guest vm, needed by hvm</flag>
+ <flag name="pygrub">Install the pygrub boot loader</flag>
+ <flag name="qemu">Enable IOEMU support via the use of qemu-dm</flag>
+ <flag name="qemu-traditional">Build the old qemu traditional device model (useful only if you cannot change to the new device model e.g. Windows VMs)</flag>
+ <flag name="rombios">Enable rombios support, needed by ipxe</flag>
+ <flag name="screen">Enable support for running domain U console in an <pkg>app-misc/screen</pkg> session</flag>
+ <flag name="system-ipxe">Using <pkg>sys-firmware/ipxe</pkg> instead of the bundled one</flag>
+ <flag name="system-qemu">Using <pkg>app-emulation/qemu</pkg> instead of the bundled one</flag>
+ <flag name="system-seabios">Using <pkg>sys-firmware/seabios</pkg> instead of the bundled one</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/xen-tools/xen-tools-4.19.3.ebuild b/app-emulation/xen-tools/xen-tools-4.19.3.ebuild
new file mode 100644
index 000000000000..61f59f56a79c
--- /dev/null
+++ b/app-emulation/xen-tools/xen-tools-4.19.3.ebuild
@@ -0,0 +1,552 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE='ncurses,xml(+),threads(+)'
+
+inherit bash-completion-r1 flag-o-matic multilib python-single-r1 readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ REPO="xen.git"
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/${REPO}"
+ S="${WORKDIR}/${REPO}"
+else
+ KEYWORDS="amd64 ~arm ~arm64 x86"
+
+ SEABIOS_VER="1.16.0"
+ EDK2_COMMIT="b16284e2a0011489f6e16dfcc6af7623c3cbaf0b"
+ EDK2_OPENSSL_VERSION="1_1_1t"
+ EDK2_SOFTFLOAT_COMMIT="b64af41c3276f97f0e181920400ee056b9c88037"
+ EDK2_BROTLI_COMMIT="f4153a09f87cbb9c826d8fc12c74642bb2d879ea"
+ IPXE_COMMIT="1d1cf74a5e58811822bee4b3da3cff7282fcdfca"
+
+ XEN_GENTOO_PATCHSET_NUM=2
+ XEN_GENTOO_PATCHSET_BASE=4.17.0
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+ SRC_URI="
+ https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz
+ https://www.seabios.org/downloads/seabios-${SEABIOS_VER}.tar.gz
+ ipxe? ( https://xenbits.xen.org/xen-extfiles/ipxe-git-${IPXE_COMMIT}.tar.gz )
+ ovmf? ( https://github.com/tianocore/edk2/archive/${EDK2_COMMIT}.tar.gz -> edk2-${EDK2_COMMIT}.tar.gz
+ https://github.com/openssl/openssl/archive/OpenSSL_${EDK2_OPENSSL_VERSION}.tar.gz
+ https://github.com/ucb-bar/berkeley-softfloat-3/archive/${EDK2_SOFTFLOAT_COMMIT}.tar.gz -> berkeley-softfloat-${EDK2_SOFTFLOAT_COMMIT}.tar.gz
+ https://github.com/google/brotli/archive/${EDK2_BROTLI_COMMIT}.tar.gz -> brotli-${EDK2_BROTLI_COMMIT}.tar.gz
+ )
+ "
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="Xen tools including QEMU and xl"
+HOMEPAGE="https://xenproject.org"
+DOCS=( README )
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0/$(ver_cut 1-2)"
+# Inclusion of IUSE ocaml on stabalizing requires maintainer of ocaml to (get off his hands and) make
+# >=dev-lang/ocaml-4 stable
+# Masked in profiles/eapi-5-files instead
+IUSE="api debug doc +hvm +ipxe lzma ocaml ovmf pygrub python +qemu +qemu-traditional +rombios screen selinux sdl static-libs system-ipxe system-qemu system-seabios systemd zstd"
+
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ ipxe? ( rombios )
+ ovmf? ( hvm )
+ pygrub? ( python )
+ rombios? ( hvm )
+ system-ipxe? ( rombios )
+ ?? ( ipxe system-ipxe )
+ ?? ( qemu system-qemu )"
+
+COMMON_DEPEND="
+ lzma? ( app-arch/xz-utils )
+ qemu? (
+ dev-libs/glib:2
+ sys-libs/pam
+ )
+ zstd? ( app-arch/zstd )
+ app-arch/bzip2
+ app-arch/zstd
+ dev-libs/libnl:3
+ dev-libs/lzo:2
+ dev-libs/yajl
+ sys-apps/util-linux
+ sys-fs/e2fsprogs
+ sys-libs/ncurses
+ virtual/zlib:=
+ ${PYTHON_DEPS}
+"
+
+RDEPEND="${COMMON_DEPEND}
+ sys-apps/iproute2[-minimal]
+ net-misc/bridge-utils
+ screen? (
+ app-misc/screen
+ app-admin/logrotate
+ )
+ selinux? ( sec-policy/selinux-xen )"
+
+DEPEND="${COMMON_DEPEND}
+ app-misc/pax-utils
+ >=sys-kernel/linux-headers-4.11
+ x11-libs/pixman
+ $(python_gen_cond_dep '
+ dev-python/lxml[${PYTHON_USEDEP}]
+ ')
+ x86? ( sys-devel/dev86
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ sys-power/iasl )
+ api? ( dev-libs/libxml2:=
+ net-misc/curl )
+
+ ovmf? (
+ !arm? ( !arm64? ( dev-lang/nasm ) )
+ $(python_gen_impl_dep sqlite)
+ )
+ !amd64? ( >=sys-apps/dtc-1.4.0 )
+ amd64? ( sys-power/iasl
+ system-seabios? (
+ || (
+ sys-firmware/seabios
+ sys-firmware/seabios-bin
+ )
+ )
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ arm64? ( sys-power/iasl
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ doc? (
+ app-text/ghostscript-gpl
+ $(python_gen_cond_dep '
+ dev-python/markdown[${PYTHON_USEDEP}]
+ ')
+ dev-texlive/texlive-latexextra
+ >=media-gfx/fig2dev-3.2.9-r1
+ virtual/pandoc
+ )
+ hvm? ( x11-base/xorg-proto )
+ qemu? (
+ app-arch/snappy:=
+ dev-build/meson
+ sdl? (
+ media-libs/libsdl[X]
+ media-libs/libsdl2[X]
+ )
+ )
+ system-qemu? ( app-emulation/qemu[xen] )
+ ocaml? ( dev-ml/findlib
+ dev-lang/ocaml[ocamlopt] )
+ python? ( >=dev-lang/swig-4.0.0 )"
+
+BDEPEND="dev-lang/perl
+ app-alternatives/yacc
+ sys-devel/gettext
+ ipxe? ( sys-devel/gcc:* )
+ !system-seabios? ( sys-devel/gcc:* )"
+
+# hvmloader is used to bootstrap a fully virtualized kernel
+# Approved by QA team in bug #144032
+QA_WX_LOAD="
+ usr/libexec/xen/boot/hvmloader
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+ usr/share/qemu-xen/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+QA_EXECSTACK="
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+"
+
+QA_PREBUILT="
+ usr/libexec/xen/bin/elf2dmp
+ usr/libexec/xen/bin/ivshmem-client
+ usr/libexec/xen/bin/ivshmem-server
+ usr/libexec/xen/bin/qemu-edid
+ usr/libexec/xen/bin/qemu-img
+ usr/libexec/xen/bin/qemu-io
+ usr/libexec/xen/bin/qemu-keymap
+ usr/libexec/xen/bin/qemu-nbd
+ usr/libexec/xen/bin/qemu-pr-helper
+ usr/libexec/xen/bin/qemu-storage-daemon
+ usr/libexec/xen/bin/qemu-system-i386
+ usr/libexec/xen/bin/virtfs-proxy-helper
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/libexec/xen/libexec/qemu-pr-helper
+ usr/libexec/xen/libexec/virtfs-proxy-helper
+ usr/libexec/xen/libexec/virtiofsd
+ usr/libexec/xen/libexec/xen-bridge-helper
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/s390-netboot.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-4.19.1-gnu17.patch
+)
+
+pkg_setup() {
+ python_setup
+ export "CONFIG_LOMOUNT=y"
+
+ #bug 522642, disable compile tools/tests
+ export "CONFIG_TESTS=n"
+
+ if [[ -z ${XEN_TARGET_ARCH} ]] ; then
+ if use x86 && use amd64; then
+ die "Confusion! Both x86 and amd64 are set in your use flags!"
+ elif use x86; then
+ export XEN_TARGET_ARCH="x86_32"
+ elif use amd64 ; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+}
+
+src_prepare() {
+ # move before Gentoo patch, one patch should apply to seabios, to fix gcc-4.5.x build err
+ mv ../seabios-${SEABIOS_VER} tools/firmware/seabios-dir-remote || die
+ pushd tools/firmware/ > /dev/null
+ ln -s seabios-dir-remote seabios-dir || die
+ popd > /dev/null
+
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Rename qemu-bridge-helper to xen-bridge-helper to avoid file
+ # collisions with app-emulation/qemu.
+ sed -i 's/qemu-bridge-helper/xen-bridge-helper/g' \
+ tools/qemu-xen/include/net/net.h \
+ tools/qemu-xen/meson.build \
+ tools/qemu-xen/qemu-bridge-helper.c \
+ tools/qemu-xen/qemu-options.hx \
+ || die
+ mv tools/qemu-xen/qemu-bridge-helper.c tools/qemu-xen/xen-bridge-helper.c || die
+
+ if use ovmf; then
+ mv ../edk2-${EDK2_COMMIT} tools/firmware/ovmf-dir-remote || die
+ rm -r tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ rm -r tools/firmware/ovmf-dir-remote/ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 || die
+ rm -r tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ rm -r tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ mv ../openssl-OpenSSL_${EDK2_OPENSSL_VERSION} tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ mv ../berkeley-softfloat-3-${EDK2_SOFTFLOAT_COMMIT} tools/firmware/ovmf-dir-remote/ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3 || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ cp tools/firmware/ovmf-makefile tools/firmware/ovmf-dir-remote/Makefile || die
+ fi
+
+ # ipxe
+ if use ipxe; then
+ cp "${DISTDIR}/ipxe-git-${IPXE_COMMIT}.tar.gz" tools/firmware/etherboot/ipxe.tar.gz || die
+
+ # gcc 11
+ cp "${XEN_GENTOO_PATCHES_DIR}/ipxe/${PN}-4.15.0-ipxe-gcc11.patch" tools/firmware/etherboot/patches/ipxe-gcc11.patch || die
+ cp "${FILESDIR}/ipxe-force-gcc.patch" tools/firmware/etherboot/patches/ || die
+ echo ipxe-gcc11.patch >> tools/firmware/etherboot/patches/series || die
+ echo ipxe-force-gcc.patch >> tools/firmware/etherboot/patches/series || die
+ fi
+
+ # Fix texi2html build error with new texi2html, qemu.doc.html
+ sed -i -e "/texi2html -monolithic/s/-number//" tools/qemu-xen-traditional/Makefile || die
+
+ # Drop .config, fixes to gcc-4.6
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ # drop flags
+ unset CFLAGS
+ unset LDFLAGS
+ unset ASFLAGS
+ unset CPPFLAGS
+
+ if ! use pygrub; then
+ sed -e '/^SUBDIRS-y += pygrub/d' -i tools/Makefile || die
+ fi
+
+ if ! use python; then
+ sed -e '/^SUBDIRS-y += python$/d' -i tools/Makefile || die
+ fi
+
+ if ! use hvm; then
+ sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
+ # Bug 351648
+ elif ! use x86 && ! has x86 $(get_all_abis); then
+ mkdir -p "${WORKDIR}"/extra-headers/gnu || die
+ touch "${WORKDIR}"/extra-headers/gnu/stubs-32.h || die
+ export CPATH="${WORKDIR}"/extra-headers
+ fi
+
+ if use qemu; then
+ if use sdl; then
+ sed -i -e "s:\$\$source/configure:\0 --enable-sdl:" \
+ tools/Makefile || die
+ else
+ sed -i -e "s:\${QEMU_ROOT\:\-\.}/configure:\0 --disable-sdl:" \
+ tools/qemu-xen-traditional/xen-setup || die
+ sed -i -e "s:\$\$source/configure:\0 --disable-sdl:" \
+ tools/Makefile || die
+ fi
+ else
+ # Don't bother with qemu, only needed for fully virtualised guests
+ sed -i '/SUBDIRS-$(CONFIG_QEMU_XEN)/s/^/#/g' tools/Makefile || die
+ fi
+
+ # Reset bash completion dir; Bug 472438
+ sed -e "s;^BASH_COMPLETION_DIR :=.*;BASH_COMPLETION_DIR := $(get_bashcompdir);" \
+ -i config/Paths.mk.in || die
+
+ # xencommons, Bug #492332, sed lighter weight than patching
+ sed -e 's:\$QEMU_XEN -xen-domid:test -e "\$QEMU_XEN" \&\& &:' \
+ -i tools/hotplug/Linux/init.d/xencommons.in || die
+
+ # fix bashishm
+ sed -e '/Usage/s/\$//g' \
+ -i tools/hotplug/Linux/init.d/xendriverdomain.in || die
+
+ # respect multilib, usr/lib/libcacard.so.0.0.0
+ sed -e "/^libdir=/s/\/lib/\/$(get_libdir)/" \
+ -i tools/qemu-xen/configure || die
+
+ #bug 518136, don't build 32bit exactuable for nomultilib profile
+ if [[ "${ARCH}" == 'amd64' ]] && ! has_multilib_profile; then
+ sed -i -e "/x86_emulator/d" tools/tests/Makefile || die
+ fi
+
+ # uncomment lines in xl.conf
+ sed -e 's:^#autoballoon=:autoballoon=:' \
+ -e 's:^#lockfile=:lockfile=:' \
+ -e 's:^#vif.default.script=:vif.default.script=:' \
+ -i tools/examples/xl.conf || die
+
+ # disable capstone (Bug #673474)
+ sed -e "s:\$\$source/configure:\0 --disable-capstone:" \
+ -i tools/Makefile || die
+
+ # disable glusterfs
+ sed -e "s:\$\$source/configure:\0 --disable-glusterfs:" \
+ -i tools/Makefile || die
+
+ # disable jpeg automagic
+ sed -e "s:\$\$source/configure:\0 --disable-vnc-jpeg:" \
+ -i tools/Makefile || die
+
+ # disable png automagic
+ sed -e "s:\$\$source/configure:\0 --disable-png:" \
+ -i tools/Makefile || die
+
+ # disable docker (Bug #732970)
+ sed -e "s:\$\$source/configure:\0 --disable-containers:" \
+ -i tools/Makefile || die
+
+ # disable gettext (Bug #937219)
+ sed -e "s:\$\$source/configure:\0 --disable-gettext:" \
+ -i tools/Makefile || die
+
+ # disable abi-dumper (Bug #791172)
+ sed -e 's/$(ABI_DUMPER) /echo /g' \
+ -i tools/libs/libs.mk || die
+
+ # disable header check (Bug #921932)
+ sed -e '/__XEN_INTERFACE_VERSION__/,+2d' \
+ -i tools/qemu-xen/include/hw/xen/xen_native.h || die
+
+ # Remove -Werror
+ find . -type f \( -name Makefile -o -name "*.mk" \) \
+ -exec sed -i \
+ -e 's/-Werror //g' \
+ -e '/^CFLAGS *+= -Werror$/d' \
+ -e 's/, "-Werror"//' \
+ {} + || die
+
+ if use ovmf ; then
+ # textrels cause failures w/ hardened binutils
+ pushd tools/firmware/ovmf-dir-remote > /dev/null || die
+ eapply "${FILESDIR}"/edk2-202202-binutils-2.41-textrels.patch
+ popd > /dev/null || die
+
+ # Use gnu17 because incompatible w/ C23
+ sed -i -e "s:-DZZLEXBUFSIZE=65536:-DZZLEXBUFSIZE=65536 -std=gnu17:" \
+ tools/firmware/ovmf-dir-remote/BaseTools/Source/C/VfrCompile/Pccts/*/makefile || die
+ fi
+
+ if ! use system-seabios ; then
+ sed -i "/^export HOSTCC/i override CC:=gcc" tools/firmware/seabios-dir/Makefile || die
+ fi
+
+ default
+}
+
+src_configure() {
+ local myconf=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ --libexecdir="${EPREFIX}/usr/libexec"
+ --localstatedir="${EPREFIX}/var"
+ --disable-golang
+ --disable-pvshim
+ --disable-werror
+ --disable-xen
+ --enable-tools
+ --enable-docs
+ $(use_enable api xenapi)
+ $(use_enable ipxe)
+ $(usex system-ipxe '--with-system-ipxe=/usr/share/ipxe' '')
+ $(use_enable ocaml ocamltools)
+ $(use_enable ovmf)
+ $(use_enable rombios)
+ $(use_enable systemd)
+ --with-xenstored=$(usex ocaml 'oxenstored' 'xenstored')
+ )
+
+ use system-seabios && myconf+=( --with-system-seabios=/usr/share/seabios/bios.bin )
+ use system-qemu && myconf+=( --with-system-qemu=/usr/bin/qemu-system-x86_64 )
+ use amd64 && myconf+=( $(use_enable qemu-traditional) )
+ tc-ld-disable-gold # Bug 669570
+ econf ${myconf[@]}
+}
+
+src_compile() {
+ local myopt
+ use debug && myopt="${myopt} debug=y"
+ use python && myopt="${myopt} XENSTAT_PYTHON_BINDINGS=y"
+
+ if test-flag-CC -fno-strict-overflow; then
+ append-flags -fno-strict-overflow
+ fi
+
+ # bug #845099
+ if use ipxe; then
+ local -x NO_WERROR=1
+ fi
+
+ emake \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ build-tools ${myopt}
+
+ if use doc; then
+ emake -C docs build
+ else
+ emake -C docs man-pages
+ fi
+}
+
+src_install() {
+ # Override auto-detection in the build system, bug #382573
+ export INITD_DIR=/tmp/init.d
+ export CONFIG_LEAF_DIR=../tmp/default
+
+ # Let the build system compile installed Python modules.
+ local PYTHONDONTWRITEBYTECODE
+ export PYTHONDONTWRITEBYTECODE
+
+ emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" \
+ XEN_PYTHON_NATIVE_INSTALL=y install-tools
+
+ # Fix the remaining Python shebangs.
+ python_fix_shebang "${D}"
+
+ # Remove RedHat-specific stuff
+ rm -rf "${D}"/tmp || die
+
+ if use doc; then
+ emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
+ dodoc -r docs/{pdf,txt}
+ else
+ emake -C docs DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-man-pages # Bug 668032
+ fi
+ dodoc ${DOCS[@]}
+
+ newconfd "${FILESDIR}"/xendomains.confd xendomains
+ newconfd "${FILESDIR}"/xenstored.confd xenstored
+ newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
+ newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
+ newinitd "${FILESDIR}"/xenstored.initd-r1 xenstored
+ newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
+ newinitd "${FILESDIR}"/xencommons.initd xencommons
+ newconfd "${FILESDIR}"/xencommons.confd xencommons
+ newinitd "${FILESDIR}"/xenqemudev.initd xenqemudev
+ newconfd "${FILESDIR}"/xenqemudev.confd xenqemudev
+ newinitd "${FILESDIR}"/xen-watchdog.initd xen-watchdog
+
+ if use screen; then
+ cat "${FILESDIR}"/xendomains-screen.confd >> "${D}"/etc/conf.d/xendomains || die
+ cp "${FILESDIR}"/xen-consoles.logrotate "${D}"/etc/xen/ || die
+ keepdir /var/log/xen-consoles
+ fi
+
+ # For -static-libs wrt Bug 384355
+ if ! use static-libs; then
+ rm -f "${D}"/usr/$(get_libdir)/*.a "${D}"/usr/$(get_libdir)/ocaml/*/*.a
+ fi
+
+ # for xendomains
+ keepdir /etc/xen/auto
+
+ # Remove files failing QA AFTER emake installs them, avoiding seeking absent files
+ find "${D}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
+ -o -name openbios-ppc -o -name palcode-clipper \) -delete || die
+
+ keepdir /var/lib/xen/dump
+ keepdir /var/lib/xen/xenpaging
+ keepdir /var/lib/xenstored
+ keepdir /var/log/xen
+
+ if use python; then
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/xenstat.py"
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/_xenstat.so"
+ fi
+
+ python_optimize
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/xen-tools/xen-tools-4.20.2.ebuild b/app-emulation/xen-tools/xen-tools-4.20.2.ebuild
new file mode 100644
index 000000000000..1a108f49cbb4
--- /dev/null
+++ b/app-emulation/xen-tools/xen-tools-4.20.2.ebuild
@@ -0,0 +1,579 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE='ncurses,xml(+),threads(+)'
+
+inherit bash-completion-r1 flag-o-matic multilib python-single-r1 readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ REPO="xen.git"
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/${REPO}"
+ S="${WORKDIR}/${REPO}"
+else
+ KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+
+ EDK2_BROTLI_COMMIT="028fb5a23661f123017c060daa546b55cf4bde29"
+ EDK2_COMMIT="1c74842bd07a48070d1cf3458f0b6b377e3ec8b9"
+ EDK2_MIPISYST_COMMIT="370b5944c046bab043dd8b133727b2135af7747a"
+ EDK2_OPENSSL_VERSION="3.5.1"
+ IPXE_COMMIT="1d1cf74a5e58811822bee4b3da3cff7282fcdfca"
+ QEMU_VERSION="4.20.1"
+ QEMU_TRADITIONAL_VERSION="4.20.0"
+ QEMU_DTC_VERSION="1.6.1"
+ QEMU_KEYCODEMAPDB_COMMIT="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ QEMU_SOFTFLOAD_COMMIT="b64af41c3276f97f0e181920400ee056b9c88037"
+ QEMU_TESTFLOAD_COMMIT="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ SEABIOS_VER="1.16.3"
+
+ XEN_GENTOO_PATCHSET_NUM=0
+ XEN_GENTOO_PATCHSET_BASE=4.20.1
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+
+ SRC_URI="
+ https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz
+ https://www.seabios.org/downloads/seabios-${SEABIOS_VER}.tar.gz
+ https://github.com/hydrapolic/gentoo-dist/releases/download/xen-4.20.1/qemu-xen-${QEMU_VERSION}.tar.gz
+ https://github.com/hydrapolic/gentoo-dist/releases/download/xen-4.20.1/qemu-xen-traditional-${QEMU_TRADITIONAL_VERSION}.tar.gz
+ https://gitlab.com/qemu-project/dtc/-/archive/v${QEMU_DTC_VERSION}/dtc-v${QEMU_DTC_VERSION}.tar.gz?ref_type=tags -> xen-qemu-dtc-${QEMU_DTC_VERSION}.tar.gz
+ https://gitlab.com/qemu-project/keycodemapdb/-/archive/${QEMU_KEYCODEMAPDB_COMMIT}/keycodemapdb-${QEMU_KEYCODEMAPDB_COMMIT}.tar.gz -> xen-qemu-keycodemapdb-${KEYCODEMAPDB_COMMIT}.tar.gz
+ https://gitlab.com/qemu-project/berkeley-softfloat-3/-/archive/${QEMU_SOFTFLOAD_COMMIT}/berkeley-softfloat-3-${QEMU_SOFTFLOAD_COMMIT}.tar.gz -> xen-qemu-softload-${QEMU_SOFTFLOAD_COMMIT}.tar.gz
+ https://gitlab.com/qemu-project/berkeley-testfloat-3/-/archive/${QEMU_TESTFLOAD_COMMIT}/berkeley-testfloat-3-${QEMU_TESTFLOAD_COMMIT}.tar.gz -> xen-qemu-testload-${QEMU_TESTFLOAD_COMMIT}.tar.gz
+ ipxe? ( https://xenbits.xen.org/xen-extfiles/ipxe-git-${IPXE_COMMIT}.tar.gz )
+ ovmf? ( https://github.com/tianocore/edk2/archive/${EDK2_COMMIT}.tar.gz -> edk2-${EDK2_COMMIT}.tar.gz
+ https://github.com/openssl/openssl/releases/download/openssl-${EDK2_OPENSSL_VERSION}/openssl-${EDK2_OPENSSL_VERSION}.tar.gz -> xen-ovmf-openssl-${EDK2_OPENSSL_VERSION}.tar.gz
+ https://github.com/google/brotli/archive/${EDK2_BROTLI_COMMIT}.tar.gz -> brotli-${EDK2_BROTLI_COMMIT}.tar.gz
+ https://github.com/MIPI-Alliance/public-mipi-sys-t/archive/${EDK2_MIPISYST_COMMIT}.tar.gz -> xen-ovmf-mipisyst-${EDK2_MIPISYST_COMMIT}.tar.gz
+ )
+ "
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="Xen tools including QEMU and xl"
+HOMEPAGE="https://xenproject.org"
+DOCS=( README )
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0/$(ver_cut 1-2)"
+# Inclusion of IUSE ocaml on stabalizing requires maintainer of ocaml to (get off his hands and) make
+# >=dev-lang/ocaml-4 stable
+# Masked in profiles/eapi-5-files instead
+IUSE="api debug doc +hvm +ipxe lzma ocaml ovmf pygrub python +qemu +qemu-traditional +rombios screen selinux sdl static-libs system-ipxe system-qemu system-seabios systemd zstd"
+
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ ipxe? ( rombios )
+ ovmf? ( hvm )
+ pygrub? ( python )
+ rombios? ( hvm )
+ system-ipxe? ( rombios )
+ ?? ( ipxe system-ipxe )
+ ?? ( qemu system-qemu )"
+
+COMMON_DEPEND="
+ lzma? ( app-arch/xz-utils )
+ qemu? (
+ dev-libs/glib:2
+ sys-libs/pam
+ )
+ zstd? ( app-arch/zstd )
+ app-arch/bzip2
+ app-arch/zstd
+ dev-libs/libnl:3
+ dev-libs/lzo:2
+ dev-libs/yajl
+ sys-apps/util-linux
+ sys-fs/e2fsprogs
+ sys-libs/ncurses
+ virtual/zlib:=
+ ${PYTHON_DEPS}
+"
+
+RDEPEND="${COMMON_DEPEND}
+ sys-apps/iproute2[-minimal]
+ net-misc/bridge-utils
+ screen? (
+ app-misc/screen
+ app-admin/logrotate
+ )
+ selinux? ( sec-policy/selinux-xen )"
+
+DEPEND="${COMMON_DEPEND}
+ app-misc/pax-utils
+ >=sys-kernel/linux-headers-4.11
+ x11-libs/pixman
+ $(python_gen_cond_dep '
+ dev-python/lxml[${PYTHON_USEDEP}]
+ ')
+ x86? ( sys-devel/dev86
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ sys-power/iasl )
+ api? ( dev-libs/libxml2:=
+ net-misc/curl )
+
+ ovmf? (
+ !arm? ( !arm64? ( dev-lang/nasm ) )
+ $(python_gen_impl_dep sqlite)
+ )
+ !amd64? ( >=sys-apps/dtc-1.4.0 )
+ amd64? ( sys-power/iasl
+ system-seabios? (
+ || (
+ sys-firmware/seabios
+ sys-firmware/seabios-bin
+ )
+ )
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ arm64? ( sys-power/iasl
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ doc? (
+ app-text/ghostscript-gpl
+ $(python_gen_cond_dep '
+ dev-python/markdown[${PYTHON_USEDEP}]
+ ')
+ dev-texlive/texlive-latexextra
+ >=media-gfx/fig2dev-3.2.9-r1
+ virtual/pandoc
+ )
+ hvm? ( x11-base/xorg-proto )
+ qemu? (
+ app-arch/snappy:=
+ dev-build/meson
+ $(python_gen_cond_dep '
+ dev-python/distlib[${PYTHON_USEDEP}]
+ ')
+ sdl? (
+ media-libs/libsdl[X]
+ media-libs/libsdl2[X]
+ )
+ )
+ system-qemu? ( app-emulation/qemu[xen] )
+ ocaml? ( dev-ml/findlib
+ dev-lang/ocaml[ocamlopt] )
+ python? ( >=dev-lang/swig-4.0.0 )"
+
+BDEPEND="dev-lang/perl
+ app-alternatives/yacc
+ sys-devel/gettext
+ ipxe? ( sys-devel/gcc:* )
+ !system-seabios? ( sys-devel/gcc:* )"
+
+# hvmloader is used to bootstrap a fully virtualized kernel
+# Approved by QA team in bug #144032
+QA_WX_LOAD="
+ usr/libexec/xen/boot/hvmloader
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+ usr/share/qemu-xen/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+QA_EXECSTACK="
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+"
+
+QA_PREBUILT="
+ usr/libexec/xen/bin/elf2dmp
+ usr/libexec/xen/bin/ivshmem-client
+ usr/libexec/xen/bin/ivshmem-server
+ usr/libexec/xen/bin/qemu-edid
+ usr/libexec/xen/bin/qemu-img
+ usr/libexec/xen/bin/qemu-io
+ usr/libexec/xen/bin/qemu-keymap
+ usr/libexec/xen/bin/qemu-nbd
+ usr/libexec/xen/bin/qemu-pr-helper
+ usr/libexec/xen/bin/qemu-storage-daemon
+ usr/libexec/xen/bin/qemu-system-i386
+ usr/libexec/xen/bin/virtfs-proxy-helper
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/libexec/xen/libexec/qemu-pr-helper
+ usr/libexec/xen/libexec/virtfs-proxy-helper
+ usr/libexec/xen/libexec/virtiofsd
+ usr/libexec/xen/libexec/xen-bridge-helper
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/s390-netboot.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-4.19.1-gnu17.patch
+)
+
+pkg_setup() {
+ python_setup
+ export "CONFIG_LOMOUNT=y"
+
+ #bug 522642, disable compile tools/tests
+ export "CONFIG_TESTS=n"
+
+ if [[ -z ${XEN_TARGET_ARCH} ]] ; then
+ if use x86 && use amd64; then
+ die "Confusion! Both x86 and amd64 are set in your use flags!"
+ elif use x86; then
+ export XEN_TARGET_ARCH="x86_32"
+ elif use amd64 ; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+}
+
+src_prepare() {
+ mv ../qemu-xen tools/qemu-xen || die
+ mv ../qemu-xen-traditional tools/qemu-xen-traditional || die
+
+ mv ../dtc-v${QEMU_DTC_VERSION} tools/qemu-xen/subprojects/dtc || die
+ mv ../keycodemapdb-${QEMU_KEYCODEMAPDB_COMMIT} tools/qemu-xen/subprojects/keycodemapdb || die
+ mv ../berkeley-softfloat-3-${QEMU_SOFTFLOAD_COMMIT} tools/qemu-xen/subprojects/berkeley-softfloat-3 || die
+ mv ../berkeley-testfloat-3-${QEMU_TESTFLOAD_COMMIT} tools/qemu-xen/subprojects/berkeley-testfloat-3 || die
+
+ mv tools/qemu-xen/subprojects/packagefiles/berkeley-softfloat-3/meson* tools/qemu-xen/subprojects/berkeley-softfloat-3/ || die
+ mv tools/qemu-xen/subprojects/packagefiles/berkeley-testfloat-3/meson* tools/qemu-xen/subprojects/berkeley-testfloat-3/ || die
+
+ # move before Gentoo patch, one patch should apply to seabios, to fix gcc-4.5.x build err
+ mv ../seabios-${SEABIOS_VER} tools/firmware/seabios-dir-remote || die
+ pushd tools/firmware/ > /dev/null
+ ln -s seabios-dir-remote seabios-dir || die
+ popd > /dev/null
+
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Rename qemu-bridge-helper to xen-bridge-helper to avoid file
+ # collisions with app-emulation/qemu.
+ sed -i 's/qemu-bridge-helper/xen-bridge-helper/g' \
+ tools/qemu-xen/include/net/net.h \
+ tools/qemu-xen/meson.build \
+ tools/qemu-xen/qemu-bridge-helper.c \
+ tools/qemu-xen/qemu-options.hx \
+ || die
+ mv tools/qemu-xen/qemu-bridge-helper.c tools/qemu-xen/xen-bridge-helper.c || die
+
+ if use ovmf; then
+ mv ../edk2-${EDK2_COMMIT} tools/firmware/ovmf-dir-remote || die
+ rm -r tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ rm -r tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ rm -r tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ rm -r tools/firmware/ovmf-dir-remote/MdePkg/Library/MipiSysTLib || die
+ mv ../openssl-${EDK2_OPENSSL_VERSION} tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ mv ../public-mipi-sys-t-${EDK2_MIPISYST_COMMIT} tools/firmware/ovmf-dir-remote/MdePkg/Library/MipiSysTLib || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ cp tools/firmware/ovmf-makefile tools/firmware/ovmf-dir-remote/Makefile || die
+ fi
+
+ # ipxe
+ if use ipxe; then
+ cp "${DISTDIR}/ipxe-git-${IPXE_COMMIT}.tar.gz" tools/firmware/etherboot/ipxe.tar.gz || die
+
+ # gcc 11
+ cp "${XEN_GENTOO_PATCHES_DIR}/ipxe/${PN}-4.15.0-ipxe-gcc11.patch" tools/firmware/etherboot/patches/ipxe-gcc11.patch || die
+ cp "${FILESDIR}/ipxe-force-gcc.patch" tools/firmware/etherboot/patches/ || die
+ echo ipxe-gcc11.patch >> tools/firmware/etherboot/patches/series || die
+ echo ipxe-force-gcc.patch >> tools/firmware/etherboot/patches/series || die
+ fi
+
+ # Fix texi2html build error with new texi2html, qemu.doc.html
+ sed -i -e "/texi2html -monolithic/s/-number//" tools/qemu-xen-traditional/Makefile || die
+
+ # Drop .config, fixes to gcc-4.6
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ # drop flags
+ unset CFLAGS
+ unset LDFLAGS
+ unset ASFLAGS
+ unset CPPFLAGS
+
+ if ! use pygrub; then
+ sed -e '/^SUBDIRS-y += pygrub/d' -i tools/Makefile || die
+ fi
+
+ if ! use python; then
+ sed -e '/^SUBDIRS-y += python$/d' -i tools/Makefile || die
+ fi
+
+ if ! use hvm; then
+ sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
+ # Bug 351648
+ elif ! use x86 && ! has x86 $(get_all_abis); then
+ mkdir -p "${WORKDIR}"/extra-headers/gnu || die
+ touch "${WORKDIR}"/extra-headers/gnu/stubs-32.h || die
+ export CPATH="${WORKDIR}"/extra-headers
+ fi
+
+ if use qemu; then
+ if use sdl; then
+ sed -i -e "s:\$\$source/configure:\0 --enable-sdl:" \
+ tools/Makefile || die
+ else
+ sed -i -e "s:\${QEMU_ROOT\:\-\.}/configure:\0 --disable-sdl:" \
+ tools/qemu-xen-traditional/xen-setup || die
+ sed -i -e "s:\$\$source/configure:\0 --disable-sdl:" \
+ tools/Makefile || die
+ fi
+ else
+ # Don't bother with qemu, only needed for fully virtualised guests
+ sed -i '/SUBDIRS-$(CONFIG_QEMU_XEN)/s/^/#/g' tools/Makefile || die
+ fi
+
+ # Reset bash completion dir; Bug 472438
+ sed -e "s;^BASH_COMPLETION_DIR :=.*;BASH_COMPLETION_DIR := $(get_bashcompdir);" \
+ -i config/Paths.mk.in || die
+
+ # xencommons, Bug #492332, sed lighter weight than patching
+ sed -e 's:\$QEMU_XEN -xen-domid:test -e "\$QEMU_XEN" \&\& &:' \
+ -i tools/hotplug/Linux/init.d/xencommons.in || die
+
+ # fix bashishm
+ sed -e '/Usage/s/\$//g' \
+ -i tools/hotplug/Linux/init.d/xendriverdomain.in || die
+
+ # respect multilib, usr/lib/libcacard.so.0.0.0
+ sed -e "/^libdir=/s/\/lib/\/$(get_libdir)/" \
+ -i tools/qemu-xen/configure || die
+
+ #bug 518136, don't build 32bit exactuable for nomultilib profile
+ if [[ "${ARCH}" == 'amd64' ]] && ! has_multilib_profile; then
+ sed -i -e "/x86_emulator/d" tools/tests/Makefile || die
+ fi
+
+ # uncomment lines in xl.conf
+ sed -e 's:^#autoballoon=:autoballoon=:' \
+ -e 's:^#lockfile=:lockfile=:' \
+ -e 's:^#vif.default.script=:vif.default.script=:' \
+ -i tools/examples/xl.conf || die
+
+ # disable capstone (Bug #673474)
+ sed -e "s:\$\$source/configure:\0 --disable-capstone:" \
+ -i tools/Makefile || die
+
+ # disable glusterfs
+ sed -e "s:\$\$source/configure:\0 --disable-glusterfs:" \
+ -i tools/Makefile || die
+
+ # disable jpeg automagic
+ sed -e "s:\$\$source/configure:\0 --disable-vnc-jpeg:" \
+ -i tools/Makefile || die
+
+ # disable png automagic
+ sed -e "s:\$\$source/configure:\0 --disable-png:" \
+ -i tools/Makefile || die
+
+ # disable docker (Bug #732970)
+ sed -e "s:\$\$source/configure:\0 --disable-containers:" \
+ -i tools/Makefile || die
+
+ # disable gettext (Bug #937219)
+ sed -e "s:\$\$source/configure:\0 --disable-gettext:" \
+ -i tools/Makefile || die
+
+ # disable abi-dumper (Bug #791172)
+ sed -e 's/$(ABI_DUMPER) /echo /g' \
+ -i tools/libs/libs.mk || die
+
+ # disable header check (Bug #921932)
+ sed -e '/__XEN_INTERFACE_VERSION__/,+2d' \
+ -i tools/qemu-xen/include/hw/xen/xen_native.h || die
+
+ # Remove -Werror
+ find . -type f \( -name Makefile -o -name "*.mk" \) \
+ -exec sed -i \
+ -e 's/-Werror //g' \
+ -e '/^CFLAGS *+= -Werror$/d' \
+ -e 's/, "-Werror"//' \
+ {} + || die
+
+ if use ovmf ; then
+ # textrels cause failures w/ hardened binutils
+ pushd tools/firmware/ovmf-dir-remote > /dev/null || die
+ eapply "${FILESDIR}"/edk2-202202-binutils-2.41-textrels.patch
+ popd > /dev/null || die
+
+ # Use gnu17 because incompatible w/ C23
+ sed -i -e "s:-DZZLEXBUFSIZE=65536:-DZZLEXBUFSIZE=65536 -std=gnu17:" \
+ tools/firmware/ovmf-dir-remote/BaseTools/Source/C/VfrCompile/Pccts/*/makefile || die
+ fi
+
+ if ! use system-seabios ; then
+ sed -i "/^export HOSTCC/i override CC:=gcc" tools/firmware/seabios-dir/Makefile || die
+ fi
+
+ default
+}
+
+src_configure() {
+ local myconf=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ --libexecdir="${EPREFIX}/usr/libexec"
+ --localstatedir="${EPREFIX}/var"
+ --disable-golang
+ --disable-pvshim
+ --disable-werror
+ --disable-xen
+ --enable-tools
+ --enable-docs
+ $(use_enable api xenapi)
+ $(use_enable ipxe)
+ $(usex system-ipxe '--with-system-ipxe=/usr/share/ipxe' '')
+ $(use_enable ocaml ocamltools)
+ $(use_enable ovmf)
+ $(use_enable rombios)
+ $(use_enable systemd)
+ --with-xenstored=$(usex ocaml 'oxenstored' 'xenstored')
+ )
+
+ use system-seabios && myconf+=( --with-system-seabios=/usr/share/seabios/bios.bin )
+ use system-qemu && myconf+=( --with-system-qemu=/usr/bin/qemu-system-x86_64 )
+ use amd64 && myconf+=( $(use_enable qemu-traditional) )
+ tc-ld-disable-gold # Bug 669570
+ econf ${myconf[@]}
+}
+
+src_compile() {
+ local myopt
+ use debug && myopt="${myopt} debug=y"
+ use python && myopt="${myopt} XENSTAT_PYTHON_BINDINGS=y"
+
+ if test-flag-CC -fno-strict-overflow; then
+ append-flags -fno-strict-overflow
+ fi
+
+ # bug #845099
+ if use ipxe; then
+ local -x NO_WERROR=1
+ fi
+
+ emake \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ build-tools ${myopt}
+
+ if use doc; then
+ emake -C docs build
+ else
+ emake -C docs man-pages
+ fi
+}
+
+src_install() {
+ # Override auto-detection in the build system, bug #382573
+ export INITD_DIR=/tmp/init.d
+ export CONFIG_LEAF_DIR=../tmp/default
+
+ # Let the build system compile installed Python modules.
+ local PYTHONDONTWRITEBYTECODE
+ export PYTHONDONTWRITEBYTECODE
+
+ emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" \
+ XEN_PYTHON_NATIVE_INSTALL=y install-tools
+
+ # Fix the remaining Python shebangs.
+ python_fix_shebang "${D}"
+
+ # Remove RedHat-specific stuff
+ rm -rf "${D}"/tmp || die
+
+ if use doc; then
+ emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
+ dodoc -r docs/{pdf,txt}
+ else
+ emake -C docs DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-man-pages # Bug 668032
+ fi
+ dodoc ${DOCS[@]}
+
+ newconfd "${FILESDIR}"/xendomains.confd xendomains
+ newconfd "${FILESDIR}"/xenstored.confd xenstored
+ newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
+ newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
+ newinitd "${FILESDIR}"/xenstored.initd-r1 xenstored
+ newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
+ newinitd "${FILESDIR}"/xencommons.initd xencommons
+ newconfd "${FILESDIR}"/xencommons.confd xencommons
+ newinitd "${FILESDIR}"/xenqemudev.initd xenqemudev
+ newconfd "${FILESDIR}"/xenqemudev.confd xenqemudev
+ newinitd "${FILESDIR}"/xen-watchdog.initd xen-watchdog
+
+ if use screen; then
+ cat "${FILESDIR}"/xendomains-screen.confd >> "${D}"/etc/conf.d/xendomains || die
+ cp "${FILESDIR}"/xen-consoles.logrotate "${D}"/etc/xen/ || die
+ keepdir /var/log/xen-consoles
+ fi
+
+ # For -static-libs wrt Bug 384355
+ if ! use static-libs; then
+ rm -f "${D}"/usr/$(get_libdir)/*.a "${D}"/usr/$(get_libdir)/ocaml/*/*.a
+ fi
+
+ # for xendomains
+ keepdir /etc/xen/auto
+
+ # Remove files failing QA AFTER emake installs them, avoiding seeking absent files
+ find "${D}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
+ -o -name openbios-ppc -o -name palcode-clipper \) -delete || die
+
+ keepdir /var/lib/xen/dump
+ keepdir /var/lib/xen/xenpaging
+ keepdir /var/lib/xenstored
+ keepdir /var/log/xen
+
+ if use python; then
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/xenstat.py"
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/_xenstat.so"
+ fi
+
+ python_optimize
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/xen-tools/xen-tools-4.20.3.ebuild b/app-emulation/xen-tools/xen-tools-4.20.3.ebuild
new file mode 100644
index 000000000000..6e529e0370fe
--- /dev/null
+++ b/app-emulation/xen-tools/xen-tools-4.20.3.ebuild
@@ -0,0 +1,578 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+PYTHON_REQ_USE='ncurses,xml(+),threads(+)'
+
+inherit bash-completion-r1 flag-o-matic multilib python-single-r1 readme.gentoo-r1 toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ REPO="xen.git"
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/${REPO}"
+ S="${WORKDIR}/${REPO}"
+else
+ KEYWORDS="amd64 ~arm ~arm64 x86"
+
+ EDK2_BROTLI_COMMIT="028fb5a23661f123017c060daa546b55cf4bde29"
+ EDK2_COMMIT="1c74842bd07a48070d1cf3458f0b6b377e3ec8b9"
+ EDK2_MIPISYST_COMMIT="370b5944c046bab043dd8b133727b2135af7747a"
+ EDK2_OPENSSL_VERSION="3.5.1"
+ IPXE_COMMIT="1d1cf74a5e58811822bee4b3da3cff7282fcdfca"
+ QEMU_VERSION="4.20.1"
+ QEMU_TRADITIONAL_VERSION="4.20.0"
+ QEMU_DTC_VERSION="1.6.1"
+ QEMU_KEYCODEMAPDB_COMMIT="f5772a62ec52591ff6870b7e8ef32482371f22c6"
+ QEMU_SOFTFLOAD_COMMIT="b64af41c3276f97f0e181920400ee056b9c88037"
+ QEMU_TESTFLOAD_COMMIT="e7af9751d9f9fd3b47911f51a5cfd08af256a9ab"
+ SEABIOS_VER="1.16.3"
+
+ XEN_GENTOO_PATCHSET_NUM=0
+ XEN_GENTOO_PATCHSET_BASE=4.20.1
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+
+ SRC_URI="
+ https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz
+ https://www.seabios.org/downloads/seabios-${SEABIOS_VER}.tar.gz
+ https://github.com/hydrapolic/gentoo-dist/releases/download/xen-4.20.1/qemu-xen-${QEMU_VERSION}.tar.gz
+ https://github.com/hydrapolic/gentoo-dist/releases/download/xen-4.20.1/qemu-xen-traditional-${QEMU_TRADITIONAL_VERSION}.tar.gz
+ https://gitlab.com/qemu-project/dtc/-/archive/v${QEMU_DTC_VERSION}/dtc-v${QEMU_DTC_VERSION}.tar.gz?ref_type=tags -> xen-qemu-dtc-${QEMU_DTC_VERSION}.tar.gz
+ https://gitlab.com/qemu-project/keycodemapdb/-/archive/${QEMU_KEYCODEMAPDB_COMMIT}/keycodemapdb-${QEMU_KEYCODEMAPDB_COMMIT}.tar.gz -> xen-qemu-keycodemapdb-${KEYCODEMAPDB_COMMIT}.tar.gz
+ https://gitlab.com/qemu-project/berkeley-softfloat-3/-/archive/${QEMU_SOFTFLOAD_COMMIT}/berkeley-softfloat-3-${QEMU_SOFTFLOAD_COMMIT}.tar.gz -> xen-qemu-softload-${QEMU_SOFTFLOAD_COMMIT}.tar.gz
+ https://gitlab.com/qemu-project/berkeley-testfloat-3/-/archive/${QEMU_TESTFLOAD_COMMIT}/berkeley-testfloat-3-${QEMU_TESTFLOAD_COMMIT}.tar.gz -> xen-qemu-testload-${QEMU_TESTFLOAD_COMMIT}.tar.gz
+ ipxe? ( https://xenbits.xen.org/xen-extfiles/ipxe-git-${IPXE_COMMIT}.tar.gz )
+ ovmf? ( https://github.com/tianocore/edk2/archive/${EDK2_COMMIT}.tar.gz -> edk2-${EDK2_COMMIT}.tar.gz
+ https://github.com/openssl/openssl/releases/download/openssl-${EDK2_OPENSSL_VERSION}/openssl-${EDK2_OPENSSL_VERSION}.tar.gz -> xen-ovmf-openssl-${EDK2_OPENSSL_VERSION}.tar.gz
+ https://github.com/google/brotli/archive/${EDK2_BROTLI_COMMIT}.tar.gz -> brotli-${EDK2_BROTLI_COMMIT}.tar.gz
+ https://github.com/MIPI-Alliance/public-mipi-sys-t/archive/${EDK2_MIPISYST_COMMIT}.tar.gz -> xen-ovmf-mipisyst-${EDK2_MIPISYST_COMMIT}.tar.gz
+ )
+ "
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="Xen tools including QEMU and xl"
+HOMEPAGE="https://xenproject.org"
+DOCS=( README )
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0/$(ver_cut 1-2)"
+# Inclusion of IUSE ocaml on stabalizing requires maintainer of ocaml to (get off his hands and) make
+# >=dev-lang/ocaml-4 stable
+# Masked in profiles/eapi-5-files instead
+IUSE="api debug doc +hvm +ipxe lzma ocaml ovmf pygrub python +qemu +qemu-traditional +rombios screen selinux sdl static-libs system-ipxe system-qemu system-seabios systemd zstd"
+
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ ipxe? ( rombios )
+ ovmf? ( hvm )
+ pygrub? ( python )
+ rombios? ( hvm )
+ system-ipxe? ( rombios )
+ ?? ( ipxe system-ipxe )
+ ?? ( qemu system-qemu )"
+
+COMMON_DEPEND="
+ lzma? ( app-arch/xz-utils )
+ qemu? (
+ dev-libs/glib:2
+ sys-libs/pam
+ )
+ zstd? ( app-arch/zstd )
+ app-arch/bzip2
+ app-arch/zstd
+ dev-libs/libnl:3
+ dev-libs/lzo:2
+ dev-libs/yajl
+ sys-apps/util-linux
+ sys-fs/e2fsprogs
+ sys-libs/ncurses
+ virtual/zlib:=
+ ${PYTHON_DEPS}
+"
+
+RDEPEND="${COMMON_DEPEND}
+ sys-apps/iproute2[-minimal]
+ net-misc/bridge-utils
+ screen? (
+ app-misc/screen
+ app-admin/logrotate
+ )
+ selinux? ( sec-policy/selinux-xen )"
+
+DEPEND="${COMMON_DEPEND}
+ app-misc/pax-utils
+ >=sys-kernel/linux-headers-4.11
+ x11-libs/pixman
+ $(python_gen_cond_dep '
+ dev-python/lxml[${PYTHON_USEDEP}]
+ ')
+ x86? ( sys-devel/dev86
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ sys-power/iasl )
+ api? ( dev-libs/libxml2:=
+ net-misc/curl )
+
+ ovmf? (
+ !arm? ( !arm64? ( dev-lang/nasm ) )
+ $(python_gen_impl_dep sqlite)
+ )
+ !amd64? ( >=sys-apps/dtc-1.4.0 )
+ amd64? ( sys-power/iasl
+ system-seabios? (
+ || (
+ sys-firmware/seabios
+ sys-firmware/seabios-bin
+ )
+ )
+ system-ipxe? ( sys-firmware/ipxe[qemu] )
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ arm64? ( sys-power/iasl
+ rombios? ( sys-devel/bin86 sys-devel/dev86 ) )
+ doc? (
+ app-text/ghostscript-gpl
+ $(python_gen_cond_dep '
+ dev-python/markdown[${PYTHON_USEDEP}]
+ ')
+ dev-texlive/texlive-latexextra
+ >=media-gfx/fig2dev-3.2.9-r1
+ virtual/pandoc
+ )
+ hvm? ( x11-base/xorg-proto )
+ qemu? (
+ app-arch/snappy:=
+ dev-build/meson
+ $(python_gen_cond_dep '
+ dev-python/distlib[${PYTHON_USEDEP}]
+ ')
+ sdl? (
+ media-libs/libsdl[X]
+ media-libs/libsdl2[X]
+ )
+ )
+ system-qemu? ( app-emulation/qemu[xen] )
+ ocaml? ( dev-ml/findlib
+ dev-lang/ocaml[ocamlopt] )
+ python? ( >=dev-lang/swig-4.0.0 )"
+
+BDEPEND="dev-lang/perl
+ app-alternatives/yacc
+ sys-devel/gettext
+ ipxe? ( sys-devel/gcc:* )
+ !system-seabios? ( sys-devel/gcc:* )"
+
+# hvmloader is used to bootstrap a fully virtualized kernel
+# Approved by QA team in bug #144032
+QA_WX_LOAD="
+ usr/libexec/xen/boot/hvmloader
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+ usr/share/qemu-xen/qemu/opensbi-riscv32-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/opensbi-riscv64-generic-fw_dynamic.elf
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+QA_EXECSTACK="
+ usr/share/qemu-xen/qemu/hppa-firmware.img
+"
+
+QA_PREBUILT="
+ usr/libexec/xen/bin/elf2dmp
+ usr/libexec/xen/bin/ivshmem-client
+ usr/libexec/xen/bin/ivshmem-server
+ usr/libexec/xen/bin/qemu-edid
+ usr/libexec/xen/bin/qemu-img
+ usr/libexec/xen/bin/qemu-io
+ usr/libexec/xen/bin/qemu-keymap
+ usr/libexec/xen/bin/qemu-nbd
+ usr/libexec/xen/bin/qemu-pr-helper
+ usr/libexec/xen/bin/qemu-storage-daemon
+ usr/libexec/xen/bin/qemu-system-i386
+ usr/libexec/xen/bin/virtfs-proxy-helper
+ usr/libexec/xen/boot/ovmf.bin
+ usr/libexec/xen/boot/xen-shim
+ usr/libexec/xen/libexec/qemu-pr-helper
+ usr/libexec/xen/libexec/virtfs-proxy-helper
+ usr/libexec/xen/libexec/virtiofsd
+ usr/libexec/xen/libexec/xen-bridge-helper
+ usr/share/qemu-xen/qemu/s390-ccw.img
+ usr/share/qemu-xen/qemu/s390-netboot.img
+ usr/share/qemu-xen/qemu/u-boot.e500
+"
+
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-4.19.1-gnu17.patch
+)
+
+pkg_setup() {
+ python_setup
+ export "CONFIG_LOMOUNT=y"
+
+ #bug 522642, disable compile tools/tests
+ export "CONFIG_TESTS=n"
+
+ if [[ -z ${XEN_TARGET_ARCH} ]] ; then
+ if use x86 && use amd64; then
+ die "Confusion! Both x86 and amd64 are set in your use flags!"
+ elif use x86; then
+ export XEN_TARGET_ARCH="x86_32"
+ elif use amd64 ; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+}
+
+src_prepare() {
+ mv ../qemu-xen tools/qemu-xen || die
+ mv ../qemu-xen-traditional tools/qemu-xen-traditional || die
+
+ mv ../dtc-v${QEMU_DTC_VERSION} tools/qemu-xen/subprojects/dtc || die
+ mv ../keycodemapdb-${QEMU_KEYCODEMAPDB_COMMIT} tools/qemu-xen/subprojects/keycodemapdb || die
+ mv ../berkeley-softfloat-3-${QEMU_SOFTFLOAD_COMMIT} tools/qemu-xen/subprojects/berkeley-softfloat-3 || die
+ mv ../berkeley-testfloat-3-${QEMU_TESTFLOAD_COMMIT} tools/qemu-xen/subprojects/berkeley-testfloat-3 || die
+
+ mv tools/qemu-xen/subprojects/packagefiles/berkeley-softfloat-3/meson* tools/qemu-xen/subprojects/berkeley-softfloat-3/ || die
+ mv tools/qemu-xen/subprojects/packagefiles/berkeley-testfloat-3/meson* tools/qemu-xen/subprojects/berkeley-testfloat-3/ || die
+
+ # move before Gentoo patch, one patch should apply to seabios, to fix gcc-4.5.x build err
+ mv ../seabios-${SEABIOS_VER} tools/firmware/seabios-dir-remote || die
+ pushd tools/firmware/ > /dev/null
+ ln -s seabios-dir-remote seabios-dir || die
+ popd > /dev/null
+
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Rename qemu-bridge-helper to xen-bridge-helper to avoid file
+ # collisions with app-emulation/qemu.
+ sed -i 's/qemu-bridge-helper/xen-bridge-helper/g' \
+ tools/qemu-xen/include/net/net.h \
+ tools/qemu-xen/meson.build \
+ tools/qemu-xen/qemu-bridge-helper.c \
+ tools/qemu-xen/qemu-options.hx \
+ || die
+ mv tools/qemu-xen/qemu-bridge-helper.c tools/qemu-xen/xen-bridge-helper.c || die
+
+ if use ovmf; then
+ mv ../edk2-${EDK2_COMMIT} tools/firmware/ovmf-dir-remote || die
+ rm -r tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ rm -r tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ rm -r tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ rm -r tools/firmware/ovmf-dir-remote/MdePkg/Library/MipiSysTLib || die
+ mv ../openssl-${EDK2_OPENSSL_VERSION} tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl || die
+ mv ../public-mipi-sys-t-${EDK2_MIPISYST_COMMIT} tools/firmware/ovmf-dir-remote/MdePkg/Library/MipiSysTLib || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/BaseTools/Source/C/BrotliCompress/brotli || die
+ cp -r ../brotli-${EDK2_BROTLI_COMMIT} tools/firmware/ovmf-dir-remote/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli || die
+ cp tools/firmware/ovmf-makefile tools/firmware/ovmf-dir-remote/Makefile || die
+ fi
+
+ # ipxe
+ if use ipxe; then
+ cp "${DISTDIR}/ipxe-git-${IPXE_COMMIT}.tar.gz" tools/firmware/etherboot/ipxe.tar.gz || die
+
+ # gcc 11
+ cp "${XEN_GENTOO_PATCHES_DIR}/ipxe/${PN}-4.15.0-ipxe-gcc11.patch" tools/firmware/etherboot/patches/ipxe-gcc11.patch || die
+ cp "${FILESDIR}/ipxe-force-gcc.patch" tools/firmware/etherboot/patches/ || die
+ echo ipxe-gcc11.patch >> tools/firmware/etherboot/patches/series || die
+ echo ipxe-force-gcc.patch >> tools/firmware/etherboot/patches/series || die
+ fi
+
+ # Fix texi2html build error with new texi2html, qemu.doc.html
+ sed -i -e "/texi2html -monolithic/s/-number//" tools/qemu-xen-traditional/Makefile || die
+
+ # Drop .config, fixes to gcc-4.6
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ # drop flags
+ unset CFLAGS
+ unset LDFLAGS
+ unset ASFLAGS
+ unset CPPFLAGS
+
+ if ! use pygrub; then
+ sed -e '/^SUBDIRS-y += pygrub/d' -i tools/Makefile || die
+ fi
+
+ if ! use python; then
+ sed -e '/^SUBDIRS-y += python$/d' -i tools/Makefile || die
+ fi
+
+ if ! use hvm; then
+ sed -e '/SUBDIRS-$(CONFIG_X86) += firmware/d' -i tools/Makefile || die
+ # Bug 351648
+ elif ! use x86 && ! has x86 $(get_all_abis); then
+ mkdir -p "${WORKDIR}"/extra-headers/gnu || die
+ touch "${WORKDIR}"/extra-headers/gnu/stubs-32.h || die
+ export CPATH="${WORKDIR}"/extra-headers
+ fi
+
+ if use qemu; then
+ if use sdl; then
+ sed -i -e "s:\$\$source/configure:\0 --enable-sdl:" \
+ tools/Makefile || die
+ else
+ sed -i -e "s:\${QEMU_ROOT\:\-\.}/configure:\0 --disable-sdl:" \
+ tools/qemu-xen-traditional/xen-setup || die
+ sed -i -e "s:\$\$source/configure:\0 --disable-sdl:" \
+ tools/Makefile || die
+ fi
+ else
+ # Don't bother with qemu, only needed for fully virtualised guests
+ sed -i '/SUBDIRS-$(CONFIG_QEMU_XEN)/s/^/#/g' tools/Makefile || die
+ fi
+
+ # Reset bash completion dir; Bug 472438
+ sed -e "s;^BASH_COMPLETION_DIR :=.*;BASH_COMPLETION_DIR := $(get_bashcompdir);" \
+ -i config/Paths.mk.in || die
+
+ # xencommons, Bug #492332, sed lighter weight than patching
+ sed -e 's:\$QEMU_XEN -xen-domid:test -e "\$QEMU_XEN" \&\& &:' \
+ -i tools/hotplug/Linux/init.d/xencommons.in || die
+
+ # fix bashishm
+ sed -e '/Usage/s/\$//g' \
+ -i tools/hotplug/Linux/init.d/xendriverdomain.in || die
+
+ # respect multilib, usr/lib/libcacard.so.0.0.0
+ sed -e "/^libdir=/s/\/lib/\/$(get_libdir)/" \
+ -i tools/qemu-xen/configure || die
+
+ #bug 518136, don't build 32bit exactuable for nomultilib profile
+ if [[ "${ARCH}" == 'amd64' ]] && ! has_multilib_profile; then
+ sed -i -e "/x86_emulator/d" tools/tests/Makefile || die
+ fi
+
+ # uncomment lines in xl.conf
+ sed -e 's:^#autoballoon=:autoballoon=:' \
+ -e 's:^#lockfile=:lockfile=:' \
+ -e 's:^#vif.default.script=:vif.default.script=:' \
+ -i tools/examples/xl.conf || die
+
+ # disable capstone (Bug #673474)
+ sed -e "s:\$\$source/configure:\0 --disable-capstone:" \
+ -i tools/Makefile || die
+
+ # disable glusterfs
+ sed -e "s:\$\$source/configure:\0 --disable-glusterfs:" \
+ -i tools/Makefile || die
+
+ # disable jpeg automagic
+ sed -e "s:\$\$source/configure:\0 --disable-vnc-jpeg:" \
+ -i tools/Makefile || die
+
+ # disable png automagic
+ sed -e "s:\$\$source/configure:\0 --disable-png:" \
+ -i tools/Makefile || die
+
+ # disable docker (Bug #732970)
+ sed -e "s:\$\$source/configure:\0 --disable-containers:" \
+ -i tools/Makefile || die
+
+ # disable gettext (Bug #937219)
+ sed -e "s:\$\$source/configure:\0 --disable-gettext:" \
+ -i tools/Makefile || die
+
+ # disable abi-dumper (Bug #791172)
+ sed -e 's/$(ABI_DUMPER) /echo /g' \
+ -i tools/libs/libs.mk || die
+
+ # disable header check (Bug #921932)
+ sed -e '/__XEN_INTERFACE_VERSION__/,+2d' \
+ -i tools/qemu-xen/include/hw/xen/xen_native.h || die
+
+ # Remove -Werror
+ find . -type f \( -name Makefile -o -name "*.mk" \) \
+ -exec sed -i \
+ -e 's/-Werror //g' \
+ -e '/^CFLAGS *+= -Werror$/d' \
+ -e 's/, "-Werror"//' \
+ {} + || die
+
+ if use ovmf ; then
+ # textrels cause failures w/ hardened binutils
+ pushd tools/firmware/ovmf-dir-remote > /dev/null || die
+ eapply "${FILESDIR}"/edk2-202202-binutils-2.41-textrels.patch
+ popd > /dev/null || die
+
+ # Use gnu17 because incompatible w/ C23
+ sed -i -e "s:-DZZLEXBUFSIZE=65536:-DZZLEXBUFSIZE=65536 -std=gnu17:" \
+ tools/firmware/ovmf-dir-remote/BaseTools/Source/C/VfrCompile/Pccts/*/makefile || die
+ fi
+
+ if ! use system-seabios ; then
+ sed -i "/^export HOSTCC/i override CC:=gcc" tools/firmware/seabios-dir/Makefile || die
+ fi
+
+ default
+}
+
+src_configure() {
+ local myconf=(
+ --libdir="${EPREFIX}/usr/$(get_libdir)"
+ --libexecdir="${EPREFIX}/usr/libexec"
+ --localstatedir="${EPREFIX}/var"
+ --disable-golang
+ --disable-pvshim
+ --disable-werror
+ --disable-xen
+ --enable-tools
+ --enable-docs
+ $(use_enable api xenapi)
+ $(use_enable ipxe)
+ $(usex system-ipxe '--with-system-ipxe=/usr/share/ipxe' '')
+ $(use_enable ocaml ocamltools)
+ $(use_enable ovmf)
+ $(use_enable rombios)
+ $(use_enable systemd)
+ --with-xenstored=$(usex ocaml 'oxenstored' 'xenstored')
+ )
+
+ use system-seabios && myconf+=( --with-system-seabios=/usr/share/seabios/bios.bin )
+ use system-qemu && myconf+=( --with-system-qemu=/usr/bin/qemu-system-x86_64 )
+ use amd64 && myconf+=( $(use_enable qemu-traditional) )
+ econf ${myconf[@]}
+}
+
+src_compile() {
+ local myopt
+ use debug && myopt="${myopt} debug=y"
+ use python && myopt="${myopt} XENSTAT_PYTHON_BINDINGS=y"
+
+ if test-flag-CC -fno-strict-overflow; then
+ append-flags -fno-strict-overflow
+ fi
+
+ # bug #845099
+ if use ipxe; then
+ local -x NO_WERROR=1
+ fi
+
+ emake \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ build-tools ${myopt}
+
+ if use doc; then
+ emake -C docs build
+ else
+ emake -C docs man-pages
+ fi
+}
+
+src_install() {
+ # Override auto-detection in the build system, bug #382573
+ export INITD_DIR=/tmp/init.d
+ export CONFIG_LEAF_DIR=../tmp/default
+
+ # Let the build system compile installed Python modules.
+ local PYTHONDONTWRITEBYTECODE
+ export PYTHONDONTWRITEBYTECODE
+
+ emake DESTDIR="${ED}" DOCDIR="/usr/share/doc/${PF}" \
+ XEN_PYTHON_NATIVE_INSTALL=y install-tools
+
+ # Fix the remaining Python shebangs.
+ python_fix_shebang "${D}"
+
+ # Remove RedHat-specific stuff
+ rm -rf "${D}"/tmp || die
+
+ if use doc; then
+ emake DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-docs
+ dodoc -r docs/{pdf,txt}
+ else
+ emake -C docs DESTDIR="${D}" DOCDIR="/usr/share/doc/${PF}" install-man-pages # Bug 668032
+ fi
+ dodoc ${DOCS[@]}
+
+ newconfd "${FILESDIR}"/xendomains.confd xendomains
+ newconfd "${FILESDIR}"/xenstored.confd xenstored
+ newconfd "${FILESDIR}"/xenconsoled.confd xenconsoled
+ newinitd "${FILESDIR}"/xendomains.initd-r2 xendomains
+ newinitd "${FILESDIR}"/xenstored.initd-r1 xenstored
+ newinitd "${FILESDIR}"/xenconsoled.initd xenconsoled
+ newinitd "${FILESDIR}"/xencommons.initd xencommons
+ newconfd "${FILESDIR}"/xencommons.confd xencommons
+ newinitd "${FILESDIR}"/xenqemudev.initd xenqemudev
+ newconfd "${FILESDIR}"/xenqemudev.confd xenqemudev
+ newinitd "${FILESDIR}"/xen-watchdog.initd xen-watchdog
+
+ if use screen; then
+ cat "${FILESDIR}"/xendomains-screen.confd >> "${D}"/etc/conf.d/xendomains || die
+ cp "${FILESDIR}"/xen-consoles.logrotate "${D}"/etc/xen/ || die
+ keepdir /var/log/xen-consoles
+ fi
+
+ # For -static-libs wrt Bug 384355
+ if ! use static-libs; then
+ rm -f "${D}"/usr/$(get_libdir)/*.a "${D}"/usr/$(get_libdir)/ocaml/*/*.a
+ fi
+
+ # for xendomains
+ keepdir /etc/xen/auto
+
+ # Remove files failing QA AFTER emake installs them, avoiding seeking absent files
+ find "${D}" \( -name openbios-sparc32 -o -name openbios-sparc64 \
+ -o -name openbios-ppc -o -name palcode-clipper \) -delete || die
+
+ keepdir /var/lib/xen/dump
+ keepdir /var/lib/xen/xenpaging
+ keepdir /var/lib/xenstored
+ keepdir /var/log/xen
+
+ if use python; then
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/xenstat.py"
+ python_domodule "${S}/tools/libs/stat/bindings/swig/python/_xenstat.so"
+ fi
+
+ python_optimize
+
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/xen/Manifest b/app-emulation/xen/Manifest
new file mode 100644
index 000000000000..b3f0f0e92723
--- /dev/null
+++ b/app-emulation/xen/Manifest
@@ -0,0 +1,5 @@
+DIST xen-4.19.3.tar.gz 52030969 BLAKE2B a83277e7af036d806168d6b7c61010f5828a437a9c8fa92f2a0e81a49372e21fb1840fb73cdc52d4548fbc3315033b9846c506cce9c62777211a5e7bb5dfb146 SHA512 1e4ea1d6f3e1ac9ec5cba85ebe12a1fdbf9a2b6fcec413b7d9da46c47cd40850596b8612508eecfa5e5e85657c63c5f01540a0774d10fc68f91187987395e746
+DIST xen-4.20.2.tar.gz 6962123 BLAKE2B afedd7ec1ab3a99962543072264fb21c1ca141b99df8c42f12d04ddb4c249c1b87ba7a7b47a0e1fe1325150297ce261e178bc487886b730ca291d6aa3c04e5eb SHA512 4a40668020cb142de0e182d6c7f846a58391828fb1db28c9325cd55d78ef0549c1187886cfe0c366c02803aa1b46c09334ab06748e30a2b509a9bbbb7886a8f1
+DIST xen-4.20.3.tar.gz 6963649 BLAKE2B a85e9f3de025f5fca51681e162f1d72206f27e26e68f231350c711922c9820baabf62c9d7ffc8c93b8657c532d383b0a78b2db6723a516906538436ee64096a0 SHA512 1d805584eab604497178fcbce76bef03d3daf3854bcb432520b9968ff86410dd90fcb43e674a646bc94fcebffa9e45291454861b89b8289cc338c9d7e4c217d1
+DIST xen-gentoo-patches-4.17.0-gentoo-patchset-2.tar.bz2 4001 BLAKE2B 7afce426759952e202a1dd819fe0a23108072bf9552ba14a0bd787a96ffe5e7a36f37e03dad8db9c46f5731acbc122c258eef6d517816aad9c8db1ca64700d19 SHA512 bcb1479f9ff5e194a4e452da9d0479febc2bcd465b4be69bb8f30e2e6b858fb77a71216dcb3e74dfb65e7ca6513742c294cd6b5eaa5ce82d0b122a00f1cbc450
+DIST xen-gentoo-patches-4.20.1-gentoo-patchset-0.tar.bz2 4041 BLAKE2B 3e30c276ad5b22109af59c820b1b86d2cf425afb331df3b8d0c1174549cdb1719781588c3417ad9a564dfd420e568bfc7c1d3fe96ac14b4b0238841804b10c44 SHA512 6d25aac735f3e977cb439bc0ceb4dcdde019e0c3fdbf79f1d51aac2966e0d22947def7c8bd08a67420bd1816fb794a8f5c719f605957a9f55262c2bc3d09118e
diff --git a/app-emulation/xen/metadata.xml b/app-emulation/xen/metadata.xml
new file mode 100644
index 000000000000..fe2c0858c271
--- /dev/null
+++ b/app-emulation/xen/metadata.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person" proxied="yes">
+ <email>hydrapolic@gmail.com</email>
+ <name>Tomáš Mózes</name>
+ </maintainer>
+ <maintainer type="project" proxied="proxy">
+ <email>proxy-maint@gentoo.org</email>
+ <name>Proxy Maintainers</name>
+ </maintainer>
+ <maintainer type="project">
+ <email>xen@gentoo.org</email>
+ <name>Gentoo Xen Project</name>
+ </maintainer>
+ <use>
+ <flag name="boot-symlinks">Symlink xen.gz variants in /boot, disable on fat filesystems</flag>
+ <flag name="flask">Enable the Flask XSM module from NSA</flag>
+ <flag name="uefi">Adds UEFI boot support, requires LDFLAG -melf_x86_64 for amd64</flag>
+ </use>
+ <upstream>
+ <remote-id type="cpe">cpe:/a:citrix:xen</remote-id>
+ </upstream>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/xen/xen-4.19.3.ebuild b/app-emulation/xen/xen-4.19.3.ebuild
new file mode 100644
index 000000000000..9782c5c0664c
--- /dev/null
+++ b/app-emulation/xen/xen-4.19.3.ebuild
@@ -0,0 +1,179 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit flag-o-matic mount-boot python-any-r1 secureboot toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/xen.git"
+ SRC_URI=""
+else
+ KEYWORDS="amd64 ~arm -x86"
+
+ XEN_GENTOO_PATCHSET_NUM=2
+ XEN_GENTOO_PATCHSET_BASE=4.17.0
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+ SRC_URI="https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz"
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="The Xen virtual machine monitor"
+HOMEPAGE="https://xenproject.org"
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+boot-symlinks debug uefi flask"
+REQUIRED_USE="arm? ( debug )"
+
+DEPEND="${PYTHON_DEPS}
+ uefi? ( >=sys-devel/binutils-2.22[multitarget] )
+ !uefi? ( >=sys-devel/binutils-2.22 )
+ flask? ( sys-apps/checkpolicy )"
+RDEPEND=""
+PDEPEND="~app-emulation/xen-tools-${PV}"
+
+# no tests are available for the hypervisor
+# prevent the silliness of /usr/lib/debug/usr/lib/debug files
+# prevent stripping of the debug info from the /usr/lib/debug/xen-syms
+RESTRICT="test splitdebug strip"
+
+# Approved by QA team in bug #144032
+QA_WX_LOAD="boot/xen-syms-${PV}"
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+ if [[ -z ${XEN_TARGET_ARCH} ]]; then
+ if use amd64; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+ use uefi && secureboot_pkg_setup
+}
+
+src_prepare() {
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Symlinks do not work on fat32 volumes # 829765
+ if ! use boot-symlinks || use uefi; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"/no-boot-symlinks/${PN}-4.16-no-symlinks.patch
+ fi
+
+ # Workaround new gcc-11 options
+ sed -e '/^CFLAGS/s/-Werror//g' -i xen/Makefile || die
+
+ # Drop .config
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ if use uefi; then
+ export EFI_VENDOR="gentoo"
+ export EFI_MOUNTPOINT="/boot"
+ fi
+
+ default
+}
+
+xen_make() {
+ # Setting clang to either 'y' or 'n' tells Xen's build system
+ # whether or not clang is used.
+ local clang=n
+ if tc-is-clang; then
+ clang=y
+ fi
+
+ # Send raw LDFLAGS so that --as-needed works
+ emake \
+ V=1 \
+ LDFLAGS="$(raw-ldflags)" \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ clang="${clang}" \
+ "$@"
+}
+
+src_configure() {
+ cd xen || die
+
+ touch gentoo-config || die
+ if use arm; then
+ echo "CONFIG_EARLY_PRINTK=sun7i" >> gentoo-config || die
+ fi
+ if use debug; then
+ cat <<-EOF >> gentoo-config || die
+ CONFIG_DEBUG=y
+ CONFIG_CRASH_DEBUG=y
+EOF
+ fi
+ if use flask; then
+ echo "CONFIG_XSM=y" >> gentoo-config || die
+ fi
+
+ # remove flags
+ unset CFLAGS
+
+ tc-ld-disable-gold # Bug 700374
+
+ xen_make KCONFIG_ALLCONFIG=gentoo-config alldefconfig
+}
+
+src_compile() {
+ xen_make -C xen
+}
+
+src_install() {
+ # The 'make install' doesn't 'mkdir -p' the subdirs
+ if use uefi; then
+ mkdir -p "${D}"${EFI_MOUNTPOINT}/efi/${EFI_VENDOR} || die
+ fi
+
+ xen_make DESTDIR="${D}" -C xen install
+
+ if use uefi; then
+ secureboot_auto_sign --in-place
+ else
+ # make install likes to throw in some extra EFI bits if it built
+ rm -rf "${D}/usr/$(get_libdir)/efi"
+ fi
+}
diff --git a/app-emulation/xen/xen-4.20.2.ebuild b/app-emulation/xen/xen-4.20.2.ebuild
new file mode 100644
index 000000000000..5636630cbd10
--- /dev/null
+++ b/app-emulation/xen/xen-4.20.2.ebuild
@@ -0,0 +1,179 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit flag-o-matic mount-boot python-any-r1 secureboot toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/xen.git"
+ SRC_URI=""
+else
+ KEYWORDS="~amd64 ~arm -x86"
+
+ XEN_GENTOO_PATCHSET_NUM=0
+ XEN_GENTOO_PATCHSET_BASE=4.20.1
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+ SRC_URI="https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz"
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="The Xen virtual machine monitor"
+HOMEPAGE="https://xenproject.org"
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+boot-symlinks debug uefi flask"
+REQUIRED_USE="arm? ( debug )"
+
+DEPEND="${PYTHON_DEPS}
+ uefi? ( >=sys-devel/binutils-2.22[multitarget] )
+ !uefi? ( >=sys-devel/binutils-2.22 )
+ flask? ( sys-apps/checkpolicy )"
+RDEPEND=""
+PDEPEND="~app-emulation/xen-tools-${PV}"
+
+# no tests are available for the hypervisor
+# prevent the silliness of /usr/lib/debug/usr/lib/debug files
+# prevent stripping of the debug info from the /usr/lib/debug/xen-syms
+RESTRICT="test splitdebug strip"
+
+# Approved by QA team in bug #144032
+QA_WX_LOAD="boot/xen-syms-${PV}"
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+ if [[ -z ${XEN_TARGET_ARCH} ]]; then
+ if use amd64; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+ use uefi && secureboot_pkg_setup
+}
+
+src_prepare() {
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Symlinks do not work on fat32 volumes # 829765
+ if ! use boot-symlinks || use uefi; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"/no-boot-symlinks/${PN}-4.16-no-symlinks.patch
+ fi
+
+ # Workaround new gcc-11 options
+ sed -e '/^CFLAGS/s/-Werror//g' -i xen/Makefile || die
+
+ # Drop .config
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ if use uefi; then
+ export EFI_VENDOR="gentoo"
+ export EFI_MOUNTPOINT="/boot"
+ fi
+
+ default
+}
+
+xen_make() {
+ # Setting clang to either 'y' or 'n' tells Xen's build system
+ # whether or not clang is used.
+ local clang=n
+ if tc-is-clang; then
+ clang=y
+ fi
+
+ # Send raw LDFLAGS so that --as-needed works
+ emake \
+ V=1 \
+ LDFLAGS="$(raw-ldflags)" \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ clang="${clang}" \
+ "$@"
+}
+
+src_configure() {
+ cd xen || die
+
+ touch gentoo-config || die
+ if use arm; then
+ echo "CONFIG_EARLY_PRINTK=sun7i" >> gentoo-config || die
+ fi
+ if use debug; then
+ cat <<-EOF >> gentoo-config || die
+ CONFIG_DEBUG=y
+ CONFIG_CRASH_DEBUG=y
+EOF
+ fi
+ if use flask; then
+ echo "CONFIG_XSM=y" >> gentoo-config || die
+ fi
+
+ # remove flags
+ unset CFLAGS
+
+ tc-ld-disable-gold # Bug 700374
+
+ xen_make KCONFIG_ALLCONFIG=gentoo-config alldefconfig
+}
+
+src_compile() {
+ xen_make -C xen
+}
+
+src_install() {
+ # The 'make install' doesn't 'mkdir -p' the subdirs
+ if use uefi; then
+ mkdir -p "${D}"${EFI_MOUNTPOINT}/efi/${EFI_VENDOR} || die
+ fi
+
+ xen_make DESTDIR="${D}" -C xen install
+
+ if use uefi; then
+ secureboot_auto_sign --in-place
+ else
+ # make install likes to throw in some extra EFI bits if it built
+ rm -rf "${D}/usr/$(get_libdir)/efi"
+ fi
+}
diff --git a/app-emulation/xen/xen-4.20.3.ebuild b/app-emulation/xen/xen-4.20.3.ebuild
new file mode 100644
index 000000000000..f18cd6623ccc
--- /dev/null
+++ b/app-emulation/xen/xen-4.20.3.ebuild
@@ -0,0 +1,177 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{13..14} )
+
+inherit flag-o-matic mount-boot python-any-r1 secureboot toolchain-funcs
+
+if [[ ${PV} == *9999 ]]; then
+ inherit git-r3
+ EGIT_REPO_URI="https://xenbits.xen.org/git-http/xen.git"
+ SRC_URI=""
+else
+ KEYWORDS="amd64 ~arm -x86"
+
+ XEN_GENTOO_PATCHSET_NUM=0
+ XEN_GENTOO_PATCHSET_BASE=4.20.1
+ XEN_PRE_PATCHSET_NUM=
+ XEN_PRE_VERSION_BASE=
+
+ XEN_BASE_PV="${PV}"
+ if [[ -n "${XEN_PRE_VERSION_BASE}" ]]; then
+ XEN_BASE_PV="${XEN_PRE_VERSION_BASE}"
+ fi
+
+ SRC_URI="https://downloads.xenproject.org/release/xen/${XEN_BASE_PV}/xen-${XEN_BASE_PV}.tar.gz"
+
+ if [[ -n "${XEN_PRE_PATCHSET_NUM}" ]]; then
+ XEN_UPSTREAM_PATCHES_TAG="$(ver_cut 1-3)-pre-patchset-${XEN_PRE_PATCHSET_NUM}"
+ XEN_UPSTREAM_PATCHES_NAME="xen-upstream-patches-${XEN_UPSTREAM_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-upstream-patches.git/snapshot/${XEN_UPSTREAM_PATCHES_NAME}.tar.bz2"
+ XEN_UPSTREAM_PATCHES_DIR="${WORKDIR}/${XEN_UPSTREAM_PATCHES_NAME}"
+ fi
+ if [[ -n "${XEN_GENTOO_PATCHSET_NUM}" ]]; then
+ XEN_GENTOO_PATCHES_TAG="$(ver_cut 1-3 ${XEN_GENTOO_PATCHSET_BASE})-gentoo-patchset-${XEN_GENTOO_PATCHSET_NUM}"
+ XEN_GENTOO_PATCHES_NAME="xen-gentoo-patches-${XEN_GENTOO_PATCHES_TAG}"
+ SRC_URI+=" https://gitweb.gentoo.org/proj/xen-gentoo-patches.git/snapshot/${XEN_GENTOO_PATCHES_NAME}.tar.bz2"
+ XEN_GENTOO_PATCHES_DIR="${WORKDIR}/${XEN_GENTOO_PATCHES_NAME}"
+ fi
+fi
+
+DESCRIPTION="The Xen virtual machine monitor"
+HOMEPAGE="https://xenproject.org"
+
+S="${WORKDIR}/xen-$(ver_cut 1-3 ${XEN_BASE_PV})"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="+boot-symlinks debug uefi flask"
+REQUIRED_USE="arm? ( debug )"
+
+DEPEND="${PYTHON_DEPS}
+ uefi? ( >=sys-devel/binutils-2.22[multitarget] )
+ !uefi? ( >=sys-devel/binutils-2.22 )
+ flask? ( sys-apps/checkpolicy )"
+RDEPEND=""
+PDEPEND="~app-emulation/xen-tools-${PV}"
+
+# no tests are available for the hypervisor
+# prevent the silliness of /usr/lib/debug/usr/lib/debug files
+# prevent stripping of the debug info from the /usr/lib/debug/xen-syms
+RESTRICT="test splitdebug strip"
+
+# Approved by QA team in bug #144032
+QA_WX_LOAD="boot/xen-syms-${PV}"
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+ if [[ -z ${XEN_TARGET_ARCH} ]]; then
+ if use amd64; then
+ export XEN_TARGET_ARCH="x86_64"
+ elif use arm; then
+ export XEN_TARGET_ARCH="arm32"
+ elif use arm64; then
+ export XEN_TARGET_ARCH="arm64"
+ else
+ die "Unsupported architecture!"
+ fi
+ fi
+ use uefi && secureboot_pkg_setup
+}
+
+src_prepare() {
+ if [[ -v XEN_UPSTREAM_PATCHES_DIR ]]; then
+ eapply "${XEN_UPSTREAM_PATCHES_DIR}"
+ fi
+
+ if [[ -v XEN_GENTOO_PATCHES_DIR ]]; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"
+ fi
+
+ # Symlinks do not work on fat32 volumes # 829765
+ if ! use boot-symlinks || use uefi; then
+ eapply "${XEN_GENTOO_PATCHES_DIR}"/no-boot-symlinks/${PN}-4.16-no-symlinks.patch
+ fi
+
+ # Workaround new gcc-11 options
+ sed -e '/^CFLAGS/s/-Werror//g' -i xen/Makefile || die
+
+ # Drop .config
+ sed -e '/-include $(XEN_ROOT)\/.config/d' -i Config.mk || die "Couldn't drop"
+
+ if use uefi; then
+ export EFI_VENDOR="gentoo"
+ export EFI_MOUNTPOINT="/boot"
+ fi
+
+ default
+}
+
+xen_make() {
+ # Setting clang to either 'y' or 'n' tells Xen's build system
+ # whether or not clang is used.
+ local clang=n
+ if tc-is-clang; then
+ clang=y
+ fi
+
+ # Send raw LDFLAGS so that --as-needed works
+ emake \
+ V=1 \
+ LDFLAGS="$(raw-ldflags)" \
+ HOSTCC="$(tc-getBUILD_CC)" \
+ HOSTCXX="$(tc-getBUILD_CXX)" \
+ CC="$(tc-getCC)" \
+ CXX="$(tc-getCXX)" \
+ LD="$(tc-getLD)" \
+ AR="$(tc-getAR)" \
+ OBJDUMP="$(tc-getOBJDUMP)" \
+ RANLIB="$(tc-getRANLIB)" \
+ clang="${clang}" \
+ "$@"
+}
+
+src_configure() {
+ cd xen || die
+
+ touch gentoo-config || die
+ if use arm; then
+ echo "CONFIG_EARLY_PRINTK=sun7i" >> gentoo-config || die
+ fi
+ if use debug; then
+ cat <<-EOF >> gentoo-config || die
+ CONFIG_DEBUG=y
+ CONFIG_CRASH_DEBUG=y
+EOF
+ fi
+ if use flask; then
+ echo "CONFIG_XSM=y" >> gentoo-config || die
+ fi
+
+ # remove flags
+ unset CFLAGS
+
+ xen_make KCONFIG_ALLCONFIG=gentoo-config alldefconfig
+}
+
+src_compile() {
+ xen_make -C xen
+}
+
+src_install() {
+ # The 'make install' doesn't 'mkdir -p' the subdirs
+ if use uefi; then
+ mkdir -p "${D}"${EFI_MOUNTPOINT}/efi/${EFI_VENDOR} || die
+ fi
+
+ xen_make DESTDIR="${D}" -C xen install
+
+ if use uefi; then
+ secureboot_auto_sign --in-place
+ else
+ # make install likes to throw in some extra EFI bits if it built
+ rm -rf "${D}/usr/$(get_libdir)/efi"
+ fi
+}
diff --git a/app-emulation/xtrs/Manifest b/app-emulation/xtrs/Manifest
new file mode 100644
index 000000000000..80b93e468140
--- /dev/null
+++ b/app-emulation/xtrs/Manifest
@@ -0,0 +1,4 @@
+DIST ld4-631.zip 106955 BLAKE2B 1c0e04186f14fcc840568521b09c7b55318a87dc49e394d516aa742fe7e5c499ac79771782f9b7ee687cdf55df159cef09897d19976879d4c60fff2a33f7f7c6 SHA512 8c6a24bc0af9326b5b935d7cdb1932b4cb714ab336167fed36f4f6d976cd80fe1d4d6a76e6374366fdc3fce623b2bdd6f9059a964bd6d29f59d6a052a1924c4a
+DIST ld4-631l.xd3 692 BLAKE2B 7870135e999cd358d7a3e5c254908757fa059a61654403ba146b8b866bda450b53fd1821dd3e3f8fc5c0acd17d0935d83b5df814c8e12eb5748bfcdf5688c509 SHA512 401d36fdfbceaf90673c5e9f821d26aa0a58b901d7e950d34361e5cde3252a070ff902019fcc1eb820fb1b2d3277e4c1da57ccc442ee407b0be4e5ca26dc2d13
+DIST xtrs-4.9d.tar.gz 455355 BLAKE2B b7ffda48f9a9bb534e33711b85c02734b7d3f8cee8d3cf2c2bc0a801954dcc1851b12451da03a14a7196368a9066cbaea953e871e8b68b4951f7439412e9e34e SHA512 5d6a2e1d4c2f2df63eaec8d015ea9e485615d82b7923af5c03c394862a31b1e6be2329aca18c0fa0c7d6b984164bb9b4d18f94a3d8cd140a683c5197ddff2249
+DIST xtrs-4.9d_p20250819.tar.gz 426016 BLAKE2B 6095f7bcc91a7823c325aca668f3ce1fba75dd4fe432262c2502ae53356690d4bd128d10fc0b4d0024383fbbb58ab587459917ec5214ef2fdff95b009bca2a78 SHA512 d22f7baf89c3ecb86a59bb39359b3274a4e6fe291d3d46b74721fe5c7067fb1ac315953458338a3d02ca6f869c199fb6005ea0337a9677cb1928541ca4d68238
diff --git a/app-emulation/xtrs/files/xtrs-4.9d-implicit.patch b/app-emulation/xtrs/files/xtrs-4.9d-implicit.patch
new file mode 100644
index 000000000000..959c3fb375a7
--- /dev/null
+++ b/app-emulation/xtrs/files/xtrs-4.9d-implicit.patch
@@ -0,0 +1,35 @@
+https://bugs.gentoo.org/875674
+
+--- xtrs-4.9d/trs_disk.c
++++ xtrs-4.9d/trs_disk.c
+@@ -3137,7 +3137,7 @@
+ }
+
+ void
+-real_restore(curdrive)
++real_restore(int curdrive)
+ {
+ #if __linux
+ DiskState *d = &disk[curdrive];
+--- xtrs-4.9d/trs_memory.c
++++ xtrs-4.9d/trs_memory.c
+@@ -153,7 +153,7 @@
+ memory_map = which + (trs_model << 4) + (romin << 2);
+ }
+
+-void mem_romin(state)
++void mem_romin(int state)
+ {
+ romin = (state & 1);
+ memory_map = (memory_map & ~4) + (romin << 2);
+--- xtrs-4.9d/trs_printer.c
++++ xtrs-4.9d/trs_printer.c
+@@ -18,7 +18,7 @@
+ #include "z80.h"
+ #include "trs.h"
+
+-void trs_printer_write(value)
++void trs_printer_write(int value)
+ {
+ if(value == 0x0D)
+ {
diff --git a/app-emulation/xtrs/files/xtrs-4.9d-lcmod.patch b/app-emulation/xtrs/files/xtrs-4.9d-lcmod.patch
new file mode 100644
index 000000000000..4fde6ad73757
--- /dev/null
+++ b/app-emulation/xtrs/files/xtrs-4.9d-lcmod.patch
@@ -0,0 +1,68 @@
+Fix CG 2 font.
+
+--- xtrs-4.9d-orig/trs_chars.c
++++ xtrs-4.9d/trs_chars.c
+@@ -304,3 +304,4 @@
+ II ROM. All characters without descenders are moved up one row.
+- I'm not sure I got all the changes exactly right -- help?
++ Backquote (position 0x60) and tilde (position 0x7e) have been
++ replaced by Pound sign and Yen sign, respectively.
+ */
+@@ -337,3 +338,3 @@
+ { 0x00,0x04,0x08,0x1f,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00 },
+- { 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00 },
++ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00 },
+ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
+@@ -350,3 +351,3 @@
+ { 0x00,0x04,0x04,0x1f,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00 },
+- { 0x00,0x00,0x00,0x06,0x06,0x02,0x01,0x00,0x00,0x00,0x00,0x00 },
++ { 0x00,0x00,0x00,0x00,0x06,0x06,0x02,0x01,0x00,0x00,0x00,0x00 },
+ { 0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
+@@ -361,3 +362,3 @@
+ { 0x0c,0x02,0x01,0x0f,0x11,0x11,0x0e,0x00,0x00,0x00,0x00,0x00 },
+- { 0x1f,0x10,0x08,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00 },
++ { 0x1f,0x10,0x08,0x04,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00 },
+ { 0x0e,0x11,0x11,0x0e,0x11,0x11,0x0e,0x00,0x00,0x00,0x00,0x00 },
+@@ -365,3 +366,3 @@
+ { 0x00,0x06,0x06,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00 },
+- { 0x06,0x06,0x00,0x06,0x06,0x02,0x01,0x00,0x00,0x00,0x00,0x00 },
++ { 0x00,0x06,0x06,0x00,0x06,0x06,0x02,0x01,0x00,0x00,0x00,0x00 },
+ { 0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00,0x00,0x00,0x00,0x00 },
+@@ -401,4 +402,4 @@
+ { 0x00,0x04,0x08,0x1f,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00 },
+- { 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00,0x00 },
+- { 0x0c,0x0c,0x04,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
++ { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00 },
++ { 0x04,0x0a,0x02,0x07,0x02,0x12,0x0f,0x00,0x00,0x00,0x00,0x00 },
+ { 0x00,0x00,0x0e,0x10,0x1e,0x11,0x1e,0x00,0x00,0x00,0x00,0x00 },
+@@ -409,7 +410,7 @@
+ { 0x08,0x14,0x04,0x0e,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00 },
+- { 0x00,0x00,0x16,0x19,0x19,0x16,0x10,0x0e,0x00,0x00,0x00,0x00 },
++ { 0x00,0x00,0x0e,0x11,0x11,0x1e,0x10,0x0e,0x00,0x00,0x00,0x00 },
+ { 0x01,0x01,0x0d,0x13,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00 },
+ { 0x04,0x00,0x06,0x04,0x04,0x04,0x0e,0x00,0x00,0x00,0x00,0x00 },
+- { 0x10,0x00,0x10,0x10,0x10,0x10,0x11,0x0e,0x00,0x00,0x00,0x00 },
+- { 0x01,0x01,0x09,0x05,0x03,0x05,0x09,0x00,0x00,0x00,0x00,0x00 },
++ { 0x10,0x00,0x18,0x10,0x10,0x10,0x12,0x0c,0x00,0x00,0x00,0x00 },
++ { 0x02,0x02,0x12,0x0a,0x06,0x0a,0x12,0x00,0x00,0x00,0x00,0x00 },
+ { 0x06,0x04,0x04,0x04,0x04,0x04,0x0e,0x00,0x00,0x00,0x00,0x00 },
+@@ -422,3 +423,3 @@
+ { 0x00,0x00,0x1e,0x01,0x0e,0x10,0x0f,0x00,0x00,0x00,0x00,0x00 },
+- { 0x04,0x04,0x1f,0x04,0x04,0x14,0x08,0x00,0x00,0x00,0x00,0x00 },
++ { 0x04,0x04,0x0e,0x04,0x04,0x14,0x08,0x00,0x00,0x00,0x00,0x00 },
+ { 0x00,0x00,0x11,0x11,0x11,0x19,0x16,0x00,0x00,0x00,0x00,0x00 },
+@@ -432,4 +433,4 @@
+ { 0x02,0x04,0x04,0x08,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00 },
+- { 0x02,0x15,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
+- { 0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x00,0x00,0x00,0x00,0x00 },
++ { 0x11,0x0a,0x04,0x1f,0x04,0x1f,0x04,0x00,0x00,0x00,0x00,0x00 },
++ { 0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x00,0x00,0x00,0x00 },
+ },
+--- xtrs-4.9d-orig/xtrs.man
++++ xtrs-4.9d/xtrs.man
+@@ -775,4 +775,3 @@
+ set in the replacement character generator that was supplied with the
+-Radio Shack lower case modification. (It was reconstructed partly
+-from memory and may have some minor bit errors.) \fIstock\fP is the
++Radio Shack lower case modification. \fIstock\fP is the
+ character set in the stock character generator supplied with most
diff --git a/app-emulation/xtrs/metadata.xml b/app-emulation/xtrs/metadata.xml
new file mode 100644
index 000000000000..a6e761ee1ffe
--- /dev/null
+++ b/app-emulation/xtrs/metadata.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>ulm@gentoo.org</email>
+ </maintainer>
+ <longdescription>
+ xtrs is a Radio Shack TRS-80 Model I/III/4/4P emulator for Unix and the
+ X Window System. It includes lower case, the real time clock, hi-res
+ graphics, serial port, parallel printer, mouse, cassette, sound and music
+ output, 5" and 8" floppy disk drives in single and double density, and
+ even hard disk drives. The emulated floppy and hard disk file formats
+ are compatible with the popular MSDOS-based emulators by Jeff Vavasour,
+ Matthew Reed, and David Keil, and (if you choose a capable enough file
+ format), all features of the original TRS-80 floppy disk controller are
+ emulated. Under Linux, physical floppy disk drives are also supported.
+ Physical cassettes can be read and written too. The user interface is a
+ bit spartan, but it gets the job done.
+</longdescription>
+ <use>
+ <flag name="ls-dos">Install LS-DOS disk images for Model 4P</flag>
+ </use>
+ <origin>baldeagleos-repo</origin>
+</pkgmetadata>
diff --git a/app-emulation/xtrs/xtrs-4.9d-r6.ebuild b/app-emulation/xtrs/xtrs-4.9d-r6.ebuild
new file mode 100644
index 000000000000..cafcfe2b48da
--- /dev/null
+++ b/app-emulation/xtrs/xtrs-4.9d-r6.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit flag-o-matic toolchain-funcs readme.gentoo-r1
+
+DESCRIPTION="Radio Shack TRS-80 emulator"
+HOMEPAGE="https://www.tim-mann.org/xtrs.html"
+SRC_URI="https://www.tim-mann.org/trs80/${P}.tar.gz
+ ls-dos? (
+ https://www.tim-mann.org/trs80/ld4-631.zip
+ https://dev.gentoo.org/~ulm/distfiles/ld4-631l.xd3
+ )"
+
+LICENSE="xtrs ls-dos? ( freedist )"
+SLOT="0"
+KEYWORDS="amd64 ppc x86"
+IUSE="ls-dos"
+RESTRICT="ls-dos? ( bindist )"
+
+RDEPEND="sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ x11-libs/libX11"
+DEPEND="${RDEPEND}
+ ls-dos? ( app-arch/unzip dev-util/xdelta:3 )"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-lcmod.patch
+ "${FILESDIR}"/${P}-implicit.patch
+)
+
+src_prepare() {
+ default
+ sed -i -e 's/$(CC) -o/$(CC) $(LDFLAGS) -o/' Makefile || die
+ if use ls-dos; then
+ cd "${WORKDIR}" || die
+ xdelta3 -d -s ld4-631.dsk "${DISTDIR}"/ld4-631l.xd3 out.dsk || die
+ mv out.dsk ld4-631.dsk || die
+ fi
+}
+
+src_compile() {
+ append-flags -std=gnu17
+ case $(tc-endian) in
+ little) ;;
+ big) append-flags -Dbig_endian ;;
+ *) die ;;
+ esac
+ emake CC="$(tc-getCC)" DEBUG="${CFLAGS}" LDFLAGS="${LDFLAGS}"
+}
+
+src_install() {
+ dodir /usr/bin /usr/share/xtrs/disks /usr/share/man/man1
+ emake PREFIX="${D}"/usr install
+
+ insopts -m0444
+ insinto /usr/share/xtrs/disks
+ doins cpmutil.dsk utility.dsk
+
+ if use ls-dos; then
+ doins "${WORKDIR}"/ld4-631.dsk
+ dosym disks/ld4-631.dsk /usr/share/xtrs/disk4p-0
+ dosym disks/utility.dsk /usr/share/xtrs/disk4p-1
+ fi
+
+ dodoc ChangeLog README xtrsrom4p.README cpmutil.html dskspec.html
+
+ local DOC_CONTENTS="For copyright reasons, xtrs does not include actual
+ ROM images. Because of this, unless you supply your own ROM, xtrs
+ will not function in any mode except 'Model 4p' mode (a minimal
+ free ROM is included for this), which can be run like this:
+ \n\nxtrs -model 4p -diskdir /usr/share/xtrs
+ \n\nIf you already own a copy of the ROM software (e.g., if you have
+ a TRS-80 with this ROM), then you can make yourself a copy of this
+ for use with xtrs, using utilities available on the web. To load
+ your own ROM, specify the '-romfile' option, or the 'Xtrs.romfile'
+ X resource. ROM files can be in Intel hex or binary format."
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+}
diff --git a/app-emulation/xtrs/xtrs-4.9d_p20250819.ebuild b/app-emulation/xtrs/xtrs-4.9d_p20250819.ebuild
new file mode 100644
index 000000000000..edf27fff060b
--- /dev/null
+++ b/app-emulation/xtrs/xtrs-4.9d_p20250819.ebuild
@@ -0,0 +1,100 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit eapi9-ver toolchain-funcs readme.gentoo-r1
+
+COMMIT="3a2180c063811a715faa28d39a94739c33e0abd0"
+DESCRIPTION="Radio Shack TRS-80 emulator"
+HOMEPAGE="https://www.tim-mann.org/xtrs.html"
+SRC_URI="https://github.com/TimothyPMann/${PN}/archive/${COMMIT}.tar.gz -> ${P}.tar.gz
+ ls-dos? (
+ https://www.tim-mann.org/trs80/ld4-631.zip
+ https://dev.gentoo.org/~ulm/distfiles/ld4-631l.xd3
+ )"
+S="${WORKDIR}/${PN}-${COMMIT}"
+
+LICENSE="xtrs MIT ls-dos? ( freedist )"
+SLOT="0"
+KEYWORDS="~amd64 ~ppc ~x86"
+IUSE="ls-dos"
+RESTRICT="ls-dos? ( bindist )"
+
+RDEPEND="sys-libs/ncurses:0=
+ sys-libs/readline:0=
+ x11-libs/libX11"
+DEPEND="${RDEPEND}"
+BDEPEND="dev-embedded/zmac
+ ls-dos? ( app-arch/unzip dev-util/xdelta:3 )"
+
+src_prepare() {
+ default
+
+ if use ls-dos; then
+ cd "${WORKDIR}" || die
+ xdelta3 -d -s ld4-631.dsk "${DISTDIR}"/ld4-631l.xd3 out.dsk || die
+ mv out.dsk ld4-631.dsk || die
+ fi
+}
+
+src_compile() {
+ local endian=""
+ case $(tc-endian) in
+ little) ;;
+ big) endian="-Dbig_endian" ;;
+ *) die ;;
+ esac
+
+ emake \
+ CC="$(tc-getCC)" \
+ DEBUG="${CFLAGS} -std=gnu17" \
+ LDFLAGS="${LDFLAGS}" \
+ ENDIAN="${endian}" \
+ ZMACFLAGS="-h -l" \
+ HTMLDOCS=
+}
+
+src_install() {
+ emake DESTDIR="${ED}" install-progs
+
+ insinto /usr/share/xtrs/disks
+ insopts -m0444
+ doins cpmutil.dsk utility.dsk
+
+ if use ls-dos; then
+ doins "${WORKDIR}"/ld4-631.dsk
+ dosym disks/ld4-631.dsk /usr/share/xtrs/disk4p-0
+ dosym disks/utility.dsk /usr/share/xtrs/disk4p-1
+ fi
+
+ local f
+ for f in xtrs cassette mkdisk cmddump hex2cmd; do
+ newman ${f}.man ${f}.1
+ done
+
+ dodoc AUTHORS ChangeLog README xtrsrom4p.README cpmutil.html dskspec.html
+
+ local DOC_CONTENTS="For copyright reasons, xtrs does not include actual
+ ROM images. Because of this, unless you supply your own ROM, xtrs
+ will not function in any mode except 'Model 4p' mode (a minimal
+ free ROM is included for this), which can be run like this:
+ \n\nxtrs -model 4p -diskdir /usr/share/xtrs
+ \n\nIf you already own a copy of the ROM software (e.g., if you have
+ a TRS-80 with this ROM), then you can make yourself a copy of this
+ for use with xtrs, using utilities available on the web. To load
+ your own ROM, specify the '-romfile1' option, or the 'Xtrs.romfile1'
+ X resource. ROM files can be in Intel hex or binary format."
+ readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+ readme.gentoo_print_elog
+
+ if ver_replacing -lt 4.9d_p; then
+ elog "The option and X resource to load a ROM file for the Model I"
+ elog "have been renamed:"
+ elog "'-romfile1' (instead of '-romfile') for the option,"
+ elog "'Xtrs.romfile1' (instead of 'Xtrs.romfile') for the X resource"
+ fi
+}