summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2011-02-07 22:13:53 +0100
committerAndrea Canciani <ranma42@gmail.com>2011-02-14 11:32:25 +0100
commit9d37bd963005549640171c88aa519eba3e1d0e34 (patch)
tree81bee4faf684fbc29e67110ca606973ac796753e
parenta1b36ad521ba9ec1509fa32ce4a4e51fe5f623d4 (diff)
xlib: Fix compilation when gradient functions are not available
It is not correct to rely on the version defined in render.h. The Xrender.h header is independent and might not define some functions available in RENDER 0.10. Their availability must be detected at configure time and the stubs must be defined only if the functions are not available. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=31906
-rw-r--r--configure.ac9
-rw-r--r--src/cairo-xlib-xrender-private.h23
2 files changed, 23 insertions, 9 deletions
diff --git a/configure.ac b/configure.ac
index f2c75cfb8..bb3d1d64b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -83,6 +83,15 @@ CAIRO_ENABLE_SURFACE_BACKEND(xlib_xrender, Xlib Xrender, auto, [
[use_xlib_xrender="no (requires $xlib_xrender_REQUIRES http://freedesktop.org/Software/xlibs)"])
CPPFLAGS=$old_CPPFLAGS
])
+
+ old_CFLAGS=$CFLAGS
+ old_LIBS=$LIBS
+ CFLAGS="$CFLAGS $xlib_CFLAGS $xlib_NONPKGCONFIG_CFLAGS $xlib_xrender_CFLAGS $xlib_xrender_NONPKGCONFIG_CFLAGS"
+ LIBS="$LIBS $xlib_LIBS $xlib_NONPKGCONFIG_LIBS $xlib_xrender_LIBS $xlib_xrender_NONPKGCONFIG_LIBS"
+ AC_CHECK_FUNCS([XRenderCreateLinearGradient XRenderCreateRadialGradient XRenderCreateConicalGradient])
+ CFLAGS=$old_CFLAGS
+ LIBS=$old_LIBS
+
fi
])
diff --git a/src/cairo-xlib-xrender-private.h b/src/cairo-xlib-xrender-private.h
index 52f415915..bf3199c4c 100644
--- a/src/cairo-xlib-xrender-private.h
+++ b/src/cairo-xlib-xrender-private.h
@@ -96,26 +96,31 @@ __attribute__((__unused__)) static void _void_consume_free (Display *p, XID
#define PictOpBlendMaximum 0x3e
#endif
-/* There doesn't appear to be a simple #define that we can conditionalize
- * on. Instead, use the version; gradients were introdiced in 0.10. */
-#if RENDER_MAJOR == 0 && RENDER_MINOR < 10
+#if !HAVE_XRENDERCREATELINEARGRADIENT
#define XRenderCreateLinearGradient _int_consume
+
+typedef struct _XLinearGradient {
+ XPointFixed p1;
+ XPointFixed p2;
+} XLinearGradient;
+#endif
+
+#if !HAVE_XRENDERCREATERADIALGRADIENT
#define XRenderCreateRadialGradient _int_consume
-#define XRenderCreateConicalGradient _int_consume
+
typedef struct _XCircle {
XFixed x;
XFixed y;
XFixed radius;
} XCircle;
-typedef struct _XLinearGradient {
- XPointFixed p1;
- XPointFixed p2;
-} XLinearGradient;
-
typedef struct _XRadialGradient {
XCircle inner;
XCircle outer;
} XRadialGradient;
+#endif
+
+#if !HAVE_XRENDERCREATECONICALGRADIENT
+#define XRenderCreateConicalGradient _int_consume
typedef struct _XConicalGradient {
XPointFixed center;