summaryrefslogtreecommitdiff
path: root/graphics/cairo
diff options
context:
space:
mode:
authorwiz <wiz>2012-10-20 00:55:05 +0000
committerwiz <wiz>2012-10-20 00:55:05 +0000
commit28dfafe0a4b798383666defccda65416804a9d77 (patch)
tree41fbb341ffc5f221289a225f857c2e3a97fe0261 /graphics/cairo
parent3bea9d3b0c850e45813bc71ac3f19ce692512984 (diff)
downloadpkgsrc-28dfafe0a4b798383666defccda65416804a9d77.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.
Diffstat (limited to 'graphics/cairo')
-rw-r--r--graphics/cairo/Makefile9
-rw-r--r--graphics/cairo/distinfo11
-rw-r--r--graphics/cairo/options.mk4
-rw-r--r--graphics/cairo/patches/patch-configure80
-rw-r--r--graphics/cairo/patches/patch-configure.ac53
-rw-r--r--graphics/cairo/patches/patch-src_cairo-xlib-surface-shm.c66
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);
+