[Spice-devel] [PATCH] --disable-opengl support. uses existing USE_OGL flag

Alon Levy alevy at redhat.com
Wed Jun 16 02:53:04 PDT 2010


Provides a default off "--disable-opengl" option to configure. Doesn't
remove libGL.so dependency from resulting binary since CEGUI depends on
it (which we need for our dialogs right now). Would be nice to have
--disable-dialog too.

Signed-off-by: Alon Levy <alevy at redhat.com>
---
 client/Makefile.am           |   18 ++++++++++++------
 client/common.h              |    2 ++
 client/red_window.h          |    6 +++---
 client/screen.cpp            |    2 ++
 client/screen.h              |    6 ++++--
 client/x11/Makefile.am       |   21 +++++++++++++--------
 client/x11/pixels_source_p.h |   26 +++++++++++++++++++-------
 client/x11/platform.cpp      |   18 +++++++++++++++---
 client/x11/red_drawable.cpp  |   15 +++++++++++++++
 client/x11/red_window.cpp    |   35 +++++++++++++++++++++++------------
 client/x11/red_window_p.h    |    9 +++++++++
 client/x11/x_platform.h      |    6 +++++-
 configure.ac                 |   22 ++++++++++++++++------
 13 files changed, 138 insertions(+), 48 deletions(-)

diff --git a/client/Makefile.am b/client/Makefile.am
index e1c31fd..33a9e4a 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -3,6 +3,17 @@ NULL =
 SUBDIRS = $(red_target)
 DIST_SUBDIRS = x11 #windows
 
+if SUPPORT_GL
+GL_SRCS = 					\
+	red_gl_canvas.cpp		\
+	red_gl_canvas.h			\
+	gl_canvas.cpp			\
+	glc.cpp					\
+	red_pixmap_gl.h
+else
+GL_SRCS =
+endif
+
 RED_COMMON_SRCS =			\
 	application.cpp			\
 	application.h			\
@@ -29,10 +40,6 @@ RED_COMMON_SRCS =			\
 	debug.h				\
 	display_channel.cpp		\
 	display_channel.h		\
-	red_gl_canvas.cpp		\
-	red_gl_canvas.h			\
-	gl_canvas.cpp			\
-	glc.cpp				\
 	glz_decoded_image.h		\
 	glz_decoder_config.h		\
 	glz_decoder.cpp			\
@@ -67,7 +74,6 @@ RED_COMMON_SRCS =			\
 	red_peer.cpp			\
 	red_peer.h			\
 	red_pixmap_sw.h			\
-	red_pixmap_gl.h			\
 	red_pixmap.h			\
 	red_types.h			\
 	red_window.h			\
@@ -88,4 +94,4 @@ RED_COMMON_SRCS =			\
 	utils.h				\
 	$(NULL)
 
-EXTRA_DIST = $(RED_COMMON_SRCS)
+EXTRA_DIST = $(RED_COMMON_SRCS) $(GL_SRCS)
diff --git a/client/common.h b/client/common.h
index 83f0e85..c0ce442 100644
--- a/client/common.h
+++ b/client/common.h
@@ -45,8 +45,10 @@
 #else
 #include <unistd.h>
 #include <X11/X.h>
+#ifdef USE_OGL
 #include <GL/glx.h>
 #endif
+#endif
 
 #ifdef __GNUC__
     #if __SIZEOF_POINTER__ == 8
diff --git a/client/red_window.h b/client/red_window.h
index a5eeb53..97f3b79 100644
--- a/client/red_window.h
+++ b/client/red_window.h
@@ -79,12 +79,12 @@ public:
     void set_render_pbuff(RedPbuffer pbuff);
     void set_render_fbo(GLuint fbo);
     void set_gl_context(RedGlContext context);
-#endif
-
-    int get_screen_num();
 
     void set_type_gl();
     void unset_type_gl();
+#endif
+
+    int get_screen_num();
 
     static void init();
     static void cleanup();
