diff --git a/pygobject-pycapsule.patch b/pygobject-pycapsule.patch new file mode 100644 index 0000000..ce4ac48 --- /dev/null +++ b/pygobject-pycapsule.patch @@ -0,0 +1,185 @@ +diff --git a/gi/gimodule.c b/gi/gimodule.c +index 89caf4e..d42e7e4 100644 +--- a/gi/gimodule.c ++++ b/gi/gimodule.c +@@ -328,7 +328,7 @@ PYGLIB_MODULE_START(_gi, "_gi") + _pygi_boxed_register_types (module); + _pygi_argument_init(); + +- api = PyCObject_FromVoidPtr ( (void *) &CAPI, NULL); ++ api = PYGLIB_PyCapsule_New ( (void *) &CAPI, "gi._API"); + if (api == NULL) { + return; + } +diff --git a/gi/pygi.h b/gi/pygi.h +index d1eaf05..551bb6f 100644 +--- a/gi/pygi.h ++++ b/gi/pygi.h +@@ -83,8 +83,11 @@ _pygi_import (void) + if (PyGI_API != NULL) { + return 1; + } +- ++#if PY_VERSION_HEX >= 0x02070000 ++ PyGI_API = (struct PyGI_API*) PyCapsule_Import("gi._API", FALSE); ++#else + PyGI_API = (struct PyGI_API*) PyCObject_Import("gi", "_API"); ++#endif + if (PyGI_API == NULL) { + return -1; + } +diff --git a/glib/glibmodule.c b/glib/glibmodule.c +index ebea163..f1c8168 100644 +--- a/glib/glibmodule.c ++++ b/glib/glibmodule.c +@@ -627,7 +627,7 @@ pyglib_uri_list_extract_uris(PyObject *self, PyObject *args, PyObject *kwargs) + + ret = PyTuple_New(i); + for (j = 0; j < i; j++) +- PyTuple_SetItem(ret, j, PyString_FromString(uris[j])); ++ PyTuple_SetItem(ret, j, PYGLIB_PyUnicode_FromString(uris[j])); + + g_strfreev(uris); + +@@ -797,7 +797,7 @@ pyglib_register_api(PyObject *d) + + /* for addon libraries ... */ + PyDict_SetItemString(d, "_PyGLib_API", +- o=PyCObject_FromVoidPtr(&pyglib_api,NULL)); ++ o=PYGLIB_PyCapsule_New(&pyglib_api,"glib._PyGLib_API")); + Py_DECREF(o); + + pyglib_init_internal(o); +diff --git a/glib/pyglib-python-compat.h b/glib/pyglib-python-compat.h +index bb7bcad..222fc8c 100644 +--- a/glib/pyglib-python-compat.h ++++ b/glib/pyglib-python-compat.h +@@ -41,6 +41,25 @@ typedef int Py_ssize_t; + typedef inquiry lenfunc; + #endif + ++/* PyCObject superceded by PyCapsule on Python >= 2.7 */ ++#if PY_VERSION_HEX >= 0x02070000 ++# define PYGLIB_PyCapsule_Check PyCapsule_CheckExact ++# define PYGLIB_PyCapsule_New(ptr, typename) \ ++ PyCapsule_New(ptr, typename, NULL) ++# define PYGLIB_PyCapsule_GetPointer(obj, typename) \ ++ PyCapsule_GetPointer(obj, typename) ++# define PYGLIB_PyCapsule_Import(module, symbol) \ ++ PyCapsule_Import(##module##.##symbol##, FALSE) ++#else ++# define PYGLIB_PyCapsule_Check PyCObject_Check ++# define PYGLIB_PyCapsule_New(ptr, typename) \ ++ PyCObject_FromVoidPtr(ptr, NULL) ++# define PYGLIB_PyCapsule_GetPointer(obj, typename) \ ++ PyCObject_AsVoidPtr(obj) ++# define PYGLIB_PyCapsule_Import(module, symbol) \ ++ PyCObject_Import(module, symbol) ++#endif ++ + #if PY_VERSION_HEX < 0x03000000 + + #define PYGLIB_INIT_FUNCTION(modname, fullpkgname, functions) \ +diff --git a/glib/pyglib.c b/glib/pyglib.c +index 07db579..7e1b106 100644 +--- a/glib/pyglib.c ++++ b/glib/pyglib.c +@@ -71,8 +71,8 @@ pyglib_init(void) + } + + cobject = PyObject_GetAttrString(glib, "_PyGLib_API"); +- if (cobject && PyCObject_Check(cobject)) +- _PyGLib_API = (struct _PyGLib_Functions *) PyCObject_AsVoidPtr(cobject); ++ if (cobject && PYGLIB_PyCapsule_Check(cobject)) ++ _PyGLib_API = (struct _PyGLib_Functions *) PYGLIB_PyCapsule_GetPointer(cobject, "glib._PyGLib_API"); + else { + PyErr_SetString(PyExc_ImportError, + "could not import glib (could not find _PyGLib_API object)"); +@@ -88,7 +88,7 @@ pyglib_init(void) + void + pyglib_init_internal(PyObject *api) + { +- _PyGLib_API = (struct _PyGLib_Functions *) PyCObject_AsVoidPtr(api); ++ _PyGLib_API = (struct _PyGLib_Functions *) PYGLIB_PyCapsule_GetPointer(api, "glib._PyGLib_API"); + } + + gboolean +diff --git a/glib/pygoptioncontext.c b/glib/pygoptioncontext.c +index 1d67ac5..fe0a2b3 100644 +--- a/glib/pygoptioncontext.c ++++ b/glib/pygoptioncontext.c +@@ -288,7 +288,7 @@ pyg_option_context_richcompare(PyObject *self, PyObject *other, int op) + static PyObject * + pyg_option_get_context(PyGOptionContext *self) + { +- return PyCObject_FromVoidPtr(self->context, NULL); ++ return PYGLIB_PyCapsule_New(self->context, "goption.context"); + } + + static PyMethodDef pyg_option_context_methods[] = { +diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c +index 4e9c07d..b6d6f1d 100644 +--- a/gobject/gobjectmodule.c ++++ b/gobject/gobjectmodule.c +@@ -2511,7 +2511,7 @@ pygobject_register_api(PyObject *d) + { + PyObject *api; + +- api = PyCObject_FromVoidPtr(&pygobject_api_functions,NULL); ++ api = PYGLIB_PyCapsule_New(&pygobject_api_functions, "gobject._PyGObject_API"); + PyDict_SetItemString(d, "_PyGObject_API", api); + Py_DECREF(api); + } +diff --git a/gobject/pygobject.h b/gobject/pygobject.h +index e75c890..c803634 100644 +--- a/gobject/pygobject.h ++++ b/gobject/pygobject.h +@@ -352,8 +352,14 @@ pygobject_init(int req_major, int req_minor, int req_micro) + } + + cobject = PyObject_GetAttrString(gobject, "_PyGObject_API"); ++#if PY_VERSION_HEX >= 0x02070000 ++ if (cobject && PyCapsule_CheckExact(cobject)) ++ _PyGObject_API = (struct _PyGObject_Functions *) PyCapsule_GetPointer(cobject, "gobject._PyGObject_API"); ++ ++#else + if (cobject && PyCObject_Check(cobject)) + _PyGObject_API = (struct _PyGObject_Functions *) PyCObject_AsVoidPtr(cobject); ++#endif + else { + PyErr_SetString(PyExc_ImportError, + "could not import gobject (could not find _PyGObject_API object)"); +diff --git a/gobject/pygtype.c b/gobject/pygtype.c +index c875aa2..19d8b64 100644 +--- a/gobject/pygtype.c ++++ b/gobject/pygtype.c +@@ -864,8 +864,8 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) + else if (PyObject_TypeCheck(obj, &PyGPointer_Type) && + G_VALUE_HOLDS(value, ((PyGPointer *)obj)->gtype)) + g_value_set_pointer(value, pyg_pointer_get(obj, gpointer)); +- else if (PyCObject_Check(obj)) +- g_value_set_pointer(value, PyCObject_AsVoidPtr(obj)); ++ else if (PYGLIB_PyCapsule_Check(obj)) ++ g_value_set_pointer(value, PYGLIB_PyCapsule_GetPointer(obj, NULL)); + else + return -1; + break; +@@ -910,15 +910,15 @@ pyg_value_from_pyobject(GValue *value, PyObject *obj) + } + else if ((bm = pyg_type_lookup(G_VALUE_TYPE(value))) != NULL) + return bm->tovalue(value, obj); +- else if (PyCObject_Check(obj)) +- g_value_set_boxed(value, PyCObject_AsVoidPtr(obj)); ++ else if (PYGLIB_PyCapsule_Check(obj)) ++ g_value_set_boxed(value, PYGLIB_PyCapsule_GetPointer(obj, NULL)); + else + return -1; + break; + } + case G_TYPE_PARAM: + if (PyGParamSpec_Check(obj)) +- g_value_set_param(value, PyCObject_AsVoidPtr(obj)); ++ g_value_set_param(value, PYGLIB_PyCapsule_GetPointer(obj, NULL)); + else + return -1; + break; diff --git a/pygobject2.spec b/pygobject2.spec index fcea2d8..49b56dd 100644 --- a/pygobject2.spec +++ b/pygobject2.spec @@ -12,7 +12,7 @@ Name: pygobject2 Version: 2.26.0 -Release: 2%{?dist} +Release: 3%{?dist} License: LGPLv2+ Group: Development/Languages Summary: Python 2 bindings for GObject @@ -22,6 +22,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-root Source: http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.21/pygobject-%{version}.tar.bz2 Patch1: pygobject-py3m4.patch Patch2: pygobject2-py3k-dist.patch +Patch3: pygobject-pycapsule.patch ### Build Dependencies ### BuildRequires: glib2-devel >= %{glib2_version} @@ -93,6 +94,7 @@ for use in Python 3 programs. %setup -q -n pygobject-%{version} %patch1 -p1 -b .pygobject-py3m4 %patch2 -p1 -b .pygobject-py3k-dist +%patch3 -p1 -b .pygobject-pycapsule %if 0%{?with_python3} rm -rf %{py3dir} @@ -181,6 +183,10 @@ rm examples/Makefile* %endif # with_python3 %changelog +* Tue Sep 28 2010 John (J5) Palmieri - 2.26.0-3 +- add patch to work with PyCapsule since PyCObject is removed from + Python 3.2 which we ship in rawhide + * Tue Sep 28 2010 John (J5) Palmieri - 2.26.0-2 - add another py3k patch so that we compile correctly under python 3 - fixes a couple of print syntax and a try, except syntax