dev-python/pycairo: Move patches to a dist tarball

Closes: https://bugs.gentoo.org/620566
This commit is contained in:
Michał Górny
2017-10-15 12:59:54 +02:00
parent 16aeab6323
commit 2b54ba0b81
13 changed files with 15 additions and 1401 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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')

View File

@@ -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':

View File

@@ -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),
+ ])

View File

@@ -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)

View File

@@ -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"

View File

@@ -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"

View File

@@ -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')

View File

@@ -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:

View File

@@ -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'

View File

@@ -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'])

View File

@@ -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