diff --git a/client/screen.cpp b/client/screen.cpp
index 1567978..71936fa 100644
--- a/client/screen.cpp
+++ b/client/screen.cpp
@@ -915,6 +915,7 @@ void RedScreen::interrupt_update()
     _update_interrupt_trigger->trigger();
 }
 
+#ifdef USE_OGL
 void RedScreen::set_type_gl()
 {
     _window.set_type_gl();
@@ -924,4 +925,5 @@ void RedScreen::unset_type_gl()
 {
     _window.unset_type_gl();
 }
+#endif // USE_OGL
 
diff --git a/client/screen.h b/client/screen.h
index 8b737a2..8d9a81c 100644
--- a/client/screen.h
+++ b/client/screen.h
@@ -21,7 +21,9 @@
 #include "common.h"
 #include "region.h"
 #include "red_key.h"
+#ifdef USE_OGL
 #include "GL/gl.h"
+#endif // USE_OGL
 
 #include "red_window.h"
 #include "platform.h"
@@ -94,12 +96,12 @@ public:
 #ifdef USE_OGL
     void untouch_context();
     bool need_recreate_context_gl();
+    void set_type_gl();
+    void unset_type_gl();
 #endif
     void set_update_interrupt_trigger(EventSources::Trigger *trigger);
     bool update_by_interrupt();
     void interrupt_update();
-    void set_type_gl();
-    void unset_type_gl();
 
     void update();
 
diff --git a/client/x11/Makefile.am b/client/x11/Makefile.am
index 904fb42..f78c318 100644
--- a/client/x11/Makefile.am
+++ b/client/x11/Makefile.am
@@ -9,8 +9,6 @@ INCLUDES = \
 	-DSW_CANVAS_ACCESS_TEST				\
 	-DSW_CANVAS_CACHE				\
 	-DSW_CANVAS_NO_CHUNKS				\
-	-DUSE_GLZ					\
-	-DUSE_OGL					\
 	-D__STDC_LIMIT_MACROS				\
 	-I.						\
 	-I..						\
@@ -56,10 +54,6 @@ RED_COMMON_SRCS =					\
 	$(CLIENT_DIR)/debug.h				\
 	$(CLIENT_DIR)/display_channel.cpp		\
 	$(CLIENT_DIR)/display_channel.h			\
-	$(CLIENT_DIR)/red_gl_canvas.cpp			\
-	$(CLIENT_DIR)/red_gl_canvas.h			\
-	$(CLIENT_DIR)/gl_canvas.cpp			\
-	$(CLIENT_DIR)/glc.cpp				\
 	$(CLIENT_DIR)/glz_decoded_image.h		\
 	$(CLIENT_DIR)/glz_decoder_config.h		\
 	$(CLIENT_DIR)/glz_decoder.cpp			\
@@ -94,7 +88,6 @@ RED_COMMON_SRCS =					\
 	$(CLIENT_DIR)/red_peer.cpp			\
 	$(CLIENT_DIR)/red_peer.h			\
 	$(CLIENT_DIR)/red_pixmap_sw.h			\
-	$(CLIENT_DIR)/red_pixmap_gl.h			\
 	$(CLIENT_DIR)/red_pixmap.h			\
 	$(CLIENT_DIR)/red_types.h			\
 	$(CLIENT_DIR)/red_window.h			\
@@ -123,6 +116,18 @@ RED_COMMON_SRCS =					\
 	$(CLIENT_DIR)/gui/gui.cpp			\
 	$(NULL)
 
+if SUPPORT_GL
+RED_OGL_SRCS =                              \
+	$(CLIENT_DIR)/red_gl_canvas.cpp			\
+	$(CLIENT_DIR)/red_gl_canvas.h			\
+	$(CLIENT_DIR)/gl_canvas.cpp				\
+	$(CLIENT_DIR)/glc.cpp					\
+	red_pixmap_gl.cpp			\
+	$(CLIENT_DIR)/red_pixmap_gl.h
+else
+RED_OGL_SRCS =
+endif
+
 bin_PROGRAMS = spicec
 
 spicec_SOURCES =			\
@@ -143,7 +148,6 @@ spicec_SOURCES =			\
 	red_drawable.cpp		\
 	red_pixmap.cpp			\
 	red_pixmap_sw.cpp		\
-	red_pixmap_gl.cpp		\
 	red_window.cpp			\
 	red_window_p.h			\
 	res.cpp				\
@@ -153,6 +157,7 @@ spicec_SOURCES =			\
 	x_icon.h			\
 	x_platform.h			\
 	$(RED_COMMON_SRCS)		\
+	$(RED_OGL_SRCS)         \
 	$(NULL)
 
 spicec_LDFLAGS = \
diff --git a/client/x11/pixels_source_p.h b/client/x11/pixels_source_p.h
index a3e4cfb..b1b5261 100644
--- a/client/x11/pixels_source_p.h
+++ b/client/x11/pixels_source_p.h
@@ -19,43 +19,54 @@
 #define _H_PIXELE_SOURSR_P
 
 #include <X11/X.h>
+#ifdef USE_OGL
 #include <GL/glu.h>
+#endif // USE_OGL
+#include <X11/Xdefs.h>
+#include <X11/Xutil.h> // required by Xshm.h, but not included by it
 #include <X11/extensions/XShm.h>
 #include "red_window.h"
+#ifdef USE_OGL
 #include "red_pixmap_gl.h"
+#endif // USE_OGL
 #include "pixman_utils.h"
 
 enum {
     PIXELS_SOURCE_TYPE_INVALID,
     PIXELS_SOURCE_TYPE_X_DRAWABLE,
     PIXELS_SOURCE_TYPE_PIXMAP,
+#ifdef USE_OGL
     PIXELS_SOURCE_TYPE_GL_TEXTURE,
     PIXELS_SOURCE_TYPE_GL_DRAWABLE,
+#endif // USE_OGL
 };
 
 struct PixelsSource_p {
     int type;
     union {
         struct {
+            XImage* x_image;
+            XShmSegmentInfo *shminfo;
+            pixman_image_t* pixman_image;
+            RedDrawable::Format format;
+        } pixmap;
+
+        struct {
             Drawable drawable;
             int screen;
             GC gc;
             int width, height;
+#ifdef USE_OGL
             RenderType rendertype;
             union {
                 GLXPbuffer pbuff;
                 GLuint fbo;
             };
             RedGlContext context;
+#endif // USE_OGL
         } x_drawable;
 
-        struct {
-            XImage* x_image;
-            XShmSegmentInfo *shminfo;
-            pixman_image_t* pixman_image;
-            RedDrawable::Format format;
-        } pixmap;
-
+#ifdef USE_OGL
         struct {
             RenderType rendertype;
             Win win;
@@ -69,6 +80,7 @@ struct PixelsSource_p {
             };
             RedGlContext context;
         } gl;
+#endif // USE_OGL
     };
 };
 
diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp
index fecfb13..9226454 100644
--- a/client/x11/platform.cpp
+++ b/client/x11/platform.cpp
@@ -69,7 +69,9 @@ static Display* x_display = NULL;
 static bool x_shm_avail = false;
 static XVisualInfo **vinfo = NULL;
 static RedDrawable::Format *screen_format = NULL;
+#ifdef USE_OGL
 static GLXFBConfig **fb_config = NULL;
+#endif // USE_OGL
 static XIM x_input_method = NULL;
 static XIC x_input_context = NULL;
 
@@ -324,10 +326,12 @@ RedDrawable::Format XPlatform::get_screen_format(int screen)
     return screen_format[screen];
 }
 
