Allow enabling and disabling GLX support

Since X11 can be used on multiple platforms, or disabled in special
environments, we should provide a way to control whether or not Epoxy is
built with GLX support.

Fixes anholt/libepoxy#52
Fixes anholt/libepoxy#63
Closes anholt/libepoxy#80
Closes anholt/libepoxy#81
macos/v1.5.9
Emmanuele Bassi 8 years ago
commit ec93dcd5a1
  1. 72
      configure.ac
  2. 4
      epoxy.pc.in
  3. 31
      meson.build
  4. 5
      meson_options.txt
  5. 6
      src/dispatch_common.h
  6. 7
      test/Makefile.am
  7. 2
      test/meson.build

@ -58,13 +58,42 @@ AC_CHECK_HEADER([KHR/khrplatform.h],
# uintptr_t to a void *") by default. Kill that. # uintptr_t to a void *") by default. Kill that.
XORG_TESTSET_CFLAG(CWARNFLAGS, [-Wno-int-conversion]) XORG_TESTSET_CFLAG(CWARNFLAGS, [-Wno-int-conversion])
has_znow=yes 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])
],
case $host_os in [yes], [
mingw*) build_glx=yes
build_egl=no ],
[no], [
build_glx=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 build_wgl=yes
has_znow=yes
# On windows, the DLL has to have all of its functions # On windows, the DLL has to have all of its functions
# resolved at link time, so we have to link directly aginst # resolved at link time, so we have to link directly aginst
# opengl32.dll. But that's the only GL provider, anyway. # opengl32.dll. But that's the only GL provider, anyway.
@ -75,24 +104,25 @@ case $host_os in
# there's lots of missing autodetection for the testsuite # there's lots of missing autodetection for the testsuite
# (like checking for EGL and GLX libs in non-windows.). # (like checking for EGL and GLX libs in non-windows.).
AC_SUBST([LOG_COMPILER], [wine]) AC_SUBST([LOG_COMPILER], [wine])
;; ],
darwin*)
[darwin*], [
build_egl=no build_egl=no
build_glx=no
build_wgl=no build_wgl=no
build_apple=yes build_apple=yes
has_znow=no has_znow=no
EPOXY_LINK_LIBS="" EPOXY_LINK_LIBS=""
;; ],
*)
[
build_egl=yes build_egl=yes
build_glx=yes
build_wgl=no build_wgl=no
has_znow=yes
# On platforms with dlopen, we load everything dynamically and # On platforms with dlopen, we load everything dynamically and
# don't link against a specific window system or GL implementation. # don't link against a specific window system or GL implementation.
EPOXY_LINK_LIBS="" EPOXY_LINK_LIBS=""
;; ]
esac )
AC_SUBST(EPOXY_LINK_LIBS) AC_SUBST(EPOXY_LINK_LIBS)
@ -161,15 +191,29 @@ AS_CASE(["$host"],
AC_SUBST([VISIBILITY_CFLAGS]) AC_SUBST([VISIBILITY_CFLAGS])
PKG_CHECK_MODULES(X11, [x11], [x11=yes], [x11=no]) if test x$build_glx = xyes; then
if test x$x11 = xno -a 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]) 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 fi
AM_CONDITIONAL(HAVE_X11, test x$x11 = xyes) AM_CONDITIONAL(HAVE_X11, test x$x11 = xyes)
PKG_CHECK_MODULES(GL, [gl], [gl=yes], [gl=no]) 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([ AC_CONFIG_FILES([
epoxy.pc epoxy.pc
Makefile Makefile

@ -3,6 +3,10 @@ exec_prefix=@exec_prefix@
libdir=@libdir@ libdir=@libdir@
includedir=@includedir@ includedir=@includedir@
epoxy_has_glx=@epoxy_has_glx@
epoxy_has_egl=@epoxy_has_egl@
epoxy_has_wgl=@epoxy_has_wgl@
Name: epoxy Name: epoxy
Description: epoxy GL dispatch Library Description: epoxy GL dispatch Library
Version: @PACKAGE_VERSION@ Version: @PACKAGE_VERSION@

@ -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_quoted('PACKAGE_LIBEXECDIR', join_paths(get_option('prefix'), get_option('libexecdir')))
conf.set('HAVE_KHRPLATFORM_H', cc.has_header('KHR/khrplatform.h', required: false)) 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 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_egl = false
build_apple = false build_apple = false
build_wgl = true build_wgl = true
has_znow = true has_znow = true
elif host_system == 'darwin' elif host_system == 'darwin'
build_glx = false
build_egl = false build_egl = false
build_apple = true build_apple = true
build_wgl = false build_wgl = false
has_znow = false has_znow = false
else else
build_glx = true
build_egl = true build_egl = true
build_apple = false build_apple = false
build_wgl = false build_wgl = false
has_znow = true has_znow = true
endif endif
conf.set10('ENABLE_GLX', build_glx)
# Compiler flags, taken from the Xorg macros # Compiler flags, taken from the Xorg macros
test_cflags = [ test_cflags = [
'-Wpointer-arith', '-Wpointer-arith',
@ -138,6 +160,9 @@ pkgconf.set('prefix', epoxy_prefix)
pkgconf.set('exec_prefix', epoxy_prefix) pkgconf.set('exec_prefix', epoxy_prefix)
pkgconf.set('libdir', epoxy_libdir) pkgconf.set('libdir', epoxy_libdir)
pkgconf.set('includedir', epoxy_includedir) 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()) pkgconf.set('PACKAGE_VERSION', meson.project_version())
if dl_dep.found() if dl_dep.found()
pkgconf.set('DLOPEN_LIBS', '-ldl') pkgconf.set('DLOPEN_LIBS', '-ldl')

@ -1,3 +1,8 @@
option('enable-docs', option('enable-docs',
type: 'boolean', value: false, type: 'boolean', value: false,
description: 'Enable generating the Epoxy API reference (depends on Doxygen)') 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')

@ -25,11 +25,11 @@
#ifdef _WIN32 #ifdef _WIN32
#define PLATFORM_HAS_EGL 0 #define PLATFORM_HAS_EGL 0
#define PLATFORM_HAS_GLX 0 #define PLATFORM_HAS_GLX ENABLE_GLX
#define PLATFORM_HAS_WGL 1 #define PLATFORM_HAS_WGL 1
#elif defined(__APPLE__) #elif defined(__APPLE__)
#define PLATFORM_HAS_EGL 0 #define PLATFORM_HAS_EGL 0
#define PLATFORM_HAS_GLX 0 #define PLATFORM_HAS_GLX ENABLE_GLX
#define PLATFORM_HAS_WGL 0 #define PLATFORM_HAS_WGL 0
#elif defined(ANDROID) #elif defined(ANDROID)
#define PLATFORM_HAS_EGL 1 #define PLATFORM_HAS_EGL 1
@ -37,7 +37,7 @@
#define PLATFORM_HAS_WGL 0 #define PLATFORM_HAS_WGL 0
#else #else
#define PLATFORM_HAS_EGL 1 #define PLATFORM_HAS_EGL 1
#define PLATFORM_HAS_GLX 1 #define PLATFORM_HAS_GLX ENABLE_GLX
#define PLATFORM_HAS_WGL 0 #define PLATFORM_HAS_WGL 0
#endif #endif

@ -72,8 +72,11 @@ check_PROGRAMS = $(TESTS)
if BUILD_EGL if BUILD_EGL
EGL_TESTS = \ EGL_TESTS = \
$()
if HAVE_X11
EGL_TESTS += \
egl_has_extension_nocontext \ egl_has_extension_nocontext \
egl_gl \
egl_gles2_without_glx \ egl_gles2_without_glx \
$() $()
@ -83,6 +86,7 @@ endif
EGL_UTIL_LIB = libegl_common.la EGL_UTIL_LIB = libegl_common.la
endif endif
endif
if BUILD_GLX if BUILD_GLX
if HAS_ZNOW if HAS_ZNOW
@ -93,6 +97,7 @@ if BUILD_EGL
if BUILD_GLX if BUILD_GLX
if !BUILD_APPLE if !BUILD_APPLE
EGL_AND_GLX_TESTS = \ EGL_AND_GLX_TESTS = \
egl_gl \
egl_and_glx_different_pointers_egl_glx \ egl_and_glx_different_pointers_egl_glx \
egl_and_glx_different_pointers_egl \ egl_and_glx_different_pointers_egl \
egl_and_glx_different_pointers_glx \ egl_and_glx_different_pointers_glx \

@ -1,6 +1,6 @@
has_gles1 = gles1_dep.found() has_gles1 = gles1_dep.found()
has_gles2 = gles2_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 + [ test_cflags = common_cflags + [
'-D_XOPEN_SOURCE', '-D_XOPEN_SOURCE',

Loading…
Cancel
Save