diff --git a/devel/libffi/Makefile b/devel/libffi/Makefile index 412c4491afc2..94f7897c6607 100644 --- a/devel/libffi/Makefile +++ b/devel/libffi/Makefile @@ -1,30 +1,37 @@ # Created by: Horance Chou PORTNAME= libffi -PORTVERSION= 3.4.2 +PORTVERSION= 3.3 +PORTREVISION= 1 CATEGORIES= devel -MASTER_SITES= https://github.com/${PORTNAME}/${PORTNAME}/releases/download/v${PORTVERSION}/ +MASTER_SITES= SOURCEWARE/${PORTNAME} + +PATCH_SITES= https://github.com/${PORTNAME}/${PORTNAME}/commit/ +PATCHFILES+= 01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd.diff:-p1 +# This patch is for configure.ac. +# A local patch against configure has been created in files/patch-configure. +#PATCHFILES+= 8c50837f0b58ba5b2bcb1b424a2a4bfa01559fb2.diff:-p1 MAINTAINER= kbowling@FreeBSD.org COMMENT= Foreign Function Interface LICENSE= MIT LICENSE_FILE= ${WRKSRC}/LICENSE TEST_DEPENDS= runtest:misc/dejagnu USES= compiler:c11 cpe libtool pathfix USE_LDCONFIG= yes GNU_CONFIGURE= yes CPE_VENDOR= libffi_project CONFIGURE_ARGS= --disable-multi-os-directory INSTALL_TARGET= install-strip INFO= libffi TEST_TARGET= check post-patch: @${REINPLACE_CMD} -e 's| -Wno-psabi||g' \ ${WRKSRC}/testsuite/lib/libffi.exp .include diff --git a/devel/libffi/distinfo b/devel/libffi/distinfo index 2f18995b2eaf..fb8ce67abd43 100644 --- a/devel/libffi/distinfo +++ b/devel/libffi/distinfo @@ -1,3 +1,5 @@ -TIMESTAMP = 1651605317 -SHA256 (libffi-3.4.2.tar.gz) = 540fb721619a6aba3bdeef7d940d8e9e0e6d2c193595bc243241b77ff9e93620 -SIZE (libffi-3.4.2.tar.gz) = 1351355 +TIMESTAMP = 1651590393 +SHA256 (libffi-3.3.tar.gz) = 72fba7922703ddfa7a028d513ac15a85c8d54c8d67f55fa5a4802885dc652056 +SIZE (libffi-3.3.tar.gz) = 1305466 +SHA256 (01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd.diff) = 79935f5836624a9b38d0d40541a9d7510f4ecff14f6a7881f483b158cf13d335 +SIZE (01a75ed76ea7e57f1b7a5c183e2b1e890e6aa0fd.diff) = 414 diff --git a/devel/libffi/files/patch-Makefile.in b/devel/libffi/files/patch-Makefile.in new file mode 100644 index 000000000000..731e61881f65 --- /dev/null +++ b/devel/libffi/files/patch-Makefile.in @@ -0,0 +1,16 @@ +This patch is based on the following upstream patch +From 0027b072627aa9d3ada71c4374561966064ecd5a Mon Sep 17 00:00:00 2001 +From: "M. Herdiansyah" +Date: Thu, 11 Jun 2020 19:40:24 +0700 +Subject: [PATCH] Makefile: increase compatibility with bmake (#551) +--- Makefile.in.orig 2020-07-04 16:53:39 UTC ++++ Makefile.in +@@ -2012,7 +2012,7 @@ uninstall-am: uninstall-pkgconfigDATA uninstall-toolex + @LIBFFI_BUILD_VERSIONED_SHLIB_SUN_TRUE@@LIBFFI_BUILD_VERSIONED_SHLIB_TRUE@ > $@ || (rm -f $@ ; exit 1) + + libffi.map: $(top_srcdir)/libffi.map.in +- $(COMPILE) -D$(TARGET) -E -x assembler-with-cpp -o $@ $< ++ $(COMPILE) -D$(TARGET) -E -x assembler-with-cpp -o $@ $(top_srcdir)/libffi.map.in + + dist-hook: + d=`(cd $(distdir); pwd)`; (cd doc; make pdf; cp *.pdf $$d/doc) diff --git a/devel/libffi/files/patch-configure b/devel/libffi/files/patch-configure new file mode 100644 index 000000000000..2ea2ea9dcb96 --- /dev/null +++ b/devel/libffi/files/patch-configure @@ -0,0 +1,23 @@ +--- configure.orig 2020-08-20 10:54:03 UTC ++++ configure +@@ -18545,17 +18545,11 @@ if ${libffi_cv_ro_eh_frame+:} false; then : + $as_echo_n "(cached) " >&6 + else + +- libffi_cv_ro_eh_frame=no ++ libffi_cv_ro_eh_frame=yes + echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c + if $CC $CFLAGS -c -fpic -fexceptions -o conftest.o conftest.c > /dev/null 2>&1; then +- objdump -h conftest.o > conftest.dump 2>&1 +- libffi_eh_frame_line=`grep -n eh_frame conftest.dump | cut -d: -f 1` +- if test "x$libffi_eh_frame_line" != "x"; then +- libffi_test_line=`expr $libffi_eh_frame_line + 1`p +- sed -n $libffi_test_line conftest.dump > conftest.line +- if grep READONLY conftest.line > /dev/null; then +- libffi_cv_ro_eh_frame=yes +- fi ++ if readelf -WS conftest.o | grep -q -n 'eh_frame .* WA'; then ++ libffi_cv_ro_eh_frame=no + fi + fi + rm -f conftest.* diff --git a/devel/libffi/files/patch-configure.host b/devel/libffi/files/patch-configure.host new file mode 100644 index 000000000000..f2e70f9cd244 --- /dev/null +++ b/devel/libffi/files/patch-configure.host @@ -0,0 +1,24 @@ +--- configure.host.orig 2019-11-22 17:55:36.000000000 -0600 ++++ configure.host 2020-08-28 12:48:23.259024000 -0500 +@@ -167,7 +167,7 @@ case "${host}" in + mips-sgi-irix5.* | mips-sgi-irix6.* | mips*-*-rtems*) + TARGET=MIPS; TARGETDIR=mips + ;; +- mips*-*linux* | mips*-*-openbsd*) ++ mips*-*linux* | mips*-*-openbsd* | mips*-*-freebsd*) + # Support 128-bit long double for NewABI. + HAVE_LONG_DOUBLE='defined(__mips64)' + TARGET=MIPS; TARGETDIR=mips +@@ -203,7 +203,11 @@ case "${host}" in + TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc + HAVE_LONG_DOUBLE_VARIANT=1 + ;; +- powerpc64-*-freebsd*) ++ powerpcspe-*-freebsd*) ++ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc ++ CFLAGS="$CFLAGS -D__NO_FPRS__" ++ ;; ++ powerpc64-*-freebsd* | powerpc64le-*-freebsd*) + TARGET=POWERPC; TARGETDIR=powerpc + ;; + powerpc*-*-rtems*) diff --git a/devel/libffi/files/patch-src__arm__ffi.c b/devel/libffi/files/patch-src__arm__ffi.c new file mode 100644 index 000000000000..02141745c36c --- /dev/null +++ b/devel/libffi/files/patch-src__arm__ffi.c @@ -0,0 +1,36 @@ +# Description: Fix abort() on ARM related to __clear_cache(). This is an issue +# for anything !apple that is using the libcompiler_rt provided by clang on ARM +# PR: ports/149167 ports/184517 +# Patch by: cognet@ (to be upstreamed @ LLVM) + +--- src/arm/ffi.c.orig 2019-10-31 14:49:54 UTC ++++ src/arm/ffi.c +@@ -55,6 +55,11 @@ extern unsigned int ffi_arm_trampoline[3] FFI_HIDDEN; + #endif + #endif + ++#if defined(__FreeBSD__) && defined(__arm__) ++#include ++#include ++#endif ++ + /* Forward declares. */ + static int vfp_type_p (const ffi_type *); + static void layout_vfp_args (ffi_cif *); +@@ -568,6 +573,16 @@ void ffi_go_closure_SYSV (void) FFI_HIDDEN; + void ffi_go_closure_VFP (void) FFI_HIDDEN; + + /* the cif must already be prep'ed */ ++ ++#if defined(__FreeBSD__) && defined(__arm__) ++#define __clear_cache(start, end) do { \ ++ struct arm_sync_icache_args ua; \ ++ \ ++ ua.addr = (uintptr_t)(start); \ ++ ua.len = (char *)(end) - (char *)start; \ ++ sysarch(ARM_SYNC_ICACHE, &ua); \ ++ } while (0); ++#endif + + ffi_status + ffi_prep_closure_loc (ffi_closure * closure, diff --git a/devel/libffi/files/patch-src__mips__ffi.c b/devel/libffi/files/patch-src__mips__ffi.c new file mode 100644 index 000000000000..d93f373760b1 --- /dev/null +++ b/devel/libffi/files/patch-src__mips__ffi.c @@ -0,0 +1,29 @@ +diff --git ./src/mips/ffi.c.orig ./src/mips/ffi.c +index 03121e3..8b7881f 100644 +--- ./src/mips/ffi.c.orig ++++ ./src/mips/ffi.c +@@ -38,7 +38,9 @@ + #endif + + #ifndef USE__BUILTIN___CLEAR_CACHE +-# if defined(__OpenBSD__) ++# if defined(__FreeBSD__) ++# include ++# elif defined(__OpenBSD__) + # include + # else + # include +@@ -729,11 +731,13 @@ ffi_prep_closure_loc (ffi_closure *closure, + closure->fun = fun; + closure->user_data = user_data; + ++#if !defined(__FreeBSD__) + #ifdef USE__BUILTIN___CLEAR_CACHE + __builtin___clear_cache(clear_location, clear_location + FFI_TRAMPOLINE_SIZE); + #else + cacheflush (clear_location, FFI_TRAMPOLINE_SIZE, ICACHE); + #endif ++#endif /* ! __FreeBSD__ */ + return FFI_OK; + } + diff --git a/devel/libffi/files/patch-src__mips__ffitarget.h b/devel/libffi/files/patch-src__mips__ffitarget.h new file mode 100644 index 000000000000..4c52e32667c3 --- /dev/null +++ b/devel/libffi/files/patch-src__mips__ffitarget.h @@ -0,0 +1,13 @@ +diff --git ./src/mips/ffitarget.h.orig ./src/mips/ffitarget.h +index 717d659..5a0c2b1 100644 +--- ./src/mips/ffitarget.h.orig ++++ ./src/mips/ffitarget.h +@@ -41,7 +41,7 @@ + #define _MIPS_SIM_ABI32 1 + #define _MIPS_SIM_NABI32 2 + #define _MIPS_SIM_ABI64 3 +-#elif !defined(__OpenBSD__) ++#elif !defined(__OpenBSD__) && !defined(__FreeBSD__) + # include + #endif + diff --git a/devel/libffi/pkg-plist b/devel/libffi/pkg-plist index 88f425d5c3aa..cdea449ead1b 100644 --- a/devel/libffi/pkg-plist +++ b/devel/libffi/pkg-plist @@ -1,11 +1,11 @@ include/ffi.h include/ffitarget.h lib/libffi.a lib/libffi.so -lib/libffi.so.8 -lib/libffi.so.8.1.0 +lib/libffi.so.7 +lib/libffi.so.7.1.0 libdata/pkgconfig/libffi.pc man/man3/ffi.3.gz man/man3/ffi_call.3.gz man/man3/ffi_prep_cif.3.gz man/man3/ffi_prep_cif_var.3.gz