summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-10-19 20:47:20 +0100
committerSam James <sam@gentoo.org>2023-10-19 20:48:18 +0100
commita24d0c4442a09fd9b15e538035a7fa317fc0ca73 (patch)
tree2f37bb603b78336e75a247d8c85c940684325c54 /dev-libs/libffi
parentsys-apps/file: seccomp: also allow geteuid and getegid (diff)
downloadgentoo-a24d0c4442a09fd9b15e538035a7fa317fc0ca73.tar.gz
gentoo-a24d0c4442a09fd9b15e538035a7fa317fc0ca73.tar.bz2
gentoo-a24d0c4442a09fd9b15e538035a7fa317fc0ca73.zip
dev-libs/libffi: update EAPI 7 -> 8; fix float args on sparc
This fixes the gjs test suite on sparc. Tests continue to pass on libffi and gjs tests now completely pass (previously GIMarshalling failed). The fix is obvious so I don't see much of a need to wait until it's merged upstream, and it only affects sparc. Bug: https://github.com/libffi/libffi/issues/778 Closes: https://bugs.gentoo.org/882071 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-libs/libffi')
-rw-r--r--dev-libs/libffi/files/libffi-3.4.4-sparc-float-typo.patch28
-rw-r--r--dev-libs/libffi/libffi-3.4.4-r2.ebuild77
2 files changed, 105 insertions, 0 deletions
diff --git a/dev-libs/libffi/files/libffi-3.4.4-sparc-float-typo.patch b/dev-libs/libffi/files/libffi-3.4.4-sparc-float-typo.patch
new file mode 100644
index 000000000000..3768df62df9f
--- /dev/null
+++ b/dev-libs/libffi/files/libffi-3.4.4-sparc-float-typo.patch
@@ -0,0 +1,28 @@
+https://github.com/libffi/libffi/issues/778
+https://bugs.gentoo.org/882071
+
+Fix incorrect type for passing floats. Thanks to Petr Sumbera and Richard Henderson
+for figuring it out on the upstream bug.
+--- a/src/sparc/ffi64.c
++++ b/src/sparc/ffi64.c
+@@ -382,13 +382,19 @@ ffi_prep_args_v9(ffi_cif *cif, unsigned long *argp, void *rvalue, void **avalue)
+ *argp++ = *(SINT32 *)a;
+ break;
+ case FFI_TYPE_UINT32:
+- case FFI_TYPE_FLOAT:
+ *argp++ = *(UINT32 *)a;
+ break;
+ case FFI_TYPE_SINT64:
+ case FFI_TYPE_UINT64:
+ case FFI_TYPE_POINTER:
++ *argp++ = *(UINT64 *)a;
++ break;
++ case FFI_TYPE_FLOAT:
++ flags |= SPARC_FLAG_FP_ARGS;
++ *argp++ = *(UINT32 *)a;
++ break;
+ case FFI_TYPE_DOUBLE:
++ flags |= SPARC_FLAG_FP_ARGS;
+ *argp++ = *(UINT64 *)a;
+ break;
+
diff --git a/dev-libs/libffi/libffi-3.4.4-r2.ebuild b/dev-libs/libffi/libffi-3.4.4-r2.ebuild
new file mode 100644
index 000000000000..63367bd2fe39
--- /dev/null
+++ b/dev-libs/libffi/libffi-3.4.4-r2.ebuild
@@ -0,0 +1,77 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit multilib-minimal preserve-libs
+
+MY_PV=${PV/_rc/-rc}
+MY_P=${PN}-${MY_PV}
+
+DESCRIPTION="Portable, high level programming interface to various calling conventions"
+HOMEPAGE="https://sourceware.org/libffi/"
+SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
+S="${WORKDIR}"/${MY_P}
+
+LICENSE="MIT"
+# This is a core package which is depended on by e.g. Python
+# Please use preserve-libs.eclass in pkg_{pre,post}inst to cover users
+# with FEATURES="-preserved-libs" or another package manager if SONAME
+# changes.
+SLOT="0/8" # SONAME=libffi.so.8
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="debug exec-static-trampoline pax-kernel static-libs test"
+
+RESTRICT="!test? ( test )"
+BDEPEND="test? ( dev-util/dejagnu )"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-hppa-large-struct.patch
+ "${FILESDIR}"/${P}-hppa-closure-function-ptrs.patch
+ "${FILESDIR}"/${P}-hppa-jump-table.patch
+ "${FILESDIR}"/${PN}-3.4.4-sparc-float-typo.patch
+)
+
+src_prepare() {
+ default
+
+ if [[ ${CHOST} == arm64-*-darwin* ]] ; then
+ # ensure we use aarch64 asm, not x86 on arm64
+ sed -i -e 's/aarch64\*-\*-\*/arm64*-*-*|&/' \
+ configure configure.host || die
+ fi
+}
+
+multilib_src_configure() {
+ # --includedir= path maintains a few properties:
+ # 1. have stable name across libffi versions: some packages like
+ # dev-lang/ghc or kde-frameworks/networkmanager-qt embed
+ # ${includedir} at build-time. Don't require those to be
+ # rebuilt unless SONAME changes. bug #695788
+ #
+ # We use /usr/.../${PN} (instead of former /usr/.../${P}).
+ #
+ # 2. have ${ABI}-specific location as ffi.h is target-dependent.
+ #
+ # We use /usr/$(get_libdir)/... to have ABI identifier.
+ ECONF_SOURCE="${S}" econf \
+ --includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
+ --disable-multi-os-directory \
+ $(use_enable static-libs static) \
+ $(use_enable exec-static-trampoline exec-static-tramp) \
+ $(use_enable pax-kernel pax_emutramp) \
+ $(use_enable debug)
+}
+
+multilib_src_install_all() {
+ einstalldocs
+ find "${ED}" -name "*.la" -delete || die
+}
+
+pkg_preinst() {
+ preserve_old_lib /usr/$(get_libdir)/libffi.so.7
+}
+
+pkg_postinst() {
+ preserve_old_lib_notify /usr/$(get_libdir)/libffi.so.7
+}