Update to 2.28.7

This commit is contained in:
Kalev Lember 2017-12-11 11:42:31 +01:00
parent bc7cb29184
commit d6609bb5a5
6 changed files with 8 additions and 404 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ pygobject-2.21.5.tar.bz2
/pygobject-2.28.3.tar.bz2
/pygobject-2.28.4.tar.bz2
/pygobject-2.28.6.tar.bz2
/pygobject-2.28.7.tar.xz

View File

@ -1,28 +0,0 @@
From 42d871eb0b08ee6d55e95cc7e4b90844919555b9 Mon Sep 17 00:00:00 2001
From: Ivan Stankovic <ivan.stankovic@avl.com>
Date: Tue, 21 Feb 2012 12:24:58 +0100
Subject: [PATCH] Fix set_qdata warning on accessing NULL gobject property
https://bugzilla.gnome.org/show_bug.cgi?id=661155
---
gobject/pygobject.c | 4 +++-
1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/gobject/pygobject.c b/gobject/pygobject.c
index 6c2f06c..70dc89a 100644
--- a/gobject/pygobject.c
+++ b/gobject/pygobject.c
@@ -991,7 +991,9 @@ pygobject_new(GObject *obj)
PyObject *
pygobject_new_sunk(GObject *obj)
{
- g_object_set_qdata (obj, pygobject_ref_sunk_key, GINT_TO_POINTER (1));
+ if (obj)
+ g_object_set_qdata (obj, pygobject_ref_sunk_key, GINT_TO_POINTER (1));
+
return pygobject_new_full(obj, TRUE, NULL);
}
--
1.7.1

View File

