[cairo-commit] configure.ac src/cairo-xlib-xrender-private.h

Andrea Canciani ranma42 at kemper.freedesktop.org
Mon Feb 14 02:08:37 PST 2011


 configure.ac                     |    9 +++++++++
 src/cairo-xlib-xrender-private.h |   23 ++++++++++++++---------
 2 files changed, 23 insertions(+), 9 deletions(-)

New commits:
commit d866bb0405bc989666f886e2c0e293a1fe718d74
Author: Andrea Canciani <ranma42 at gmail.com>
Date:   Mon Feb 7 22:13:53 2011 +0100

    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

diff --git a/configure.ac b/configure.ac
index 09bdd9f..951e960 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 52f4159..bf3199c 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;


More information about the cairo-commit mailing list