From a4073b697c2512e6ba91e0d0c263a310fd53378d Mon Sep 17 00:00:00 2001 From: Sam James Date: Sun, 5 Oct 2025 22:03:43 +0100 Subject: [PATCH] dev-libs/libuv: disable io-uring for ppc32 Works around a crash with CMake (-> libuv -> io-uring) on ppc32. There are reports of this working with libuv-1.51.0 and cmake-4.1.2 but the fix was likely on the kernel side which means it's not something we can rely on, especially for an arch like ppc32. This could be submitted upstream if we can identify what actually fixed it and therefore the first good kernel version to check for, as we do for hppa. Bug: https://bugs.gentoo.org/941738 Signed-off-by: Sam James --- .../files/libuv-1.51.0-ppc32-uring.patch | 21 +++++++ dev-libs/libuv/libuv-1.51.0-r1.ebuild | 63 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 dev-libs/libuv/files/libuv-1.51.0-ppc32-uring.patch create mode 100644 dev-libs/libuv/libuv-1.51.0-r1.ebuild diff --git a/dev-libs/libuv/files/libuv-1.51.0-ppc32-uring.patch b/dev-libs/libuv/files/libuv-1.51.0-ppc32-uring.patch new file mode 100644 index 0000000000000..baef628bb859b --- /dev/null +++ b/dev-libs/libuv/files/libuv-1.51.0-ppc32-uring.patch @@ -0,0 +1,21 @@ +https://bugs.gentoo.org/941738 + +There are reports of this working with libuv-1.51.0 and cmake-4.1.2 but +the fix was likely on the kernel side which means it's not something we +can rely on, especially for an arch like ppc32. + +This could be submitted upstream if we can identify what actually fixed +it and therefore the first good kernel version to check for, as we do +for hppa. +--- a/src/unix/linux.c ++++ b/src/unix/linux.c +@@ -464,6 +464,9 @@ static int uv__use_io_uring(uint32_t flags) { + #elif defined(__powerpc64__) || defined(__ppc64__) + /* See https://github.com/libuv/libuv/issues/4283. */ + return 0; /* Random SIGSEGV in signal handler. */ ++#elif defined(__powerpc__) && !defined(__powerpc64__) ++ /* See https://bugs.gentoo.org/941738. */ ++ return 0; /* Crash in uv__spawn_and_init_child_fork. */ + #else + /* Ternary: unknown=0, yes=1, no=-1 */ + static _Atomic int use_io_uring; diff --git a/dev-libs/libuv/libuv-1.51.0-r1.ebuild b/dev-libs/libuv/libuv-1.51.0-r1.ebuild new file mode 100644 index 0000000000000..4106f72b90a1a --- /dev/null +++ b/dev-libs/libuv/libuv-1.51.0-r1.ebuild @@ -0,0 +1,63 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/libuv.asc +inherit autotools verify-sig + +DESCRIPTION="Cross-platform asychronous I/O" +HOMEPAGE="https://github.com/libuv/libuv" + +if [[ ${PV} = 9999* ]]; then + EGIT_REPO_URI="https://github.com/libuv/libuv.git" + inherit git-r3 +else + SRC_URI=" + https://dist.libuv.org/dist/v${PV}/libuv-v${PV}.tar.gz -> ${P}.tar.gz + verify-sig? ( https://dist.libuv.org/dist/v${PV}/libuv-v${PV}.tar.gz.sign -> ${P}.tar.gz.sig ) + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris" + S="${WORKDIR}/${PN}-v${PV}" +fi + +LICENSE="BSD BSD-2 ISC MIT" +SLOT="0/1" + +BDEPEND=" + dev-build/libtool + virtual/pkgconfig + verify-sig? ( sec-keys/openpgp-keys-libuv ) +" + +PATCHES=( + "${FILESDIR}"/${PN}-1.48.0-test-thread-priority-portage.patch + "${FILESDIR}"/${PN}-1.51.0-ppc32-uring.patch +) + +src_prepare() { + default + + if [[ ${CHOST} == *-darwin* && ${CHOST##*darwin} -le 9 ]] ; then + eapply "${FILESDIR}"/${PN}-1.41.0-darwin.patch + fi + + # Upstream fails to ship a configure script and has missing m4 file. + echo "m4_define([UV_EXTRA_AUTOMAKE_FLAGS], [serial-tests])" \ + > m4/libuv-extra-automake-flags.m4 || die + eautoreconf +} + +src_configure() { + local myeconfargs=( + cc_cv_cflags__g=no + ) + + econf "${myeconfargs[@]}" +} + +src_install() { + default + + find "${ED}" -name '*.la' -delete || die +}