@ -1,49 +0,0 @@
From 42d01f060c5d764baa881d13c103d68897163a49 Mon Sep 17 00:00:00 2001
From: Ryan Lortie <desrt@desrt.ca>
Date: Mon, 12 Mar 2012 16:44:14 -0400
Subject: [PATCH] gio-types.defs: change some enums to flags
These flags types were originally incorrectly handled in glib as being
enums. That bug was fixed, but they're still enums here, leading to
warnings about the mismatch.
Change them to flags.
https://bugzilla.gnome.org/show_bug.cgi?id=668522
---
gio/gio-types.defs | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gio/gio-types.defs b/gio/gio-types.defs
index 331e0bc..7eee5c8 100644
--- a/gio/gio-types.defs
+++ b/gio/gio-types.defs
@@ -526,7 +526,7 @@
)
)
-(define-enum MountMountFlags
+(define-flags MountMountFlags
(in-module "gio")
(c-name "GMountMountFlags")
(gtype-id "G_TYPE_MOUNT_MOUNT_FLAGS")
@@ -545,7 +545,7 @@
)
)
-(define-enum DriveStartFlags
+(define-flags DriveStartFlags
(in-module "gio")
(c-name "GDriveStartFlags")
(gtype-id "G_TYPE_DRIVE_START_FLAGS")
@@ -770,7 +770,7 @@
)
)
-(define-enum SocketMsgFlags
+(define-flags SocketMsgFlags
(in-module "gio")
(c-name "GSocketMsgFlags")
(gtype-id "G_TYPE_SOCKET_MSG_FLAGS")
--
1.7.9.1

View File

@ -1,311 +0,0 @@
From 9456ba70fdb98b3a4eb7ee2f630182387a54ca00 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martinpitt@gnome.org>
Date: Tue, 19 Feb 2013 14:39:56 +0000
Subject: Move property and signal creation into _class_init()
We must not add class interfaces after g_type_class_ref() has been called the
first time. Move signal and property creation from pyg_type_register() into
pyg_object_class_init(), and drop the hack of registering interfaces twice.
This is a backport of commit efcb0f9fd for 2.28.x. This allows old pygtk
applications to work with pygobject 2.28.x and glib 2.35.x.
https://bugzilla.gnome.org/show_bug.cgi?id=694108
---
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c
index 2a84606..91f7315 100644
--- a/gobject/gobjectmodule.c
+++ b/gobject/gobjectmodule.c
@@ -312,13 +312,6 @@ pyg_object_get_property (GObject *object, guint property_id,
pyglib_gil_state_release(state);
}
-static void
-pyg_object_class_init(GObjectClass *class, PyObject *py_class)
-{
- class->set_property = pyg_object_set_property;
- class->get_property = pyg_object_get_property;
-}
-
typedef struct _PyGSignalAccumulatorData {
PyObject *callable;
PyObject *user_data;
@@ -484,15 +477,14 @@ override_signal(GType instance_type, const gchar *signal_name)
}
static PyObject *
-add_signals (GType instance_type, PyObject *signals)
+add_signals (GObjectClass *klass, PyObject *signals)
{
gboolean ret = TRUE;
- GObjectClass *oclass;
Py_ssize_t pos = 0;
PyObject *key, *value, *overridden_signals = NULL;
+ GType instance_type = G_OBJECT_CLASS_TYPE (klass);
overridden_signals = PyDict_New();
- oclass = g_type_class_ref(instance_type);
while (PyDict_Next(signals, &pos, &key, &value)) {
const gchar *signal_name;
gchar *signal_name_canon, *c;
@@ -530,7 +522,6 @@ add_signals (GType instance_type, PyObject *signals)
if (!ret)
break;
}
- g_type_class_unref(oclass);
if (ret)
return overridden_signals;
else {
@@ -800,14 +791,12 @@ pyg_param_spec_from_object (PyObject *tuple)
}
static gboolean
-add_properties (GType instance_type, PyObject *properties)
+add_properties (GObjectClass *klass, PyObject *properties)
{
gboolean ret = TRUE;
- GObjectClass *oclass;
Py_ssize_t pos = 0;
PyObject *key, *value;
- oclass = g_type_class_ref(instance_type);
while (PyDict_Next(properties, &pos, &key, &value)) {
const gchar *prop_name;
GType prop_type;
@@ -873,7 +862,7 @@ add_properties (GType instance_type, PyObject *properties)
Py_DECREF(slice);
if (pspec) {
- g_object_class_install_property(oclass, 1, pspec);
+ g_object_class_install_property(klass, 1, pspec);
} else {
PyObject *type, *value, *traceback;
ret = FALSE;
@@ -883,7 +872,7 @@ add_properties (GType instance_type, PyObject *properties)
g_snprintf(msg, 256,
"%s (while registering property '%s' for GType '%s')",
PYGLIB_PyUnicode_AsString(value),
- prop_name, g_type_name(instance_type));
+ prop_name, G_OBJECT_CLASS_NAME(klass));
Py_DECREF(value);
value = PYGLIB_PyUnicode_FromString(msg);
}
@@ -892,11 +881,63 @@ add_properties (GType instance_type, PyObject *properties)
}
}
- g_type_class_unref(oclass);
return ret;
}
static void
+pyg_object_class_init(GObjectClass *class, PyObject *py_class)
+{
+ PyObject *gproperties, *gsignals, *overridden_signals;
+ PyObject *class_dict = ((PyTypeObject*) py_class)->tp_dict;
+
+ class->set_property = pyg_object_set_property;
+ class->get_property = pyg_object_get_property;
+
+ /* install signals */
+ /* we look this up in the instance dictionary, so we don't
+ * accidentally get a parent type's __gsignals__ attribute. */
+ gsignals = PyDict_GetItemString(class_dict, "__gsignals__");
+ if (gsignals) {
+ if (!PyDict_Check(gsignals)) {
+ PyErr_SetString(PyExc_TypeError,
+ "__gsignals__ attribute not a dict!");
+ return;
+ }
+ if (!(overridden_signals = add_signals(class, gsignals))) {
+ return;
+ }
+ if (PyDict_SetItemString(class_dict, "__gsignals__",
+ overridden_signals)) {
+ return;
+ }
+ Py_DECREF(overridden_signals);
+
+ PyDict_DelItemString(class_dict, "__gsignals__");
+ } else {
+ PyErr_Clear();
+ }
+
+ /* install properties */
+ /* we look this up in the instance dictionary, so we don't
+ * accidentally get a parent type's __gproperties__ attribute. */
+ gproperties = PyDict_GetItemString(class_dict, "__gproperties__");
+ if (gproperties) {
+ if (!PyDict_Check(gproperties)) {
+ PyErr_SetString(PyExc_TypeError,
+ "__gproperties__ attribute not a dict!");
+ return;
+ }
+ if (!add_properties(class, gproperties)) {
+ return;
+ }
+ PyDict_DelItemString(class_dict, "__gproperties__");
+ /* Borrowed reference. Py_DECREF(gproperties); */
+ } else {
+ PyErr_Clear();
+ }
+}
+
+static void
pyg_register_class_init(GType gtype, PyGClassInitFunc class_init)
{
GSList *list;
@@ -1068,7 +1109,7 @@ pygobject__g_instance_init(GTypeInstance *instance,
*/
static void
pyg_type_add_interfaces(PyTypeObject *class, GType instance_type,
- PyObject *bases, gboolean new_interfaces,
+ PyObject *bases,
GType *parent_interfaces, guint n_parent_interfaces)
{
int i;
@@ -1082,7 +1123,6 @@ pyg_type_add_interfaces(PyTypeObject *class, GType instance_type,
guint k;
PyObject *base = PyTuple_GET_ITEM(bases, i);
GType itype;
- gboolean is_new = TRUE;
const GInterfaceInfo *iinfo;
GInterfaceInfo iinfo_copy;
@@ -1099,16 +1139,6 @@ pyg_type_add_interfaces(PyTypeObject *class, GType instance_type,
if (!G_TYPE_IS_INTERFACE(itype))
continue;
- for (k = 0; k < n_parent_interfaces; ++k) {
- if (parent_interfaces[k] == itype) {
- is_new = FALSE;
- break;
- }
- }
-
- if ((new_interfaces && !is_new) || (!new_interfaces && is_new))
- continue;
-
iinfo = pyg_lookup_interface_info(itype);
if (!iinfo) {
gchar *error;
@@ -1129,7 +1159,7 @@ pyg_type_add_interfaces(PyTypeObject *class, GType instance_type,
int
pyg_type_register(PyTypeObject *class, const char *type_name)
{
- PyObject *gtype, *gsignals, *gproperties, *overridden_signals;
+ PyObject *gtype;
GType parent_type, instance_type;
GType *parent_interfaces;
guint n_parent_interfaces;
@@ -1216,88 +1246,22 @@ pyg_type_register(PyTypeObject *class, const char *type_name)
}
/*
- * Note: Interfaces to be implemented are searched twice. First
- * we register interfaces that are already implemented by a parent
- * type. The second time, the remaining interfaces are
- * registered, i.e. the ones that are not implemented by a parent
- * type. In between these two loops, properties and signals are
- * registered. It has to be done this way, in two steps,
- * otherwise glib will complain. If registering all interfaces
- * always before properties, you get an error like:
- *
- * ../gobject:121: Warning: Object class
- * test_interface+MyObject doesn't implement property
- * 'some-property' from interface 'TestInterface'
- *
- * If, on the other hand, you register interfaces after
- * registering the properties, you get something like:
- *
- * ../gobject:121: Warning: cannot add interface type
- * `TestInterface' to type `test_interface+MyUnknown', since
- * type `test_interface+MyUnknown' already conforms to
- * interface
- *
- * This looks like a GLib quirk, but no bug has been filed
- * upstream. However we have a unit test for this particular
- * problem, which can be found in test_interfaces.py, class
- * TestInterfaceImpl.
+ * Note, all interfaces need to be registered before the first
+ * g_type_class_ref(), see bug #686149.
*
* See also comment above pyg_type_add_interfaces().
*/
- pyg_type_add_interfaces(class, instance_type, class->tp_bases, FALSE,
+ pyg_type_add_interfaces(class, instance_type, class->tp_bases,
parent_interfaces, n_parent_interfaces);
- /* we look this up in the instance dictionary, so we don't
- * accidentally get a parent type's __gsignals__ attribute. */
- gsignals = PyDict_GetItemString(class->tp_dict, "__gsignals__");
- if (gsignals) {
- if (!PyDict_Check(gsignals)) {
- PyErr_SetString(PyExc_TypeError,
- "__gsignals__ attribute not a dict!");
- g_free(parent_interfaces);
- return -1;
- }
- if (!(overridden_signals = add_signals(instance_type, gsignals))) {
- g_free(parent_interfaces);
- return -1;
- }
- if (PyDict_SetItemString(class->tp_dict, "__gsignals__",
- overridden_signals)) {
- g_free(parent_interfaces);
- return -1;
- }
- Py_DECREF(overridden_signals);
- } else {
- PyErr_Clear();
- }
- /* we look this up in the instance dictionary, so we don't
- * accidentally get a parent type's __gsignals__ attribute. */
- gproperties = PyDict_GetItemString(class->tp_dict, "__gproperties__");
- if (gproperties) {
- if (!PyDict_Check(gproperties)) {
- PyErr_SetString(PyExc_TypeError,
- "__gproperties__ attribute not a dict!");
- g_free(parent_interfaces);
- return -1;
- }
- if (!add_properties(instance_type, gproperties)) {
- g_free(parent_interfaces);
- return -1;
- }
- PyDict_DelItemString(class->tp_dict, "__gproperties__");
- /* Borrowed reference. Py_DECREF(gproperties); */
- } else {
- PyErr_Clear();
+ gclass = g_type_class_ref(instance_type);
+ if (PyErr_Occurred() != NULL) {
+ g_type_class_unref(gclass);
+ g_free(parent_interfaces);
+ return -1;
}
- /* Register new interfaces, that are _not_ already defined by
- * the parent type. FIXME: See above.
- */
- pyg_type_add_interfaces(class, instance_type, class->tp_bases, TRUE,
- parent_interfaces, n_parent_interfaces);
-
- gclass = g_type_class_ref(instance_type);
if (pyg_run_class_init(instance_type, gclass, class)) {
g_type_class_unref(gclass);
g_free(parent_interfaces);
@@ -1306,9 +1270,8 @@ pyg_type_register(PyTypeObject *class, const char *type_name)
g_type_class_unref(gclass);
g_free(parent_interfaces);
- if (gsignals)
- PyDict_DelItemString(class->tp_dict, "__gsignals__");
-
+ if (PyErr_Occurred() != NULL)
+ return -1;
return 0;
}
--
cgit v0.9.2

View File

@ -1,24 +1,15 @@
### Abstract ###
Name: pygobject2
Version: 2.28.6
Release: 19%{?dist}
Version: 2.28.7
Release: 1%{?dist}
License: LGPLv2+
Group: Development/Languages
Summary: Python 2 bindings for GObject
URL: http://www.pygtk.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-root
#VCS: git:git://git.gnome.org/pygobject
Source: http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.28/pygobject-%{version}.tar.bz2
### Patches ###
# Fix this warning on startup:
# ** WARNING **: Trying to register gtype 'GMountMountFlags' as enum when
# in fact it is of type 'GFlags'
# using upstream patch (rhbz#790053)
Patch1: fix-gio-flags.patch
Patch2: 0001-Fix-set_qdata-warning-on-accessing-NULL-gobject-prop.patch
Patch3: pygobject-2.28.6-historyentry.patch
Source0: http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.28/pygobject-%{version}.tar.xz
### Build Dependencies ###
@ -64,9 +55,6 @@ This package contains documentation files for %{name}.
%prep
%setup -q -n pygobject-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
find -name '*.py' | xargs sed -i '1s|^#!python|#!%{__python}|'
@ -125,6 +113,9 @@ rm examples/Makefile*
%{_datadir}/pygobject/xsl
%changelog
* Mon Dec 11 2017 Kalev Lember <klember@redhat.com> - 2.28.7-1
- Update to 2.28.7
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.28.6-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild

View File

@ -1 +1 @@
a43d783228dd32899e6908352b8308f3 pygobject-2.28.6.tar.bz2
SHA512 (pygobject-2.28.7.tar.xz) = a5f3ae39f8156bd6234fb6d0ea31eba782fbdd4c292656c31b33e098abe3dcf0774d492cf602a4637cb679af9ecd511b24263349fbfd25708ca70f16cb052dfb