From ca6fe127cf56ca735e30bc66898c6c55b09beba5 Mon Sep 17 00:00:00 2001 From: Adam Tkac Date: Tue, 17 Aug 2010 14:55:52 +0200 Subject: [PATCH] Use new PyCapsule API instead of former PyCObjects API. Signed-off-by: Adam Tkac --- swig.spec | 8 +++- swig200-rh623854.patch | 86 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 swig200-rh623854.patch diff --git a/swig.spec b/swig.spec index a63f641..9a8f72a 100644 --- a/swig.spec +++ b/swig.spec @@ -4,12 +4,13 @@ Summary: Connects C/C++/Objective C to some high-level programming languages Name: swig Version: 2.0.0 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv3+ and BSD Group: Development/Tools URL: http://swig.sourceforge.net/ Source: http://downloads.sourceforge.net/project/swig/swig/swig-%{version}/swig-%{version}.tar.gz Patch1: swig-1.3.23-pylib.patch +Patch2: swig200-rh623854.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: perl, python-devel @@ -42,7 +43,7 @@ This package contains documentation for SWIG and useful examples %prep %setup -q -n swig-%{version} %patch1 -p1 -b .pylib - +%patch2 -p1 -b .rh623854 # as written on https://fedoraproject.org/wiki/Packaging_talk:Perl, section 2 # (specific req/prov filtering). Before you remove this hack make sure you don't @@ -114,6 +115,9 @@ rm -rf %{buildroot} %doc Doc Examples LICENSE LICENSE-GPL LICENSE-UNIVERSITIES COPYRIGHT %changelog +* Tue Aug 17 2010 Adam Tkac 2.0.0-3 +- python: use new PyCapsule API instead of former PyCObjects API + * Mon Jul 12 2010 Adam Tkac 2.0.0-2 - add LICENSE-GPL, LICENSE-UNIVERSITIES and COPYRIGHT to %%doc - include all license files in the -doc subpkg diff --git a/swig200-rh623854.patch b/swig200-rh623854.patch new file mode 100644 index 0000000..ee53c02 --- /dev/null +++ b/swig200-rh623854.patch @@ -0,0 +1,86 @@ +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-08-17 14:18:36.998343153 +0200 ++++ swig-2.0.0/Lib/python/pyrun.swg 2010-08-17 14:32:16.880249117 +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" 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(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,7 +1445,12 @@ 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, ++ SWIG_Python_DestroyModule); ++#else + PyObject *pointer = PyCObject_FromVoidPtr((void *) swig_module, SWIG_Python_DestroyModule); ++#endif + if (pointer && module) { + PyModule_AddObject(module, (char*)"type_pointer" SWIG_TYPE_TABLE_NAME, pointer); + } else { +@@ -1449,12 +1473,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); + }