[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