summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-10-15 12:59:54 +0200
committerMichał Górny <mgorny@gentoo.org>2017-10-15 13:01:26 +0200
commit2b54ba0b815698d27e932a12b7f0df0f41e761e3 (patch)
tree4cd4bd65b1cc100baef4c6b29905b4faf3c83a0c
parentdev-python/pycairo: Drop old (diff)
downloadgentoo-2b54ba0b.tar.gz
gentoo-2b54ba0b.tar.bz2
gentoo-2b54ba0b.zip
dev-python/pycairo: Move patches to a dist tarball
Closes: https://bugs.gentoo.org/620566
-rw-r--r--dev-python/pycairo/Manifest1
-rw-r--r--dev-python/pycairo/files/py2cairo-1.10.0-ppc-darwin.patch18
-rw-r--r--dev-python/pycairo/files/py2cairo-1.10.0-svg_check.patch126
-rw-r--r--dev-python/pycairo/files/py2cairo-1.10.0-xpyb.patch38
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-101_pycairo-region.patch917
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-50_specify-encoding-in-waf.patch32
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-80_fix-pickle.patch30
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-81_pickling-again.patch37
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-svg_check.patch126
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-waf-py3_4.patch11
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-waf-unpack.patch12
-rw-r--r--dev-python/pycairo/files/pycairo-1.10.0-xpyb.patch41
-rw-r--r--dev-python/pycairo/pycairo-1.10.0-r5.ebuild27
13 files changed, 15 insertions, 1401 deletions
diff --git a/dev-python/pycairo/Manifest b/dev-python/pycairo/Manifest
index 723b16edc345..5577f0d07b88 100644
--- a/dev-python/pycairo/Manifest
+++ b/dev-python/pycairo/Manifest
@@ -1,3 +1,4 @@
DIST py2cairo-1.10.0.tar.bz2 402070 SHA256 d30439f06c2ec1a39e27464c6c828b6eface3b22ee17b2de05dc409e429a7431 SHA512 cb3d54de9af4134460ce731da8166a3127a642c8a2e6184109437ddec115cd55b8dd2413a5c81700277bfe2f22fcfe268db4f3ba0f7649751e85bb34295f79fc WHIRLPOOL 60b57d55b27f06acd62714ac6ad7973ab973d42995fb536ae800263a2e8c7451a24ccafd96fe30f5bfa26e1ae218934d4fafaafec3e9666a39b33c78672407e2
+DIST pycairo-1.10.0-gentoo-patchset.tar.bz2 9669 SHA256 31b5aef32b5d2fb3d8e1c6f9629e6d78e6b3928a3a1c7e44af2120f38490d00e SHA512 c367a7d8fa771ac900ca3363cb7dfd50de045cf67c73c6e552d05018c6933b13dd5660b033be59e1acf8af79f16253a8e56aaa3f135a262a8148711ae8b7a587 WHIRLPOOL 65890911ee35568fceaa5146bf5e4718011eb2f606dc6c180e7ce612fe2351488c7ad2ea2322ec1ca55eb0f8b6f4fb3fb759152be525d20f80922d707108bc9e
DIST pycairo-1.10.0.tar.bz2 246556 SHA256 9aa4078e7eb5be583aeabbe8d87172797717f95e8c4338f0d4a17b683a7253be SHA512 a03db6f04cea504985f390b0734042390f491f32ae2bee1299dabbafd369fde36bb506ebb941d22bbc11b0d008c4f758baeacf309a7336880529455092db829f WHIRLPOOL e779d56d67ef18bbd052d81acb38d8b610ca4bbf787f4b0e3982633de55ff54d6dfa3e5ce1957321fba09f0ec2d12ce12057335de9d5ff3f84c2bc0530415e76
DIST pycairo-1.15.3.tar.gz 177056 SHA256 8642e36cef66acbfc02760d2b40c716f5f183d073fb063ba28fd29a14044719d SHA512 1fc75d193eacb976f2e5a594aa07409a0f80ccb21921065c1794961143785eed48be1966d2d2d3e2d0428f9b4e956994dd851d21f3c3cb91fbc27b007a901ce8 WHIRLPOOL e9248366c8eb541bc70ad73c9c6eea995a2527d189584a1ec6f6b835fdeae57d1aa63e2deaa9f790042d0670e7d07af8867b111ac107b53befd354c3cfc70ca1
diff --git a/dev-python/pycairo/files/py2cairo-1.10.0-ppc-darwin.patch b/dev-python/pycairo/files/py2cairo-1.10.0-ppc-darwin.patch
deleted file mode 100644
index e921ac34acd2..000000000000
--- a/dev-python/pycairo/files/py2cairo-1.10.0-ppc-darwin.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-inspired by:
-http://groups.google.com/group/waf-users/browse_thread/thread/2bd6774056c850bc/
-27bfdcac2fb9ec05?lnk=gst#27bfdcac2fb9ec05
-
-we cannot "fix" the buildsystem, since it's bzip2-tarred *sigh*
-
-
---- waf
-+++ waf
-@@ -154,6 +154,8 @@
-
- wafdir = find_lib()
- sys.path.insert(0, wafdir)
-+from waflib.Tools.c_config import MACRO_TO_DESTOS
-+MACRO_TO_DESTOS['__POWERPC__'] = 'darwin'
-
- if __name__ == '__main__':
- import waflib.extras.compat15
diff --git a/dev-python/pycairo/files/py2cairo-1.10.0-svg_check.patch b/dev-python/pycairo/files/py2cairo-1.10.0-svg_check.patch
deleted file mode 100644
index 4cd755c8d574..000000000000
--- a/dev-python/pycairo/files/py2cairo-1.10.0-svg_check.patch
+++ /dev/null
@@ -1,126 +0,0 @@
---- src/cairomodule.c
-+++ src/cairomodule.c
-@@ -127,7 +127,7 @@
- #else
- 0,
- #endif
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- &PycairoSVGSurface_Type,
- #else
- 0,
-@@ -223,7 +223,7 @@
- if (PyType_Ready(&PycairoPSSurface_Type) < 0)
- return;
- #endif
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- if (PyType_Ready(&PycairoSVGSurface_Type) < 0)
- return;
- #endif
-@@ -305,7 +305,7 @@
- PyModule_AddObject(m, "PSSurface", (PyObject *)&PycairoPSSurface_Type);
- #endif
-
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- Py_INCREF(&PycairoSVGSurface_Type);
- PyModule_AddObject(m, "SVGSurface", (PyObject *)&PycairoSVGSurface_Type);
- #endif
-@@ -379,7 +379,7 @@
- #else
- PyModule_AddIntConstant(m, "HAS_PS_SURFACE", 0);
- #endif
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- PyModule_AddIntConstant(m, "HAS_SVG_SURFACE", 1);
- #else
- PyModule_AddIntConstant(m, "HAS_SVG_SURFACE", 0);
---- src/private.h
-+++ src/private.h
-@@ -86,7 +86,7 @@
- extern PyTypeObject PycairoPSSurface_Type;
- #endif
-
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- extern PyTypeObject PycairoSVGSurface_Type;
- #endif
-
---- src/pycairo.h
-+++ src/pycairo.h
-@@ -182,7 +182,7 @@
- #define PycairoPSSurface_Type *(Pycairo_CAPI->PSSurface_Type)
- #endif
-
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- #define PycairoSVGSurface_Type *(Pycairo_CAPI->SVGSurface_Type)
- #endif
-
---- src/surface.c
-+++ src/surface.c
-@@ -83,7 +83,7 @@
- type = &PycairoPSSurface_Type;
- break;
- #endif
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- case CAIRO_SURFACE_TYPE_SVG:
- type = &PycairoSVGSurface_Type;
- break;
-@@ -1015,7 +1015,7 @@
-
-
- /* Class SVGSurface(Surface) ----------------------------------------------- */
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- #include <cairo-svg.h>
-
- static PyObject *
-@@ -1125,7 +1125,7 @@
- 0, /* tp_is_gc */
- 0, /* tp_bases */
- };
--#endif /* CAIRO_HAS_SVG_SURFACE */
-+#endif /* PYCAIRO_ENABLE_SVG */
-
-
- #if CAIRO_HAS_WIN32_SURFACE
---- wscript
-+++ wscript
-@@ -1,6 +1,7 @@
- # -*- python -*-
-
- import os
-+import subprocess
-
- top = '.'
- out = 'build_directory'
-@@ -11,6 +12,17 @@
- cairo_version_required = '1.10.0'
-
-
-+def check_svg():
-+ if os.environ.get('PYCAIRO_DISABLE_SVG', None) is None:
-+ return_code = subprocess.call(['pkg-config', '--exists', 'cairo-svg'])
-+ if return_code == 0:
-+ return True
-+ else:
-+ return False
-+ else:
-+ return False
-+
-+
- def options(ctx):
- print(' %s/options()' %d)
- ctx.tool_options('gnu_dirs')
-@@ -39,6 +51,8 @@
- ctx.define('PYCAIRO_VERSION_MAJOR', version[0])
- ctx.define('PYCAIRO_VERSION_MINOR', version[1])
- ctx.define('PYCAIRO_VERSION_MICRO', version[2])
-+ if check_svg():
-+ ctx.define('PYCAIRO_ENABLE_SVG', 1)
-
- ctx.write_config_header('src/config.h')
-
diff --git a/dev-python/pycairo/files/py2cairo-1.10.0-xpyb.patch b/dev-python/pycairo/files/py2cairo-1.10.0-xpyb.patch
deleted file mode 100644
index c136cb0c39a1..000000000000
--- a/dev-python/pycairo/files/py2cairo-1.10.0-xpyb.patch
+++ /dev/null
@@ -1,38 +0,0 @@
---- py2cairo-1.10.0/wscript
-+++ py2cairo-1.10.0/wscript
-@@ -10,6 +10,7 @@
- APPNAME='py2cairo'
- VERSION='1.10.0'
- cairo_version_required = '1.10.0'
-+xpyb_version_required = '1.3'
-
-
- def check_svg():
-@@ -23,6 +24,17 @@
- return False
-
-
-+def check_xpyb():
-+ if os.environ.get('PYCAIRO_DISABLE_XPYB', None) is None:
-+ return_code = subprocess.call(['pkg-config', '--exists', 'xpyb'])
-+ if return_code == 0:
-+ return True
-+ else:
-+ return False
-+ else:
-+ return False
-+
-+
- def options(ctx):
- print(' %s/options()' %d)
- ctx.tool_options('gnu_dirs')
-@@ -41,6 +53,9 @@
- ctx.check_python_headers()
- ctx.check_cfg(package='cairo', atleast_version=cairo_version_required,
- args='--cflags --libs')
-+ if check_xpyb():
-+ ctx.check_cfg(package='xpyb', atleast_version=xpyb_version_required,
-+ args='--cflags --libs', mandatory=False)
-
- # add gcc options
- if env['CC_NAME'] == 'gcc':
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-101_pycairo-region.patch b/dev-python/pycairo/files/pycairo-1.10.0-101_pycairo-region.patch
deleted file mode 100644
index 4143f33cb247..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-101_pycairo-region.patch
+++ /dev/null
@@ -1,917 +0,0 @@
-Description: Add support for cairo_region_t
- This patch fix missing support for cairo_region_t.
-Author: Bug Fly
-Origin: https://bugs.freedesktop.org/attachment.cgi?id=61553
-Bug-Debian: http://bugs.debian.org/688079
-Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/py3cairo/+bug/1028115
-Last-Update: 2012-08-20
-Applied-Upstream: http://cgit.freedesktop.org/pycairo/commit/?id=75e82a1b3f495a3abbc78e50a5c66356d320fb15
-
---- py3cairo-1.10.0+dfsg.orig/doc/pycairo_c_api.rst
-+++ py3cairo-1.10.0+dfsg/doc/pycairo_c_api.rst
-@@ -51,6 +51,8 @@ Objects::
- PycairoGradient
- PycairoLinearGradient
- PycairoRadialGradient
-+ PycairoRectangleInt
-+ PycairoRegion
- PycairoScaledFont
- PycairoSurface
- PycairoImageSurface
-@@ -78,6 +80,8 @@ Types::
- PyTypeObject *Gradient_Type;
- PyTypeObject *LinearGradient_Type;
- PyTypeObject *RadialGradient_Type;
-+ PyTypeObject *RectangleInt_Type;
-+ PyTypeObject *Region_Type;
- PyTypeObject *ScaledFont_Type;
- PyTypeObject *Surface_Type;
- PyTypeObject *ImageSurface_Type;
-@@ -115,6 +119,12 @@ Functions
- .. c:function:: PyObject * PycairoPattern_FromPattern(cairo_pattern_t *pattern, PyObject *base)
-
-
-+.. c:function:: PyObject * PycairoRectangleInt_FromRectangleInt(const cairo_rectangle_int_t *rectangle_int)
-+
-+
-+.. c:function:: PyObject * PycairoRegion_FromRegion(const cairo_region_t *region)
-+
-+
- .. c:function:: PyObject * PycairoScaledFont_FromScaledFont(cairo_scaled_font_t *scaled_font)
-
-
---- py3cairo-1.10.0+dfsg.orig/doc/reference/index.rst
-+++ py3cairo-1.10.0+dfsg/doc/reference/index.rst
-@@ -15,5 +15,6 @@ Reference
- matrix
- paths
- patterns
-+ region
- surfaces
- text
---- /dev/null
-+++ py3cairo-1.10.0+dfsg/doc/reference/region.rst
-@@ -0,0 +1,52 @@
-+.. _region:
-+
-+******
-+Region
-+******
-+Region — Representing a pixel-aligned area
-+
-+.. currentmodule:: cairo
-+
-+
-+class Region()
-+==============
-+*Region* is a simple graphical data type representing an area of
-+integer-aligned rectangles. They are often used on raster surfaces to track
-+areas of interest, such as change or clip areas.
-+
-+
-+.. class:: Region([rectangle_int|rectangle_ints])
-+
-+ :param rectangle_int: a rectangle or a list of rectangle
-+ :type rectangle_int: :class:`RectangleInt` or [:class:`RectangleInt`]
-+
-+ Allocates a new empty region object or a region object with the containing
-+ rectangle(s).
-+
-+
-+ .. method:: copy()
-+
-+ :returns: A newly allocated :class:`Region`.
-+ :raises: :exc:`NoMemory` if memory cannot be allocated.
-+
-+ Allocates a new *Region* object copying the area from original.
-+
-+
-+class RectangleInt()
-+====================
-+*RectangleInt* is a data structure for holding a rectangle with integer
-+coordinates.
-+
-+
-+.. class:: RectangleInt(x=0, y=0, width=0, height=0)
-+
-+ :param x: X coordinate of the left side of the rectangle
-+ :type x: int
-+ :param y: Y coordinate of the the top side of the rectangle
-+ :type y: int
-+ :param width: width of the rectangle
-+ :type width: int
-+ :param height: height of the rectangle
-+ :type height: int
-+
-+ Allocates a new *RectangleInt* object.
---- /dev/null
-+++ py3cairo-1.10.0+dfsg/src/region.c
-@@ -0,0 +1,598 @@
-+/* -*- mode: C; c-basic-offset: 2 -*-
-+ *
-+ * Copyright © 2005,2010 Steve Chaplin
-+ *
-+ * This file is part of pycairo.
-+ *
-+ * Pycairo is free software: you can redistribute it and/or modify it under
-+ * the terms of the GNU Lesser General Public License version 3 as published
-+ * by the Free Software Foundation.
-+ *
-+ * Pycairo is distributed in the hope that it will be useful, but WITHOUT ANY
-+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * along with pycairo. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#define PY_SSIZE_T_CLEAN
-+#include <Python.h>
-+#include "structmember.h"
-+
-+#include "config.h"
-+#include "private.h"
-+
-+/* PycairoRectangleInt_FromRectangleInt
-+ * Create a new PycairoRectangleInt from a cairo_rectangle_int_t
-+ * rectangle_int - a cairo_rectangle_int_t to 'wrap' into a Python object.
-+ * rectangle_int is unreferenced if the PycairoRectangleInt creation
-+ * fails.
-+ * Return value: New reference or NULL on failure
-+ */
-+PyObject *
-+PycairoRectangleInt_FromRectangleInt (cairo_rectangle_int_t *rectangle_int) {
-+ PyObject *o;
-+
-+ assert (rectangle_int != NULL);
-+
-+ o = PycairoRectangleInt_Type.tp_alloc (&PycairoRectangleInt_Type, 0);
-+ if (o)
-+ ((PycairoRectangleInt *)o)->rectangle_int = *rectangle_int;
-+ return o;
-+}
-+
-+static void
-+rectangle_int_dealloc(PycairoRectangleInt *o) {
-+#ifdef DEBUG
-+ printf("rectangle_int_dealloc start\n");
-+#endif
-+ //o->ob_type->tp_free((PyObject *)o);
-+ Py_TYPE(o)->tp_free(o);
-+#ifdef DEBUG
-+ printf("rectangle_int_dealloc end\n");
-+#endif
-+}
-+
-+static PyObject *
-+rectangle_int_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
-+ static char *kwlist[] = { "x", "y", "width", "height", NULL };
-+ int x, y, w, h;
-+ x = y = w = h = 0;
-+ cairo_rectangle_int_t rect;
-+
-+ if (!PyArg_ParseTupleAndKeywords(args, kwds,
-+ "|iiii:RectangleInt.__new__", kwlist,
-+ &x, &y, &w, &h))
-+ return NULL;
-+
-+ rect.x = x;
-+ rect.y = y;
-+ rect.width = w;
-+ rect.height = h;
-+
-+ return PycairoRectangleInt_FromRectangleInt(&rect);
-+}
-+
-+static PyObject *
-+rectangle_int_str(PycairoRectangleInt *rect_o) {
-+ PyObject *s;
-+ cairo_rectangle_int_t *rect = &(rect_o->rectangle_int);
-+ char buf[80];
-+ PyOS_snprintf(buf, sizeof(buf), "cairo.RectangleInt(%d, %d, %d, %d)",
-+ rect->x, rect->y, rect->width, rect->height);
-+ s = PyUnicode_FromString(buf);
-+ return s;
-+}
-+
-+static PyObject *
-+rectangle_int_richcompare(PycairoRectangleInt *self,
-+ PycairoRectangleInt *other, int op) {
-+ int res = 0;
-+ PyObject *b;
-+
-+ if (op != Py_EQ && op != Py_NE) {
-+ PyErr_SetString(PyExc_TypeError, "Only support testing for == or !=");
-+ return NULL;
-+ }
-+ if (!PyObject_IsInstance((PyObject*)other,
-+ (PyObject*)&PycairoRectangleInt_Type)) {
-+ res = 0;
-+ }
-+ else if (
-+ self->rectangle_int.x == other->rectangle_int.x &&
-+ self->rectangle_int.y == other->rectangle_int.y &&
-+ self->rectangle_int.width == other->rectangle_int.width &&
-+ self->rectangle_int.height == other->rectangle_int.height
-+ )
-+ res = 1;
-+ res = op == Py_NE ? !res : res;
-+ b = res ? Py_True : Py_False;
-+ Py_INCREF(b);
-+
-+ return b;
-+}
-+
-+static PyMemberDef RectangleInt_members[] = {
-+ {"x", T_INT, sizeof(PyObject), 0,
-+ "X coordinate of the left side of the rectangle"},
-+ {"y", T_INT, sizeof(PyObject)+sizeof(int), 0,
-+ "Y coordinate of the the top side of the rectangle"},
-+ {"width", T_INT, sizeof(PyObject)+sizeof(int)*2, 0,
-+ "width of the rectangle"},
-+ {"height", T_INT, sizeof(PyObject)+sizeof(int)*3, 0,
-+ "height of the rectangle"},
-+ {NULL}
-+};
-+
-+PyTypeObject PycairoRectangleInt_Type = {
-+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
-+ "cairo.RectangleInt", /* tp_name */
-+ sizeof(PycairoRectangleInt), /* tp_basicsize */
-+ 0, /* tp_itemsize */
-+ (destructor)rectangle_int_dealloc, /* tp_dealloc */
-+ 0, /* tp_print */
-+ 0, /* tp_getattr */
-+ 0, /* tp_setattr */
-+ 0, /* tp_compare */
-+ 0, /* tp_repr */
-+ 0, /* tp_as_number */
-+ 0, /* tp_as_sequence */
-+ 0, /* tp_as_mapping */
-+ 0, /* tp_hash */
-+ 0, /* tp_call */
-+ (reprfunc)rectangle_int_str, /* tp_str */
-+ 0, /* tp_getattro */
-+ 0, /* tp_setattro */
-+ 0, /* tp_as_buffer */
-+ Py_TPFLAGS_DEFAULT, /* tp_flags */
-+ 0, /* tp_doc */
-+ 0, /* tp_traverse */
-+ 0, /* tp_clear */
-+ (richcmpfunc)rectangle_int_richcompare, /* tp_richcompare */
-+ 0, /* tp_weaklistoffset */
-+ 0, /* tp_iter */
-+ 0, /* tp_iternext */
-+ 0, /* tp_methods */
-+ RectangleInt_members, /* tp_members */
-+ 0, /* tp_getset */
-+ 0, /* tp_base */
-+ 0, /* tp_dict */
-+ 0, /* tp_descr_get */
-+ 0, /* tp_descr_set */
-+ 0, /* tp_dictoffset */
-+ 0, /* tp_init */
-+ 0, /* tp_alloc */
-+ (newfunc)rectangle_int_new, /* tp_new */
-+};
-+
-+/* PycairoRegion_FromRegion
-+ * Create a new PycairoRegion from a cairo_region_t
-+ * region - a cairo_region_t to 'wrap' into a Python object.
-+ * region is unreferenced if the PycairoRegion creation fails, or if
-+ * region is in an error status.
-+ * Return value: New reference or NULL on failure
-+ */
-+PyObject *
-+PycairoRegion_FromRegion (cairo_region_t *region) {
-+ PyObject *o;
-+
-+ assert (region != NULL);
-+
-+ if (Pycairo_Check_Status (cairo_region_status(region))) {
-+ cairo_region_destroy (region);
-+ return NULL;
-+ }
-+
-+ o = PycairoRegion_Type.tp_alloc (&PycairoRegion_Type, 0);
-+ if (o)
-+ ((PycairoRegion *)o)->region = region;
-+ else
-+ cairo_region_destroy (region);
-+ return o;
-+}
-+
-+static void
-+region_dealloc(PycairoRegion *o) {
-+#ifdef DEBUG
-+ printf("region_dealloc start\n");
-+#endif
-+ if (o->region) {
-+ cairo_region_destroy(o->region);
-+ o->region = NULL;
-+ }
-+ //o->ob_type->tp_free((PyObject *)o);
-+ Py_TYPE(o)->tp_free(o);
-+#ifdef DEBUG
-+ printf("region_dealloc end\n");
-+#endif
-+}
-+
-+static PyObject *
-+region_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
-+ PyObject *s = NULL;
-+ PycairoRectangleInt *rect_obj = NULL;
-+ cairo_region_t *region = NULL;
-+ cairo_rectangle_int_t *rect = NULL;
-+
-+ if (PyArg_ParseTuple(args, "|O!:Region.__new__",
-+ &PycairoRectangleInt_Type, &rect_obj)) {
-+ if (rect_obj != NULL) {
-+ region = cairo_region_create_rectangle(&(rect_obj->rectangle_int));
-+ }
-+ } else if (!PyArg_ParseTuple(args, "|O:Region.__new__", &s)) {
-+ PyErr_SetString(PyExc_TypeError,
-+ "argument must be a RectangleInt or a sequence of RectangleInt.");
-+ return NULL;
-+ }
-+ PyErr_Clear(); /* Clear possible err in the 1st arg parser. */
-+
-+ /* list of rectangle_int or no args */
-+ if (s != NULL) {
-+ int i;
-+ int rect_size;
-+ PyObject *seq = NULL;
-+ seq = PySequence_Fast (s,
-+ "argument must be a RectangleInt or a sequence of RectangleInt.");
-+ if (seq == NULL) {
-+ return NULL;
-+ }
-+ rect_size = PySequence_Fast_GET_SIZE(seq);
-+ rect = PyMem_Malloc (rect_size * sizeof(cairo_rectangle_int_t));
-+ if (rect == NULL) {
-+ Py_DECREF(seq);
-+ return PyErr_NoMemory();
-+ }
-+
-+ for(i=0; i<rect_size; i++) {
-+ PyObject *obj_tmp = PySequence_Fast_GET_ITEM(seq, i);
-+ if (PyObject_IsInstance(obj_tmp,
-+ (PyObject*)&PycairoRectangleInt_Type) != 1) {
-+ Py_DECREF(seq);
-+ PyMem_Free(rect);
-+ return NULL;
-+ }
-+ rect_obj = (PycairoRectangleInt*) obj_tmp;
-+ rect[i] = rect_obj->rectangle_int;
-+ }
-+
-+ region = cairo_region_create_rectangles(rect, rect_size);
-+
-+ Py_DECREF(seq);
-+ PyMem_Free(rect);
-+ }
-+
-+ if (region == NULL) {
-+ region = cairo_region_create();
-+ }
-+
-+ RETURN_NULL_IF_CAIRO_REGION_ERROR(region);
-+ return PycairoRegion_FromRegion(region);
-+}
-+
-+PyObject *
-+region_copy (PycairoRegion *o) {
-+ cairo_region_t *res;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_copy (o->region);
-+ Py_END_ALLOW_THREADS;
-+ RETURN_NULL_IF_CAIRO_REGION_ERROR(res);
-+ return PycairoRegion_FromRegion(res);
-+}
-+
-+
-+PyObject *
-+region_get_extents (PycairoRegion *o) {
-+ cairo_rectangle_int_t rect;
-+ Py_BEGIN_ALLOW_THREADS;
-+ cairo_region_get_extents(o->region, &rect);
-+ Py_END_ALLOW_THREADS;
-+
-+ return PycairoRectangleInt_FromRectangleInt(&rect);
-+}
-+
-+
-+PyObject *
-+region_num_rectangles (PycairoRegion *o) {
-+ int res;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_num_rectangles(o->region);
-+ Py_END_ALLOW_THREADS;
-+ return Py_BuildValue("i", res);
-+}
-+
-+
-+PyObject *
-+region_get_rectangle (PycairoRegion *o, PyObject *args) {
-+ cairo_rectangle_int_t rect;
-+ int i;
-+ int total;
-+ if (!PyArg_ParseTuple (args, "i:Region.get_rectangle", &i))
-+ return NULL;
-+ total = cairo_region_num_rectangles(o->region);
-+ if (i >= total || i < 0) {
-+ if ( i < 0)
-+ PyErr_SetString(PyExc_ValueError, "index must be a positive number");
-+ else
-+ PyErr_SetString(PyExc_ValueError, "index is to big for the region");
-+ return NULL;
-+ }
-+ Py_BEGIN_ALLOW_THREADS;
-+ cairo_region_get_rectangle(o->region, i, &rect);
-+ Py_END_ALLOW_THREADS;
-+ return PycairoRectangleInt_FromRectangleInt(&rect);
-+}
-+
-+
-+PyObject *
-+region_is_empty (PycairoRegion *o) {
-+ cairo_bool_t res;
-+ PyObject *b;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_is_empty(o->region);
-+ Py_END_ALLOW_THREADS;
-+ b = res ? Py_True : Py_False;
-+ Py_INCREF(b);
-+ return b;
-+}
-+
-+
-+PyObject *
-+region_contains_point (PycairoRegion *o, PyObject *args) {
-+ int x, y;
-+ cairo_bool_t res;
-+ PyObject *b;
-+ if (!PyArg_ParseTuple (args, "ii:Region.contains_point", &x, &y))
-+ return NULL;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_contains_point(o->region, x, y);
-+ Py_END_ALLOW_THREADS;
-+ b = res ? Py_True : Py_False;
-+ Py_INCREF(b);
-+ return b;
-+}
-+
-+
-+PyObject *
-+region_contains_rectangle (PycairoRegion *o, PyObject *args) {
-+ cairo_region_overlap_t res;
-+ PycairoRectangleInt *rect_int;
-+ if (!PyArg_ParseTuple (args, "O!:Region.contains_rectangle",
-+ &PycairoRectangleInt_Type, &rect_int))
-+ return NULL;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_contains_rectangle(o->region, &(rect_int->rectangle_int));
-+ Py_END_ALLOW_THREADS;
-+ return Py_BuildValue("i", res);
-+}
-+
-+
-+PyObject *
-+region_equal (PycairoRegion *o, PyObject *args) {
-+ cairo_bool_t res;
-+ PyObject *b;
-+ PycairoRegion *region_obj;
-+ if (!PyArg_ParseTuple (args, "O!:Region.equal",
-+ &PycairoRegion_Type, &region_obj))
-+ return NULL;
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_equal (o->region, region_obj->region);
-+ Py_END_ALLOW_THREADS;
-+ b = res ? Py_True : Py_False;
-+ Py_INCREF(b);
-+ return b;
-+}
-+
-+static PyObject *
-+region_richcompare(PycairoRegion *self, PycairoRegion *other, int op) {
-+ int res = 0;
-+ PyObject *b;
-+
-+ if (op != Py_EQ && op != Py_NE) {
-+ PyErr_SetString(PyExc_TypeError, "Only support testing for == or !=");
-+ return NULL;
-+ }
-+ if (!PyObject_IsInstance((PyObject*)other, (PyObject*)&PycairoRegion_Type)) {
-+ res = 0;
-+ } else {
-+ res = cairo_region_equal (self->region, other->region);
-+ }
-+
-+ res = op == Py_NE ? !res : res;
-+ b = res ? Py_True : Py_False;
-+ Py_INCREF(b);
-+
-+ return b;
-+}
-+
-+PyObject *
-+region_translate (PycairoRegion *o, PyObject *args) {
-+ int x, y;
-+ if (!PyArg_ParseTuple (args, "ii:Region.translate", &x, &y))
-+ return NULL;
-+ Py_BEGIN_ALLOW_THREADS;
-+ cairo_region_translate (o->region, x, y);
-+ Py_END_ALLOW_THREADS;
-+ Py_RETURN_NONE;
-+}
-+
-+
-+PyObject *
-+region_intersect (PycairoRegion *o, PyObject *args) {
-+ cairo_status_t res;
-+ PyObject *other;
-+ if (!PyArg_ParseTuple (args, "O:Region.intersect", &other))
-+ return NULL;
-+
-+ if (PyObject_IsInstance(other, (PyObject*)&PycairoRegion_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_intersect(o->region,
-+ ((PycairoRegion *)other)->region);
-+ Py_END_ALLOW_THREADS;
-+ } else if (PyObject_IsInstance(other,
-+ (PyObject*)&PycairoRectangleInt_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_intersect_rectangle(o->region,
-+ &(((PycairoRectangleInt *)other)->rectangle_int));
-+ Py_END_ALLOW_THREADS;
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "argument must be a Region or a RectangleInt.");
-+ return NULL;
-+ }
-+
-+ RETURN_NULL_IF_CAIRO_ERROR(res);
-+ Py_RETURN_NONE;
-+}
-+
-+PyObject *
-+region_subtract (PycairoRegion *o, PyObject *args) {
-+ cairo_status_t res;
-+ PyObject *other;
-+ if (!PyArg_ParseTuple (args, "O:Region.subtract", &other))
-+ return NULL;
-+
-+ if (PyObject_IsInstance(other, (PyObject*)&PycairoRegion_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_subtract(o->region,
-+ ((PycairoRegion *)other)->region);
-+ Py_END_ALLOW_THREADS;
-+ } else if (PyObject_IsInstance(other,
-+ (PyObject*)&PycairoRectangleInt_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_subtract_rectangle(o->region,
-+ &(((PycairoRectangleInt *)other)->rectangle_int));
-+ Py_END_ALLOW_THREADS;
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "argument must be a Region or a RectangleInt.");
-+ return NULL;
-+ }
-+ RETURN_NULL_IF_CAIRO_ERROR(res);
-+ Py_RETURN_NONE;
-+}
-+
-+PyObject *
-+region_union (PycairoRegion *o, PyObject *args) {
-+ cairo_status_t res;
-+ PyObject *other;
-+ if (!PyArg_ParseTuple (args, "O:Region.union", &other))
-+ return NULL;
-+
-+ if (PyObject_IsInstance(other, (PyObject*)&PycairoRegion_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_union(o->region,
-+ ((PycairoRegion *)other)->region);
-+ Py_END_ALLOW_THREADS;
-+ } else if (PyObject_IsInstance(other,
-+ (PyObject*)&PycairoRectangleInt_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_union_rectangle(o->region,
-+ &(((PycairoRectangleInt *)other)->rectangle_int));
-+ Py_END_ALLOW_THREADS;
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "argument must be a Region or a RectangleInt.");
-+ return NULL;
-+ }
-+ RETURN_NULL_IF_CAIRO_ERROR(res);
-+ Py_RETURN_NONE;
-+}
-+
-+PyObject *
-+region_xor (PycairoRegion *o, PyObject *args) {
-+ cairo_status_t res;
-+ PyObject *other;
-+ if (!PyArg_ParseTuple (args, "O:Region.xorg", &other))
-+ return NULL;
-+
-+ if (PyObject_IsInstance(other, (PyObject*)&PycairoRegion_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_xor(o->region,
-+ ((PycairoRegion *)other)->region);
-+ Py_END_ALLOW_THREADS;
-+ } else if (PyObject_IsInstance(other,
-+ (PyObject*)&PycairoRectangleInt_Type) == 1) {
-+ Py_BEGIN_ALLOW_THREADS;
-+ res = cairo_region_xor_rectangle(o->region,
-+ &(((PycairoRectangleInt *)other)->rectangle_int));
-+ Py_END_ALLOW_THREADS;
-+ } else {
-+ PyErr_SetString(PyExc_TypeError,
-+ "argument must be a Region or a RectangleInt.");
-+ return NULL;
-+ }
-+ RETURN_NULL_IF_CAIRO_ERROR(res);
-+ Py_RETURN_NONE;
-+}
-+
-+static PyMethodDef region_methods[] = {
-+ /* methods never exposed in a language binding:
-+ * cairo_region_destroy()
-+ * cairo_region_get_type()
-+ * cairo_region_reference()
-+ *
-+ * cairo_region_status()
-+ * - not needed since Pycairo handles status checking
-+ *
-+ * _(intersect/subtract/union/xor)_rectangle are merged with the region
-+ * ones.
-+ */
-+ {"copy", (PyCFunction)region_copy, METH_NOARGS },
-+ {"get_extents", (PyCFunction)region_get_extents, METH_NOARGS },
-+ {"num_rectangles", (PyCFunction)region_num_rectangles, METH_NOARGS },
-+ {"get_rectangle", (PyCFunction)region_get_rectangle, METH_VARARGS },
-+ {"is_empty", (PyCFunction)region_is_empty, METH_NOARGS },
-+ {"contains_point", (PyCFunction)region_contains_point, METH_VARARGS },
-+ {"contains_rectangle", (PyCFunction)region_contains_rectangle,
-+ METH_VARARGS },
-+ {"equal", (PyCFunction)region_equal, METH_VARARGS },
-+ {"translate", (PyCFunction)region_translate, METH_VARARGS },
-+ {"intersect", (PyCFunction)region_intersect, METH_VARARGS },
-+ {"subtract", (PyCFunction)region_subtract, METH_VARARGS },
-+ {"union", (PyCFunction)region_union, METH_VARARGS },
-+ {"xor", (PyCFunction)region_xor, METH_VARARGS },
-+ {NULL, NULL, 0, NULL},
-+};
-+
-+PyTypeObject PycairoRegion_Type = {
-+ PyVarObject_HEAD_INIT(&PyType_Type, 0)
-+ "cairo.Region", /* tp_name */
-+ sizeof(PycairoRegion), /* tp_basicsize */
-+ 0, /* tp_itemsize */
-+ (destructor)region_dealloc, /* tp_dealloc */
-+ 0, /* tp_print */
-+ 0, /* tp_getattr */
-+ 0, /* tp_setattr */
-+ 0, /* tp_compare */
-+ 0, /* tp_repr */
-+ 0, /* tp_as_number */
-+ 0, /* tp_as_sequence */
-+ 0, /* tp_as_mapping */
-+ 0, /* tp_hash */
-+ 0, /* tp_call */
-+ 0, /* tp_str */
-+ 0, /* tp_getattro */
-+ 0, /* tp_setattro */
-+ 0, /* tp_as_buffer */
-+ Py_TPFLAGS_DEFAULT, /* tp_flags */
-+ 0, /* tp_doc */
-+ 0, /* tp_traverse */
-+ 0, /* tp_clear */
-+ (richcmpfunc)region_richcompare, /* tp_richcompare */
-+ 0, /* tp_weaklistoffset */
-+ 0, /* tp_iter */
-+ 0, /* tp_iternext */
-+ region_methods, /* tp_methods */
-+ 0, /* tp_members */
-+ 0, /* tp_getset */
-+ 0, /* tp_base */
-+ 0, /* tp_dict */
-+ 0, /* tp_descr_get */
-+ 0, /* tp_descr_set */
-+ 0, /* tp_dictoffset */
-+ 0, /* tp_init */
-+ 0, /* tp_alloc */
-+ (newfunc)region_new, /* tp_new */
-+};
---- py3cairo-1.10.0+dfsg.orig/src/py3cairo.h
-+++ py3cairo-1.10.0+dfsg/src/py3cairo.h
-@@ -67,6 +67,16 @@ typedef struct {
-
- typedef struct {
- PyObject_HEAD
-+ cairo_rectangle_int_t rectangle_int;
-+} PycairoRectangleInt;
-+
-+typedef struct {
-+ PyObject_HEAD
-+ cairo_region_t *region;
-+} PycairoRegion;
-+
-+typedef struct {
-+ PyObject_HEAD
- cairo_scaled_font_t *scaled_font;
- } PycairoScaledFont;
-
-@@ -129,6 +139,14 @@ typedef struct {
-
- /* misc functions */
- int (*Check_Status)(cairo_status_t status);
-+
-+ PyTypeObject *RectangleInt_Type;
-+ PyObject *(*RectangleInt_FromRectangleInt)(
-+ const cairo_rectangle_int_t *rectangle_int);
-+
-+ PyTypeObject *Region_Type;
-+ PyObject *(*Region_FromRegion)(const cairo_region_t *region);
-+
- } Pycairo_CAPI_t;
-
-
-@@ -156,6 +174,13 @@ typedef struct {
- #define PycairoRadialGradient_Type *(Pycairo_CAPI->RadialGradient_Type)
- #define PycairoPattern_FromPattern (Pycairo_CAPI->Pattern_FromPattern)
-
-+#define PycairoRectangleInt_Type *(Pycairo_CAPI->RectangleInt_Type)
-+#define PycairoRectangleInt_FromRectangleInt \
-+ (Pycairo_CAPI->RectangleInt_FromRectangleInt)
-+
-+#define PycairoRegion_Type *(Pycairo_CAPI->Region_Type)
-+#define PycairoRegion_FromRegion (Pycairo_CAPI->Region_FromRegion)
-+
- #define PycairoScaledFont_Type *(Pycairo_CAPI->ScaledFont_Type)
- #define PycairoScaledFont_FromScaledFont \
- (Pycairo_CAPI->ScaledFont_FromScaledFont)
---- py3cairo-1.10.0+dfsg.orig/src/cairomodule.c
-+++ py3cairo-1.10.0+dfsg/src/cairomodule.c
-@@ -141,6 +141,12 @@ static Pycairo_CAPI_t CAPI = {
- PycairoSurface_FromSurface,
-
- Pycairo_Check_Status,
-+
-+ &PycairoRectangleInt_Type,
-+ PycairoRectangleInt_FromRectangleInt,
-+
-+ &PycairoRegion_Type,
-+ PycairoRegion_FromRegion,
- };
-
- static PyObject *
-@@ -230,6 +236,12 @@ PyInit__cairo(void)
- if (PyType_Ready(&PycairoRadialGradient_Type) < 0)
- return NULL;
-
-+ if (PyType_Ready(&PycairoRectangleInt_Type) < 0)
-+ return NULL;
-+
-+ if (PyType_Ready(&PycairoRegion_Type) < 0)
-+ return NULL;
-+
- if (PyType_Ready(&PycairoScaledFont_Type) < 0)
- return NULL;
-
-@@ -315,6 +327,12 @@ PyInit__cairo(void)
- PyModule_AddObject(m, "RadialGradient",
- (PyObject *)&PycairoRadialGradient_Type);
-
-+ Py_INCREF(&PycairoRectangleInt_Type);
-+ PyModule_AddObject(m, "RectangleInt", (PyObject *)&PycairoRectangleInt_Type);
-+
-+ Py_INCREF(&PycairoRegion_Type);
-+ PyModule_AddObject(m, "Region", (PyObject *)&PycairoRegion_Type);
-+
- Py_INCREF(&PycairoScaledFont_Type);
- PyModule_AddObject(m, "ScaledFont", (PyObject *)&PycairoScaledFont_Type);
-
-@@ -519,6 +537,10 @@ PyInit__cairo(void)
- CONSTANT(PS_LEVEL_3);
- #endif
-
-+ CONSTANT(REGION_OVERLAP_IN);
-+ CONSTANT(REGION_OVERLAP_OUT);
-+ CONSTANT(REGION_OVERLAP_PART);
-+
- CONSTANT(SUBPIXEL_ORDER_DEFAULT);
- CONSTANT(SUBPIXEL_ORDER_RGB);
- CONSTANT(SUBPIXEL_ORDER_BGR);
---- py3cairo-1.10.0+dfsg.orig/src/wscript
-+++ py3cairo-1.10.0+dfsg/src/wscript
-@@ -25,6 +25,7 @@ def build(ctx):
- 'font.c',
- 'path.c',
- 'pattern.c',
-+ 'region.c',
- 'matrix.c',
- 'surface.c',
- ],
---- py3cairo-1.10.0+dfsg.orig/src/private.h
-+++ py3cairo-1.10.0+dfsg/src/private.h
-@@ -60,6 +60,13 @@ extern PyTypeObject PycairoLinearGradien
- extern PyTypeObject PycairoRadialGradient_Type;
- PyObject *PycairoPattern_FromPattern (cairo_pattern_t *pattern,
- PyObject *base);
-+
-+extern PyTypeObject PycairoRectangleInt_Type;
-+PyObject *PycairoRectangleInt_FromRectangleInt (
-+ cairo_rectangle_int_t *rectangle_int);
-+
-+extern PyTypeObject PycairoRegion_Type;
-+PyObject *PycairoRegion_FromRegion (cairo_region_t *region);
-
- extern PyTypeObject PycairoScaledFont_Type;
- PyObject *PycairoScaledFont_FromScaledFont (cairo_scaled_font_t *scaled_font);
-@@ -153,6 +160,15 @@ int Pycairo_Check_Status (cairo_status_t
- if (status != CAIRO_STATUS_SUCCESS) { \
- Pycairo_Check_Status (status); \
- return NULL; \
-+ } \
-+ } while (0)
-+
-+#define RETURN_NULL_IF_CAIRO_REGION_ERROR(region) \
-+ do { \
-+ cairo_status_t status = cairo_region_status (region); \
-+ if (status != CAIRO_STATUS_SUCCESS) { \
-+ Pycairo_Check_Status (status); \
-+ return NULL; \
- } \
- } while (0)
-
---- py3cairo-1.10.0+dfsg.orig/test/api_test.py
-+++ py3cairo-1.10.0+dfsg/test/api_test.py
-@@ -84,3 +84,65 @@ def test_surface():
-
- def test_text():
- pass
-+
-+
-+def test_region():
-+ a = cairo.Region()
-+ assert a.is_empty() == True
-+ assert a.num_rectangles() == 0
-+
-+ b = cairo.RectangleInt(1, 2, 10, 12)
-+ d = cairo.RectangleInt(1, 1, 10, 12)
-+ e = cairo.RectangleInt(1, 3, 8, 12)
-+ assert (b.x, b.y, b.width, b.height) == (1, 2, 10, 12)
-+ c = cairo.Region((b, e))
-+ assert not c.is_empty()
-+ assert c.num_rectangles() == 2
-+ assert c.get_rectangle(1).y == 14
-+
-+ ex = c.get_extents()
-+ assert ex == cairo.RectangleInt(1, 2, 10, 13)
-+ assert c.contains_rectangle(d) == cairo.REGION_OVERLAP_PART
-+
-+ c.translate(10, 20)
-+ assert c.contains_rectangle(d) == cairo.REGION_OVERLAP_OUT
-+ assert c.get_rectangle(1) == cairo.RectangleInt(11, 34, 8, 1)
-+
-+ cp = c.copy()
-+ assert c.num_rectangles() == cp.num_rectangles()
-+ assert c.get_rectangle(0) == cp.get_rectangle(0)
-+ assert c == cp
-+ assert 3 != c
-+ assert c != "test"
-+
-+ c = cairo.Region((b, e))
-+ c.intersect(d)
-+ assert c.num_rectangles() == 1
-+ assert c.get_rectangle(0) == cairo.RectangleInt(1, 2, 10, 11)
-+
-+ c = cairo.Region((b, e))
-+ c.subtract(d)
-+ assert c.num_rectangles() == 2
-+ assert c == cairo.Region([
-+ cairo.RectangleInt(1, 13, 10, 1), cairo.RectangleInt(1, 14, 8, 1) ])
-+
-+ d = cairo.Region(d)
-+ c = cairo.Region((b, e))
-+ c.subtract(d)
-+ assert c.num_rectangles() == 2
-+ assert c.get_rectangle(0) == cairo.RectangleInt(1, 13, 10, 1)
-+
-+ c = cairo.Region((b, e))
-+ c.union(d)
-+ assert c.num_rectangles() == 2
-+ assert c == cairo.Region([
-+ cairo.RectangleInt(1, 1, 10, 13), cairo.RectangleInt(1, 14, 8, 1) ])
-+
-+ c = cairo.Region((b, e))
-+ c.xor(d)
-+ assert c.num_rectangles() == 3
-+ assert c == cairo.Region([
-+ cairo.RectangleInt(1, 1, 10, 1),
-+ cairo.RectangleInt(1, 14, 8, 1),
-+ cairo.RectangleInt(1, 13, 10, 1),
-+ ])
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-50_specify-encoding-in-waf.patch b/dev-python/pycairo/files/pycairo-1.10.0-50_specify-encoding-in-waf.patch
deleted file mode 100644
index 5356554e75fa..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-50_specify-encoding-in-waf.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-Description: specify encoding in waf
- This patch specifies utf-8 as the encoding in waf library, because python 3.3
- doesn't fallback to utf-8 on default.
-Author: Matthias Klose <doko@ubuntu.com>
-Origin: http://launchpadlibrarian.net/120606963/py3cairo_1.10.0%2Bdfsg-3~exp2_1.10.0%2Bdfsg-3~exp2ubuntu1.diff.gz
-Bug-Debian: http://bugs.debian.org/691241
-Last-Update: 2012-10-28
-
---- py3cairo-1.10.0+dfsg.orig/waflib/Utils.py
-+++ py3cairo-1.10.0+dfsg/waflib/Utils.py
-@@ -77,8 +77,8 @@ except ImportError:
- return value
- is_win32=sys.platform=='win32'
- indicator=is_win32 and'\x1b[A\x1b[K%s%s%s\r'or'\x1b[K%s%s%s\r'
--def readf(fname,m='r'):
-- f=open(fname,m)
-+def readf(fname,m='r',enc=None):
-+ f=open(fname,m,encoding=enc)
- try:
- txt=f.read()
- finally:
---- py3cairo-1.10.0+dfsg.orig/waflib/Tools/c_preproc.py
-+++ py3cairo-1.10.0+dfsg/waflib/Tools/c_preproc.py
-@@ -44,7 +44,7 @@ def repl(m):
- return' '
- return m.group(3)or''
- def filter_comments(filename):
-- code=Utils.readf(filename)
-+ code=Utils.readf(filename, enc='utf-8')
- if use_trigraphs:
- for(a,b)in trig_def:code=code.split(a).join(b)
- code=re_nl.sub('',code)
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-80_fix-pickle.patch b/dev-python/pycairo/files/pycairo-1.10.0-80_fix-pickle.patch
deleted file mode 100644
index 3e0cdc3e61f4..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-80_fix-pickle.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Description: During the build process, a Context instance is pickled, or at
- least attempted to be. This fails because self.node_class is assigned to a
- class which is nested inside the __init__() method. Because Python cannot
- find this class at unpickling time (i.e. it cannot be imported), Python
- refuses to pickle the Context instance, leading to a FTBFS. Since there's no
- obvious reason why the class has to be so nested, moving it to a module
- global solves the build failure.
-Author: Barry Warsaw <barry@debian.org>
-Bug: https://bugs.freedesktop.org/show_bug.cgi?id=91561
-
---- a/waflib/Context.py
-+++ b/waflib/Context.py
-@@ -51,6 +51,8 @@
- global classes
- classes.insert(0,cls)
- ctx=store_context('ctx',(object,),{})
-+class node_class(waflib.Node.Node):
-+ pass
- class Context(ctx):
- errors=Errors
- tools={}
-@@ -60,8 +62,6 @@
- except KeyError:
- global run_dir
- rd=run_dir
-- class node_class(waflib.Node.Node):
-- pass
- self.node_class=node_class
- self.node_class.__module__="waflib.Node"
- self.node_class.__name__="Nod3"
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-81_pickling-again.patch b/dev-python/pycairo/files/pycairo-1.10.0-81_pickling-again.patch
deleted file mode 100644
index 3aad32593b3c..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-81_pickling-again.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Description: Follow up to 80_fix-pickle.patch. Just disable pickling
- altogether since the previous patch doesn't really fix the problem, and not
- storing the pickle seems to have no adverse effects on the build, while
- avoiding the observed traceback.
-Author: Barry Warsaw <barry@debian.org>
-Forwarded: no
-
---- a/waflib/Build.py
-+++ b/waflib/Build.py
-@@ -151,6 +151,7 @@
- f.close()
- self.init_dirs()
- def store(self):
-+ return
- data={}
- for x in SAVED_ATTRS:
- data[x]=getattr(self,x)
---- a/waflib/Context.py
-+++ b/waflib/Context.py
-@@ -51,8 +51,6 @@
- global classes
- classes.insert(0,cls)
- ctx=store_context('ctx',(object,),{})
--class node_class(waflib.Node.Node):
-- pass
- class Context(ctx):
- errors=Errors
- tools={}
-@@ -62,6 +60,8 @@
- except KeyError:
- global run_dir
- rd=run_dir
-+ class node_class(waflib.Node.Node):
-+ pass
- self.node_class=node_class
- self.node_class.__module__="waflib.Node"
- self.node_class.__name__="Nod3"
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-svg_check.patch b/dev-python/pycairo/files/pycairo-1.10.0-svg_check.patch
deleted file mode 100644
index 572a5f6cc717..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-svg_check.patch
+++ /dev/null
@@ -1,126 +0,0 @@
---- src/cairomodule.c
-+++ src/cairomodule.c
-@@ -116,7 +116,7 @@
- #else
- 0,
- #endif
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- &PycairoSVGSurface_Type,
- #else
- 0,
-@@ -247,7 +247,7 @@
- if (PyType_Ready(&PycairoPSSurface_Type) < 0)
- return NULL;
- #endif
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- if (PyType_Ready(&PycairoSVGSurface_Type) < 0)
- return NULL;
- #endif
-@@ -337,7 +337,7 @@
- PyModule_AddObject(m, "PSSurface", (PyObject *)&PycairoPSSurface_Type);
- #endif
-
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- Py_INCREF(&PycairoSVGSurface_Type);
- PyModule_AddObject(m, "SVGSurface", (PyObject *)&PycairoSVGSurface_Type);
- #endif
-@@ -399,7 +399,7 @@
- #else
- PyModule_AddIntConstant(m, "HAS_PS_SURFACE", 0);
- #endif
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- PyModule_AddIntConstant(m, "HAS_SVG_SURFACE", 1);
- #else
- PyModule_AddIntConstant(m, "HAS_SVG_SURFACE", 0);
---- src/private.h
-+++ src/private.h
-@@ -75,7 +75,7 @@
- extern PyTypeObject PycairoPSSurface_Type;
- #endif
-
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- extern PyTypeObject PycairoSVGSurface_Type;
- #endif
-
---- src/py3cairo.h
-+++ src/py3cairo.h
-@@ -171,7 +171,7 @@
- #define PycairoPSSurface_Type *(Pycairo_CAPI->PSSurface_Type)
- #endif
-
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- #define PycairoSVGSurface_Type *(Pycairo_CAPI->SVGSurface_Type)
- #endif
-
---- src/surface.c
-+++ src/surface.c
-@@ -72,7 +72,7 @@
- type = &PycairoPSSurface_Type;
- break;
- #endif
--#if CAIRO_HAS_SVG_SURFACE
-+#if PYCAIRO_ENABLE_SVG
- case CAIRO_SURFACE_TYPE_SVG:
- type = &PycairoSVGSurface_Type;
- break;
-@@ -1022,7 +1022,7 @@
-
-
- /* Class SVGSurface(Surface) ----------------------------------------------- */
--#ifdef CAIRO_HAS_SVG_SURFACE
-+#ifdef PYCAIRO_ENABLE_SVG
- #include <cairo-svg.h>
-
- static PyObject *
-@@ -1133,7 +1133,7 @@
- 0, /* tp_is_gc */
- 0, /* tp_bases */
- };
--#endif /* CAIRO_HAS_SVG_SURFACE */
-+#endif /* PYCAIRO_ENABLE_SVG */
-
-
- #if CAIRO_HAS_WIN32_SURFACE
---- wscript
-+++ wscript
-@@ -1,6 +1,7 @@
- # -*- python -*-
-
- import os
-+import subprocess
-
- top = '.'
- out = 'build_directory'
-@@ -11,6 +12,17 @@
- cairo_version_required = '1.10.0'
-
-
-+def check_svg():
-+ if os.environ.get('PYCAIRO_DISABLE_SVG', None) is None:
-+ return_code = subprocess.call(['pkg-config', '--exists', 'cairo-svg'])
-+ if return_code == 0:
-+ return True
-+ else:
-+ return False
-+ else:
-+ return False
-+
-+
- def options(ctx):
- print(' %s/options()' %d)
- ctx.tool_options('gnu_dirs')
-@@ -39,6 +51,8 @@
- ctx.define('PYCAIRO_VERSION_MAJOR', version[0])
- ctx.define('PYCAIRO_VERSION_MINOR', version[1])
- ctx.define('PYCAIRO_VERSION_MICRO', version[2])
-+ if check_svg():
-+ ctx.define('PYCAIRO_ENABLE_SVG', 1)
-
- ctx.write_config_header('src/config.h')
-
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-waf-py3_4.patch b/dev-python/pycairo/files/pycairo-1.10.0-waf-py3_4.patch
deleted file mode 100644
index 6e79db9ba272..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-waf-py3_4.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/waflib/Tools/python.py
-+++ b/waflib/Tools/python.py
-@@ -169,7 +169,7 @@
- conf.find_program('python-config-%s'%num,var='PYTHON_CONFIG',mandatory=False)
- includes=[]
- if conf.env.PYTHON_CONFIG:
-- for incstr in conf.cmd_and_log(conf.env.PYTHON+[conf.env.PYTHON_CONFIG,'--includes']).strip().split():
-+ for incstr in conf.cmd_and_log([conf.env.PYTHON_CONFIG,'--includes']).strip().split():
- if(incstr.startswith('-I')or incstr.startswith('/I')):
- incstr=incstr[2:]
- if incstr not in includes:
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-waf-unpack.patch b/dev-python/pycairo/files/pycairo-1.10.0-waf-unpack.patch
deleted file mode 100644
index 7d54ba160d68..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-waf-unpack.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/waf
-+++ b/waf
-@@ -153,6 +153,9 @@
- return dir
-
- wafdir = find_lib()
-+if sys.argv[1:] == ['unpack']:
-+ print(wafdir)
-+ exit()
- sys.path.insert(0, wafdir)
- from waflib.Tools.c_config import MACRO_TO_DESTOS
- MACRO_TO_DESTOS['__POWERPC__'] = 'darwin'
diff --git a/dev-python/pycairo/files/pycairo-1.10.0-xpyb.patch b/dev-python/pycairo/files/pycairo-1.10.0-xpyb.patch
deleted file mode 100644
index 33de2692f838..000000000000
--- a/dev-python/pycairo/files/pycairo-1.10.0-xpyb.patch
+++ /dev/null
@@ -1,41 +0,0 @@
---- pycairo-1.10.0/wscript
-+++ pycairo-1.10.0/wscript
-@@ -10,6 +10,7 @@
- APPNAME='pycairo'
- VERSION='1.10.0'
- cairo_version_required = '1.10.0'
-+xpyb_version_required = '1.3' # optional
-
-
- def check_svg():
-@@ -23,6 +24,17 @@
- return False
-
-
-+def check_xpyb():
-+ if os.environ.get('PYCAIRO_DISABLE_XPYB', None) is None:
-+ return_code = subprocess.call(['pkg-config', '--exists', 'xpyb'])
-+ if return_code == 0:
-+ return True
-+ else:
-+ return False
-+ else:
-+ return False
-+
-+
- def options(ctx):
- print(' %s/options()' %d)
- ctx.tool_options('gnu_dirs')
-@@ -42,6 +54,12 @@
- ctx.check_cfg(package='cairo', atleast_version=cairo_version_required,
- args='--cflags --libs')
-
-+# xpyb for Python 3 is not available yet.
-+# the Python 3 version should probably have a different name than 'xpyb'
-+# if check_xpyb():
-+# ctx.check_cfg(package='xpyb', atleast_version=xpyb_version_required,
-+# args='--cflags --libs', mandatory=False)
-+
- # add gcc options
- if env['CC_NAME'] == 'gcc':
- env.append_unique('CCFLAGS', ['-std=c99', '-Wall'])
diff --git a/dev-python/pycairo/pycairo-1.10.0-r5.ebuild b/dev-python/pycairo/pycairo-1.10.0-r5.ebuild
index 7a63fcf48d49..b61eec3973dd 100644
--- a/dev-python/pycairo/pycairo-1.10.0-r5.ebuild
+++ b/dev-python/pycairo/pycairo-1.10.0-r5.ebuild
@@ -15,7 +15,8 @@ DESCRIPTION="Python bindings for the cairo library"
HOMEPAGE="http://cairographics.org/pycairo/ https://pypi.python.org/pypi/pycairo"
SRC_URI="
http://cairographics.org/releases/py2cairo-${PYCAIRO_PYTHON2_VERSION}.tar.bz2
- http://cairographics.org/releases/pycairo-${PYCAIRO_PYTHON3_VERSION}.tar.bz2"
+ http://cairographics.org/releases/pycairo-${PYCAIRO_PYTHON3_VERSION}.tar.bz2
+ https://dev.gentoo.org/~mgorny/dist/${P}-gentoo-patchset.tar.bz2"
# LGPL-3 for pycairo 1.10.0.
# || ( LGPL-2.1 MPL-1.1 ) for pycairo 1.8.10.
@@ -39,19 +40,19 @@ src_prepare() {
pushd "${WORKDIR}/pycairo-${PYCAIRO_PYTHON3_VERSION}" > /dev/null || die
rm -f src/config.h || die
epatch \
- "${FILESDIR}/${PN}-1.10.0-svg_check.patch" \
- "${FILESDIR}/${PN}-1.10.0-xpyb.patch" \
- "${FILESDIR}/${PN}-1.10.0-waf-unpack.patch" \
- "${FILESDIR}"/py2cairo-1.10.0-ppc-darwin.patch \
- "${FILESDIR}"/pycairo-1.10.0-101_pycairo-region.patch
+ "${WORKDIR}/${P}-gentoo-patchset/${PN}-1.10.0-svg_check.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset/${PN}-1.10.0-xpyb.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset/${PN}-1.10.0-waf-unpack.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset"/py2cairo-1.10.0-ppc-darwin.patch \
+ "${WORKDIR}/${P}-gentoo-patchset"/pycairo-1.10.0-101_pycairo-region.patch
popd > /dev/null
pushd "${WORKDIR}/py2cairo-${PYCAIRO_PYTHON2_VERSION}" > /dev/null || die
rm -f src/config.h || die
epatch \
- "${FILESDIR}/py2cairo-1.10.0-svg_check.patch" \
- "${FILESDIR}/py2cairo-1.10.0-xpyb.patch" \
- "${FILESDIR}"/py2cairo-1.10.0-ppc-darwin.patch
+ "${WORKDIR}/${P}-gentoo-patchset/py2cairo-1.10.0-svg_check.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset/py2cairo-1.10.0-xpyb.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset"/py2cairo-1.10.0-ppc-darwin.patch
popd > /dev/null
preparation() {
@@ -61,10 +62,10 @@ src_prepare() {
wafdir="$(./waf unpack)"
pushd "${wafdir}" > /dev/null || die
epatch \
- "${FILESDIR}/${PN}-1.10.0-waf-py3_4.patch" \
- "${FILESDIR}"/pycairo-1.10.0-50_specify-encoding-in-waf.patch \
- "${FILESDIR}"/pycairo-1.10.0-80_fix-pickle.patch \
- "${FILESDIR}"/pycairo-1.10.0-81_pickling-again.patch
+ "${WORKDIR}/${P}-gentoo-patchset/${PN}-1.10.0-waf-py3_4.patch" \
+ "${WORKDIR}/${P}-gentoo-patchset"/pycairo-1.10.0-50_specify-encoding-in-waf.patch \
+ "${WORKDIR}/${P}-gentoo-patchset"/pycairo-1.10.0-80_fix-pickle.patch \
+ "${WORKDIR}/${P}-gentoo-patchset"/pycairo-1.10.0-81_pickling-again.patch
popd > /dev/null
popd > /dev/null