diff --git a/ffi-multilib.h b/ffi-multilib.h new file mode 100644 index 0000000..b3d728f --- /dev/null +++ b/ffi-multilib.h @@ -0,0 +1,23 @@ +/* This file is here to prevent a file conflict on multiarch systems. */ +#ifdef ffi_wrapper_h +#error "Do not define ffi_wrapper_h!" +#endif +#define ffi_wrapper_h + +#elif defined(__i386__) +#include "ffi-i386.h" +#elif defined(__powerpc64__) +#include "ffi-ppc64.h" +#elif defined(__powerpc__) +#include "ffi-ppc.h" +#elif defined(__s390x__) +#include "ffi-s390x.h" +#elif defined(__s390__) +#include "ffi-s390.h" +#elif defined(__x86_64__) +#include "ffi-x86_64.h" +#else +#error "The libffi-devel package is not usable with the architecture." +#endif + +#undef ffi_wrapper_h diff --git a/ffitarget-multilib.h b/ffitarget-multilib.h new file mode 100644 index 0000000..d0f9be1 --- /dev/null +++ b/ffitarget-multilib.h @@ -0,0 +1,23 @@ +/* This file is here to prevent a file conflict on multiarch systems. */ +#ifdef ffitarget_wrapper_h +#error "Do not define ffitarget_wrapper_h!" +#endif +#define ffitarget_wrapper_h + +#elif defined(__i386__) +#include "ffitarget-i386.h" +#elif defined(__powerpc64__) +#include "ffitarget-ppc64.h" +#elif defined(__powerpc__) +#include "ffitarget-ppc.h" +#elif defined(__s390x__) +#include "ffitarget-s390x.h" +#elif defined(__s390__) +#include "ffitarget-s390.h" +#elif defined(__x86_64__) +#include "ffitarget-x86_64.h" +#else +#error "The libffi-devel package is not usable with the architecture." +#endif + +#undef ffitarget_wrapper_h diff --git a/libffi.spec b/libffi.spec index 77d0a01..ecc7a13 100644 --- a/libffi.spec +++ b/libffi.spec @@ -1,6 +1,8 @@ +%global multilib_arches %{ix86} ppc %{power64} s390 s390x x86_64 + Name: libffi Version: 3.0.13 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A portable foreign function interface library Group: System Environment/Libraries @@ -8,6 +10,8 @@ License: BSD URL: http://sourceware.org/libffi Source0: ftp://sourceware.org/pub/libffi/libffi-%{version}.tar.gz # part of upstream commit 5feacad4 +Source1: ffi-multilib.h +Source2: ffitarget-multilib.h Patch0: libffi-3.0.13-fix-include-path.patch # part of upstream commit 5feacad4 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -69,6 +73,23 @@ make install DESTDIR=$RPM_BUILD_ROOT find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';' rm -f $RPM_BUILD_ROOT%{_infodir}/dir +# Determine generic arch target name for multilib wrapper +basearch=%{_arch} +%ifarch %{ix86} +basearch=i386 +%endif + +%ifarch %{multilib_arches} +# Do header file switcheroo to avoid file conflicts on systems where you +# 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. +for i in ffi ffitarget; do + mv $RPM_BUILD_ROOT%{_includedir}/$i.h $RPM_BUILD_ROOT%{_includedir}/$i-${basearch}.h +done +install -m644 %{SOURCE1} $RPM_BUILD_ROOT%{_includedir}/ffi.h +install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_includedir}/ffitarget.h +%endif + %clean rm -rf $RPM_BUILD_ROOT @@ -101,6 +122,9 @@ fi %{_infodir}/libffi.info.gz %changelog +* Mon May 27 2013 Tom Callaway - 3.0.13-3 +- make header files multilib safe + * Sat May 25 2013 Tom Callaway - 3.0.13-2 - fix incorrect header pathing (and .pc file)