[PATCH weston 4/7] toytoolkit: make all EGL code dependant on cairo-egl

Pekka Paalanen ppaalanen at gmail.com
Tue Oct 16 07:27:19 PDT 2012


configure.ac: The toytoolkit clients used to get libEGL linked to them
even if there was no cairo-egl. This is useless, and actually harmful on
platforms, where libEGL absolutely requires one of the GL ES libraries
to be linked in, too.

Look for EGL-related packages only for cairo-egl with toytoolkit.

window.c: protect all GL header includes with HAVE_CAIRO_EGL, since that
is the only case we can support EGL, GL, or GLESv2 at all. In the case
we do not have cairo-egl, add enough definitions to let us build the
stubs for EGL-related functions.

Remove some #ifdefs that were inside of the same #ifdef already.

These changes allow to build sorfware rendering toytoolkit clients
without any bits of EGL libs or headers.

Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
---
 clients/window.c |   13 +++++++------
 configure.ac     |    4 ++--
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index 30fc67c..3f6a7c7 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -41,6 +41,7 @@
 
 #include <pixman.h>
 
+#ifdef HAVE_CAIRO_EGL
 #include <wayland-egl.h>
 
 #ifdef USE_CAIRO_GLESV2
@@ -52,9 +53,13 @@
 #include <EGL/egl.h>
 #include <EGL/eglext.h>
 
-#ifdef HAVE_CAIRO_EGL
 #include <cairo-gl.h>
-#endif
+#else /* HAVE_CAIRO_EGL */
+typedef void *EGLDisplay;
+typedef void *EGLConfig;
+typedef void *EGLContext;
+#define EGL_NO_DISPLAY ((EGLDisplay)0)
+#endif /* no HAVE_CAIRO_EGL */
 
 #include <xkbcommon/xkbcommon.h>
 #include <wayland-cursor.h>
@@ -3795,13 +3800,11 @@ init_egl(struct display *d)
 		return -1;
 	}
 
-#ifdef HAVE_CAIRO_EGL
 	d->argb_device = cairo_egl_device_create(d->dpy, d->argb_ctx);
 	if (cairo_device_status(d->argb_device) != CAIRO_STATUS_SUCCESS) {
 		fprintf(stderr, "failed to get cairo egl argb device\n");
 		return -1;
 	}
-#endif
 
 	return 0;
 }
@@ -3809,9 +3812,7 @@ init_egl(struct display *d)
 static void
 fini_egl(struct display *display)
 {
-#ifdef HAVE_CAIRO_EGL
 	cairo_device_destroy(display->argb_device);
-#endif
 
 	eglMakeCurrent(display->dpy, EGL_NO_SURFACE, EGL_NO_SURFACE,
 		       EGL_NO_CONTEXT);
diff --git a/configure.ac b/configure.ac
index c2cd7da..8b8e9a2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -164,7 +164,7 @@ AM_CONDITIONAL(BUILD_CLIENTS, test x$enable_clients = xyes)
 if test x$enable_clients = xyes; then
   AC_DEFINE([BUILD_CLIENTS], [1], [Build the Wayland clients])
 
-  PKG_CHECK_MODULES(CLIENT, [wayland-client wayland-egl egl >= 7.10 cairo >= 1.10.0 xkbcommon wayland-cursor])
+  PKG_CHECK_MODULES(CLIENT, [wayland-client cairo >= 1.10.0 xkbcommon wayland-cursor])
   PKG_CHECK_MODULES(WESTON_INFO, [wayland-client])
 
   CLIENT_CFLAGS="$CLIENT_CFLAGS $IMAGE_CFLAGS"
@@ -172,7 +172,7 @@ if test x$enable_clients = xyes; then
 
   PKG_CHECK_MODULES(POPPLER, [poppler-glib glib-2.0 gobject-2.0 gio-2.0 ],
 			     [have_poppler=yes], [have_poppler=no])
-  PKG_CHECK_MODULES(CAIRO_EGL, [cairo-egl >= 1.11.3 $cairo_modules],
+  PKG_CHECK_MODULES(CAIRO_EGL, [wayland-egl egl >= 7.10 cairo-egl >= 1.11.3 $cairo_modules],
 		    [have_cairo_egl=yes], [have_cairo_egl=no])
   AS_IF([test "x$have_cairo_egl" = "xyes"],
         [AC_DEFINE([HAVE_CAIRO_EGL], [1], [Have cairo-egl])],
-- 
1.7.8.6



More information about the wayland-devel mailing list