Rebase to libffi-3.4.2 and provide compat-libffi3.1

Resolves: #1891914
This commit is contained in:
Carlos O'Donell 2021-07-27 23:16:43 -04:00
parent f7bd4429e6
commit 6c5e6e710f
4 changed files with 105 additions and 19 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ libffi-3.0.9.tar.gz
/libffi-3.0.11.tar.gz /libffi-3.0.11.tar.gz
/libffi-3.0.13.tar.gz /libffi-3.0.13.tar.gz
/libffi-3.1.tar.gz /libffi-3.1.tar.gz
/libffi-3.4.2.tar.gz

View File

@ -1,22 +1,30 @@
%bcond_with bootstrap %bcond_with bootstrap
# Default: Build compat-libffi3.1.
%bcond_without compat
%global multilib_arches %{ix86} ppc ppc64 ppc64p7 s390 s390x x86_64 %global multilib_arches %{ix86} x86_64
Name: libffi Name: libffi
Version: 3.1 Version: 3.4.2
Release: 29%{?dist} Release: 3%{?dist}
Summary: A portable foreign function interface library Summary: A portable foreign function interface library
License: MIT License: MIT
URL: http://sourceware.org/libffi URL: http://sourceware.org/libffi
Source0: ftp://sourceware.org/pub/libffi/libffi-%{version}.tar.gz Source0: https://github.com/libffi/libffi/releases/download/v3.4.2/libffi-3.4.2.tar.gz
Source1: ffi-multilib.h Source1: ffi-multilib.h
Source2: ffitarget-multilib.h Source2: ffitarget-multilib.h
%if %{with compat}
# Sources and patches required for compat-libffi3.1:
Source3: ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz
Patch0: libffi-3.1-fix-include-path.patch Patch0: libffi-3.1-fix-include-path.patch
Patch1: libffi-3.1-fix-exec-stack.patch Patch1: libffi-3.1-fix-exec-stack.patch
Patch2: libffi-aarch64-rhbz1174037.patch Patch2: libffi-aarch64-rhbz1174037.patch
Patch3: libffi-3.1-aarch64-fix-exec-stack.patch Patch3: libffi-3.1-aarch64-fix-exec-stack.patch
Patch4: libffi-3.1-libffi_tmpdir.patch Patch4: libffi-3.1-libffi_tmpdir.patch
Patch5: libffi3.1-pkgconfig.patch
%endif
BuildRequires: make BuildRequires: make
BuildRequires: gcc BuildRequires: gcc
@ -52,6 +60,15 @@ layer of a fully featured foreign function interface. A layer must
exist above `libffi' that handles type conversions for values passed exist above `libffi' that handles type conversions for values passed
between the two languages. between the two languages.
%if %{with compat}
%package -n compat-libffi3.1
Summary: Compatibility package for libffi transition from 3.1 to 3.4.2.
%description -n compat-libffi3.1
The compat-libffi3.1 package contains the libffi 3.1 runtime library
to support the library SONAME transition from 3.1 to 3.4.2. This pacakge
will eventually be removed once the transition is complete.
%endif
%package devel %package devel
Summary: Development files for %{name} Summary: Development files for %{name}
@ -62,26 +79,68 @@ Requires: pkgconfig
The %{name}-devel package contains libraries and header files for The %{name}-devel package contains libraries and header files for
developing applications that use %{name}. developing applications that use %{name}.
%prep %prep
%if %{without compat}
%setup -q %setup -q
%else
# Setup libffi-3.4.2 and compat-libffi3.1 sources.
%setup -q -b 3
%endif
%if %{with compat}
cd %{_builddir}/libffi-3.1
%patch0 -p1 -b .fixpath %patch0 -p1 -b .fixpath
%patch1 -p1 -b .execstack %patch1 -p1 -b .execstack
%patch2 -p1 -b .aarch64 %patch2 -p1 -b .aarch64
%patch3 -p1 -b .aarch64execstack %patch3 -p1 -b .aarch64execstack
%patch4 -p1 -b .libffitmpdir %patch4 -p1 -b .libffitmpdir
%patch5 -p1 -b .pkgconfig
%endif
%build %build
%configure --disable-static
# For now we disable the static templates to avoid ghc and
# gobject-introspection failures:
# https://gitlab.haskell.org/ghc/ghc/-/issues/20051
# https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/283
# We need to get these fixes into Fedora before we can reeanble them.
%configure --disable-static --disable-exec-static-tramp
%make_build %make_build
%if %{with compat}
cd %{_builddir}/libffi-3.1
%configure --disable-static --includedir=%{_includedir}/libffi3.1
%make_build
%endif
%check %check
%if %{without bootstrap} %if %{without bootstrap}
%make_build check %make_build check
%if %{with compat}
cd %{_builddir}/libffi-3.1
%make_build check
%endif
%endif %endif
%install %install
%make_install %make_install
%if %{with compat}
# Install compat-libffi-3.1 files.
rm -rf $RPM_BUILD_ROOT/libffi-3.1
mkdir -p $RPM_BUILD_ROOT/libffi-3.1
cd %{_builddir}/libffi-3.1
make install DESTDIR=$RPM_BUILD_ROOT/libffi-3.1
# We only need the shared libraries, license, and README.md.
mv $RPM_BUILD_ROOT/libffi-3.1/%{_libdir}/libffi.so.6 $RPM_BUILD_ROOT/%{_libdir}
mv $RPM_BUILD_ROOT/libffi-3.1/%{_libdir}/libffi.so.6.0.2 $RPM_BUILD_ROOT/%{_libdir}
mkdir -p $RPM_BUILD_ROOT/%{_docdir}/libffi-3.1
cp %{_builddir}/libffi-3.1/README $RPM_BUILD_ROOT/%{_docdir}/libffi-3.1/README
mkdir -p $RPM_BUILD_ROOT/%{_datadir}/licenses/libffi-3.1
cp %{_builddir}/libffi-3.1/LICENSE $RPM_BUILD_ROOT/%{_datadir}/licenses/libffi-3.1/LICENSE
rm -rf $RPM_BUILD_ROOT/libffi-3.1
%endif
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';' find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
rm -f $RPM_BUILD_ROOT%{_infodir}/dir rm -f $RPM_BUILD_ROOT%{_infodir}/dir
@ -97,22 +156,27 @@ mkdir -p $RPM_BUILD_ROOT%{_includedir}
# can have both a 32- and 64-bit version of the library, and they each need # can have both a 32- and 64-bit version of the library, and they each need
# their own correct-but-different versions of the headers to be usable. # their own correct-but-different versions of the headers to be usable.
for i in ffi ffitarget; do for i in ffi ffitarget; do
mv $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}/include/$i.h $RPM_BUILD_ROOT%{_includedir}/$i-${basearch}.h mv $RPM_BUILD_ROOT%{_includedir}/$i.h $RPM_BUILD_ROOT%{_includedir}/$i-${basearch}.h
done done
install -m644 %{SOURCE1} $RPM_BUILD_ROOT%{_includedir}/ffi.h install -m644 %{SOURCE1} $RPM_BUILD_ROOT%{_includedir}/ffi.h
install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_includedir}/ffitarget.h install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_includedir}/ffitarget.h
%else
mv $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}/include/{ffi,ffitarget}.h $RPM_BUILD_ROOT%{_includedir}
%endif %endif
rm -rf $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}
%ldconfig_scriptlets %ldconfig_scriptlets
%files %files
%license LICENSE %license LICENSE
%doc README %doc README.md
%{_libdir}/*.so.* %{_libdir}/libffi.so.8
%{_libdir}/libffi.so.8.1.0
%if %{with compat}
%files -n compat-libffi3.1
%license %{_datadir}/licenses/libffi-3.1/LICENSE
%doc %{_docdir}/libffi-3.1/README
%{_libdir}/libffi.so.6
%{_libdir}/libffi.so.6.0.2
%endif
%files devel %files devel
%{_libdir}/pkgconfig/*.pc %{_libdir}/pkgconfig/*.pc
@ -122,6 +186,15 @@ rm -rf $RPM_BUILD_ROOT%{_libdir}/libffi-%{version}
%{_infodir}/libffi.info.* %{_infodir}/libffi.info.*
%changelog %changelog
* Tue Jul 27 2021 Carlos O'Donell <carlos@redhat.com> - 3.4.2-3
- Add temporary compat-libffi3.1 for library transition.
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.4.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Mon Jun 28 2021 Carlos O'Donell <carlos@redhat.com> - 3.4.2-1
- Rebase to libffi 3.4.2.
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 3.1-29 * Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 3.1-29
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937

11
libffi3.1-pkgconfig.patch Normal file
View File

@ -0,0 +1,11 @@
diff -rup a/libffi.pc.in b/libffi.pc.in
--- a/libffi.pc.in 2020-12-02 15:33:14.076549606 -0500
+++ b/libffi.pc.in 2020-12-02 16:11:42.855654638 -0500
@@ -6,5 +6,5 @@ includedir=@includedir@
Name: @PACKAGE_NAME@
Description: Library supporting Foreign Function Interfaces
Version: @PACKAGE_VERSION@
-Libs: -L${libdir} -lffi
+Libs: -L${libdir} libffi.so.6
Cflags: -I${includedir}
Only in b: libffi.pc.in~

View File

@ -1 +1,2 @@
f5898b29bbfd70502831a212d9249d10 libffi-3.1.tar.gz SHA512 (libffi-3.4.2.tar.gz) = 31bad35251bf5c0adb998c88ff065085ca6105cf22071b9bd4b5d5d69db4fadf16cadeec9baca944c4bb97b619b035bb8279de8794b922531fddeb0779eb7fb1
SHA512 (libffi-3.1.tar.gz) = 8994973d75facf5ad928c270e17b1a56e24d1543af75b93731a0048e747df27e4190a736b6dc2dca7d43de1d7e88891220304802c10fcccdcebee9c9ffd3d1b9