diff options
author | wiz <wiz@pkgsrc.org> | 2012-10-20 00:55:05 +0000 |
---|---|---|
committer | wiz <wiz@pkgsrc.org> | 2012-10-20 00:55:05 +0000 |
commit | 3745f298d84dfe0a25f8655915c5df2a69cabc3e (patch) | |
tree | 41fbb341ffc5f221289a225f857c2e3a97fe0261 | |
parent | da578064a714e3e6aabbcc5c610e73cb34f47dc5 (diff) | |
download | pkgsrc-3745f298d84dfe0a25f8655915c5df2a69cabc3e.tar.gz |
Second try at updating to 1.12.4 with an additional patch from
Chris Wilson (upstream).
Fixes problems on NetBSD and OS X.
Bump PKGREVISION compared to last 1.12.4 version.
-rw-r--r-- | graphics/cairo/Makefile | 9 | ||||
-rw-r--r-- | graphics/cairo/distinfo | 11 | ||||
-rw-r--r-- | graphics/cairo/options.mk | 4 | ||||
-rw-r--r-- | graphics/cairo/patches/patch-configure | 80 | ||||
-rw-r--r-- | graphics/cairo/patches/patch-configure.ac | 53 | ||||
-rw-r--r-- | graphics/cairo/patches/patch-src_cairo-xlib-surface-shm.c | 66 |
6 files changed, 209 insertions, 14 deletions
diff --git a/graphics/cairo/Makefile b/graphics/cairo/Makefile index 4a38f2a4b6f..08f2981d2c2 100644 --- a/graphics/cairo/Makefile +++ b/graphics/cairo/Makefile @@ -1,6 +1,6 @@ -# $NetBSD: Makefile,v 1.112 2012/10/15 17:33:33 asau Exp $ +# $NetBSD: Makefile,v 1.113 2012/10/20 00:55:05 wiz Exp $ -DISTNAME= cairo-1.12.2 +DISTNAME= cairo-1.12.4 PKGREVISION= 2 CATEGORIES= graphics MASTER_SITES= http://cairographics.org/releases/ @@ -38,11 +38,6 @@ CPPFLAGS.SunOS+= -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS TEST_TARGET= check -# Workaround for FreeBSD (noticed on 9.0): -.if ${OPSYS} == "FreeBSD" -BUILDLINK_TRANSFORM+= rm:-ldl -.endif - # PR#43928 .include "../../mk/compiler.mk" .if ${MACHINE_PLATFORM:MDragonFly-*-x86_64} && ${CC_VERSION:Mgcc-4.1.*} diff --git a/graphics/cairo/distinfo b/graphics/cairo/distinfo index f11851f89de..d55151520bc 100644 --- a/graphics/cairo/distinfo +++ b/graphics/cairo/distinfo @@ -1,9 +1,12 @@ -$NetBSD: distinfo,v 1.64 2012/10/08 21:54:05 wiz Exp $ +$NetBSD: distinfo,v 1.65 2012/10/20 00:55:06 wiz Exp $ -SHA1 (cairo-1.12.2.tar.xz) = bc2ee50690575f16dab33af42a2e6cdc6451e3f9 -RMD160 (cairo-1.12.2.tar.xz) = 0174a5110f5f4c9ff15da984e0602dfd04643a63 -Size (cairo-1.12.2.tar.xz) = 42051584 bytes +SHA1 (cairo-1.12.4.tar.xz) = f4158981ed01e73c94fb8072074b17feee61a68b +RMD160 (cairo-1.12.4.tar.xz) = 0e2ab9442f47228b7df2354caf157f2a4eeafb31 +Size (cairo-1.12.4.tar.xz) = 42099760 bytes SHA1 (patch-aa) = 474f44c1c8d4017137fe59b160afca8f16ad7287 SHA1 (patch-ab) = 62ff361d52742bba0f49c6a32149269b958fa24a SHA1 (patch-ac) = 151c682245004902cf42ba141e3743592691dfb9 SHA1 (patch-ad) = a1068a37113b162ccfe14d7f1bd0baa9df7e5530 +SHA1 (patch-configure) = abd507d7707f6e5bd000471dedaa4e615bb117ad +SHA1 (patch-configure.ac) = c6df883204c5074d52443626f434cd6077a8d834 +SHA1 (patch-src_cairo-xlib-surface-shm.c) = 86be07c7c759fca8d1cbd19c0ac8e7287d42c3c6 diff --git a/graphics/cairo/options.mk b/graphics/cairo/options.mk index 868407667ea..5672b40ec34 100644 --- a/graphics/cairo/options.mk +++ b/graphics/cairo/options.mk @@ -1,4 +1,4 @@ -# $NetBSD: options.mk,v 1.10 2012/10/10 13:29:25 drochner Exp $ +# $NetBSD: options.mk,v 1.11 2012/10/20 00:55:06 wiz Exp $ PKG_OPTIONS_VAR= PKG_OPTIONS.cairo PKG_SUPPORTED_OPTIONS= x11 xcb @@ -28,8 +28,6 @@ BUILDLINK_DEPMETHOD.libXt?= build # only for configure CONFIGURE_ARGS+= --enable-xcb PLIST.xcb= yes . include "../../x11/libxcb/buildlink3.mk" -. else -CONFIGURE_ARGS+= --disable-xcb . endif .else diff --git a/graphics/cairo/patches/patch-configure b/graphics/cairo/patches/patch-configure new file mode 100644 index 00000000000..448115fa8fd --- /dev/null +++ b/graphics/cairo/patches/patch-configure @@ -0,0 +1,80 @@ +$NetBSD: patch-configure,v 1.1 2012/10/20 00:55:06 wiz Exp $ + +Whilst reading through other users of XShm, it became apparent that +IPC_RMID behaves differently across the platforms. Linux allows +processes to attach to an existing ShmSegment id after a IPC_RMID, but +for others the IPC_RMID takes immediate effect. On those platforms +without a "deferred" IPC_RMID, we then need to perform the XShmAttach +synchronously before perfomring the IPC_RMID. + +Reported-by: Thomas Klausner <wiz@NetBSD.org> +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> + +--- configure.orig 2012-10-05 15:45:31.000000000 +0000 ++++ configure +@@ -21646,6 +21646,65 @@ $as_echo "yes" >&6; } + : + fi + ++ ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" ++if test "x$ac_cv_header_sys_ipc_h" = xyes; then : ++ ++fi ++ ++ ++ ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" ++if test "x$ac_cv_header_sys_shm_h" = xyes; then : ++ ++fi ++ ++ ++ ++ if test "$ac_cv_header_sys_ipc_h" = "yes" -a "$ac_cv_header_sys_shm_h" = "yes"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether shmctl IPC_RMID allowes subsequent attaches" >&5 ++$as_echo_n "checking whether shmctl IPC_RMID allowes subsequent attaches... " >&6; } ++ if test "$cross_compiling" = yes; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: assuming no" >&5 ++$as_echo "assuming no" >&6; } ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++ #include <sys/types.h> ++ #include <sys/ipc.h> ++ #include <sys/shm.h> ++ int main() ++ { ++ char *shmaddr; ++ int id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600); ++ if (id == -1) return 2; ++ shmaddr = shmat (id, 0, 0); ++ shmctl (id, IPC_RMID, 0); ++ if ((char*) shmat (id, 0, 0) == (char*) -1) { ++ shmdt (shmaddr); ++ return 1; ++ } ++ shmdt (shmaddr); ++ shmdt (shmaddr); ++ return 0; ++ } ++ ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ ++$as_echo "#define IPC_RMID_DEFERRED_RELEASE 1" >>confdefs.h ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++ fi ++ + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's Xlib surface backend feature could be enabled" >&5 + $as_echo_n "checking whether cairo's Xlib surface backend feature could be enabled... " >&6; } diff --git a/graphics/cairo/patches/patch-configure.ac b/graphics/cairo/patches/patch-configure.ac new file mode 100644 index 00000000000..8590bb2ccfb --- /dev/null +++ b/graphics/cairo/patches/patch-configure.ac @@ -0,0 +1,53 @@ +$NetBSD: patch-configure.ac,v 1.1 2012/10/20 00:55:07 wiz Exp $ + +Whilst reading through other users of XShm, it became apparent that +IPC_RMID behaves differently across the platforms. Linux allows +processes to attach to an existing ShmSegment id after a IPC_RMID, but +for others the IPC_RMID takes immediate effect. On those platforms +without a "deferred" IPC_RMID, we then need to perform the XShmAttach +synchronously before perfomring the IPC_RMID. + +Reported-by: Thomas Klausner <wiz@NetBSD.org> +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> + +--- configure.ac.orig 2012-09-13 11:38:21.000000000 +0000 ++++ configure.ac +@@ -74,6 +74,38 @@ CAIRO_ENABLE_SURFACE_BACKEND(xlib, Xlib, + xlib_NONPKGCONFIG_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext $X_EXTRA_LIBS" + xlib_NONPKGCONFIG_CFLAGS=$X_CFLAGS + fi]) ++ ++ AC_CHECK_HEADER(sys/ipc.h) ++ AC_CHECK_HEADER(sys/shm.h) ++ ++ if test "$ac_cv_header_sys_ipc_h" = "yes" -a "$ac_cv_header_sys_shm_h" = "yes"; then ++ AC_MSG_CHECKING(whether shmctl IPC_RMID allowes subsequent attaches) ++ AC_TRY_RUN([ ++ #include <sys/types.h> ++ #include <sys/ipc.h> ++ #include <sys/shm.h> ++ int main() ++ { ++ char *shmaddr; ++ int id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0600); ++ if (id == -1) return 2; ++ shmaddr = shmat (id, 0, 0); ++ shmctl (id, IPC_RMID, 0); ++ if ((char*) shmat (id, 0, 0) == (char*) -1) { ++ shmdt (shmaddr); ++ return 1; ++ } ++ shmdt (shmaddr); ++ shmdt (shmaddr); ++ return 0; ++ } ++ ], ++ AC_DEFINE(IPC_RMID_DEFERRED_RELEASE, 1, ++ [Define to 1 if shared memory segments are released deferred.]) ++ AC_MSG_RESULT(yes), ++ AC_MSG_RESULT(no), ++ AC_MSG_RESULT(assuming no)) ++ fi + ]) + + CAIRO_ENABLE_SURFACE_BACKEND(xlib_xrender, Xlib Xrender, auto, [ diff --git a/graphics/cairo/patches/patch-src_cairo-xlib-surface-shm.c b/graphics/cairo/patches/patch-src_cairo-xlib-surface-shm.c new file mode 100644 index 00000000000..c1a692996ab --- /dev/null +++ b/graphics/cairo/patches/patch-src_cairo-xlib-surface-shm.c @@ -0,0 +1,66 @@ +$NetBSD: patch-src_cairo-xlib-surface-shm.c,v 1.3 2012/10/20 00:55:07 wiz Exp $ + +First chunk: +Whilst reading through other users of XShm, it became apparent that +IPC_RMID behaves differently across the platforms. Linux allows +processes to attach to an existing ShmSegment id after a IPC_RMID, but +for others the IPC_RMID takes immediate effect. On those platforms +without a "deferred" IPC_RMID, we then need to perform the XShmAttach +synchronously before perfomring the IPC_RMID. + +Reported-by: Thomas Klausner <wiz@NetBSD.org> +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> + +Rest: +Prevent application crashes under old version of X.org e.g. under +Mac OS X Lion. Patch taken from here: + +http://cgit.freedesktop.org/cairo/commit/?id=b1532f465e05d566f6d160c5ca916a5a12614067 + +--- src/cairo-xlib-surface-shm.c.orig 2012-10-05 13:06:00.000000000 +0000 ++++ src/cairo-xlib-surface-shm.c +@@ -449,6 +449,9 @@ _cairo_xlib_shm_pool_create(cairo_xlib_d + + pool->attached = NextRequest (dpy); + success = XShmAttach (dpy, &pool->shm); ++#if !IPC_RMID_DEFERRED_RELEASE ++ XSync (dpy, FALSE); ++#endif + shmctl (pool->shm.shmid, IPC_RMID, NULL); + + if (! success) +@@ -1121,6 +1124,24 @@ _cairo_xlib_shm_surface_is_idle (cairo_s + return shm->idle > 0; + } + ++#define XORG_VERSION_ENCODE(major,minor,patch,snap) \ ++ (((major) * 10000000) + ((minor) * 100000) + ((patch) * 1000) + snap) ++ ++static cairo_bool_t ++xorg_has_buggy_send_event(Display *dpy) ++{ ++ /* Avoid incurring the wrath fixed by: ++ * ++ * commit 2d2dce558d24eeea0eb011ec9ebaa6c5c2273c39 ++ * Author: Sam Spilsbury <sam.spilsbury@canonical.com> ++ * Date: Wed Sep 14 09:58:34 2011 +0800 ++ * ++ * Remove the SendEvent bit (0x80) before doing range checks on event type. ++ */ ++ return (strstr (ServerVendor (dpy), "X.Org") != NULL && ++ VendorRelease (dpy) < XORG_VERSION_ENCODE(1,11,0,1)); ++} ++ + void + _cairo_xlib_display_init_shm (cairo_xlib_display_t *display) + { +@@ -1153,6 +1174,9 @@ _cairo_xlib_display_init_shm (cairo_xlib + DefaultVisual (display->display, scr), + CWOverrideRedirect, &attr); + ++ if (xorg_has_buggy_send_event(display->display)) ++ has_pixmap = 0; ++ + shm->has_pixmaps = has_pixmap ? MIN_PIXMAP_SIZE : 0; + cairo_list_init (&shm->pool); + |