summaryrefslogtreecommitdiff
path: root/dev-python/pygobject
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/pygobject')
-rw-r--r--dev-python/pygobject/Manifest2
-rw-r--r--dev-python/pygobject/files/pygobject-3.24.1-py37.patch255
-rw-r--r--dev-python/pygobject/pygobject-3.24.1-r1.ebuild112
3 files changed, 369 insertions, 0 deletions
diff --git a/dev-python/pygobject/Manifest b/dev-python/pygobject/Manifest
index f2547202612e..a59277acedb5 100644
--- a/dev-python/pygobject/Manifest
+++ b/dev-python/pygobject/Manifest
@@ -6,10 +6,12 @@ AUX pygobject-2.28.6-gio-types-2.32.patch 1231 BLAKE2B 1649df8d58ee096a0746b5ca2
AUX pygobject-2.28.6-glib-2.36-class_init.patch 11038 BLAKE2B d610454930cf4a568fc9800b3fc58440e2bbc08d91572e7263df42af9c20d2400f7c6d4f64a0cdd066be1469ff33e2ba01b452b5898fe1368add1bb947ca366f SHA512 e8acc5970ac540dc01551759591ee693ae12dd1512130b135e397e528d920159f0f8866bb8a611e2c06cd96f899ef7239153b59a2ec0318e1fd08266acf95e04
AUX pygobject-2.28.6-set_qdata.patch 847 BLAKE2B 696aa6c48ee900db738f8a92265a625a3ab7b59afece84157bf0b9abd0aca5ae68b7ac8cc627a47a5b1a688029d592abcc38e403543a4144e055bcdac68285e4 SHA512 19025af51a8387061276ec9d6c8eb0ecadb5124bba2c4ab3755ab653df467896d19c366d80ce9313fd46e43b493b7c536f780014cf18a6ac47f4b1d2ad4bedb4
AUX pygobject-2.28.6-tests-no-introspection.patch 1257 BLAKE2B 7ff0587b4b40a1519927f8837b5487847ad0d0aa25f57dbaa4b10eaed2eff79f52d6581ca29f1688ebdbe71db231aba56de06c3aa8b246fdd1799320d9a15cc3 SHA512 7d57cb9bbd0b16f4fb0ed9d5eca310c47daf86b89daefa41fb0cf5dd470a6f6a31d0dad31dd261332c039d39bd778f9de8de7260c5856f1b718f72b9aabc01b4
+AUX pygobject-3.24.1-py37.patch 8573 BLAKE2B b9d836793fc31dc07d65656f66400e18f34d156aac9de639998ac909a6af2c760fce6069659aeb9707818635987c2e8f2a5a9cefbd0afb7394439b0c2865a6c9 SHA512 4236800e1df1fbb507eae98ef3e334daa0deea01e7c6e9a4540a2ab797441f7b2a39455118443a2ac77d07ca85bdd093f8a799bc5cea9765f60ec70eb298b781
DIST pygobject-2.28.6.tar.xz 747248 BLAKE2B 5f92794034b2d0559a623db4a7d273a7dc3f099cae87ede91b17e81acac085a9298c6b81b45b4b8540b6a75ced97e474a993437dbfcfc2133d3321d6a979b541 SHA512 37544ea2377258758169b25a2969d5ee1c9ffb9b6e63e05bc7a0471a49ac9169c51ec587d4489172c7d256f53df878a81c1992a08059aa7e43dbbb69f799545c
DIST pygobject-3.22.0.tar.xz 756820 BLAKE2B 2030b9106c082bbec4418c97945df68e20f49005341ad1d7c6d390b894ac88e13f2619215df4c02587b5ccce606083906609d89c559b790777092e991afbf367 SHA512 1f6f0ea8014b35d7828a6bebc0fe2cf6519016ca5ad3819dc6b7879154d8e27fdd2971620955c8fc4904625814833c8bc8ec0599152720649864262d3b6e33e4
DIST pygobject-3.24.1.tar.xz 758648 BLAKE2B 95e3bc6d022b70053549f8a780aa372d8964477e881b825299ca82a7328bbdab58b037a92d36578915ac622b7c223d47cc1c35fccd3ea70d7840841eaec6860d SHA512 f35968ab12b872c85af6b2410cadedcf9fa7e17352a40f3dc557c86203aa1c38753710aab9ce55e986ee2c98b64e14123c65083655445e993d0b53431db6dc93
EBUILD pygobject-2.28.6-r55.ebuild 3541 BLAKE2B 7d20bfad727c2f1e56b28a2d01ac354c3becd1529019eaaaeccb35083c74b8932ee14f061b249d8c02f601f880a8455c3064cd89e2be137e9eeb0bcd3f2a2799 SHA512 d4c7e7a96b5151472b20bb1663b94383acaa526c5df4d545289ca9fe0cc18889238df8b1aeaddf19a1a46cd046b43c46268a65b0e820dc7ebe403d05d664b64b
EBUILD pygobject-3.22.0.ebuild 2940 BLAKE2B 3a5281e9483d976dec0854b885695e6b612782a4f0c1766ce416b0d1ea8d0c27b00853e71d9ae87c7c96d4ee82f94e3d9c657932f1f87231b3768f5a1c9e28f9 SHA512 999d60141ed662a29b0a8f28c57b4bf3e2dbb2770cb82d573553ab18cc7e45587989b99d740bcba4908724f9c2095fc8665b3a24c1bc1185a20b334cb431bf48
+EBUILD pygobject-3.24.1-r1.ebuild 3196 BLAKE2B 187c3a69ac96ced30663fb25db5fdf85ecdf4ca0b52a6c5d8f7a18658ae682ebf685b3aeba79e2ef6521d1aa884ce08dbef617149ce66171939a1c53e45cee12 SHA512 89aa2f4264c9494441288e8be4757bdcc93c8056782af1bca77b4083ee11806a41f0600c398159d49df3ff889c7a50a8e5310727098ce0c4a2590ec59ed99bcc
EBUILD pygobject-3.24.1.ebuild 3130 BLAKE2B 9c911260ffb68368a769c15bb64fc13e7c668797496742f2a5083f30f0733257cc2f5aa163a65dc1e6cc4302400b72d49a2ea8893111784823ba70a3b4087313 SHA512 0e4a7dec040586acf2163fdf8a9c5c3814679978c92da8cf6984ab37c2c5810743d18eac0d6589edbdc86afcddfd63aff47c4b718c8fd18fadd60d7626c16bed
MISC metadata.xml 353 BLAKE2B 20a18942138d7ceab468b01a639f92248bf94f0e6a015a0c6c34872cf60ab56ef91d9b36eebc74b3d3133ecbc6cfbf2aedbc24369165d0fe9a4e832394beb022 SHA512 abcb7bb015ebb246584f60f388837ed0638040f730111831b52716cbc5a9c4ab0c422397702e1d87e56b2947108d5cfa5aeac7489bcd6f89db480c68c572bcdc
diff --git a/dev-python/pygobject/files/pygobject-3.24.1-py37.patch b/dev-python/pygobject/files/pygobject-3.24.1-py37.patch
new file mode 100644
index 000000000000..31250e3561c8
--- /dev/null
+++ b/dev-python/pygobject/files/pygobject-3.24.1-py37.patch
@@ -0,0 +1,255 @@
+From c60ef6a2bcc05010a89328d5fc2704d1aa505e2a Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+Date: Sat, 10 Mar 2018 18:04:14 +0100
+Subject: [PATCH 1/4] tests_gi: Use capture_output() context manager instead of
+ manually mocking stdout
+
+---
+ tests/helper.py | 2 +-
+ tests/test_gi.py | 14 +++-----------
+ 2 files changed, 4 insertions(+), 12 deletions(-)
+
+diff --git a/tests/helper.py b/tests/helper.py
+index c4308fee..892cb740 100644
+--- a/tests/helper.py
++++ b/tests/helper.py
+@@ -113,7 +113,7 @@ def capture_glib_deprecation_warnings():
+ @contextlib.contextmanager
+ def capture_output():
+ """
+- with capture_output as (stdout, stderr):
++ with capture_output() as (stdout, stderr):
+ some_action()
+ print(stdout.getvalue(), stderr.getvalue())
+ """
+diff --git a/tests/test_gi.py b/tests/test_gi.py
+index d0c72b64..3b77ff2d 100644
+--- a/tests/test_gi.py
++++ b/tests/test_gi.py
+@@ -13,7 +13,6 @@ import subprocess
+ import gc
+ import weakref
+ import warnings
+-from io import StringIO, BytesIO
+
+ import gi
+ import gi.overrides
+@@ -24,7 +23,7 @@ from gi.repository import GObject, GLib, Gio
+ from gi.repository import GIMarshallingTests
+
+ from compathelper import _bytes, _unicode
+-from helper import capture_exceptions
++from helper import capture_exceptions, capture_output
+
+ if sys.version_info < (3, 0):
+ CONSTANT_UTF8 = "const \xe2\x99\xa5 utf8"
+@@ -2836,16 +2835,9 @@ class TestModule(unittest.TestCase):
+ self.assertTrue(hasattr(item, '__class__'))
+
+ def test_help(self):
+- orig_stdout = sys.stdout
+- try:
+- if sys.version_info < (3, 0):
+- sys.stdout = BytesIO()
+- else:
+- sys.stdout = StringIO()
++ with capture_output() as (stdout, stderr):
+ help(GIMarshallingTests)
+- output = sys.stdout.getvalue()
+- finally:
+- sys.stdout = orig_stdout
++ output = stdout.getvalue()
+
+ self.assertTrue('SimpleStruct' in output, output)
+ self.assertTrue('Interface2' in output, output)
+--
+2.18.0
+
+From 1826e41cd317ba3c19cf8767b1ef8752f1865aac Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+Date: Sat, 10 Mar 2018 18:54:28 +0100
+Subject: [PATCH 2/4] IntrospectionModule: __path__ should be List[str] and not
+ str
+
+This fixes a crash when calling help() on the module which got stricter with
+Python 3.7.
+
+It's a bit questionable why the type has __path__ in the first place as
+that's only meant for packages. But let's leave that for now.
+---
+ gi/module.py | 5 +++--
+ tests/test_gi.py | 6 ++++--
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/gi/module.py b/gi/module.py
+index fd8f5080..9e8b5256 100644
+--- a/gi/module.py
++++ b/gi/module.py
+@@ -124,10 +124,11 @@ class IntrospectionModule(object):
+ self._version = version
+ self.__name__ = 'gi.repository.' + namespace
+
+- self.__path__ = repository.get_typelib_path(self._namespace)
++ path = repository.get_typelib_path(self._namespace)
++ self.__path__ = [path]
+ if _have_py3:
+ # get_typelib_path() delivers bytes, not a string
+- self.__path__ = self.__path__.decode('UTF-8')
++ self.__path__ = [path.decode('UTF-8')]
+
+ if self._version is None:
+ self._version = repository.get_version(self._namespace)
+diff --git a/tests/test_gi.py b/tests/test_gi.py
+index 3b77ff2d..2fa0423d 100644
+--- a/tests/test_gi.py
++++ b/tests/test_gi.py
+@@ -2813,8 +2813,10 @@ class TestKeywords(unittest.TestCase):
+
+ class TestModule(unittest.TestCase):
+ def test_path(self):
+- self.assertTrue(GIMarshallingTests.__path__.endswith('GIMarshallingTests-1.0.typelib'),
+- GIMarshallingTests.__path__)
++ path = GIMarshallingTests.__path__
++ assert isinstance(path, list)
++ assert len(path) == 1
++ assert path[0].endswith('GIMarshallingTests-1.0.typelib')
+
+ def test_str(self):
+ self.assertTrue("'GIMarshallingTests' from '" in str(GIMarshallingTests),
+--
+2.18.0
+
+From 8adc8be0a2ab17e5215a4bc6f63a9ee391237596 Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+Date: Sun, 11 Mar 2018 13:13:30 +0100
+Subject: [PATCH 3/4] _struct_dealloc: handle being called with an error set
+
+With Python 3.7 it gets called with an error set and tp_dealloc
+implementations need to handle that.
+Fix by saving and restoring the error.
+---
+ gi/pygi-struct.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/gi/pygi-struct.c b/gi/pygi-struct.c
+index 4d5b5411..e2906e0a 100644
+--- a/gi/pygi-struct.c
++++ b/gi/pygi-struct.c
+@@ -61,7 +61,14 @@ out:
+ static void
+ _struct_dealloc (PyGIStruct *self)
+ {
+- GIBaseInfo *info = _struct_get_info ( (PyObject *) self );
++ GIBaseInfo *info;
++ PyObject *error_type, *error_value, *error_traceback;
++ gboolean have_error = !!PyErr_Occurred ();
++
++ if (have_error)
++ PyErr_Fetch (&error_type, &error_value, &error_traceback);
++
++ info = _struct_get_info ( (PyObject *) self );
+
+ if (info != NULL && g_struct_info_is_foreign ( (GIStructInfo *) info)) {
+ pygi_struct_foreign_release (info, pyg_pointer_get_ptr (self));
+@@ -73,6 +80,9 @@ _struct_dealloc (PyGIStruct *self)
+ g_base_info_unref (info);
+ }
+
++ if (have_error)
++ PyErr_Restore (error_type, error_value, error_traceback);
++
+ Py_TYPE (self)->tp_free ((PyObject *)self);
+ }
+
+--
+2.18.0
+
+From 2299d46e7a57a74f734844ae28bfd536e89e5254 Mon Sep 17 00:00:00 2001
+From: Christoph Reiter <reiter.christoph@gmail.com>
+Date: Sat, 10 Mar 2018 20:03:33 +0100
+Subject: [PATCH 4/4] marshal-cleanup: save and restore exception around
+ cleanup
+
+With Python 3.7 some Python API in the cleanup path clears exceptions
+which makes us return NULL in the end without an error set.
+
+Make if safe to call the cleanup functions with an error set by
+saving and restoring exceptions.
+---
+ gi/pygi-marshal-cleanup.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+diff --git a/gi/pygi-marshal-cleanup.c b/gi/pygi-marshal-cleanup.c
+index b4d04bc5..0e4eda3f 100644
+--- a/gi/pygi-marshal-cleanup.c
++++ b/gi/pygi-marshal-cleanup.c
+@@ -93,6 +93,11 @@ pygi_marshal_cleanup_args_from_py_marshal_success (PyGIInvokeState *state,
+ PyGICallableCache *cache)
+ {
+ gssize i;
++ PyObject *error_type, *error_value, *error_traceback;
++ gboolean have_error = !!PyErr_Occurred ();
++
++ if (have_error)
++ PyErr_Fetch (&error_type, &error_value, &error_traceback);
+
+ for (i = 0; i < _pygi_callable_cache_args_len (cache); i++) {
+ PyGIArgCache *arg_cache = _pygi_callable_cache_get_arg (cache, i);
+@@ -112,6 +117,9 @@ pygi_marshal_cleanup_args_from_py_marshal_success (PyGIInvokeState *state,
+ state->args[i].arg_cleanup_data = NULL;
+ }
+ }
++
++ if (have_error)
++ PyErr_Restore (error_type, error_value, error_traceback);
+ }
+
+ void
+@@ -119,6 +127,12 @@ pygi_marshal_cleanup_args_to_py_marshal_success (PyGIInvokeState *state,
+ PyGICallableCache *cache)
+ {
+ GSList *cache_item;
++ PyObject *error_type, *error_value, *error_traceback;
++ gboolean have_error = !!PyErr_Occurred ();
++
++ if (have_error)
++ PyErr_Fetch (&error_type, &error_value, &error_traceback);
++
+ /* clean up the return if available */
+ if (cache->return_cache != NULL) {
+ PyGIMarshalCleanupFunc cleanup_func = cache->return_cache->to_py_cleanup;
+@@ -153,6 +167,9 @@ pygi_marshal_cleanup_args_to_py_marshal_success (PyGIInvokeState *state,
+
+ cache_item = cache_item->next;
+ }
++
++ if (have_error)
++ PyErr_Restore (error_type, error_value, error_traceback);
+ }
+
+ void
+@@ -161,6 +178,11 @@ pygi_marshal_cleanup_args_from_py_parameter_fail (PyGIInvokeState *state,
+ gssize failed_arg_index)
+ {
+ gssize i;
++ PyObject *error_type, *error_value, *error_traceback;
++ gboolean have_error = !!PyErr_Occurred ();
++
++ if (have_error)
++ PyErr_Fetch (&error_type, &error_value, &error_traceback);
+
+ state->failed = TRUE;
+
+@@ -192,6 +214,9 @@ pygi_marshal_cleanup_args_from_py_parameter_fail (PyGIInvokeState *state,
+ }
+ state->args[i].arg_cleanup_data = NULL;
+ }
++
++ if (have_error)
++ PyErr_Restore (error_type, error_value, error_traceback);
+ }
+
+ void
+--
+2.18.0
+
diff --git a/dev-python/pygobject/pygobject-3.24.1-r1.ebuild b/dev-python/pygobject/pygobject-3.24.1-r1.ebuild
new file mode 100644
index 000000000000..71ec333741ce
--- /dev/null
+++ b/dev-python/pygobject/pygobject-3.24.1-r1.ebuild
@@ -0,0 +1,112 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+GNOME2_LA_PUNT="yes"
+PYTHON_COMPAT=( python2_7 python3_{4,5,6,7} )
+
+inherit eutils gnome2 python-r1 virtualx
+
+DESCRIPTION="GLib's GObject library bindings for Python"
+HOMEPAGE="https://wiki.gnome.org/Projects/PyGObject"
+
+LICENSE="LGPL-2.1+"
+SLOT="3"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~x64-solaris ~x86-solaris"
+IUSE="+cairo examples test +threads"
+
+REQUIRED_USE="
+ ${PYTHON_REQUIRED_USE}
+ test? ( cairo )
+"
+
+COMMON_DEPEND="${PYTHON_DEPS}
+ >=dev-libs/glib-2.38:2
+ >=dev-libs/gobject-introspection-1.46.0:=
+ virtual/libffi:=
+ cairo? (
+ >=dev-python/pycairo-1.10.0[${PYTHON_USEDEP}]
+ x11-libs/cairo )
+"
+DEPEND="${COMMON_DEPEND}
+ virtual/pkgconfig
+ cairo? ( x11-libs/cairo[glib] )
+ test? (
+ dev-libs/atk[introspection]
+ media-fonts/font-cursor-misc
+ media-fonts/font-misc-misc
+ x11-libs/cairo[glib]
+ x11-libs/gdk-pixbuf:2[introspection,jpeg]
+ x11-libs/gtk+:3[introspection]
+ x11-libs/pango[introspection]
+ python_targets_python2_7? ( dev-python/pyflakes[$(python_gen_usedep python2_7)] ) )
+"
+# gnome-base/gnome-common required by eautoreconf
+
+# We now disable introspection support in slot 2 per upstream recommendation
+# (see https://bugzilla.gnome.org/show_bug.cgi?id=642048#c9); however,
+# older versions of slot 2 installed their own site-packages/gi, and
+# slot 3 will collide with them.
+RDEPEND="${COMMON_DEPEND}
+ !<dev-python/pygtk-2.13
+ !<dev-python/pygobject-2.28.6-r50:2[introspection]
+"
+
+PATCHES=(
+ "${FILESDIR}"/pygobject-3.24.1-py37.patch
+)
+
+src_prepare() {
+ # Test fail with xvfb but not X
+ sed -e 's/^.*TEST_NAMES=compat_test_pygtk .*;/echo "Test disabled";/' \
+ -i tests/Makefile.{am,in} || die
+
+ # FAIL: test_cairo_font_options (test_cairo.TestPango)
+ # AssertionError: <type 'cairo.SubpixelOrder'> != <type 'int'>
+ sed -e 's/^.*type(font_opts.get_subpixel_order()), int.*/#/' \
+ -i tests/test_cairo.py || die
+
+ gnome2_src_prepare
+ python_copy_sources
+}
+
+src_configure() {
+ # Hard-enable libffi support since both gobject-introspection and
+ # glib-2.29.x rdepend on it anyway
+ # docs disabled by upstream default since they are very out of date
+ configuring() {
+ gnome2_src_configure \
+ $(use_enable cairo) \
+ $(use_enable threads thread)
+
+ # Pyflakes tests work only in python2, bug #516744
+ if use test && [[ ${EPYTHON} != python2.7 ]]; then
+ sed -e 's/if type pyflakes/if false/' \
+ -i Makefile || die "sed failed"
+ fi
+ }
+
+ python_foreach_impl run_in_build_dir configuring
+}
+
+src_compile() {
+ python_foreach_impl run_in_build_dir gnome2_src_compile
+}
+
+src_test() {
+ local -x GIO_USE_VFS="local" # prevents odd issues with deleting ${T}/.gvfs
+ local -x GIO_USE_VOLUME_MONITOR="unix" # prevent udisks-related failures in chroots, bug #449484
+ local -x SKIP_PEP8="yes"
+
+ testing() {
+ local -x XDG_CACHE_HOME="${T}/${EPYTHON}"
+ emake -C "${BUILD_DIR}" check
+ }
+ virtx python_foreach_impl testing
+}
+
+src_install() {
+ python_foreach_impl run_in_build_dir gnome2_src_install
+
+ dodoc -r examples
+}