+#ifdef USE_OGL
 GLXFBConfig** XPlatform::get_fbconfig()
 {
     return fb_config;
 }
+#endif // USE_OGL
 
 XIC XPlatform::get_input_context()
 {
@@ -2136,6 +2140,7 @@ static void cleanup(void)
         delete vinfo;
         vinfo = NULL;
     }
+#ifdef USE_OGL
     if (fb_config) {
         for (i = 0; i < ScreenCount(x_display); ++i) {
             if (fb_config[i]) {
@@ -2145,6 +2150,7 @@ static void cleanup(void)
         delete fb_config;
         fb_config = NULL;
     }
+#endif // USE_OGL
 }
 
 static void quit_handler(int sig)
@@ -2291,7 +2297,9 @@ static XVisualInfo* get_x_vis_info(int screen)
 
 void Platform::init()
 {
+#ifdef USE_OGL
     int err, ev;
+#endif // USE_OGL
     int threads_enable;
     int major, minor;
     Bool pixmaps;
@@ -2314,10 +2322,11 @@ void Platform::init()
 
     vinfo = new XVisualInfo *[ScreenCount(x_display)];
     memset(vinfo, 0, sizeof(XVisualInfo *) * ScreenCount(x_display));
-    fb_config = new GLXFBConfig *[ScreenCount(x_display)];
-    memset(fb_config, 0, sizeof(GLXFBConfig *) * ScreenCount(x_display));
     screen_format = new RedDrawable::Format[ScreenCount(x_display)];
     memset(screen_format, 0, sizeof(RedDrawable::Format) * ScreenCount(x_display));
+#ifdef USE_OGL
+    fb_config = new GLXFBConfig *[ScreenCount(x_display)];
+    memset(fb_config, 0, sizeof(GLXFBConfig *) * ScreenCount(x_display));
 
     if (threads_enable && glXQueryExtension(x_display, &err, &ev)) {
         int num_configs;
@@ -2349,11 +2358,14 @@ void Platform::init()
                 vinfo[i] = get_x_vis_info(i);
             }
         }
-    } else {
+    } else
+#else // !USE_OGL
+    {
         for (int i = 0; i < ScreenCount(x_display); ++i) {
             vinfo[i] = get_x_vis_info(i);
         }
     }
