diff options
| author | root <root@alpha.trunkmasters.com> | 2026-06-12 19:09:37 -0500 |
|---|---|---|
| committer | root <root@alpha.trunkmasters.com> | 2026-06-12 19:09:37 -0500 |
| commit | b590c8d7572b727d565cc0b8ff660d43569845de (patch) | |
| tree | 06f7a4102ea4e845df8b66660f252920d52952f9 /app-emulation | |
| parent | 24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff) | |
| download | baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip | |
Adding metadata
Diffstat (limited to 'app-emulation')
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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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/ /\ /g' \ + -e 's/–/\–/g' \ + -e 's/←/\←/g' \ + -e 's/→/\→/g' \ + -e 's/↔/\↔/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/'[^&]*\(vboxdrv setup\|vboxconfig\)'/\'emerge -1 virtualbox-modules\'/' {} \+ || 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 +} |
