From 415856bdd4f48ab4f2732996f0bae58595092bbe Mon Sep 17 00:00:00 2001 From: Parabola Date: Tue, 5 Apr 2011 14:26:38 +0000 Subject: Tue Apr 5 14:26:38 UTC 2011 --- extra/swig/PKGBUILD | 40 +++++++++++++ extra/swig/swig-deprecated-pycobject.patch | 92 ++++++++++++++++++++++++++++++ extra/swig/swig-pyslice.patch | 66 +++++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 extra/swig/PKGBUILD create mode 100644 extra/swig/swig-deprecated-pycobject.patch create mode 100644 extra/swig/swig-pyslice.patch (limited to 'extra/swig') 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 +# Contributor: Tom Newsom + +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) { -- cgit v1.2.3-54-g00ecf