+#endif // USE_OGL
 
     for (int i = 0; i < ScreenCount(x_display); ++i) {
         if (vinfo[i] == NULL) {
diff --git a/client/x11/red_drawable.cpp b/client/x11/red_drawable.cpp
index 32754da..327028b 100644
--- a/client/x11/red_drawable.cpp
+++ b/client/x11/red_drawable.cpp
@@ -21,6 +21,8 @@
 #include "debug.h"
 #include "x_platform.h"
 #include "utils.h"
+
+#ifdef USE_OGL
 #include "gl_utils.h"
 #include <GL/gl.h>
 #include <GL/glu.h>
@@ -131,6 +133,7 @@ static inline void copy_to_gldrawable_from_pixmap(const RedDrawable_p* dest,
         glXMakeCurrent(XPlatform::get_display(), pbuffer, context);
     }
 }
+#endif // USE_OGL
 
 static inline void copy_to_drawable_from_drawable(const RedDrawable_p* dest,
                                                   const SpiceRect& area,
@@ -269,6 +272,7 @@ static inline void copy_to_x_drawable(const RedDrawable_p* dest,
     }
 }
 
+#ifdef USE_OGL
 static inline void copy_to_gl_drawable(const RedDrawable_p* dest,
                                        const SpiceRect& area,
                                        const SpicePoint& offset,
@@ -286,6 +290,7 @@ static inline void copy_to_gl_drawable(const RedDrawable_p* dest,
         THROW("invalid source type %d", source->type);
     }
 }
+#endif // USE_OGL
 
 static inline void copy_to_pixmap_from_drawable(const RedDrawable_p* dest,
                                                 const SpiceRect& area,
@@ -316,6 +321,7 @@ static inline void copy_to_pixmap_from_pixmap(const RedDrawable_p* dest,
                              area.bottom - area.top);
 }
 
+#ifdef USE_OGL
 static inline void copy_to_pixmap_from_gltexture(const RedDrawable_p* dest,
                                                  const SpiceRect& area,
                                                  const SpicePoint& offset,
@@ -359,6 +365,7 @@ static inline void copy_to_pixmap_from_gltexture(const RedDrawable_p* dest,
         glXMakeCurrent(XPlatform::get_display(), win, context);
     }
 }
+#endif // USE_OGL
 
 static inline void copy_to_pixmap(const RedDrawable_p* dest,
                                   const SpiceRect& area,
@@ -367,9 +374,11 @@ static inline void copy_to_pixmap(const RedDrawable_p* dest,
                                   int src_x, int src_y)
 {
     switch (source->type) {
+#ifdef USE_OGL
     case PIXELS_SOURCE_TYPE_GL_TEXTURE:
         copy_to_pixmap_from_gltexture(dest, area, offset, source, src_x, src_y);
         break;
+#endif // USE_OGL
     case PIXELS_SOURCE_TYPE_X_DRAWABLE:
         copy_to_pixmap_from_drawable(dest, area, offset, source, src_x, src_y);
         break;
@@ -386,10 +395,12 @@ void RedDrawable::copy_pixels(const PixelsSource& src, int src_x, int src_y, con
     PixelsSource_p* source = (PixelsSource_p*)src.get_opaque();
     RedDrawable_p* dest = (RedDrawable_p*)get_opaque();
     switch (dest->source.type) {
+#ifdef USE_OGL
     case PIXELS_SOURCE_TYPE_GL_DRAWABLE:
         copy_to_gl_drawable(dest, area, _origin, source, src_x + src._origin.x,
                             src_y + src._origin.y);
         break;
+#endif // USE_OGL
     case PIXELS_SOURCE_TYPE_X_DRAWABLE:
         copy_to_x_drawable(dest, area, _origin, source, src_x + src._origin.x,
                            src_y + src._origin.y);
@@ -639,6 +650,7 @@ static inline void fill_drawable(RedDrawable_p* dest, const SpiceRect& area, rgb
                    area.right - area.left, area.bottom - area.top);
 }
 
+#ifdef USE_OGL
 static inline void fill_gl_drawable(RedDrawable_p* dest, const SpiceRect& area, rgb32_t color,
                                     const SpicePoint& offset)
 {
@@ -672,6 +684,7 @@ static inline void fill_gl_drawable(RedDrawable_p* dest, const SpiceRect& area,
 
     glColor3f(1, 1, 1);
 }
+#endif // USE_OGL
 
 static inline void fill_pixmap(RedDrawable_p* dest, const SpiceRect& area, rgb32_t color,
                                const SpicePoint& offset)
@@ -689,9 +702,11 @@ void RedDrawable::fill_rect(const SpiceRect& area, rgb32_t color)
 {
     RedDrawable_p* dest = (RedDrawable_p*)get_opaque();
     switch (dest->source.type) {
+#ifdef USE_OGL
     case PIXELS_SOURCE_TYPE_GL_DRAWABLE:
         fill_gl_drawable(dest, area, color, _origin);
         break;
+#endif // USE_OGL
     case PIXELS_SOURCE_TYPE_X_DRAWABLE:
         fill_drawable(dest, area, color, _origin);
         break;
diff --git a/client/x11/red_window.cpp b/client/x11/red_window.cpp
index 7e69b42..5a0886a 100644
--- a/client/x11/red_window.cpp
+++ b/client/x11/red_window.cpp
@@ -22,23 +22,26 @@
 #include <X11/Xatom.h>
 #include <X11/XKBlib.h>
 
+#ifdef USE_OGL
 #include <GL/gl.h>
 #include <GL/glu.h>
 #include <GL/glx.h>
 #include <GL/glext.h>
+#endif // USE_OGL
 #include <stdio.h>
 
 #include "red_window.h"
 #include "utils.h"
-#include "gl_utils.h"
 #include "debug.h"
 #include "platform.h"
 #include "x_platform.h"
 #include "pixels_source_p.h"
 #include <spice/protocol.h>
 #include "region.h"
+#ifdef USE_OGL
+#include "gl_utils.h"
 #include "red_pixmap_gl.h"
-#include "red_pixmap_gl.h"
+#endif // USE_OGL
 #include "x_icon.h"
 
 
@@ -1008,6 +1011,7 @@ void RedWindow_p::wait_for_unmap()
     }
 }
 
+#ifdef USE_OGL
 void RedWindow_p::set_glx(int width, int height)
 {
     if (_glcont_copy) {
@@ -1025,6 +1029,7 @@ void RedWindow_p::set_glx(int width, int height)
         GLC_ERROR_TEST_FINISH;
     }
 }
+#endif // USE_OGL
 
 void RedWindow_p::set_minmax(PixelsSource_p& pix_source, int width, int height)
 {
@@ -1053,7 +1058,9 @@ Cursor RedWindow_p::create_invisible_cursor(Window window)
 
 RedWindow_p::RedWindow_p()
     : _win (None)
+#ifdef USE_OGL
     , _glcont_copy (NULL)
+#endif // USE_OGL
     , _icon (NULL)
     , _focused (false)
     , _ignore_foucs (false)
@@ -1083,10 +1090,12 @@ void RedWindow_p::destroy(RedWindow& red_window, PixelsSource_p& pix_source)
     XFreeCursor(x_display, _invisible_cursor);
     _invisible_cursor = None;
     XDeleteContext(x_display, window, user_data_context);
+#ifdef USE_OGL
     if (_glcont_copy) {
         glXDestroyContext(x_display, _glcont_copy);
         _glcont_copy = NULL;
     }
+#endif // USE_OGL
     XDestroyWindow(x_display, window);
     XFreeColormap(x_display, _colormap);
     XFreeGC(x_display, pix_source.x_drawable.gc);
@@ -1895,6 +1904,7 @@ bool RedWindow::get_mouse_anchor_point(SpicePoint& pt)
     return true;
 }
 
+#ifdef USE_OGL
 RedGlContext RedWindow::create_context_gl()
 {
     if (XPlatform::get_fbconfig()[_screen]) {
@@ -1926,16 +1936,6 @@ void RedWindow::untouch_context()
     glXMakeCurrent(x_display, 0, 0);
 }
 
-int RedWindow::get_screen_num()
-{
-    return _screen;
-}
-
-RedDrawable::Format RedWindow::get_format()
-{
-  return XPlatform::get_screen_format(_screen);
-}
-
 void RedWindow::set_type_gl()
 {
     PixelsSource_p *pix_source = (PixelsSource_p*)get_opaque();
@@ -1972,6 +1972,17 @@ void RedWindow::set_render_fbo(GLuint fbo)
     pix_source->x_drawable.rendertype = RENDER_TYPE_FBO;
     pix_source->x_drawable.fbo = fbo;
 }
+#endif // USE_OGL
+
+int RedWindow::get_screen_num()
+{
+    return _screen;
+}
+
+RedDrawable::Format RedWindow::get_format()
+{
+  return XPlatform::get_screen_format(_screen);
+}
 
 void RedWindow::on_focus_in()
 {
diff --git a/client/x11/red_window_p.h b/client/x11/red_window_p.h
index b843c42..29121d9 100644
--- a/client/x11/red_window_p.h
+++ b/client/x11/red_window_p.h
@@ -18,12 +18,17 @@
 #ifndef _H_RED_WINDOW_P
 #define _H_RED_WINDOW_P
 
+#ifdef USE_OGL
 #include <GL/glx.h>
+#endif // USE_OGL
+#include <X11/Xdefs.h>
 #include <X11/Xlib.h>
 
 typedef Window Win;
+#ifdef USE_OGL
 typedef GLXContext RedGlContext;
 typedef GLXPbuffer RedPbuffer;
+#endif // USE_OGL
 
 class RedWindow;
 class Icon;
@@ -49,7 +54,9 @@ public:
     static void win_proc(XEvent& event);
     static Cursor create_invisible_cursor(Window window);
 
+#ifdef USE_OGL
     void set_glx(int width, int height);
+#endif // USE_OGL
     static void handle_key_press_event(RedWindow& red_window, XKeyEvent* event);
 
 protected:
@@ -59,7 +66,9 @@ protected:
     bool _visibale;
     bool _expect_parent;
     SpicePoint _show_pos;
+#ifdef USE_OGL
     GLXContext _glcont_copy;
+#endif // USE_OGL
     Icon* _icon;
     bool _focused;
     bool _ignore_foucs;
diff --git a/client/x11/x_platform.h b/client/x11/x_platform.h
index 57c2f26..c535652 100644
--- a/client/x11/x_platform.h
+++ b/client/x11/x_platform.h
@@ -19,6 +19,8 @@
 #define _H_XPLATFORM
 
 #include "red_drawable.h"
+#include <X11/Xdefs.h>
+#include <X11/Xutil.h>
 #include <X11/extensions/XShm.h>
 
 class XPlatform {
@@ -26,8 +28,10 @@ public:
     static Display* get_display();
     static XVisualInfo** get_vinfo();
     static RedDrawable::Format get_screen_format(int screen);
-    static GLXFBConfig** get_fbconfig();
     static XIC get_input_context();
+#ifdef USE_OGL
+    static GLXFBConfig** get_fbconfig();
+#endif // USE_OGL
 
     typedef void (*win_proc_t)(XEvent& event);
     static void set_win_proc(Window win, win_proc_t proc);
diff --git a/configure.ac b/configure.ac
index 0958b6d..274f41d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -95,6 +95,12 @@ AC_ARG_ENABLE(tunnel,
 [  --enable-tunnel         Enable network redirection],
 [  have_tunnel=yes])
 AM_CONDITIONAL(SUPPORT_TUNNEL, test "x$have_tunnel" = "xyes")
+
+have_opengl=yes
+AC_ARG_ENABLE(opengl,
+[  --enable-opengl             Enable opengl requirement / support],
+[  have_opengl=no])
+AM_CONDITIONAL(SUPPORT_GL, test "x$have_opengl" = "xyes")
 dnl =========================================================================
 dnl Check deps
 
@@ -162,13 +168,15 @@ SPICE_REQUIRES+=" openssl"
 # AC_SUBST(GL_LIBS)
 # SPICE_REQUIRES+=" gl glu"
 
-have_gl=yes
-AC_CHECK_LIB(GL, glBlendFunc, GL_LIBS="$GL_LIBS -lGL", have_gl=no)
-AC_CHECK_LIB(GLU, gluSphere, GL_LIBS="$GL_LIBS -lGLU", have_gl=no)
-GL_CFLAGS="-DGL_GLEXT_PROTOTYPES"
+if test "x$have_opengl" = "xyes"; then
+   AC_CHECK_LIB(GL, glBlendFunc, GL_LIBS="$GL_LIBS -lGL", have_opengl=no)
+   AC_CHECK_LIB(GLU, gluSphere, GL_LIBS="$GL_LIBS -lGLU", have_opengl=no)
+   GL_CFLAGS="-DGL_GLEXT_PROTOTYPES -DUSE_GLZ -DUSE_OGL"
 
-if test "x$have_gl" = "xno"; then
-   AC_MSG_ERROR([GL libraries not available])
+   if test "x$have_opengl" = "xno"; then
+      AC_MSG_RESULT([GL libraries not available])
+      GL_CFLAGS="-DNO_GL"
+   fi
 fi
 
 AC_SUBST(GL_CFLAGS)
@@ -359,5 +367,7 @@ echo "
 
         Red target:               ${red_target}
 
+        OpenGL:                   ${have_opengl}
+
         Now type 'make' to build $PACKAGE
 "
-- 
1.7.0.1



More information about the Spice-devel mailing list