From: Ian Romanick <ian.d.roman...@intel.com> Detect whether a new enough version of XCB is installed at configure time. If it is not, don't enable the extension and don't build the unit tests.
Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> --- Using this patch, I was able to successfully build and run both with and without updated XCB bits installed. I think the lesson learned here is that it's nonsense for the GLX part of XCB to live in the XCB library. There's only one user, so it should live there. Seriously. configure.ac | 19 +++++++++++++++++++ src/glx/clientinfo.c | 5 ++++- src/glx/create_context.c | 2 +- src/glx/glxextensions.c | 4 ++-- tests/glx/Makefile.am | 4 +++- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index e526d17..7517697 100644 --- a/configure.ac +++ b/configure.ac @@ -1030,6 +1030,25 @@ xyesno) GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS" fi + # Check to see if the xcb-glx library is new enough to support + # GLX_ARB_create_context. This bit of hackery is necessary until XCB 1.8 + # is released. + save_CPPFLAGS="$CPPFLAGS" + save_LDFLAGS="$LDFLAGS" + CPPFLAGS="$CPPFLAGS $X11_INCLUDES" + LDFLAGS="$LDFLAGS $GL_LIB_DEPS" + AC_CHECK_LIB(xcb-glx, xcb_glx_create_context_attribs_arb_checked, + [HAVE_XCB_GLX_CREATE_CONTEXT=yes], + [HAVE_XCB_GLX_CREATE_CONTEXT=no]) + AM_CONDITIONAL(HAVE_XCB_GLX_CREATE_CONTEXT, + test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes) + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + + if test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes; then + X11_INCLUDES="$X11_INCLUDES -DHAVE_XCB_GLX_CREATE_CONTEXT" + fi + # need DRM libs, -lpthread, etc. GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" diff --git a/src/glx/clientinfo.c b/src/glx/clientinfo.c index 429e9a3..461030f 100644 --- a/src/glx/clientinfo.c +++ b/src/glx/clientinfo.c @@ -123,6 +123,7 @@ __glX_send_client_info(struct glx_display *glx_dpy) * THE ORDER IS IMPORTANT. We want to send the most recent version of the * protocol that the server can support. */ +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT if (glx_dpy->majorVersion == 1 && glx_dpy->minorVersion == 4 && any_screen_has_ARB_create_context_profile) { xcb_glx_set_client_info_2arb(c, @@ -145,7 +146,9 @@ __glX_send_client_info(struct glx_display *glx_dpy) gl_versions, gl_extension_string, glx_extensions); - } else { + } else +#endif + { xcb_glx_client_info(c, GLX_MAJOR_VERSION, GLX_MINOR_VERSION, gl_extension_length, diff --git a/src/glx/create_context.c b/src/glx/create_context.c index 11f9340..714f0e5 100644 --- a/src/glx/create_context.c +++ b/src/glx/create_context.c @@ -94,7 +94,7 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, * the protocol error and handle it. Part of handling the error is freeing * the possibly non-NULL value returned by this function. */ -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT cookie = xcb_glx_create_context_attribs_arb_checked(c, gc->xid, diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c index 0fcd8a9..86dc7d0 100644 --- a/src/glx/glxextensions.c +++ b/src/glx/glxextensions.c @@ -71,7 +71,7 @@ struct extension_info /* *INDENT-OFF* */ static const struct extension_info known_glx_extensions[] = { -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT { GLX(ARB_create_context), VER(0,0), Y, N, N, N }, { GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N }, #else @@ -85,7 +85,7 @@ static const struct extension_info known_glx_extensions[] = { { GLX(EXT_visual_info), VER(0,0), Y, Y, N, N }, { GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N }, { GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N }, -#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB +#ifdef HAVE_XCB_GLX_CREATE_CONTEXT { GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y }, #else { GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N }, diff --git a/tests/glx/Makefile.am b/tests/glx/Makefile.am index 0b06117..cdebf5d 100644 --- a/tests/glx/Makefile.am +++ b/tests/glx/Makefile.am @@ -4,6 +4,7 @@ AM_CXXFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi \ $(X11_CFLAGS) $(GTEST_CFLAGS) if HAVE_GTEST +if HAVE_XCB_GLX_CREATE_CONTEXT TESTS = glx_unittest check_PROGRAMS = glx_unittest @@ -13,4 +14,5 @@ glx_unittest_SOURCES = \ fake_glx_screen.cpp glx_unittest_LDADD = $(top_builddir)/src/glx/libglx.a $(GTEST_LIBS) -lgtest_main -endif \ No newline at end of file +endif +endif -- 1.7.6.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev