[libffi/f19] make header files multilib safe
Tom Callaway
spot at fedoraproject.org
Mon May 27 19:56:34 UTC 2013
commit 302e2630192754174d78f5a9cac654096e0b1159
Author: Tom Callaway <spot at fedoraproject.org>
Date: Mon May 27 15:56:14 2013 -0400
make header files multilib safe
ffi-multilib.h | 23 +++++++++++++++++++++++
ffitarget-multilib.h | 23 +++++++++++++++++++++++
libffi.spec | 26 +++++++++++++++++++++++++-
3 files changed, 71 insertions(+), 1 deletions(-)
---
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 <spot at fedoraproject.org> - 3.0.13-3
+- make header files multilib safe
+
* Sat May 25 2013 Tom Callaway <spot at fedoraproject.org> - 3.0.13-2
- fix incorrect header pathing (and .pc file)
More information about the scm-commits
mailing list