Date: Friday, October 5, 2012 @ 15:55:57 Author: andyrtr Revision: 168099
upgpkg: cairo 1.12.4-1 upstream update 1.12.4 Modified: cairo/trunk/PKGBUILD Deleted: cairo/trunk/cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch cairo/trunk/cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch ------------------------------------------------------------+ PKGBUILD | 39 - cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch | 37 - cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch | 275 ----------- 3 files changed, 10 insertions(+), 341 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-10-05 19:23:53 UTC (rev 168098) +++ PKGBUILD 2012-10-05 19:55:57 UTC (rev 168099) @@ -3,44 +3,27 @@ # Contributor: Brice Carpentier <[email protected]> pkgname=cairo -#_gitdate=20120426 -#_gitver=957a9cc619965178a8927d114fe852034fc2385c -pkgver=1.12.2 -pkgrel=3 +pkgver=1.12.4 +pkgrel=1 pkgdesc="Cairo vector graphics library" arch=(i686 x86_64) license=('LGPL' 'MPL') url="http://cairographics.org/" -depends=('libpng' 'libxrender' 'fontconfig' 'pixman' 'glib2' 'sh') +depends=('libpng' 'libxrender' 'libxext' 'fontconfig' 'pixman' 'glib2' 'sh') makedepends=('librsvg' 'poppler-glib' 'libspectre' 'gtk-doc') # 'libdrm') optdepends=('xcb-util: for XCB backend') # really needed? provides=('cairo-xcb') replaces=('cairo-xcb') options=('!libtool') source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz - #$pkgname-$pkgver.tar.gz::http://cgit.freedesktop.org/cairo/snapshot/cairo-${_gitver}.tar.gz - cairo-1.10.0-buggy_gradients.patch - cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch - cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch - #git_fixes.patch -) -md5sums=('87649eb75789739d517c743e94879e51' - '9b323790dab003e228c6955633cb888e' - '75ec73746cfaefcbed0e9b2a9f76bf00' - '56f64466fd70ead732b00691464144f2') - + cairo-1.10.0-buggy_gradients.patch) +md5sums=('a64bb8774a1e476e5cdd69e635794dfb' + '9b323790dab003e228c6955633cb888e') build() { cd "$srcdir/$pkgname-$pkgver" - #cd ${srcdir}/${pkgname}-${_gitver} patch -Np1 -i ${srcdir}/cairo-1.10.0-buggy_gradients.patch - # https://bugs.freedesktop.org/show_bug.cgi?id=50852 - patch -Np1 -i ${srcdir}/cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch - # https://bugs.freedesktop.org/show_bug.cgi?id=51443 - patch -Np1 -i ${srcdir}/cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch - # status is 2012-04-26 last commit: image: Fix typo in _blit_spans() - #patch -Np1 -i ${srcdir}/git_fixes.patch - autoreconf -vfi - #./autogen.sh --prefix=/usr \ + +# autoreconf -vfi ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ @@ -53,13 +36,11 @@ } #check() { -# #cd "$srcdir/$pkgname-$pkgver" -# cd $srcdir/$pkgname-${_gitver} -# make -k check || /bin/true # 165 Passed, 316 Failed [3 crashed, 10 expected], 23 Skipped +# cd "$srcdir/$pkgname-$pkgver" +# make -k check || /bin/true # 134 Passed, 355 Failed [5 crashed, 11 expected], 26 Skipped #} package() { cd "$srcdir/$pkgname-$pkgver" - #cd $srcdir/$pkgname-${_gitver} make DESTDIR="$pkgdir" install } Deleted: cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch =================================================================== --- cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch 2012-10-05 19:23:53 UTC (rev 168098) +++ cairo-1.12.2-ignore-charset-for-non-cid-fonts.patch 2012-10-05 19:55:57 UTC (rev 168099) @@ -1,37 +0,0 @@ -From 2f1d6b27e8b78c77346a5b603114b54400e57d83 Mon Sep 17 00:00:00 2001 -From: Adrian Johnson <[email protected]> -Date: Thu, 07 Jun 2012 09:48:52 +0000 -Subject: cff-subsetting: Ignore charset for non cid fonts - -Fixes crash in https://bugzilla.gnome.org/show_bug.cgi?id=677422 ---- -diff --git a/src/cairo-cff-subset.c b/src/cairo-cff-subset.c -index db6fdf7..6f0cd66 100644 ---- a/src/cairo-cff-subset.c -+++ b/src/cairo-cff-subset.c -@@ -1178,14 +1178,16 @@ cairo_cff_font_read_top_dict (cairo_cff_font_t *font) - goto fail; - font->num_glyphs = _cairo_array_num_elements (&font->charstrings_index); - -- operand = cff_dict_get_operands (font->top_dict, CHARSET_OP, &size); -- if (font->is_cid && !operand) -- return CAIRO_INT_STATUS_UNSUPPORTED; -+ if (font->is_cid) { -+ operand = cff_dict_get_operands (font->top_dict, CHARSET_OP, &size); -+ if (!operand) -+ return CAIRO_INT_STATUS_UNSUPPORTED; - -- decode_integer (operand, &offset); -- font->charset = font->data + offset; -- if (font->charset >= font->data_end) -- return CAIRO_INT_STATUS_UNSUPPORTED; -+ decode_integer (operand, &offset); -+ font->charset = font->data + offset; -+ if (font->charset >= font->data_end) -+ return CAIRO_INT_STATUS_UNSUPPORTED; -+ } - - if (!font->is_opentype) - cairo_cff_font_read_font_metrics (font, font->top_dict); --- -cgit v0.9.0.2-2-gbebe Deleted: cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch =================================================================== --- cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch 2012-10-05 19:23:53 UTC (rev 168098) +++ cairo-1.12.2-reduce-broken-stopped-edge-continuation.patch 2012-10-05 19:55:57 UTC (rev 168099) @@ -1,275 +0,0 @@ -From f228769dfe5a8b5d73c49a41e95e31ed73a77fb3 Mon Sep 17 00:00:00 2001 -From: Chris Wilson <[email protected]> -Date: Fri, 08 Jun 2012 16:22:41 +0000 -Subject: polygon-reduce: Reduce broken stopped-edge continuation - -This is hopefully a lesser used path and the attempted optimisation to -continue a stopped edge with a colinear stopped edge highly unlikely and -lost in the noise of the general inefficiency of the routine. As it was -broken, rather than attempt to rectify the "optimisation" remove it. - -Reported-by: Evangelos Foutras <[email protected]> -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50852 -Signed-off-by: Chris Wilson <[email protected]> ---- -diff --git a/src/cairo-polygon-reduce.c b/src/cairo-polygon-reduce.c -index 8758070..ea457fe 100644 ---- a/src/cairo-polygon-reduce.c -+++ b/src/cairo-polygon-reduce.c -@@ -42,6 +42,8 @@ - #include "cairo-freelist-private.h" - #include "cairo-combsort-inline.h" - -+#define DEBUG_POLYGON 0 -+ - typedef cairo_point_t cairo_bo_point32_t; - - typedef struct _cairo_bo_intersect_ordinate { -@@ -114,7 +116,6 @@ typedef struct _cairo_bo_event_queue { - - typedef struct _cairo_bo_sweep_line { - cairo_bo_edge_t *head; -- cairo_bo_edge_t *stopped; - int32_t current_y; - cairo_bo_edge_t *current_edge; - } cairo_bo_sweep_line_t; -@@ -476,8 +477,8 @@ edges_compare_x_for_y (const cairo_bo_edge_t *a, - static inline int - _line_equal (const cairo_line_t *a, const cairo_line_t *b) - { -- return a->p1.x == b->p1.x && a->p1.y == b->p1.y && -- a->p2.x == b->p2.x && a->p2.y == b->p2.y; -+ return (a->p1.x == b->p1.x && a->p1.y == b->p1.y && -+ a->p2.x == b->p2.x && a->p2.y == b->p2.y); - } - - static int -@@ -1024,7 +1025,6 @@ static void - _cairo_bo_sweep_line_init (cairo_bo_sweep_line_t *sweep_line) - { - sweep_line->head = NULL; -- sweep_line->stopped = NULL; - sweep_line->current_y = INT32_MIN; - sweep_line->current_edge = NULL; - } -@@ -1139,6 +1139,8 @@ edges_colinear (const cairo_bo_edge_t *a, const cairo_bo_edge_t *b) - */ - if (a->edge.line.p1.y == b->edge.line.p1.y) { - return a->edge.line.p1.x == b->edge.line.p1.x; -+ } else if (a->edge.line.p2.y == b->edge.line.p2.y) { -+ return a->edge.line.p2.x == b->edge.line.p2.x; - } else if (a->edge.line.p1.y < b->edge.line.p1.y) { - return edge_compare_for_y_against_x (b, - a->edge.line.p1.y, -@@ -1205,82 +1207,48 @@ _active_edges_to_polygon (cairo_bo_edge_t *left, - cairo_polygon_t *polygon) - { - cairo_bo_edge_t *right; -+ unsigned int mask; - -- if (fill_rule == CAIRO_FILL_RULE_WINDING) { -- while (left != NULL) { -- int in_out = left->edge.dir; -- -- right = left->next; -- if (left->deferred.right == NULL) { -- while (right != NULL && right->deferred.right == NULL) -- right = right->next; -- -- if (right != NULL && edges_colinear (left, right)) { -- /* continuation on left */ -- left->deferred = right->deferred; -- right->deferred.right = NULL; -- } -- } -- -- right = left->next; -- while (right != NULL) { -- if (right->deferred.right != NULL) -- _cairo_bo_edge_end (right, top, polygon); -- -- in_out += right->edge.dir; -- if (in_out == 0) { -- cairo_bo_edge_t *next; -- cairo_bool_t skip = FALSE; -- -- /* skip co-linear edges */ -- next = right->next; -- if (next != NULL) -- skip = edges_colinear (right, next); -+ if (fill_rule == CAIRO_FILL_RULE_WINDING) -+ mask = ~0; -+ else -+ mask = 1; - -- if (! skip) -- break; -- } -+ while (left != NULL) { -+ int in_out = left->edge.dir; - -+ right = left->next; -+ if (left->deferred.right == NULL) { -+ while (right != NULL && right->deferred.right == NULL) - right = right->next; -- } -- -- _cairo_bo_edge_start_or_continue (left, right, top, polygon); - -- left = right; -- if (left != NULL) -- left = left->next; -+ if (right != NULL && edges_colinear (left, right)) { -+ /* continuation on left */ -+ left->deferred = right->deferred; -+ right->deferred.right = NULL; -+ } - } -- } else { -- while (left != NULL) { -- int in_out = 0; - -- right = left->next; -- while (right != NULL) { -- if (right->deferred.right != NULL) -- _cairo_bo_edge_end (right, top, polygon); -+ right = left->next; -+ while (right != NULL) { -+ if (right->deferred.right != NULL) -+ _cairo_bo_edge_end (right, top, polygon); - -- if ((in_out++ & 1) == 0) { -- cairo_bo_edge_t *next; -- cairo_bool_t skip = FALSE; -- -- /* skip co-linear edges */ -- next = right->next; -- if (next != NULL) -- skip = edges_colinear (right, next); -- -- if (! skip) -- break; -- } -- -- right = right->next; -+ in_out += right->edge.dir; -+ if ((in_out & mask) == 0) { -+ /* skip co-linear edges */ -+ if (right->next == NULL || !edges_colinear (right, right->next)) -+ break; - } - -- _cairo_bo_edge_start_or_continue (left, right, top, polygon); -- -- left = right; -- if (left != NULL) -- left = left->next; -+ right = right->next; - } -+ -+ _cairo_bo_edge_start_or_continue (left, right, top, polygon); -+ -+ left = right; -+ if (left != NULL) -+ left = left->next; - } - } - -@@ -1303,12 +1271,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_event_t **start_events, - - while ((event = _cairo_bo_event_dequeue (&event_queue))) { - if (event->point.y != sweep_line.current_y) { -- for (e1 = sweep_line.stopped; e1; e1 = e1->next) { -- if (e1->deferred.right != NULL) -- _cairo_bo_edge_end (e1, e1->edge.bottom, polygon); -- } -- sweep_line.stopped = NULL; -- - _active_edges_to_polygon (sweep_line.head, - sweep_line.current_y, - fill_rule, polygon); -@@ -1328,23 +1290,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_event_t **start_events, - if (unlikely (status)) - goto unwind; - -- /* check to see if this is a continuation of a stopped edge */ -- /* XXX change to an infinitesimal lengthening rule */ -- for (left = sweep_line.stopped; left; left = left->next) { -- if (e1->edge.top <= left->edge.bottom && -- edges_colinear (e1, left)) -- { -- e1->deferred = left->deferred; -- if (left->prev != NULL) -- left->prev = left->next; -- else -- sweep_line.stopped = left->next; -- if (left->next != NULL) -- left->next->prev = left->prev; -- break; -- } -- } -- - left = e1->prev; - right = e1->next; - -@@ -1371,14 +1316,8 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_event_t **start_events, - - _cairo_bo_sweep_line_delete (&sweep_line, e1); - -- /* first, check to see if we have a continuation via a fresh edge */ -- if (e1->deferred.right != NULL) { -- e1->next = sweep_line.stopped; -- if (sweep_line.stopped != NULL) -- sweep_line.stopped->prev = e1; -- sweep_line.stopped = e1; -- e1->prev = NULL; -- } -+ if (e1->deferred.right != NULL) -+ _cairo_bo_edge_end (e1, e1->edge.bottom, polygon); - - if (left != NULL && right != NULL) { - status = _cairo_bo_event_queue_insert_if_intersect_below_current_y (&event_queue, left, right); -@@ -1420,10 +1359,6 @@ _cairo_bentley_ottmann_tessellate_bo_edges (cairo_bo_event_t **start_events, - } - } - -- for (e1 = sweep_line.stopped; e1; e1 = e1->next) { -- if (e1->deferred.right != NULL) -- _cairo_bo_edge_end (e1, e1->edge.bottom, polygon); -- } - unwind: - _cairo_bo_event_queue_fini (&event_queue); - -@@ -1447,6 +1382,12 @@ _cairo_polygon_reduce (cairo_polygon_t *polygon, - if (unlikely (0 == num_events)) - return CAIRO_STATUS_SUCCESS; - -+ if (DEBUG_POLYGON) { -+ FILE *file = fopen ("reduce_in.txt", "w"); -+ _cairo_debug_print_polygon (file, polygon); -+ fclose (file); -+ } -+ - events = stack_events; - event_ptrs = stack_event_ptrs; - if (num_events > ARRAY_LENGTH (stack_events)) { -@@ -1482,10 +1423,16 @@ _cairo_polygon_reduce (cairo_polygon_t *polygon, - num_events, - fill_rule, - polygon); -- polygon->num_limits = num_limits; -+ polygon->num_limits = num_limits; - - if (events != stack_events) - free (events); - -+ if (DEBUG_POLYGON) { -+ FILE *file = fopen ("reduce_out.txt", "w"); -+ _cairo_debug_print_polygon (file, polygon); -+ fclose (file); -+ } -+ - return status; - } --- -cgit v0.9.0.2-2-gbebe
