summaryrefslogtreecommitdiff
path: root/extra/swig
diff options
context:
space:
mode:
authorParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
committerParabola <dev@list.parabolagnulinux.org>2011-04-05 14:26:38 +0000
commit415856bdd4f48ab4f2732996f0bae58595092bbe (patch)
treeede2018b591f6dfb477fe9341ba17b9bc000fab9 /extra/swig
Tue Apr 5 14:26:38 UTC 2011
Diffstat (limited to 'extra/swig')
-rw-r--r--extra/swig/PKGBUILD40
-rw-r--r--extra/swig/swig-deprecated-pycobject.patch92
-rw-r--r--extra/swig/swig-pyslice.patch66
3 files changed, 198 insertions, 0 deletions
diff --git a/extra/swig/PKGBUILD b/extra/swig/PKGBUILD
new file mode 100644
index 000000000..b74e723ad
--- /dev/null
+++ b/extra/swig/PKGBUILD
@@ -0,0 +1,40 @@
+# $Id: PKGBUILD 115117 2011-03-17 01:15:24Z stephane $
+# Maintainer: Stéphane Gaudreault <stephane@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=swig
+pkgver=2.0.2
+pkgrel=4
+pkgdesc="Generate scripting interfaces to C/C++ code"
+arch=('i686' 'x86_64')
+url="http://www.swig.org/"
+license=('custom')
+depends=('gcc-libs' 'zlib' 'pcre')
+source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz
+ swig-deprecated-pycobject.patch
+ swig-pyslice.patch)
+sha1sums=('1fc5a7b42ae41c51772d7268ba0f987e9514d110'
+ 'add71330c5d839d9a27b1ca688e6c5e31f1edb7b'
+ '7248b34032db7cb84143a6cefae425b222ce43a6')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+
+ # Use PyCapsule API instead of deprecated PyCObject API in python bindings
+ # See https://bugzilla.redhat.com/show_bug.cgi?id=623854
+ patch -Np1 -i ../swig-deprecated-pycobject.patch
+
+ # Fix PySlice* API/ABI issues with the Python 3.2
+ # See https://bugzilla.redhat.com/show_bug.cgi?id=666429
+ patch -Np1 -i ../swig-pyslice.patch
+
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+ install -D -m644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
+ install -D -m644 LICENSE-UNIVERSITIES "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE-UNIVERSITIES
+}
diff --git a/extra/swig/swig-deprecated-pycobject.patch b/extra/swig/swig-deprecated-pycobject.patch
new file mode 100644
index 000000000..5665252bb
--- /dev/null
+++ b/extra/swig/swig-deprecated-pycobject.patch
@@ -0,0 +1,92 @@
+diff -up swig-2.0.0/Lib/python/pyrun.swg.rh623854 swig-2.0.0/Lib/python/pyrun.swg
+--- swig-2.0.0/Lib/python/pyrun.swg.rh623854 2010-02-28 00:26:02.000000000 +0100
++++ swig-2.0.0/Lib/python/pyrun.swg 2010-08-17 16:32:16.581604656 +0200
+@@ -45,8 +45,18 @@
+ #define SWIG_SetErrorMsg SWIG_Python_SetErrorMsg
+ #define SWIG_ErrorType(code) SWIG_Python_ErrorType(code)
+ #define SWIG_Error(code, msg) SWIG_Python_SetErrorMsg(SWIG_ErrorType(code), msg)
+-#define SWIG_fail goto fail
++#define SWIG_fail goto fail
+
++/*
++ * Python 2.7 and newer and Python 3.1 and newer should use Capsules API instead of
++ * CObjects API.
++ */
++#if ((PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION > 6) || \
++ (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION > 0))
++#define USE_CAPSULES
++#define TYPE_POINTER_NAME \
++ ((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION ".type_pointer_capsule" SWIG_TYPE_TABLE_NAME)
++#endif
+
+ /* Runtime API implementation */
+
+@@ -1356,8 +1366,12 @@ SWIG_Python_GetModule(void) {
+ #ifdef SWIG_LINK_RUNTIME
+ type_pointer = SWIG_ReturnGlobalTypeList((void *)0);
+ #else
++#ifdef USE_CAPSULES
++ type_pointer = PyCapsule_Import(TYPE_POINTER_NAME, 0);
++#else
+ type_pointer = PyCObject_Import((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+ (char*)"type_pointer" SWIG_TYPE_TABLE_NAME);
++#endif
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
+ type_pointer = (void *)0;
+@@ -1402,9 +1416,14 @@ PyModule_AddObject(PyObject *m, char *na
+ SWIGRUNTIME void
+ SWIG_Python_DestroyModule(void *vptr)
+ {
++ size_t i;
++#ifdef USE_CAPSULES
++ swig_module_info *swig_module =
++ (swig_module_info *) PyCapsule_GetPointer((PyObject *)vptr, TYPE_POINTER_NAME);
++#else
+ swig_module_info *swig_module = (swig_module_info *) vptr;
++#endif
+ swig_type_info **types = swig_module->types;
+- size_t i;
+ for (i =0; i < swig_module->size; ++i) {
+ swig_type_info *ty = types[i];
+ if (ty->owndata) {
+@@ -1426,9 +1445,18 @@ SWIG_Python_SetModule(swig_module_info *
+ PyObject *module = Py_InitModule((char*)"swig_runtime_data" SWIG_RUNTIME_VERSION,
+ swig_empty_runtime_method_table);
+ #endif
++#ifdef USE_CAPSULES
++ PyObject *pointer = PyCapsule_New((void *)swig_module, TYPE_POINTER_NAME,
++ (PyCapsule_Destructor)SWIG_Python_DestroyModule);
++#else
+ PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule);
++#endif
+ if (pointer && module) {
++#ifdef USE_CAPSULES
++ PyModule_AddObject(module, (char*)"type_pointer_capsule" SWIG_TYPE_TABLE_NAME, pointer);
++#else
+ PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer);
++#endif
+ } else {
+ Py_XDECREF(pointer);
+ }
+@@ -1449,12 +1477,20 @@ SWIG_Python_TypeQuery(const char *type)
+ PyObject *obj = PyDict_GetItem(cache, key);
+ swig_type_info *descriptor;
+ if (obj) {
++#ifdef USE_CAPSULES
++ descriptor = (swig_type_info *) PyCapsule_GetPointer(obj, type);
++#else
+ descriptor = (swig_type_info *) PyCObject_AsVoidPtr(obj);
++#endif
+ } else {
+ swig_module_info *swig_module = SWIG_Python_GetModule();
+ descriptor = SWIG_TypeQueryModule(swig_module, swig_module, type);
+ if (descriptor) {
++#ifdef USE_CAPSULES
++ obj = PyCapsule_New(descriptor, type, NULL);
++#else
+ obj = PyCObject_FromVoidPtr(descriptor, NULL);
++#endif
+ PyDict_SetItem(cache, key, obj);
+ Py_DECREF(obj);
+ }
diff --git a/extra/swig/swig-pyslice.patch b/extra/swig/swig-pyslice.patch
new file mode 100644
index 000000000..e615b5d03
--- /dev/null
+++ b/extra/swig/swig-pyslice.patch
@@ -0,0 +1,66 @@
+diff -Naur swig-2.0.2.ori/Lib/python/pycontainer.swg swig-2.0.2/Lib/python/pycontainer.swg
+--- swig-2.0.2.ori/Lib/python/pycontainer.swg 2010-10-19 02:31:31.000000000 -0400
++++ swig-2.0.2/Lib/python/pycontainer.swg 2011-03-16 20:41:28.090000004 -0400
+@@ -630,6 +630,7 @@
+ return x;
+ }
+
++#if !NO_PYSLICE
+ /* typemap for slice object support */
+ %typemap(in) PySliceObject* {
+ $1 = (PySliceObject *) $input;
+@@ -637,6 +638,7 @@
+ %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) PySliceObject* {
+ $1 = PySlice_Check($input);
+ }
++#endif
+
+ Sequence* __getslice__(difference_type i, difference_type j) throw (std::out_of_range) {
+ return swig::getslice(self, i, j);
+@@ -659,7 +661,11 @@
+ /* Overloaded methods for Python 3 compatibility
+ * (Also useful in Python 2.x)
+ */
++#if NO_PYSLICE
++ Sequence* __getitem__(PyObject *slice) throw (std::out_of_range) {
++#else
+ Sequence* __getitem__(PySliceObject *slice) throw (std::out_of_range) {
++#endif
+ Py_ssize_t i, j, step;
+ if( !PySlice_Check(slice) ) {
+ SWIG_Error(SWIG_TypeError, "Slice object expected.");
+@@ -669,7 +675,11 @@
+ return swig::getslice(self, i, j);
+ }
+
++#if NO_PYSLICE
++ void __setitem__(PyObject *slice, const Sequence& v)
++#else
+ void __setitem__(PySliceObject *slice, const Sequence& v)
++#endif
+ throw (std::out_of_range, std::invalid_argument) {
+ Py_ssize_t i, j, step;
+ if( !PySlice_Check(slice) ) {
+@@ -680,7 +690,11 @@
+ swig::setslice(self, i, j, v);
+ }
+
++#if NO_PYSLICE
++ void __delitem__(PyObject *slice)
++#else
+ void __delitem__(PySliceObject *slice)
++#endif
+ throw (std::out_of_range) {
+ Py_ssize_t i, j, step;
+ if( !PySlice_Check(slice) ) {
+diff -Naur swig-2.0.2.ori/Source/Modules/python.cxx swig-2.0.2/Source/Modules/python.cxx
+--- swig-2.0.2.ori/Source/Modules/python.cxx 2011-02-20 08:47:14.000000000 -0500
++++ swig-2.0.2/Source/Modules/python.cxx 2011-03-16 20:40:01.223333338 -0400
+@@ -440,6 +440,7 @@
+ if (py3) {
+ /* force disable features that not compatible with Python 3.x */
+ classic = 0;
++ Preprocessor_define((DOH *) "NO_PYSLICE 1", 0);
+ }
+
+ if (cppcast) {