diff --git a/configure.ac b/configure.ac index 17a398b..8ca6afd 100644 --- a/configure.ac +++ b/configure.ac @@ -58,41 +58,71 @@ AC_CHECK_HEADER([KHR/khrplatform.h], # uintptr_t to a void *") by default. Kill that. XORG_TESTSET_CFLAG(CWARNFLAGS, [-Wno-int-conversion]) -has_znow=yes - -case $host_os in - mingw*) - build_egl=no - build_glx=no - build_wgl=yes - # On windows, the DLL has to have all of its functions - # resolved at link time, so we have to link directly aginst - # opengl32.dll. But that's the only GL provider, anyway. - EPOXY_LINK_LIBS="-lopengl32" - - # Testing our built windows binaries requires that they be run - # under wine. Yeah, we should be nice and autodetect, but - # there's lots of missing autodetection for the testsuite - # (like checking for EGL and GLX libs in non-windows.). - AC_SUBST([LOG_COMPILER], [wine]) - ;; - darwin*) - build_egl=no - build_glx=no - build_wgl=no - build_apple=yes - has_znow=no - EPOXY_LINK_LIBS="" - ;; - *) - build_egl=yes - build_glx=yes - build_wgl=no - # On platforms with dlopen, we load everything dynamically and - # don't link against a specific window system or GL implementation. - EPOXY_LINK_LIBS="" - ;; -esac +AC_ARG_ENABLE([glx], + [AC_HELP_STRING([--enable-glx=@<:@auto,yes,no@:>@], [Enable GLX support @<:@default=auto@:>@])], + [enable_glx=$enableval], + [enable_glx=auto]) + +# GLX can be used on different platforms, so we expose a +# configure time switch to enable or disable it; in case +# the "auto" default value is set, we only enable GLX +# support on Linux and Unix +AS_CASE([$enable_glx], + [auto], [ + AS_CASE([$host_os], + [mingw*], [build_glx=no], + [darwin*], [build_glx=no], + [android*], [build_glx=no], + [build_glx=yes]) + ], + + [yes], [ + build_glx=yes + ], + + [no], [ + build_glx=no + ], + + [AC_MSG_ERROR([Invalid value "$enable_glx" for option "--enable-glx"])] +]) + +# The remaining platform specific API for GL/GLES are enabled +# depending on the platform we're building for +AS_CASE([$host_os], + [mingw*], [ + build_egl=no + build_wgl=yes + has_znow=yes + # On windows, the DLL has to have all of its functions + # resolved at link time, so we have to link directly aginst + # opengl32.dll. But that's the only GL provider, anyway. + EPOXY_LINK_LIBS="-lopengl32" + + # Testing our built windows binaries requires that they be run + # under wine. Yeah, we should be nice and autodetect, but + # there's lots of missing autodetection for the testsuite + # (like checking for EGL and GLX libs in non-windows.). + AC_SUBST([LOG_COMPILER], [wine]) + ], + + [darwin*], [ + build_egl=no + build_wgl=no + build_apple=yes + has_znow=no + EPOXY_LINK_LIBS="" + ], + + [ + build_egl=yes + build_wgl=no + has_znow=yes + # On platforms with dlopen, we load everything dynamically and + # don't link against a specific window system or GL implementation. + EPOXY_LINK_LIBS="" + ] +) AC_SUBST(EPOXY_LINK_LIBS) @@ -161,15 +191,29 @@ AS_CASE(["$host"], AC_SUBST([VISIBILITY_CFLAGS]) -PKG_CHECK_MODULES(X11, [x11], [x11=yes], [x11=no]) -if test x$x11 = xno -a x$build_glx = xyes; then - AC_MSG_ERROR([libX11 headers (libx11-dev) required to build with GLX support]) +if test x$build_glx = xyes; then + PKG_CHECK_MODULES(X11, [x11], [x11=yes], [x11=no]) + if test x$x11 = xno -a x$build_glx = xyes; then + AC_MSG_ERROR([libX11 headers (libx11-dev) required to build with GLX support]) + fi + AC_DEFINE(ENABLE_GLX, [1], [Whether GLX support is enabled]) +else + x11=no fi AM_CONDITIONAL(HAVE_X11, test x$x11 = xyes) PKG_CHECK_MODULES(GL, [gl], [gl=yes], [gl=no]) +# Variables for the pkg-config file; AC_SUBST does not do `test` substitutions, +# so we need to specify the boolean values here +AS_IF([test x$build_glx = xyes], [epoxy_has_glx=1], [epoxy_has_glx=0]) +AS_IF([test x$build_egl = xyes], [epoxy_has_egl=1], [epoxy_has_egl=0]) +AS_IF([test x$build_wgl = xyes], [epoxy_has_wgl=1], [epoxy_has_wgl=0]) +AC_SUBST(epoxy_has_glx) +AC_SUBST(epoxy_has_egl) +AC_SUBST(epoxy_has_wgl) + AC_CONFIG_FILES([ epoxy.pc Makefile diff --git a/epoxy.pc.in b/epoxy.pc.in index 8c85a33..7828a77 100644 --- a/epoxy.pc.in +++ b/epoxy.pc.in @@ -3,6 +3,10 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ +epoxy_has_glx=@epoxy_has_glx@ +epoxy_has_egl=@epoxy_has_egl@ +epoxy_has_wgl=@epoxy_has_wgl@ + Name: epoxy Description: epoxy GL dispatch Library Version: @PACKAGE_VERSION@ diff --git a/meson.build b/meson.build index c8e45cd..ac0c913 100644 --- a/meson.build +++ b/meson.build @@ -30,26 +30,48 @@ conf.set_quoted('PACKAGE_LOCALEDIR', join_paths(get_option('prefix'), get_option conf.set_quoted('PACKAGE_LIBEXECDIR', join_paths(get_option('prefix'), get_option('libexecdir'))) conf.set('HAVE_KHRPLATFORM_H', cc.has_header('KHR/khrplatform.h', required: false)) -if host_system == 'windows' +# GLX can be used on different platforms, so we expose a +# configure time switch to enable or disable it; in case +# the "auto" default value is set, we only enable GLX +# support on Linux and Unix +enable_glx = get_option('enable-glx') +if enable_glx == 'auto' + if host_system == 'windows' + build_glx = false + elif host_system == 'darwin' + build_glx = false + elif host_system == 'android' + build_glx = false + else + build_glx = true + endif +elif enable_glx == 'yes' + build_glx = true +elif enable_glx == 'no' build_glx = false +endif + +# The remaining platform specific API for GL/GLES are enabled +# depending on the platform we're building for +if host_system == 'windows' build_egl = false build_apple = false build_wgl = true has_znow = true elif host_system == 'darwin' - build_glx = false build_egl = false build_apple = true build_wgl = false has_znow = false else - build_glx = true build_egl = true build_apple = false build_wgl = false has_znow = true endif +conf.set10('ENABLE_GLX', build_glx) + # Compiler flags, taken from the Xorg macros test_cflags = [ '-Wpointer-arith', @@ -138,6 +160,9 @@ pkgconf.set('prefix', epoxy_prefix) pkgconf.set('exec_prefix', epoxy_prefix) pkgconf.set('libdir', epoxy_libdir) pkgconf.set('includedir', epoxy_includedir) +pkgconf.set10('epoxy_has_glx', build_glx) +pkgconf.set10('epoxy_has_egl', build_egl) +pkgconf.set10('epoxy_has_wgl', build_wgl) pkgconf.set('PACKAGE_VERSION', meson.project_version()) if dl_dep.found() pkgconf.set('DLOPEN_LIBS', '-ldl') diff --git a/meson_options.txt b/meson_options.txt index 4eaa634..18932f5 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,8 @@ option('enable-docs', type: 'boolean', value: false, description: 'Enable generating the Epoxy API reference (depends on Doxygen)') +option('enable-glx', + type: 'combo', + choices: [ 'auto', 'yes', 'no' ], + value: 'auto', + description: 'Enable GLX support') diff --git a/src/dispatch_common.h b/src/dispatch_common.h index 2cc566a..b41f54b 100644 --- a/src/dispatch_common.h +++ b/src/dispatch_common.h @@ -25,11 +25,11 @@ #ifdef _WIN32 #define PLATFORM_HAS_EGL 0 -#define PLATFORM_HAS_GLX 0 +#define PLATFORM_HAS_GLX ENABLE_GLX #define PLATFORM_HAS_WGL 1 #elif defined(__APPLE__) #define PLATFORM_HAS_EGL 0 -#define PLATFORM_HAS_GLX 0 +#define PLATFORM_HAS_GLX ENABLE_GLX #define PLATFORM_HAS_WGL 0 #elif defined(ANDROID) #define PLATFORM_HAS_EGL 1 @@ -37,7 +37,7 @@ #define PLATFORM_HAS_WGL 0 #else #define PLATFORM_HAS_EGL 1 -#define PLATFORM_HAS_GLX 1 +#define PLATFORM_HAS_GLX ENABLE_GLX #define PLATFORM_HAS_WGL 0 #endif diff --git a/test/Makefile.am b/test/Makefile.am index 5781702..b1f0c7a 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -72,8 +72,11 @@ check_PROGRAMS = $(TESTS) if BUILD_EGL EGL_TESTS = \ + $() + +if HAVE_X11 +EGL_TESTS += \ egl_has_extension_nocontext \ - egl_gl \ egl_gles2_without_glx \ $() @@ -83,6 +86,7 @@ endif EGL_UTIL_LIB = libegl_common.la endif +endif if BUILD_GLX if HAS_ZNOW @@ -93,6 +97,7 @@ if BUILD_EGL if BUILD_GLX if !BUILD_APPLE EGL_AND_GLX_TESTS = \ + egl_gl \ egl_and_glx_different_pointers_egl_glx \ egl_and_glx_different_pointers_egl \ egl_and_glx_different_pointers_glx \ diff --git a/test/meson.build b/test/meson.build index 857a980..2340fc6 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,6 +1,6 @@ has_gles1 = gles1_dep.found() has_gles2 = gles2_dep.found() -build_x11_tests = x11_dep.found() +build_x11_tests = build_glx and x11_dep.found() test_cflags = common_cflags + [ '-D_XOPEN_SOURCE',