configure.ac revision 48c9925367034b6fac506f1f32d445c5bd825a49
1dnl Process this file with autoconf to create configure.
2
3AC_PREREQ([2.59])
4
5dnl Versioning - scrape the version from configs/default
6m4_define([mesa_version],
7    [m4_esyscmd([${MAKE-make} -s -f bin/version.mk version | tr -d '\n' | tr -d '\r'])])
8m4_ifval(mesa_version,,
9    [m4_fatal([Failed to get the Mesa version from `make -f bin/version.mk version`])])
10
11dnl Tell the user about autoconf.html in the --help output
12m4_divert_once([HELP_END], [
13See docs/autoconf.html for more details on the options for Mesa.])
14
15AC_INIT([Mesa],[mesa_version],
16    [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
17AC_CONFIG_AUX_DIR([bin])
18AC_CANONICAL_HOST
19
20dnl Save user CFLAGS and CXXFLAGS so one can override the default ones
21USER_CFLAGS="$CFLAGS"
22USER_CXXFLAGS="$CXXFLAGS"
23
24dnl Versions for external dependencies
25LIBDRM_REQUIRED=2.4.24
26LIBDRM_RADEON_REQUIRED=2.4.24
27LIBDRM_INTEL_REQUIRED=2.4.24
28LIBDRM_NOUVEAU_REQUIRED=0.6
29DRI2PROTO_REQUIRED=2.6
30GLPROTO_REQUIRED=1.4.14
31LIBDRM_XORG_REQUIRED=2.4.24
32LIBKMS_XORG_REQUIRED=1.0.0
33
34dnl Check for progs
35AC_PROG_CPP
36AC_PROG_CC
37AC_PROG_CXX
38AC_CHECK_PROGS([MAKE], [gmake make])
39AC_CHECK_PROGS([PYTHON2], [python2 python])
40AC_PATH_PROG([MKDEP], [makedepend])
41AC_PATH_PROG([SED], [sed])
42
43if test "x$MKDEP" = "x"; then
44    AC_MSG_ERROR([makedepend is required to build Mesa])
45fi
46
47AC_PATH_PROG([FLEX], [flex])
48test "x$FLEX" = "x" && AC_MSG_ERROR([flex is needed to build Mesa])
49
50AC_PATH_PROG([BISON], [bison])
51test "x$BISON" = "x" && AC_MSG_ERROR([bison is needed to build Mesa])
52
53dnl Our fallback install-sh is a symlink to minstall. Use the existing
54dnl configuration in that case.
55AC_PROG_INSTALL
56test "x$INSTALL" = "x$ac_install_sh" && INSTALL='$(MINSTALL)'
57
58dnl We need a POSIX shell for parts of the build. Assume we have one
59dnl in most cases.
60case "$host_os" in
61solaris*)
62    # Solaris /bin/sh is too old/non-POSIX compliant
63    AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
64    SHELL="$POSIX_SHELL"
65    ;;
66esac
67
68dnl clang is mostly GCC-compatible, but its version is much lower,
69dnl so we have to check for it.
70AC_MSG_CHECKING([if compiling with clang])
71
72AC_COMPILE_IFELSE(
73[AC_LANG_PROGRAM([], [[
74#ifndef __clang__
75       not clang
76#endif
77]])],
78[CLANG=yes], [CLANG=no])
79
80AC_MSG_RESULT([$CLANG])
81
82dnl If we're using GCC, make sure that it is at least version 3.3.0.  Older
83dnl versions are explictly not supported.
84if test "x$GCC" = xyes -a "x$CLANG" = xno; then
85    AC_MSG_CHECKING([whether gcc version is sufficient])
86    major=0
87    minor=0
88
89    GCC_VERSION=`$CC -dumpversion`
90    if test $? -eq 0; then
91        major=`echo $GCC_VERSION | cut -d. -f1`
92        minor=`echo $GCC_VERSION | cut -d. -f2`
93    fi
94
95    if test $major -lt 3 -o $major -eq 3 -a $minor -lt 3 ; then
96        AC_MSG_RESULT([no])
97        AC_MSG_ERROR([If using GCC, version 3.3.0 or later is required.])
98    else
99        AC_MSG_RESULT([yes])
100    fi
101fi
102
103
104MKDEP_OPTIONS=-fdepend
105dnl Ask gcc where it's keeping its secret headers
106if test "x$GCC" = xyes; then
107    for dir in include include-fixed; do
108        GCC_INCLUDES=`$CC -print-file-name=$dir`
109        if test "x$GCC_INCLUDES" != x && \
110           test "$GCC_INCLUDES" != "$dir" && \
111           test -d "$GCC_INCLUDES"; then
112            MKDEP_OPTIONS="$MKDEP_OPTIONS -I$GCC_INCLUDES"
113        fi
114    done
115fi
116AC_SUBST([MKDEP_OPTIONS])
117
118dnl Make sure the pkg-config macros are defined
119m4_ifndef([PKG_PROG_PKG_CONFIG],
120    [m4_fatal([Could not locate the pkg-config autoconf macros.
121  These are usually located in /usr/share/aclocal/pkg.m4. If your macros
122  are in a different location, try setting the environment variable
123  ACLOCAL="aclocal -I/other/macro/dir" before running autoreconf.])])
124PKG_PROG_PKG_CONFIG()
125
126dnl LIB_DIR - library basename
127LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
128AC_SUBST([LIB_DIR])
129
130dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
131_SAVE_LDFLAGS="$LDFLAGS"
132AC_ARG_VAR([EXTRA_LIB_PATH],[Extra -L paths for the linker])
133AC_SUBST([EXTRA_LIB_PATH])
134
135dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
136_SAVE_CPPFLAGS="$CPPFLAGS"
137AC_ARG_VAR([X11_INCLUDES],[Extra -I paths for X11 headers])
138AC_SUBST([X11_INCLUDES])
139
140dnl Compiler macros
141DEFINES=""
142AC_SUBST([DEFINES])
143case "$host_os" in
144linux*|*-gnu*|gnu*)
145    DEFINES="$DEFINES -D_GNU_SOURCE -DPTHREADS"
146    ;;
147solaris*)
148    DEFINES="$DEFINES -DPTHREADS -DSVR4"
149    ;;
150cygwin*)
151    DEFINES="$DEFINES -DPTHREADS"
152    ;;
153esac
154
155dnl Add flags for gcc and g++
156if test "x$GCC" = xyes; then
157    CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -std=c99"
158    if test "x$CLANG" = "xno"; then
159       CFLAGS="$CFLAGS -ffast-math"
160    fi
161
162    # Enable -fvisibility=hidden if using a gcc that supports it
163    save_CFLAGS="$CFLAGS"
164    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
165    VISIBILITY_CFLAGS="-fvisibility=hidden"
166    CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
167    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
168		   [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
169
170    # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
171    CFLAGS=$save_CFLAGS
172
173    # Work around aliasing bugs - developers should comment this out
174    CFLAGS="$CFLAGS -fno-strict-aliasing"
175
176    # gcc's builtin memcmp is slower than glibc's
177    # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
178    CFLAGS="$CFLAGS -fno-builtin-memcmp"
179fi
180if test "x$GXX" = xyes; then
181    CXXFLAGS="$CXXFLAGS -Wall"
182
183    # Enable -fvisibility=hidden if using a gcc that supports it
184    save_CXXFLAGS="$CXXFLAGS"
185    AC_MSG_CHECKING([whether $CXX supports -fvisibility=hidden])
186    VISIBILITY_CXXFLAGS="-fvisibility=hidden"
187    CXXFLAGS="$CXXFLAGS $VISIBILITY_CXXFLAGS"
188    AC_LANG_PUSH([C++])
189    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
190		   [VISIBILITY_CXXFLAGS="" ; AC_MSG_RESULT([no])]);
191    AC_LANG_POP([C++])
192
193    # Restore CXXFLAGS; VISIBILITY_CXXFLAGS are added to it where needed.
194    CXXFLAGS=$save_CXXFLAGS
195
196    # Work around aliasing bugs - developers should comment this out
197    CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
198
199    # gcc's builtin memcmp is slower than glibc's
200    # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
201    CXXFLAGS="$CXXFLAGS -fno-builtin-memcmp"
202fi
203
204dnl even if the compiler appears to support it, using visibility attributes isn't
205dnl going to do anything useful currently on cygwin apart from emit lots of warnings
206case "$host_os" in
207cygwin*)
208    VISIBILITY_CFLAGS=""
209    VISIBILITY_CXXFLAGS=""
210    ;;
211esac
212
213AC_SUBST([VISIBILITY_CFLAGS])
214AC_SUBST([VISIBILITY_CXXFLAGS])
215
216dnl These should be unnecessary, but let the user set them if they want
217AC_ARG_VAR([OPT_FLAGS], [Additional optimization flags for the compiler.
218    Default is to use CFLAGS.])
219AC_ARG_VAR([ARCH_FLAGS], [Additional architecture specific flags for the
220    compiler. Default is to use CFLAGS.])
221AC_SUBST([OPT_FLAGS])
222AC_SUBST([ARCH_FLAGS])
223
224dnl
225dnl Hacks to enable 32 or 64 bit build
226dnl
227AC_ARG_ENABLE([32-bit],
228    [AS_HELP_STRING([--enable-32-bit],
229        [build 32-bit libraries @<:@default=auto@:>@])],
230    [enable_32bit="$enableval"],
231    [enable_32bit=auto]
232)
233if test "x$enable_32bit" = xyes; then
234    if test "x$GCC" = xyes; then
235        CFLAGS="$CFLAGS -m32"
236        ARCH_FLAGS="$ARCH_FLAGS -m32"
237    fi
238    if test "x$GXX" = xyes; then
239        CXXFLAGS="$CXXFLAGS -m32"
240    fi
241fi
242AC_ARG_ENABLE([64-bit],
243    [AS_HELP_STRING([--enable-64-bit],
244        [build 64-bit libraries @<:@default=auto@:>@])],
245    [enable_64bit="$enableval"],
246    [enable_64bit=auto]
247)
248if test "x$enable_64bit" = xyes; then
249    if test "x$GCC" = xyes; then
250        CFLAGS="$CFLAGS -m64"
251    fi
252    if test "x$GXX" = xyes; then
253        CXXFLAGS="$CXXFLAGS -m64"
254    fi
255fi
256
257dnl
258dnl shared/static libraries, mimic libtool options
259dnl
260AC_ARG_ENABLE([static],
261    [AS_HELP_STRING([--enable-static],
262        [build static libraries @<:@default=disabled@:>@])],
263    [enable_static="$enableval"],
264    [enable_static=no]
265)
266case "x$enable_static" in
267xyes|xno ) ;;
268x ) enable_static=no ;;
269* )
270    AC_MSG_ERROR([Static library option '$enable_static' is not a valid])
271    ;;
272esac
273AC_ARG_ENABLE([shared],
274    [AS_HELP_STRING([--disable-shared],
275        [build shared libraries @<:@default=enabled@:>@])],
276    [enable_shared="$enableval"],
277    [enable_shared=yes]
278)
279case "x$enable_shared" in
280xyes|xno ) ;;
281x ) enable_shared=yes ;;
282* )
283    AC_MSG_ERROR([Shared library option '$enable_shared' is not a valid])
284    ;;
285esac
286
287dnl Can't have static and shared libraries, default to static if user
288dnl explicitly requested. If both disabled, set to static since shared
289dnl was explicitly requirested.
290case "x$enable_static$enable_shared" in
291xyesyes )
292    AC_MSG_WARN([Can't build static and shared libraries, disabling shared])
293    enable_shared=no
294    ;;
295xnono )
296    AC_MSG_WARN([Can't disable both static and shared libraries, enabling static])
297    enable_static=yes
298    ;;
299esac
300
301dnl
302dnl mklib options
303dnl
304AC_ARG_VAR([MKLIB_OPTIONS],[Options for the Mesa library script, mklib])
305if test "$enable_static" = yes; then
306    MKLIB_OPTIONS="$MKLIB_OPTIONS -static"
307fi
308AC_SUBST([MKLIB_OPTIONS])
309
310dnl
311dnl other compiler options
312dnl
313AC_ARG_ENABLE([debug],
314    [AS_HELP_STRING([--enable-debug],
315        [use debug compiler flags and macros @<:@default=disabled@:>@])],
316    [enable_debug="$enableval"],
317    [enable_debug=no]
318)
319if test "x$enable_debug" = xyes; then
320    DEFINES="$DEFINES -DDEBUG"
321    if test "x$GCC" = xyes; then
322        CFLAGS="$CFLAGS -g"
323    fi
324    if test "x$GXX" = xyes; then
325        CXXFLAGS="$CXXFLAGS -g"
326    fi
327fi
328
329dnl
330dnl library names
331dnl
332LIB_PREFIX_GLOB='lib'
333LIB_VERSION_SEPARATOR='.'
334if test "$enable_static" = yes; then
335    LIB_EXTENSION='a'
336else
337    case "$host_os" in
338    darwin* )
339        LIB_EXTENSION='dylib' ;;
340    cygwin* )
341        dnl prefix can be 'cyg' or 'lib'
342        LIB_PREFIX_GLOB='???'
343        LIB_VERSION_SEPARATOR='-'
344        LIB_EXTENSION='dll' ;;
345    aix* )
346        LIB_EXTENSION='a' ;;
347    * )
348        LIB_EXTENSION='so' ;;
349    esac
350fi
351
352dnl
353dnl Mangled Mesa support
354dnl
355AC_ARG_ENABLE([mangling],
356  [AS_HELP_STRING([--enable-mangling],
357    [enable mangled symbols and library name @<:@default=disabled@:>@])],
358  [enable_mangling="${enableval}"],
359  [enable_mangling=no]
360)
361GL_LIB="GL"
362GLU_LIB="GLU"
363OSMESA_LIB="OSMesa"
364if test "x${enable_mangling}" = "xyes" ; then
365  DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE"
366  GL_LIB="MangledGL"
367  GLU_LIB="MangledGLU"
368  OSMESA_LIB="MangledOSMesa"
369fi
370AC_SUBST([GL_LIB])
371AC_SUBST([GLU_LIB])
372AC_SUBST([OSMESA_LIB])
373
374dnl
375dnl potentially-infringing-but-nobody-knows-for-sure stuff
376dnl
377AC_ARG_ENABLE([texture-float],
378    [AS_HELP_STRING([--enable-texture-float],
379        [enable floating-point textures and renderbuffers @<:@default=disabled@:>@])],
380    [enable_texture_float="$enableval"],
381    [enable_texture_float=no]
382)
383if test "x$enable_texture_float" = xyes; then
384    AC_MSG_WARN([Floating-point textures enabled.])
385    AC_MSG_WARN([Please consult docs/patents.txt with your lawyer before building Mesa.])
386    DEFINES="$DEFINES -DTEXTURE_FLOAT_ENABLED"
387fi
388
389GL_LIB_NAME='lib$(GL_LIB).'${LIB_EXTENSION}
390GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
391GLUT_LIB_NAME='lib$(GLUT_LIB).'${LIB_EXTENSION}
392OSMESA_LIB_NAME='lib$(OSMESA_LIB).'${LIB_EXTENSION}
393EGL_LIB_NAME='lib$(EGL_LIB).'${LIB_EXTENSION}
394GLESv1_CM_LIB_NAME='lib$(GLESv1_CM_LIB).'${LIB_EXTENSION}
395GLESv2_LIB_NAME='lib$(GLESv2_LIB).'${LIB_EXTENSION}
396VG_LIB_NAME='lib$(VG_LIB).'${LIB_EXTENSION}
397GLAPI_LIB_NAME='lib$(GLAPI_LIB).'${LIB_EXTENSION}
398WAYLAND_EGL_LIB_NAME='lib$(WAYLAND_EGL_LIB).'${LIB_EXTENSION}
399GBM_LIB_NAME='lib$(GBM_LIB).'${LIB_EXTENSION}
400
401GL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
402GLU_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLU_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
403GLUT_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLUT_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
404OSMESA_LIB_GLOB=${LIB_PREFIX_GLOB}'$(OSMESA_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
405EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
406EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
407GLESv1_CM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv1_CM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
408GLESv2_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv2_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
409VG_LIB_GLOB=${LIB_PREFIX_GLOB}'$(VG_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
410GLAPI_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLAPI_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
411WAYLAND_EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(WAYLAND_EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
412GBM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GBM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
413
414AC_SUBST([GL_LIB_NAME])
415AC_SUBST([GLU_LIB_NAME])
416AC_SUBST([GLUT_LIB_NAME])
417AC_SUBST([OSMESA_LIB_NAME])
418AC_SUBST([EGL_LIB_NAME])
419AC_SUBST([GLESv1_CM_LIB_NAME])
420AC_SUBST([GLESv2_LIB_NAME])
421AC_SUBST([VG_LIB_NAME])
422AC_SUBST([GLAPI_LIB_NAME])
423AC_SUBST([WAYLAND_EGL_LIB_NAME])
424AC_SUBST([GBM_LIB_NAME])
425
426AC_SUBST([GL_LIB_GLOB])
427AC_SUBST([GLU_LIB_GLOB])
428AC_SUBST([GLUT_LIB_GLOB])
429AC_SUBST([OSMESA_LIB_GLOB])
430AC_SUBST([EGL_LIB_GLOB])
431AC_SUBST([GLESv1_CM_LIB_GLOB])
432AC_SUBST([GLESv2_LIB_GLOB])
433AC_SUBST([VG_LIB_GLOB])
434AC_SUBST([GLAPI_LIB_GLOB])
435AC_SUBST([WAYLAND_EGL_LIB_GLOB])
436AC_SUBST([GBM_LIB_GLOB])
437
438dnl
439dnl Arch/platform-specific settings
440dnl
441AC_ARG_ENABLE([asm],
442    [AS_HELP_STRING([--disable-asm],
443        [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
444    [enable_asm="$enableval"],
445    [enable_asm=yes]
446)
447asm_arch=""
448ASM_FLAGS=""
449MESA_ASM_SOURCES=""
450GLAPI_ASM_SOURCES=""
451AC_MSG_CHECKING([whether to enable assembly])
452test "x$enable_asm" = xno && AC_MSG_RESULT([no])
453# disable if cross compiling on x86/x86_64 since we must run gen_matypes
454if test "x$enable_asm" = xyes && test "x$cross_compiling" = xyes; then
455    case "$host_cpu" in
456    i?86 | x86_64)
457        enable_asm=no
458        AC_MSG_RESULT([no, cross compiling])
459        ;;
460    esac
461fi
462# check for supported arches
463if test "x$enable_asm" = xyes; then
464    case "$host_cpu" in
465    i?86)
466        case "$host_os" in
467        linux* | *freebsd* | dragonfly* | *netbsd*)
468            test "x$enable_64bit" = xyes && asm_arch=x86_64 || asm_arch=x86
469            ;;
470        esac
471        ;;
472    x86_64)
473        case "$host_os" in
474        linux* | *freebsd* | dragonfly* | *netbsd*)
475            test "x$enable_32bit" = xyes && asm_arch=x86 || asm_arch=x86_64
476            ;;
477        esac
478        ;;
479    powerpc)
480        case "$host_os" in
481        linux*)
482            asm_arch=ppc
483            ;;
484        esac
485        ;;
486    sparc*)
487        case "$host_os" in
488        linux*)
489            asm_arch=sparc
490            ;;
491        esac
492        ;;
493    esac
494
495    case "$asm_arch" in
496    x86)
497        ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
498        MESA_ASM_SOURCES='$(X86_SOURCES)'
499        GLAPI_ASM_SOURCES='$(X86_API)'
500        AC_MSG_RESULT([yes, x86])
501        ;;
502    x86_64)
503        ASM_FLAGS="-DUSE_X86_64_ASM"
504        MESA_ASM_SOURCES='$(X86-64_SOURCES)'
505        GLAPI_ASM_SOURCES='$(X86-64_API)'
506        AC_MSG_RESULT([yes, x86_64])
507        ;;
508    ppc)
509        ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
510        MESA_ASM_SOURCES='$(PPC_SOURCES)'
511        AC_MSG_RESULT([yes, ppc])
512        ;;
513    sparc)
514        ASM_FLAGS="-DUSE_SPARC_ASM"
515        MESA_ASM_SOURCES='$(SPARC_SOURCES)'
516        GLAPI_ASM_SOURCES='$(SPARC_API)'
517        AC_MSG_RESULT([yes, sparc])
518        ;;
519    *)
520        AC_MSG_RESULT([no, platform not supported])
521        ;;
522    esac
523fi
524AC_SUBST([ASM_FLAGS])
525AC_SUBST([MESA_ASM_SOURCES])
526AC_SUBST([GLAPI_ASM_SOURCES])
527
528dnl PIC code macro
529MESA_PIC_FLAGS
530
531dnl Check to see if dlopen is in default libraries (like Solaris, which
532dnl has it in libc), or if libdl is needed to get it.
533AC_CHECK_FUNC([dlopen], [],
534    [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
535AC_SUBST([DLOPEN_LIBS])
536
537dnl See if posix_memalign is available
538AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
539
540dnl SELinux awareness.
541AC_ARG_ENABLE([selinux],
542    [AS_HELP_STRING([--enable-selinux],
543        [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
544    [MESA_SELINUX="$enableval"],
545    [MESA_SELINUX=no])
546if test "x$enable_selinux" = "xyes"; then
547    AC_CHECK_HEADER([selinux/selinux.h],[],
548                    [AC_MSG_ERROR([SELinux headers not found])])
549    AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
550                 [AC_MSG_ERROR([SELinux library not found])])
551    SELINUX_LIBS="-lselinux"
552    DEFINES="$DEFINES -DMESA_SELINUX"
553fi
554
555dnl Options for APIs
556AC_ARG_ENABLE([opengl],
557    [AS_HELP_STRING([--disable-opengl],
558        [disable support for standard OpenGL API @<:@default=no@:>@])],
559    [enable_opengl="$enableval"],
560    [enable_opengl=yes])
561AC_ARG_ENABLE([gles1],
562    [AS_HELP_STRING([--enable-gles1],
563        [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
564    [enable_gles1="$enableval"],
565    [enable_gles1=no])
566AC_ARG_ENABLE([gles2],
567    [AS_HELP_STRING([--enable-gles2],
568        [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
569    [enable_gles2="$enableval"],
570    [enable_gles2=no])
571AC_ARG_ENABLE([openvg],
572    [AS_HELP_STRING([--enable-openvg],
573        [enable support for OpenVG API @<:@default=no@:>@])],
574    [enable_openvg="$enableval"],
575    [enable_openvg=no])
576
577AC_ARG_ENABLE([dri],
578    [AS_HELP_STRING([--enable-dri],
579        [enable DRI modules @<:@default=auto@:>@])],
580    [enable_dri="$enableval"],
581    [enable_dri=auto])
582AC_ARG_ENABLE([glx],
583    [AS_HELP_STRING([--enable-glx],
584        [enable GLX library @<:@default=auto@:>@])],
585    [enable_glx="$enableval"],
586    [enable_glx=auto])
587AC_ARG_ENABLE([osmesa],
588    [AS_HELP_STRING([--enable-osmesa],
589        [enable OSMesa library @<:@default=auto@:>@])],
590    [enable_osmesa="$enableval"],
591    [enable_osmesa=auto])
592AC_ARG_ENABLE([egl],
593    [AS_HELP_STRING([--disable-egl],
594        [disable EGL library @<:@default=enabled@:>@])],
595    [enable_egl="$enableval"],
596    [enable_egl=yes])
597
598AC_ARG_ENABLE([xorg],
599    [AS_HELP_STRING([--enable-xorg],
600        [enable support for X.Org DDX API @<:@default=no@:>@])],
601    [enable_xorg="$enableval"],
602    [enable_xorg=no])
603AC_ARG_ENABLE([xa],
604    [AS_HELP_STRING([--enable-xa],
605        [enable build of the XA X Acceleration API @<:@default=no@:>@])],
606    [enable_xa="$enableval"],
607    [enable_xa=no])
608AC_ARG_ENABLE([d3d1x],
609    [AS_HELP_STRING([--enable-d3d1x],
610        [enable support for Direct3D 10 & 11 low-level API @<:@default=no@:>@])],
611    [enable_d3d1x="$enableval"],
612    [enable_d3d1x=no])
613AC_ARG_ENABLE([gbm],
614   [AS_HELP_STRING([--enable-gbm],
615         [enable gbm library @<:@default=auto@:>@])],
616   [enable_gbm="$enableval"],
617   [enable_gbm=auto])
618
619AC_ARG_ENABLE([xvmc],
620   [AS_HELP_STRING([--enable-xvmc],
621         [enable xvmc library @<:@default=auto@:>@])],
622   [enable_xvmc="$enableval"],
623   [enable_xvmc=auto])
624AC_ARG_ENABLE([vdpau],
625   [AS_HELP_STRING([--enable-vdpau],
626         [enable vdpau library @<:@default=auto@:>@])],
627   [enable_vdpau="$enableval"],
628   [enable_vdpau=auto])
629AC_ARG_ENABLE([va],
630   [AS_HELP_STRING([--enable-va],
631         [enable va library @<:@default=auto@:>@])],
632   [enable_va="$enableval"],
633   [enable_va=auto])
634
635AC_ARG_ENABLE([xlib_glx],
636    [AS_HELP_STRING([--enable-xlib-glx],
637        [make GLX library Xlib-based instead of DRI-based @<:@default=disable@:>@])],
638    [enable_xlib_glx="$enableval"],
639    [enable_xlib_glx=auto])
640AC_ARG_ENABLE([gallium_egl],
641    [AS_HELP_STRING([--enable-gallium-egl],
642        [enable optional EGL state tracker (not required
643         for EGL support in Gallium with OpenGL and OpenGL ES)
644         @<:@default=disable@:>@])],
645    [enable_gallium_egl="$enableval"],
646    [enable_gallium_egl=no])
647AC_ARG_ENABLE([gallium_gbm],
648    [AS_HELP_STRING([--enable-gallium-gbm],
649        [enable optional gbm state tracker (not required for
650         gbm support in Gallium)
651         @<:@default=auto@:>@])],
652    [enable_gallium_gbm="$enableval"],
653    [enable_gallium_gbm=auto])
654
655# Option for Gallium drivers
656GALLIUM_DRIVERS_DEFAULT="r300,r600,swrast"
657
658AC_ARG_WITH([gallium-drivers],
659    [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
660        [comma delimited Gallium drivers list, e.g.
661        "i915,i965,nouveau,r300,r600,svga,swrast"
662        @<:@default=r300,r600,swrast@:>@])],
663    [with_gallium_drivers="$withval"],
664    [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
665
666# Doing '--without-gallium-drivers' will set this variable to 'no'.  Clear it
667# here so that the script doesn't choke on an unknown driver name later.
668case "$with_gallium_drivers" in
669    yes) with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT" ;;
670    no) with_gallium_drivers='' ;;
671esac
672
673if test "x$enable_opengl" = xno -a \
674        "x$enable_gles1" = xno -a \
675        "x$enable_gles2" = xno -a \
676        "x$enable_openvg" = xno -a \
677        "x$enable_xorg" = xno -a \
678        "x$enable_xa" = xno -a \
679        "x$enable_d3d1x" = xno -a \
680        "x$enable_xvmc" = xno -a \
681        "x$enable_vdpau" = xno -a \
682        "x$enable_va" = xno; then
683    AC_MSG_ERROR([at least one API should be enabled])
684fi
685
686API_DEFINES=""
687if test "x$enable_opengl" = xno; then
688    API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
689else
690    API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
691fi
692if test "x$enable_gles1" = xyes; then
693    API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
694fi
695if test "x$enable_gles2" = xyes; then
696    API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
697fi
698AC_SUBST([API_DEFINES])
699
700AC_ARG_ENABLE([shared-glapi],
701    [AS_HELP_STRING([--enable-shared-glapi],
702        [EXPERIMENTAL.  Enable shared glapi for OpenGL @<:@default=no@:>@])],
703    [enable_shared_glapi="$enableval"],
704    [enable_shared_glapi=no])
705
706SHARED_GLAPI="0"
707if test "x$enable_shared_glapi" = xyes; then
708    SHARED_GLAPI="1"
709fi
710AC_SUBST([SHARED_GLAPI])
711
712dnl
713dnl Driver configuration. Options are xlib, dri and osmesa right now.
714dnl More later: fbdev, ...
715dnl
716default_driver="xlib"
717
718case "$host_os" in
719linux*)
720    case "$host_cpu" in
721    i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
722    esac
723    ;;
724*freebsd* | dragonfly* | *netbsd*)
725    case "$host_cpu" in
726    i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
727    esac
728    ;;
729esac
730
731if test "x$enable_opengl" = xno; then
732    default_driver="no"
733fi
734
735AC_ARG_WITH([driver],
736    [AS_HELP_STRING([--with-driver=DRIVER], [DEPRECATED])],
737    [mesa_driver="$withval"],
738    [mesa_driver=auto])
739dnl Check for valid option
740case "x$mesa_driver" in
741xxlib|xdri|xosmesa|xno)
742    if test "x$enable_dri" != xauto -o \
743            "x$enable_glx" != xauto -o \
744            "x$enable_osmesa" != xauto -o \
745            "x$enable_xlib_glx" != xauto; then
746        AC_MSG_ERROR([--with-driver=$mesa_driver is deprecated])
747    fi
748    ;;
749xauto)
750    mesa_driver="$default_driver"
751    ;;
752*)
753    AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
754    ;;
755esac
756
757# map $mesa_driver to APIs
758if test "x$enable_dri" = xauto; then
759    case "x$mesa_driver" in
760    xdri) enable_dri=yes ;;
761    *)    enable_dri=no ;;
762    esac
763fi
764
765if test "x$enable_glx" = xauto; then
766    case "x$mesa_driver" in
767    xdri|xxlib) enable_glx=yes ;;
768    *)          enable_glx=no ;;
769    esac
770fi
771
772if test "x$enable_osmesa" = xauto; then
773    case "x$mesa_driver" in
774    xxlib|xosmesa) enable_osmesa=yes ;;
775    *)             enable_osmesa=no ;;
776    esac
777fi
778
779if test "x$enable_xlib_glx" = xauto; then
780    case "x$mesa_driver" in
781    xxlib) enable_xlib_glx=yes ;;
782    *)     enable_xlib_glx=no ;;
783    esac
784fi
785
786if test "x$enable_glx" = xno; then
787    enable_xlib_glx=no
788fi
789
790dnl
791dnl Driver specific build directories
792dnl
793
794dnl this variable will be prepended to SRC_DIRS and is not exported
795CORE_DIRS=""
796
797SRC_DIRS=""
798GLU_DIRS="sgi"
799GALLIUM_DIRS="auxiliary drivers state_trackers"
800GALLIUM_TARGET_DIRS=""
801GALLIUM_WINSYS_DIRS="sw"
802GALLIUM_DRIVERS_DIRS="failover galahad trace rbug noop identity"
803GALLIUM_STATE_TRACKERS_DIRS=""
804
805# build shared-glapi if enabled for OpenGL or if OpenGL ES is enabled
806case "x$enable_shared_glapi$enable_gles1$enable_gles2" in
807x*yes*)
808    CORE_DIRS="$CORE_DIRS mapi/shared-glapi"
809    ;;
810esac
811
812# build glapi if OpenGL is enabled
813if test "x$enable_opengl" = xyes; then
814    CORE_DIRS="$CORE_DIRS mapi/glapi"
815fi
816
817# build es1api if OpenGL ES 1.x is enabled
818if test "x$enable_gles1" = xyes; then
819    CORE_DIRS="$CORE_DIRS mapi/es1api"
820fi
821
822# build es2api if OpenGL ES 2.x is enabled
823if test "x$enable_gles2" = xyes; then
824    CORE_DIRS="$CORE_DIRS mapi/es2api"
825fi
826
827# build glsl and mesa if OpenGL or OpenGL ES is enabled
828case "x$enable_opengl$enable_gles1$enable_gles2" in
829x*yes*)
830    CORE_DIRS="$CORE_DIRS glsl mesa"
831    ;;
832esac
833
834case "x$enable_glx$enable_xlib_glx" in
835xyesyes)
836    DRIVER_DIRS="$DRIVER_DIRS x11"
837    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
838    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS libgl-xlib"
839    GALLIUM_STATE_TRACKERS_DIRS="glx $GALLIUM_STATE_TRACKERS_DIRS"
840    HAVE_WINSYS_XLIB="yes"
841    ;;
842xyesno)
843    # DRI-based GLX
844    SRC_DIRS="$SRC_DIRS glx"
845    ;;
846esac
847
848if test "x$enable_dri" = xyes; then
849    DRIVER_DIRS="$DRIVER_DIRS dri"
850
851    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/dri"
852    GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
853    HAVE_ST_DRI="yes"
854fi
855
856if test "x$enable_osmesa" = xyes; then
857    # the empty space matters for osmesa... (see src/mesa/Makefile)
858    if test -n "$DRIVER_DIRS"; then
859        DRIVER_DIRS="$DRIVER_DIRS osmesa"
860    else
861        DRIVER_DIRS="osmesa"
862    fi
863fi
864
865AC_SUBST([SRC_DIRS])
866AC_SUBST([GLU_DIRS])
867AC_SUBST([DRIVER_DIRS])
868AC_SUBST([GALLIUM_DIRS])
869AC_SUBST([GALLIUM_TARGET_DIRS])
870AC_SUBST([GALLIUM_WINSYS_DIRS])
871AC_SUBST([GALLIUM_DRIVERS_DIRS])
872AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
873AC_SUBST([MESA_LLVM])
874
875# Check for libdrm
876PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
877                  [have_libdrm=yes], [have_libdrm=no])
878
879if test "x$enable_dri" = xyes; then
880    # DRI must be shared, I think
881    if test "$enable_static" = yes; then
882        AC_MSG_ERROR([Can't use static libraries for DRI drivers])
883    fi
884
885    # not a hard requirement as swrast does not depend on it
886    if test "x$have_libdrm" = xyes; then
887        DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
888    fi
889fi
890
891dnl
892dnl Find out if X is available. The variable have_x is set if libX11 is
893dnl found to mimic AC_PATH_XTRA.
894dnl
895if test -n "$PKG_CONFIG"; then
896    AC_MSG_CHECKING([pkg-config files for X11 are available])
897    PKG_CHECK_EXISTS([x11],[
898        x11_pkgconfig=yes
899        have_x=yes
900        ],[
901        x11_pkgconfig=no
902    ])
903    AC_MSG_RESULT([$x11_pkgconfig])
904else
905    x11_pkgconfig=no
906fi
907dnl Use the autoconf macro if no pkg-config files
908if test "$x11_pkgconfig" = yes; then
909    PKG_CHECK_MODULES([X11], [x11])
910else
911    AC_PATH_XTRA
912    test -z "$X11_CFLAGS" && X11_CFLAGS="$X_CFLAGS"
913    test -z "$X11_LIBS" && X11_LIBS="$X_LIBS -lX11"
914    AC_SUBST([X11_CFLAGS])
915    AC_SUBST([X11_LIBS])
916fi
917
918dnl Try to tell the user that the --x-* options are only used when
919dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
920m4_divert_once([HELP_BEGIN],
921[These options are only used when the X libraries cannot be found by the
922pkg-config utility.])
923
924dnl We need X for xlib and dri, so bomb now if it's not found
925if test "x$enable_glx" = xyes -a "x$no_x" = xyes; then
926    AC_MSG_ERROR([X11 development libraries needed for GLX])
927fi
928
929dnl XCB - this is only used for GLX right now
930AC_ARG_ENABLE([xcb],
931    [AS_HELP_STRING([--enable-xcb],
932        [use XCB for GLX @<:@default=disabled@:>@])],
933    [enable_xcb="$enableval"],
934    [enable_xcb=no])
935if test "x$enable_xcb" = xyes; then
936    DEFINES="$DEFINES -DUSE_XCB"
937else
938    enable_xcb=no
939fi
940
941dnl Direct rendering or just indirect rendering
942case "$host_os" in
943gnu*)
944    dnl Disable by default on GNU/Hurd
945    driglx_direct_default="no"
946    ;;
947cygwin*)
948    dnl Disable by default on cygwin
949    driglx_direct_default="no"
950    ;;
951*)
952    driglx_direct_default="yes"
953    ;;
954esac
955AC_ARG_ENABLE([driglx-direct],
956    [AS_HELP_STRING([--disable-driglx-direct],
957        [enable direct rendering in GLX and EGL for DRI \
958            @<:@default=auto@:>@])],
959    [driglx_direct="$enableval"],
960    [driglx_direct="$driglx_direct_default"])
961
962dnl
963dnl libGL configuration per driver
964dnl
965case "x$enable_glx$enable_xlib_glx" in
966xyesyes)
967    # Xlib-based GLX
968    if test "$x11_pkgconfig" = yes; then
969        PKG_CHECK_MODULES([XLIBGL], [x11 xext])
970        GL_PC_REQ_PRIV="x11 xext"
971        X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
972        GL_LIB_DEPS="$XLIBGL_LIBS"
973    else
974        # should check these...
975        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
976        GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
977        GL_PC_LIB_PRIV="$GL_LIB_DEPS"
978        GL_PC_CFLAGS="$X11_INCLUDES"
979    fi
980    GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread $DLOPEN_LIBS"
981    GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm -lpthread"
982    ;;
983xyesno)
984    # DRI-based GLX
985    PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
986    GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED"
987    if test x"$driglx_direct" = xyes; then
988        if test "x$have_libdrm" != xyes; then
989            AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED])
990        fi
991        PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
992        GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED"
993    fi
994
995    # find the DRI deps for libGL
996    if test "$x11_pkgconfig" = yes; then
997        dri_modules="x11 xext xdamage xfixes"
998
999        # add xf86vidmode if available
1000        PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
1001        if test "$HAVE_XF86VIDMODE" = yes ; then
1002            dri_modules="$dri_modules xxf86vm"
1003        fi
1004
1005        # add xcb modules if necessary
1006        if test "$enable_xcb" = yes; then
1007            dri_modules="$dri_modules x11-xcb xcb-glx"
1008        fi
1009
1010        PKG_CHECK_MODULES([DRIGL], [$dri_modules])
1011        GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
1012        X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
1013        GL_LIB_DEPS="$DRIGL_LIBS"
1014    else
1015        # should check these...
1016        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
1017        if test "x$HAVE_XF86VIDMODE" == xyes; then
1018           GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
1019	else
1020           GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXdamage -lXfixes"
1021	fi
1022        GL_PC_LIB_PRIV="$GL_LIB_DEPS"
1023        GL_PC_CFLAGS="$X11_INCLUDES"
1024
1025        # XCB can only be used from pkg-config
1026        if test "$enable_xcb" = yes; then
1027            PKG_CHECK_MODULES([XCB],[x11-xcb xcb-glx])
1028            GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV x11-xcb xcb-glx"
1029            X11_INCLUDES="$X11_INCLUDES $XCB_CFLAGS"
1030            GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
1031        fi
1032    fi
1033
1034    # need DRM libs, -lpthread, etc.
1035    GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1036    GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1037    ;;
1038esac
1039
1040GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1041GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1042GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1043GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1044
1045AC_SUBST([GL_LIB_DEPS])
1046AC_SUBST([GL_PC_REQ_PRIV])
1047AC_SUBST([GL_PC_LIB_PRIV])
1048AC_SUBST([GL_PC_CFLAGS])
1049AC_SUBST([DRI_PC_REQ_PRIV])
1050AC_SUBST([GLESv1_CM_LIB_DEPS])
1051AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
1052AC_SUBST([GLESv2_LIB_DEPS])
1053AC_SUBST([GLESv2_PC_LIB_PRIV])
1054
1055GLAPI_LIB_DEPS="-lpthread"
1056AC_SUBST([GLAPI_LIB_DEPS])
1057
1058
1059dnl Setup default DRI CFLAGS
1060DRI_CFLAGS='$(CFLAGS)'
1061DRI_CXXFLAGS='$(CXXFLAGS)'
1062DRI_LIB_DEPS='$(TOP)/src/mesa/libmesa.a'
1063MESA_MODULES='$(TOP)/src/mesa/libmesa.a'
1064
1065AC_ARG_ENABLE([shared-dricore],
1066    [AS_HELP_STRING([--enable-shared-dricore],
1067        [link DRI modules with shared core DRI routines @<:@default=disabled@:>@])],
1068    [enable_dricore="$enableval"],
1069    [enable_dricore=no])
1070if test "x$enable_dri" = xyes ; then
1071   if test "$enable_dricore" = yes ; then
1072      if test "$GCC$GXX" != yesyes ; then
1073      	 AC_MSG_WARN([Shared dricore requires GCC-compatible rpath handling.  Disabling shared dricore])
1074	 enable_dricore=no
1075      else
1076	 DRICORE_GLSL_LIBS='$(TOP)/$(LIB_DIR)/libglsl.so'
1077	 DRICORE_LIBS='$(TOP)/$(LIB_DIR)/libdricore.so'
1078	 DRICORE_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -lglsl'
1079      	 DRI_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -ldricore -lglsl'
1080      	 DRI_CFLAGS='$(CFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1081      	 DRI_CXXFLAGS='$(CXXFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1082      	 MESA_MODULES='$(DRICORE_LIBS) $(DRICORE_GLSL_LIBS)'
1083      fi
1084   fi
1085fi
1086AC_SUBST([DRICORE_LIBS])
1087AC_SUBST([DRICORE_GLSL_LIBS])
1088AC_SUBST([DRICORE_LIB_DEPS])
1089AC_SUBST([DRI_CXXFLAGS])
1090AC_SUBST([DRI_CFLAGS])
1091AC_SUBST([MESA_MODULES])
1092
1093AC_SUBST([HAVE_XF86VIDMODE])
1094
1095dnl
1096dnl More GLX setup
1097dnl
1098case "x$enable_glx$enable_xlib_glx" in
1099xyesyes)
1100    DEFINES="$DEFINES -DUSE_XSHM"
1101    ;;
1102xyesno)
1103    DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1104    if test "x$driglx_direct" = xyes; then
1105        DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1106    fi
1107    ;;
1108esac
1109
1110dnl
1111dnl TLS detection
1112dnl
1113
1114AC_ARG_ENABLE([glx-tls],
1115    [AS_HELP_STRING([--enable-glx-tls],
1116        [enable TLS support in GLX @<:@default=disabled@:>@])],
1117    [GLX_USE_TLS="$enableval"],
1118    [GLX_USE_TLS=no])
1119AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1120
1121AS_IF([test "x$GLX_USE_TLS" = xyes],
1122      [DEFINES="${DEFINES} -DGLX_USE_TLS -DPTHREADS"])
1123
1124dnl
1125dnl More DRI setup
1126dnl
1127dnl Directory for DRI drivers
1128AC_ARG_WITH([dri-driverdir],
1129    [AS_HELP_STRING([--with-dri-driverdir=DIR],
1130        [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
1131    [DRI_DRIVER_INSTALL_DIR="$withval"],
1132    [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
1133AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1134dnl Extra search path for DRI drivers
1135AC_ARG_WITH([dri-searchpath],
1136    [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
1137        [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
1138    [DRI_DRIVER_SEARCH_DIR="$withval"],
1139    [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
1140AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1141dnl Which drivers to build - default is chosen by platform
1142AC_ARG_WITH([dri-drivers],
1143    [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
1144        [comma delimited DRI drivers list, e.g.
1145        "swrast,i965,radeon" @<:@default=auto@:>@])],
1146    [with_dri_drivers="$withval"],
1147    [with_dri_drivers=yes])
1148if test "x$with_dri_drivers" = x; then
1149    with_dri_drivers=no
1150fi
1151
1152dnl If $with_dri_drivers is yes, directories will be added through
1153dnl platform checks
1154DRI_DIRS=""
1155case "$with_dri_drivers" in
1156no) ;;
1157yes)
1158    # classic DRI drivers require FEATURE_GL to build
1159    if test "x$enable_opengl" = xyes; then
1160        DRI_DIRS="yes"
1161    fi
1162    ;;
1163*)
1164    # verify the requested driver directories exist
1165    dri_drivers=`IFS=', '; echo $with_dri_drivers`
1166    for driver in $dri_drivers; do
1167        test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
1168            AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
1169    done
1170    DRI_DIRS="$dri_drivers"
1171    if test -n "$DRI_DIRS" -a "x$enable_opengl" != xyes; then
1172        AC_MSG_ERROR([--with-dri-drivers requires OpenGL])
1173    fi
1174    ;;
1175esac
1176
1177dnl Set DRI_DIRS, DEFINES and LIB_DEPS
1178if test "x$enable_dri" = xyes; then
1179    # Platform specific settings and drivers to build
1180    case "$host_os" in
1181    linux*)
1182        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1183        DEFINES="$DEFINES -DHAVE_ALIAS"
1184
1185        case "$host_cpu" in
1186        x86_64)
1187            if test "x$DRI_DIRS" = "xyes"; then
1188                DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1189            fi
1190            ;;
1191        powerpc*)
1192            # Build only the drivers for cards that exist on PowerPC.
1193            if test "x$DRI_DIRS" = "xyes"; then
1194                DRI_DIRS="r200 radeon swrast"
1195            fi
1196            ;;
1197        sparc*)
1198            # Build only the drivers for cards that exist on sparc
1199            if test "x$DRI_DIRS" = "xyes"; then
1200                DRI_DIRS="r200 radeon swrast"
1201            fi
1202            ;;
1203        esac
1204        ;;
1205    freebsd* | dragonfly* | *netbsd*)
1206        DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
1207        DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
1208
1209        if test "x$DRI_DIRS" = "xyes"; then
1210            DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1211        fi
1212        ;;
1213    gnu*)
1214        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1215        DEFINES="$DEFINES -DHAVE_ALIAS"
1216	;;
1217    solaris*)
1218        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1219        ;;
1220    cygwin*)
1221        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1222        if test "x$DRI_DIRS" = "xyes"; then
1223            DRI_DIRS="swrast"
1224        fi
1225        ;;
1226    esac
1227
1228    # default drivers
1229    if test "x$DRI_DIRS" = "xyes"; then
1230        DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1231    fi
1232
1233    DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
1234
1235    # Check for expat
1236    if test "x$enable_dri" = xyes; then
1237        EXPAT_INCLUDES=""
1238        EXPAT_LIB=-lexpat
1239        AC_ARG_WITH([expat],
1240            [AS_HELP_STRING([--with-expat=DIR],
1241                [expat install directory])],[
1242            EXPAT_INCLUDES="-I$withval/include"
1243            CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
1244            LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
1245            EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
1246            ])
1247        AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
1248        AC_CHECK_LIB([expat],[XML_ParserCreate],[],
1249            [AC_MSG_ERROR([Expat required for DRI.])])
1250    fi
1251
1252    # libdrm is required for all except swrast
1253    if test -n "$DRI_DIRS" -a x"$DRI_DIRS" != xswrast; then
1254        if test "x$have_libdrm" != xyes; then
1255            AC_MSG_ERROR([DRI drivers requires libdrm >= $LIBDRM_REQUIRED])
1256        fi
1257    fi
1258
1259    # put all the necessary libs together, including possibly libdricore
1260    DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
1261fi
1262AC_SUBST([DRI_DIRS])
1263AC_SUBST([EXPAT_INCLUDES])
1264AC_SUBST([DRI_LIB_DEPS])
1265
1266case $DRI_DIRS in
1267*i915*|*i965*)
1268    PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1269    ;;
1270esac
1271
1272case $DRI_DIRS in
1273*nouveau*)
1274    PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1275    ;;
1276esac
1277
1278case $DRI_DIRS in
1279*radeon*|*r200*)
1280    PKG_CHECK_MODULES([LIBDRM_RADEON],
1281		      [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED],
1282		      HAVE_LIBDRM_RADEON=yes,
1283		      HAVE_LIBDRM_RADEON=no)
1284
1285    if test "x$HAVE_LIBDRM_RADEON" = xyes; then
1286	RADEON_CFLAGS="-DHAVE_LIBDRM_RADEON=1 $LIBDRM_RADEON_CFLAGS"
1287	RADEON_LDFLAGS=$LIBDRM_RADEON_LIBS
1288    fi
1289    ;;
1290esac
1291AC_SUBST([RADEON_CFLAGS])
1292AC_SUBST([RADEON_LDFLAGS])
1293
1294
1295dnl
1296dnl OSMesa configuration
1297dnl
1298
1299dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1300AC_ARG_WITH([osmesa-bits],
1301    [AS_HELP_STRING([--with-osmesa-bits=BITS],
1302        [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1303    [osmesa_bits="$withval"],
1304    [osmesa_bits=8])
1305if test "x$osmesa_bits" != x8; then
1306    if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then
1307        AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1308        osmesa_bits=8
1309    fi
1310fi
1311case "x$osmesa_bits" in
1312x8)
1313    OSMESA_LIB="${OSMESA_LIB}"
1314    ;;
1315x16|x32)
1316    OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
1317    DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1318    ;;
1319*)
1320    AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1321    ;;
1322esac
1323
1324if test "x$enable_osmesa" = xyes; then
1325    # only link libraries with osmesa if shared
1326    if test "$enable_static" = no; then
1327        OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1328    else
1329        OSMESA_LIB_DEPS=""
1330    fi
1331    OSMESA_MESA_DEPS=""
1332    OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1333fi
1334AC_SUBST([OSMESA_LIB_DEPS])
1335AC_SUBST([OSMESA_MESA_DEPS])
1336AC_SUBST([OSMESA_PC_REQ])
1337AC_SUBST([OSMESA_PC_LIB_PRIV])
1338
1339dnl
1340dnl gbm configuration
1341dnl
1342if test "x$enable_gbm" = xauto; then
1343    case "$with_egl_platforms" in
1344        *drm*)
1345            enable_gbm=yes ;;
1346         *)
1347            enable_gbm=no ;;
1348    esac
1349fi
1350if test "x$enable_gbm" = xyes; then
1351    SRC_DIRS="$SRC_DIRS gbm"
1352    GBM_BACKEND_DIRS=""
1353
1354    PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
1355                      AC_MSG_ERROR([gbm needs udev]))
1356    GBM_LIB_DEPS="$DLOPEN_LIBS $LIBUDEV_LIBS"
1357
1358    if test "x$enable_dri" = xyes; then
1359        GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
1360        if test "$SHARED_GLAPI" -eq 0; then
1361            AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
1362        fi
1363    fi
1364fi
1365AC_SUBST([GBM_LIB_DEPS])
1366AC_SUBST([GBM_BACKEND_DIRS])
1367GBM_PC_REQ_PRIV="libudev"
1368GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1369GBM_PC_CFLAGS=
1370AC_SUBST([GBM_PC_REQ_PRIV])
1371AC_SUBST([GBM_PC_LIB_PRIV])
1372AC_SUBST([GBM_PC_CFLAGS])
1373
1374dnl
1375dnl EGL configuration
1376dnl
1377EGL_CLIENT_APIS=""
1378
1379if test "x$enable_egl" = xyes; then
1380    SRC_DIRS="$SRC_DIRS egl"
1381    EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread"
1382    EGL_DRIVERS_DIRS=""
1383
1384    AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
1385
1386    if test "$enable_static" != yes; then
1387        # build egl_glx when libGL is built
1388        if test "x$enable_glx" = xyes; then
1389            EGL_DRIVERS_DIRS="glx"
1390        fi
1391
1392        PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
1393                          [have_libudev=yes],[have_libudev=no])
1394        if test "$have_libudev" = yes; then
1395            DEFINES="$DEFINES -DHAVE_LIBUDEV"
1396        fi
1397        if test "x$enable_dri" = xyes; then
1398            # build egl_dri2 when xcb-dri2 is available
1399            PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes],
1400            		  [have_xcb_dri2=yes],[have_xcb_dri2=no])
1401            
1402            if test "$have_xcb_dri2" = yes; then
1403                EGL_DRIVER_DRI2=dri2
1404                DEFINES="$DEFINES -DHAVE_XCB_DRI2"
1405                # workaround a bug in xcb-dri2 generated by xcb-proto 1.6
1406                AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
1407                          [DEFINES="$DEFINES -DXCB_DRI2_CONNECT_DEVICE_NAME_BROKEN"])
1408            fi
1409	fi
1410
1411        EGL_DRIVERS_DIRS="$EGL_DRIVERS_DIRS $EGL_DRIVER_DRI2"
1412    fi
1413fi
1414AC_SUBST([EGL_LIB_DEPS])
1415AC_SUBST([EGL_DRIVERS_DIRS])
1416
1417dnl
1418dnl EGL Gallium configuration
1419dnl
1420if test "x$enable_gallium_egl" = xyes; then
1421    if test "x$with_gallium_drivers" = x; then
1422        AC_MSG_ERROR([cannot enable egl_gallium without Gallium])
1423    fi
1424    if test "x$enable_egl" = xno; then
1425        AC_MSG_ERROR([cannot enable egl_gallium without EGL])
1426    fi
1427    if test "x$have_libdrm" != xyes; then
1428        AC_MSG_ERROR([egl_gallium requires libdrm >= $LIBDRM_REQUIRED])
1429    fi
1430
1431    GALLIUM_STATE_TRACKERS_DIRS="egl $GALLIUM_STATE_TRACKERS_DIRS"
1432    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS egl-static"
1433    HAVE_ST_EGL="yes"
1434fi
1435
1436dnl
1437dnl gbm Gallium configuration
1438dnl
1439if test "x$enable_gallium_gbm" = xauto; then
1440    case "$enable_gbm$HAVE_ST_EGL$with_egl_platforms" in
1441        yesyes*drm*)
1442            enable_gallium_gbm=yes ;;
1443         *)
1444            enable_gallium_gbm=no ;;
1445    esac
1446fi
1447if test "x$enable_gallium_gbm" = xyes; then
1448    if test "x$with_gallium_drivers" = x; then
1449        AC_MSG_ERROR([cannot enable gbm_gallium without Gallium])
1450    fi
1451    if test "x$enable_gbm" = xno; then
1452        AC_MSG_ERROR([cannot enable gbm_gallium without gbm])
1453    fi
1454
1455    GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
1456    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
1457    HAVE_ST_GBM="yes"
1458fi
1459
1460dnl
1461dnl X.Org DDX configuration
1462dnl
1463if test "x$enable_xorg" = xyes; then
1464    PKG_CHECK_MODULES([XORG], [xorg-server >= 1.6.0])
1465    PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED])
1466    PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
1467    PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1468        HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1469        HAVE_XEXTPROTO_71="no")
1470    GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
1471    HAVE_ST_XORG=yes
1472fi
1473
1474dnl
1475dnl XA configuration
1476dnl
1477if test "x$enable_xa" = xyes; then
1478    GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
1479    HAVE_ST_XA=yes
1480fi
1481
1482dnl
1483dnl OpenVG configuration
1484dnl
1485VG_LIB_DEPS=""
1486
1487if test "x$enable_openvg" = xyes; then
1488    if test "x$enable_egl" = xno; then
1489        AC_MSG_ERROR([cannot enable OpenVG without EGL])
1490    fi
1491    if test "x$with_gallium_drivers" = x; then
1492        AC_MSG_ERROR([cannot enable OpenVG without Gallium])
1493    fi
1494    if test "x$enable_gallium_egl" = xno; then
1495        AC_MSG_ERROR([cannot enable OpenVG without egl_gallium])
1496    fi
1497
1498    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
1499    VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
1500    CORE_DIRS="$CORE_DIRS mapi/vgapi"
1501    GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
1502    HAVE_ST_VEGA=yes
1503fi
1504
1505dnl
1506dnl D3D1X configuration
1507dnl
1508
1509if test "x$enable_d3d1x" = xyes; then
1510    if test "x$with_gallium_drivers" = x; then
1511        AC_MSG_ERROR([cannot enable D3D1X without Gallium])
1512    fi
1513
1514    GALLIUM_STATE_TRACKERS_DIRS="d3d1x $GALLIUM_STATE_TRACKERS_DIRS"
1515    HAVE_ST_D3D1X=yes
1516fi
1517
1518dnl
1519dnl Gallium G3DVL configuration
1520dnl
1521AC_ARG_ENABLE([gallium-g3dvl],
1522    [AS_HELP_STRING([--enable-gallium-g3dvl],
1523        [build gallium g3dvl @<:@default=disabled@:>@])],
1524    [enable_gallium_g3dvl="$enableval"],
1525    [enable_gallium_g3dvl=no])
1526if test "x$enable_gallium_g3dvl" = xyes; then
1527    if test "x$with_gallium_drivers" = x; then
1528        AC_MSG_ERROR([cannot enable G3DVL without Gallium])
1529    fi
1530
1531    if test "x$enable_xvmc" = xauto; then
1532	PKG_CHECK_EXISTS([xvmc], [enable_xvmc=yes], [enable_xvmc=no])
1533    fi
1534
1535    if test "x$enable_vdpau" = xauto; then
1536	PKG_CHECK_EXISTS([vdpau], [enable_vdpau=yes], [enable_vdpau=no])
1537    fi
1538
1539    if test "x$enable_va" = xauto; then
1540	#don't enable vaapi state tracker even if package exists
1541	#PKG_CHECK_EXISTS([libva], [enable_vdpau=yes], [enable_vdpau=no])
1542        enable_va=no
1543    fi
1544fi
1545
1546if test "x$enable_xvmc" = xyes; then
1547    PKG_CHECK_MODULES([XVMC], [xvmc >= 1.0.6 xorg-server])
1548    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg/xvmc"
1549    HAVE_ST_XVMC="yes"
1550fi
1551
1552if test "x$enable_vdpau" = xyes; then
1553    PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.4.1])
1554    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vdpau"
1555    HAVE_ST_VDPAU="yes"
1556fi
1557
1558if test "x$enable_va" = xyes; then
1559    PKG_CHECK_MODULES([LIBVA], [libva = 0.31.1])
1560    AC_MSG_WARN([vaapi state tracker currently unmaintained])
1561    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS va"
1562    HAVE_ST_VA="yes"
1563fi
1564
1565dnl
1566dnl GLU configuration
1567dnl
1568AC_ARG_ENABLE([glu],
1569    [AS_HELP_STRING([--disable-glu],
1570        [enable OpenGL Utility library @<:@default=enabled@:>@])],
1571    [enable_glu="$enableval"],
1572    [enable_glu=yes])
1573
1574if test "x$enable_glu" = xyes; then
1575    if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
1576        AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
1577        enable_glu=no
1578    fi
1579fi
1580
1581if test "x$enable_glu" = xyes; then
1582    SRC_DIRS="$SRC_DIRS glu"
1583
1584    if test "x$enable_glx" = xno; then
1585        # Link libGLU to libOSMesa instead of libGL
1586        GLU_LIB_DEPS=""
1587        GLU_PC_REQ="osmesa"
1588        if test "$enable_static" = no; then
1589            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
1590        else
1591            GLU_MESA_DEPS=""
1592        fi
1593    else
1594        # If static, empty GLU_LIB_DEPS and add libs for programs to link
1595        GLU_PC_REQ="gl"
1596        GLU_PC_LIB_PRIV="-lm"
1597        if test "$enable_static" = no; then
1598            GLU_LIB_DEPS="-lm"
1599            GLU_MESA_DEPS='-l$(GL_LIB)'
1600        else
1601            GLU_LIB_DEPS=""
1602            GLU_MESA_DEPS=""
1603        fi
1604    fi
1605fi
1606if test "$enable_static" = no; then
1607    GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
1608fi
1609GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
1610AC_SUBST([GLU_LIB_DEPS])
1611AC_SUBST([GLU_MESA_DEPS])
1612AC_SUBST([GLU_PC_REQ])
1613AC_SUBST([GLU_PC_REQ_PRIV])
1614AC_SUBST([GLU_PC_LIB_PRIV])
1615AC_SUBST([GLU_PC_CFLAGS])
1616
1617AC_SUBST([PROGRAM_DIRS])
1618
1619dnl
1620dnl Gallium configuration
1621dnl
1622if test "x$with_gallium_drivers" != x; then
1623    SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
1624fi
1625
1626AC_SUBST([LLVM_CFLAGS])
1627AC_SUBST([LLVM_LIBS])
1628AC_SUBST([LLVM_LDFLAGS])
1629AC_SUBST([LLVM_VERSION])
1630
1631case "x$enable_opengl$enable_gles1$enable_gles2" in
1632x*yes*)
1633    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1634    ;;
1635esac
1636
1637AC_SUBST([VG_LIB_DEPS])
1638AC_SUBST([EGL_CLIENT_APIS])
1639
1640AC_ARG_WITH([egl-platforms],
1641    [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1642        [comma delimited native platforms libEGL supports, e.g.
1643        "x11,drm" @<:@default=auto@:>@])],
1644    [with_egl_platforms="$withval"],
1645    [with_egl_platforms=yes])
1646
1647EGL_PLATFORMS=""
1648WAYLAND_EGL_LIB_DEPS=""
1649
1650case "$with_egl_platforms" in
1651yes)
1652    if test "x$enable_egl" = xyes; then
1653        EGL_PLATFORMS="x11"
1654    fi
1655    ;;
1656*)
1657    if test "x$enable_egl" != xyes; then
1658        AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1659    fi
1660    # verify the requested driver directories exist
1661    egl_platforms=`IFS=', '; echo $with_egl_platforms`
1662    for plat in $egl_platforms; do
1663        test -d "$srcdir/src/gallium/state_trackers/egl/$plat" || \
1664            AC_MSG_ERROR([EGL platform '$plat' doesn't exist])
1665        if test "$plat" = "fbdev"; then
1666                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/fbdev"
1667        fi
1668        if test "$plat" = "null"; then
1669                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
1670        fi
1671	if test "$plat" = "wayland"; then
1672		PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
1673				  [AC_MSG_ERROR([cannot find libwayland-client])])
1674		WAYLAND_EGL_LIB_DEPS="$WAYLAND_LIBS $LIBDRM_LIBS"
1675                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
1676	fi
1677        if test "$plat" = "drm" && test "x$enable_gbm" = "xno"; then
1678                AC_MSG_ERROR([EGL platform drm needs gbm])
1679        fi
1680        case "$plat$have_libudev" in
1681                waylandno|drmno)
1682                    AC_MSG_ERROR([cannot build $plat platfrom without udev]) ;;
1683        esac
1684    done
1685    EGL_PLATFORMS="$egl_platforms"
1686    ;;
1687esac
1688AC_SUBST([EGL_PLATFORMS])
1689
1690AC_SUBST([WAYLAND_EGL_LIB_DEPS])
1691WAYLAND_EGL_PC_REQ_PRIV="wayland-client libdrm"
1692WAYLAND_EGL_PC_LIB_PRIV=
1693WAYLAND_EGL_PC_CFLAGS=
1694
1695AC_SUBST([WAYLAND_EGL_PC_REQ_PRIV])
1696AC_SUBST([WAYLAND_EGL_PC_LIB_PRIV])
1697AC_SUBST([WAYLAND_EGL_PC_CFLAGS])
1698
1699
1700AC_ARG_WITH([egl-driver-dir],
1701    [AS_HELP_STRING([--with-egl-driver-dir=DIR],
1702                    [directory for EGL drivers [[default=${libdir}/egl]]])],
1703    [EGL_DRIVER_INSTALL_DIR="$withval"],
1704    [EGL_DRIVER_INSTALL_DIR='${libdir}/egl'])
1705AC_SUBST([EGL_DRIVER_INSTALL_DIR])
1706
1707AC_ARG_WITH([xorg-driver-dir],
1708    [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1709                    [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1710    [XORG_DRIVER_INSTALL_DIR="$withval"],
1711    [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1712AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1713
1714AC_ARG_WITH([max-width],
1715    [AS_HELP_STRING([--with-max-width=N],
1716                    [Maximum framebuffer width (4096)])],
1717    [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1718     AS_IF([test "${withval}" -gt "4096"],
1719           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1720)
1721AC_ARG_WITH([max-height],
1722    [AS_HELP_STRING([--with-max-height=N],
1723                    [Maximum framebuffer height (4096)])],
1724    [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1725     AS_IF([test "${withval}" -gt "4096"],
1726           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1727)
1728
1729dnl
1730dnl Gallium LLVM
1731dnl
1732AC_ARG_ENABLE([gallium-llvm],
1733    [AS_HELP_STRING([--enable-gallium-llvm],
1734        [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1735    [enable_gallium_llvm="$enableval"],
1736    [enable_gallium_llvm=auto])
1737if test "x$with_gallium_drivers" = x; then
1738    enable_gallium_llvm=no
1739fi
1740if test "x$enable_gallium_llvm" = xauto; then
1741    case "$host_cpu" in
1742    i*86|x86_64) enable_gallium_llvm=yes;;
1743    esac
1744fi
1745if test "x$enable_gallium_llvm" = xyes; then
1746    AC_PATH_PROG([LLVM_CONFIG], [llvm-config], [no])
1747
1748    if test "x$LLVM_CONFIG" != xno; then
1749	LLVM_VERSION=`$LLVM_CONFIG --version`
1750	LLVM_CFLAGS=`$LLVM_CONFIG --cppflags|sed 's/-DNDEBUG\>//g'`
1751	LLVM_LIBS="`$LLVM_CONFIG --libs`"
1752
1753	LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1754	DEFINES="$DEFINES -D__STDC_CONSTANT_MACROS"
1755	MESA_LLVM=1
1756    else
1757	MESA_LLVM=0
1758    fi
1759else
1760    MESA_LLVM=0
1761fi
1762
1763dnl Directory for VDPAU libs
1764AC_ARG_WITH([vdpau-libdir],
1765    [AS_HELP_STRING([--with-vdpau-libdir=DIR],
1766        [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
1767    [VDPAU_LIB_INSTALL_DIR="$withval"],
1768    [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
1769AC_SUBST([VDPAU_LIB_INSTALL_DIR])
1770
1771dnl Directory for VA libs
1772AC_ARG_WITH([va-libdir],
1773    [AS_HELP_STRING([--with-va-libdir=DIR],
1774        [directory for the VA libraries @<:@default=${libdir}/va@:>@])],
1775    [VA_LIB_INSTALL_DIR="$withval"],
1776    [VA_LIB_INSTALL_DIR='${libdir}/va'])
1777AC_SUBST([VA_LIB_INSTALL_DIR])
1778
1779dnl
1780dnl Gallium helper functions
1781dnl
1782gallium_check_st() {
1783    if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = xyes ||
1784	 test "x$HAVE_ST_XA" = xyes || test "x$HAVE_ST_XVMC" = xyes ||
1785	 test "x$HAVE_ST_VDPAU" = xyes || test "x$HAVE_ST_VA" = xyes; then
1786         if test "x$have_libdrm" != xyes; then
1787            AC_MSG_ERROR([DRI or Xorg DDX requires libdrm >= $LIBDRM_REQUIRED])
1788         fi
1789         GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS $1"
1790    fi
1791    if test "x$HAVE_ST_DRI" = xyes && test "x$2" != x; then
1792         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $2"
1793    fi
1794    if test "x$HAVE_ST_XORG" = xyes && test "x$3" != x; then
1795         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $3"
1796    fi
1797    if test "x$HAVE_ST_XA" = xyes && test "x$4" != x; then
1798         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $4"
1799    fi
1800    if test "x$HAVE_ST_XVMC" = xyes && test "x$5" != x; then
1801         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $5"
1802         NEED_G3DVL_DRI="yes"
1803    fi
1804    if test "x$HAVE_ST_VDPAU" = xyes && test "x$6" != x; then
1805         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $6"
1806         NEED_G3DVL_DRI="yes"
1807    fi
1808    if test "x$HAVE_ST_VA" = xyes && test "x$7" != x; then
1809         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $7"
1810         NEED_G3DVL_DRI="yes"
1811    fi
1812}
1813
1814gallium_require_llvm() {
1815    if test "x$MESA_LLVM" = x0; then
1816        case "$host_cpu" in
1817        i*86|x86_64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
1818        esac
1819    fi
1820}
1821
1822dnl Gallium drivers
1823dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
1824if test "x$with_gallium_drivers" != x; then
1825    gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
1826    for driver in $gallium_drivers; do
1827        case "x$driver" in
1828        xsvga)
1829            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
1830            gallium_check_st "svga/drm" "dri-vmwgfx" "" "xa-vmwgfx"
1831            ;;
1832        xi915)
1833            PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1834            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 softpipe"
1835            if test "x$MESA_LLVM" = x1; then
1836                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1837            fi
1838            GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
1839            gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
1840            ;;
1841        xi965)
1842            PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1843            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i965 softpipe"
1844            if test "x$MESA_LLVM" = x1; then
1845                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1846            fi
1847            gallium_check_st "i965/drm" "dri-i965" "xorg-i965"
1848            ;;
1849        xr300)
1850            gallium_require_llvm "Gallium R300"
1851            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
1852            gallium_check_st "radeon/drm" "dri-r300" "xorg-r300" "" "xvmc-r300" "vdpau-r300" "va-r300"
1853            ;;
1854        xr600)
1855            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
1856            gallium_check_st "radeon/drm" "dri-r600" "xorg-r600" "" "xvmc-r600" "vdpau-r600" "va-r600"
1857            ;;
1858        xnouveau)
1859            PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1860            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nvfx nv50 nvc0"
1861            gallium_check_st "nouveau/drm" "dri-nouveau" "xorg-nouveau" "" "xvmc-nouveau" "vdpau-nouveau"
1862            ;;
1863        xswrast)
1864            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS softpipe"
1865            if test "x$MESA_LLVM" = x1; then
1866                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1867            fi
1868
1869            if test "x$HAVE_ST_DRI" = xyes; then
1870                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
1871            fi
1872            if test "x$HAVE_ST_VDPAU" = xyes; then
1873                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS vdpau-softpipe"
1874            fi
1875            if test "x$HAVE_ST_XVMC" = xyes; then
1876                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS xvmc-softpipe"
1877            fi
1878            if test "x$HAVE_ST_VA" = xyes; then
1879                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS va-softpipe"
1880            fi
1881            if test "x$HAVE_ST_VDPAU" = xyes ||
1882               test "x$HAVE_ST_XVMC" = xyes ||
1883               test "x$HAVE_ST_VA" = xyes; then
1884               if test "x$HAVE_WINSYS_XLIB" != xyes; then
1885                  GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
1886               fi
1887            fi
1888            ;;
1889        *)
1890            AC_MSG_ERROR([Unknown Gallium driver: $driver])
1891            ;;
1892        esac
1893    done
1894fi
1895
1896if test "x$NEED_G3DVL_DRI" = xyes; then
1897    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS g3dvl/dri"
1898fi
1899
1900dnl prepend CORE_DIRS to SRC_DIRS
1901SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1902
1903dnl Restore LDFLAGS and CPPFLAGS
1904LDFLAGS="$_SAVE_LDFLAGS"
1905CPPFLAGS="$_SAVE_CPPFLAGS"
1906
1907dnl Add user CFLAGS and CXXFLAGS
1908CFLAGS="$CFLAGS $USER_CFLAGS"
1909CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
1910
1911dnl Substitute the config
1912AC_CONFIG_FILES([configs/autoconf])
1913
1914dnl Replace the configs/current symlink
1915AC_CONFIG_COMMANDS([configs],[
1916if test -f configs/current || test -L configs/current; then
1917    rm -f configs/current
1918fi
1919ln -s autoconf configs/current
1920])
1921
1922dnl Sort the dirs alphabetically
1923GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1924GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1925GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1926GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1927
1928AC_OUTPUT
1929
1930dnl
1931dnl Output some configuration info for the user
1932dnl
1933echo ""
1934echo "        prefix:          $prefix"
1935echo "        exec_prefix:     $exec_prefix"
1936echo "        libdir:          $libdir"
1937echo "        includedir:      $includedir"
1938
1939dnl API info
1940echo ""
1941echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
1942echo "        OpenVG:          $enable_openvg"
1943
1944dnl Driver info
1945echo ""
1946if test "x$enable_osmesa" != xno; then
1947        echo "        OSMesa:          lib$OSMESA_LIB"
1948else
1949        echo "        OSMesa:          no"
1950fi
1951
1952if test "x$enable_dri" != xno; then
1953        # cleanup the drivers var
1954        dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1955        if test "x$DRI_DIRS" = x; then
1956            echo "        DRI drivers:     no"
1957        else
1958            echo "        DRI drivers:     $dri_dirs"
1959        fi
1960        echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1961        echo "        Shared dricore:  $enable_dricore"
1962fi
1963
1964case "x$enable_glx$enable_xlib_glx" in
1965xyesyes)
1966    echo "        GLX:             Xlib-based"
1967    ;;
1968xyesno)
1969    echo "        GLX:             DRI-based"
1970    echo "        Use XCB:         $enable_xcb"
1971    ;;
1972*)
1973    echo "        GLX:             $enable_glx"
1974    ;;
1975esac
1976
1977echo ""
1978echo "        GLU:             $enable_glu"
1979
1980dnl EGL
1981echo ""
1982echo "        EGL:             $enable_egl"
1983if test "$enable_egl" = yes; then
1984    echo "        EGL platforms:   $EGL_PLATFORMS"
1985
1986    egl_drivers=""
1987    for d in $EGL_DRIVERS_DIRS; do
1988        egl_drivers="$egl_drivers builtin:egl_$d"
1989    done
1990
1991    if test "x$HAVE_ST_EGL" = xyes; then
1992        echo "        EGL drivers:    ${egl_drivers} egl_gallium"
1993        echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
1994    else
1995        echo "        EGL drivers:    $egl_drivers"
1996    fi
1997fi
1998
1999echo ""
2000if test "x$MESA_LLVM" = x1; then
2001    echo "        llvm:            yes"
2002    echo "        llvm-config:     $LLVM_CONFIG"
2003    echo "        llvm-version:    $LLVM_VERSION"
2004else
2005    echo "        llvm:            no"
2006fi
2007
2008echo ""
2009if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
2010    echo "        Gallium:         yes"
2011    echo "        Gallium dirs:    $GALLIUM_DIRS"
2012    echo "        Target dirs:     $GALLIUM_TARGET_DIRS"
2013    echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
2014    echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
2015    echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
2016else
2017    echo "        Gallium:         no"
2018fi
2019
2020dnl Libraries
2021echo ""
2022echo "        Shared libs:     $enable_shared"
2023echo "        Static libs:     $enable_static"
2024
2025dnl Compiler options
2026# cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2027cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2028    $SED 's/^ *//;s/  */ /;s/ *$//'`
2029cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2030    $SED 's/^ *//;s/  */ /;s/ *$//'`
2031defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
2032echo ""
2033echo "        CFLAGS:          $cflags"
2034echo "        CXXFLAGS:        $cxxflags"
2035echo "        Macros:          $defines"
2036echo ""
2037echo "        PYTHON2:         $PYTHON2"
2038
2039echo ""
2040echo "        Run '${MAKE-make}' to build Mesa"
2041echo ""
2042