[swig] Use new PyCapsule API instead of former PyCObjects API.

Adam Tkac atkac at fedoraproject.org
Tue Aug 17 12:56:37 UTC 2010


commit ca6fe127cf56ca735e30bc66898c6c55b09beba5
Author: Adam Tkac <atkac at redhat.com>
Date:   Tue Aug 17 14:55:52 2010 +0200

    Use new PyCapsule API instead of former PyCObjects API.
    
    Signed-off-by: Adam Tkac <atkac at redhat.com>

 swig.spec              |    8 +++-
 swig200-rh623854.patch |   86 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+), 2 deletions(-)
---
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 <atkac redhat com> 2.0.0-3
+- python: use new PyCapsule API instead of former PyCObjects API
+
 * Mon Jul 12 2010 Adam Tkac <atkac redhat com> 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);
+     }


More information about the scm-commits mailing list