configure.ac revision aa284042a3116224f623ce8ec1680997c6818827
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.27
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,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="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 $SELINUX_LIBS"
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([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1281    ;;
1282esac
1283
1284
1285dnl
1286dnl OSMesa configuration
1287dnl
1288
1289dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1290AC_ARG_WITH([osmesa-bits],
1291    [AS_HELP_STRING([--with-osmesa-bits=BITS],
1292        [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1293    [osmesa_bits="$withval"],
1294    [osmesa_bits=8])
1295if test "x$osmesa_bits" != x8; then
1296    if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then
1297        AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1298        osmesa_bits=8
1299    fi
1300fi
1301case "x$osmesa_bits" in
1302x8)
1303    OSMESA_LIB="${OSMESA_LIB}"
1304    ;;
1305x16|x32)
1306    OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
1307    DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1308    ;;
1309*)
1310    AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1311    ;;
1312esac
1313
1314if test "x$enable_osmesa" = xyes; then
1315    # only link libraries with osmesa if shared
1316    if test "$enable_static" = no; then
1317        OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1318    else
1319        OSMESA_LIB_DEPS=""
1320    fi
1321    OSMESA_MESA_DEPS=""
1322    OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1323fi
1324AC_SUBST([OSMESA_LIB_DEPS])
1325AC_SUBST([OSMESA_MESA_DEPS])
1326AC_SUBST([OSMESA_PC_REQ])
1327AC_SUBST([OSMESA_PC_LIB_PRIV])
1328
1329dnl
1330dnl gbm configuration
1331dnl
1332if test "x$enable_gbm" = xauto; then
1333    case "$with_egl_platforms" in
1334        *drm*)
1335            enable_gbm=yes ;;
1336         *)
1337            enable_gbm=no ;;
1338    esac
1339fi
1340if test "x$enable_gbm" = xyes; then
1341    SRC_DIRS="$SRC_DIRS gbm"
1342    GBM_BACKEND_DIRS=""
1343
1344    PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
1345                      AC_MSG_ERROR([gbm needs udev]))
1346    GBM_LIB_DEPS="$DLOPEN_LIBS $LIBUDEV_LIBS"
1347
1348    if test "x$enable_dri" = xyes; then
1349        GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
1350        if test "$SHARED_GLAPI" -eq 0; then
1351            AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
1352        fi
1353    fi
1354fi
1355AC_SUBST([GBM_LIB_DEPS])
1356AC_SUBST([GBM_BACKEND_DIRS])
1357GBM_PC_REQ_PRIV="libudev"
1358GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1359GBM_PC_CFLAGS=
1360AC_SUBST([GBM_PC_REQ_PRIV])
1361AC_SUBST([GBM_PC_LIB_PRIV])
1362AC_SUBST([GBM_PC_CFLAGS])
1363
1364dnl
1365dnl EGL configuration
1366dnl
1367EGL_CLIENT_APIS=""
1368
1369if test "x$enable_egl" = xyes; then
1370    SRC_DIRS="$SRC_DIRS egl"
1371    EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread"
1372    EGL_DRIVERS_DIRS=""
1373
1374    AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
1375
1376    if test "$enable_static" != yes; then
1377        # build egl_glx when libGL is built
1378        if test "x$enable_glx" = xyes; then
1379            EGL_DRIVERS_DIRS="glx"
1380        fi
1381
1382        PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
1383                          [have_libudev=yes],[have_libudev=no])
1384        if test "$have_libudev" = yes; then
1385            DEFINES="$DEFINES -DHAVE_LIBUDEV"
1386        fi
1387        if test "x$enable_dri" = xyes; then
1388            # build egl_dri2 when xcb-dri2 is available
1389            PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes],
1390            		  [have_xcb_dri2=yes],[have_xcb_dri2=no])
1391            
1392            if test "$have_xcb_dri2" = yes; then
1393                EGL_DRIVER_DRI2=dri2
1394                DEFINES="$DEFINES -DHAVE_XCB_DRI2"
1395                # workaround a bug in xcb-dri2 generated by xcb-proto 1.6
1396                AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
1397                          [DEFINES="$DEFINES -DXCB_DRI2_CONNECT_DEVICE_NAME_BROKEN"])
1398            fi
1399	fi
1400
1401        EGL_DRIVERS_DIRS="$EGL_DRIVERS_DIRS $EGL_DRIVER_DRI2"
1402    fi
1403fi
1404AC_SUBST([EGL_LIB_DEPS])
1405AC_SUBST([EGL_DRIVERS_DIRS])
1406
1407dnl
1408dnl EGL Gallium configuration
1409dnl
1410if test "x$enable_gallium_egl" = xyes; then
1411    if test "x$with_gallium_drivers" = x; then
1412        AC_MSG_ERROR([cannot enable egl_gallium without Gallium])
1413    fi
1414    if test "x$enable_egl" = xno; then
1415        AC_MSG_ERROR([cannot enable egl_gallium without EGL])
1416    fi
1417    if test "x$have_libdrm" != xyes; then
1418        AC_MSG_ERROR([egl_gallium requires libdrm >= $LIBDRM_REQUIRED])
1419    fi
1420
1421    GALLIUM_STATE_TRACKERS_DIRS="egl $GALLIUM_STATE_TRACKERS_DIRS"
1422    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS egl-static"
1423    HAVE_ST_EGL="yes"
1424fi
1425
1426dnl
1427dnl gbm Gallium configuration
1428dnl
1429if test "x$enable_gallium_gbm" = xauto; then
1430    case "$enable_gbm$HAVE_ST_EGL$enable_dri$with_egl_platforms" in
1431        yesyesyes*drm*)
1432            enable_gallium_gbm=yes ;;
1433         *)
1434            enable_gallium_gbm=no ;;
1435    esac
1436fi
1437if test "x$enable_gallium_gbm" = xyes; then
1438    if test "x$with_gallium_drivers" = x; then
1439        AC_MSG_ERROR([cannot enable gbm_gallium without Gallium])
1440    fi
1441    if test "x$enable_gbm" = xno; then
1442        AC_MSG_ERROR([cannot enable gbm_gallium without gbm])
1443    fi
1444    # gbm_gallium abuses DRI_LIB_DEPS to link.  Make sure it is set.
1445    if test "x$enable_dri" = xno; then
1446        AC_MSG_ERROR([gbm_gallium requires --enable-dri to build])
1447    fi
1448
1449    GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
1450    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
1451    HAVE_ST_GBM="yes"
1452fi
1453
1454dnl
1455dnl X.Org DDX configuration
1456dnl
1457if test "x$enable_xorg" = xyes; then
1458    PKG_CHECK_MODULES([XORG], [xorg-server >= 1.6.0])
1459    PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED])
1460    PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
1461    PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1462        HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1463        HAVE_XEXTPROTO_71="no")
1464    GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
1465    HAVE_ST_XORG=yes
1466fi
1467
1468dnl
1469dnl XA configuration
1470dnl
1471if test "x$enable_xa" = xyes; then
1472AC_PROG_AWK
1473AC_PROG_GREP
1474AC_CHECK_PROG(NM, nm, "nm")
1475if test "x$AWK" = x || test "x$GREP" = x || test "x$NM" = x; then
1476AC_MSG_WARN([Missing one of nm, grep or awk. Disabling xa.])
1477enable_xa=no
1478fi
1479fi
1480if test "x$enable_xa" = xyes; then
1481    GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
1482    HAVE_ST_XA=yes
1483    AC_SUBST(AWK)
1484    AC_SUBST(GREP)
1485    AC_SUBST(NM)
1486fi
1487
1488dnl
1489dnl OpenVG configuration
1490dnl
1491VG_LIB_DEPS=""
1492
1493if test "x$enable_openvg" = xyes; then
1494    if test "x$enable_egl" = xno; then
1495        AC_MSG_ERROR([cannot enable OpenVG without EGL])
1496    fi
1497    if test "x$with_gallium_drivers" = x; then
1498        AC_MSG_ERROR([cannot enable OpenVG without Gallium])
1499    fi
1500    if test "x$enable_gallium_egl" = xno; then
1501        AC_MSG_ERROR([cannot enable OpenVG without egl_gallium])
1502    fi
1503
1504    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
1505    VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
1506    CORE_DIRS="$CORE_DIRS mapi/vgapi"
1507    GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
1508    HAVE_ST_VEGA=yes
1509fi
1510
1511dnl
1512dnl D3D1X configuration
1513dnl
1514
1515if test "x$enable_d3d1x" = xyes; then
1516    if test "x$with_gallium_drivers" = x; then
1517        AC_MSG_ERROR([cannot enable D3D1X without Gallium])
1518    fi
1519
1520    GALLIUM_STATE_TRACKERS_DIRS="d3d1x $GALLIUM_STATE_TRACKERS_DIRS"
1521    HAVE_ST_D3D1X=yes
1522fi
1523
1524dnl
1525dnl Gallium G3DVL configuration
1526dnl
1527AC_ARG_ENABLE([gallium-g3dvl],
1528    [AS_HELP_STRING([--enable-gallium-g3dvl],
1529        [build gallium g3dvl @<:@default=disabled@:>@])],
1530    [enable_gallium_g3dvl="$enableval"],
1531    [enable_gallium_g3dvl=no])
1532if test "x$enable_gallium_g3dvl" = xyes; then
1533    if test "x$with_gallium_drivers" = x; then
1534        AC_MSG_ERROR([cannot enable G3DVL without Gallium])
1535    fi
1536
1537    if test "x$enable_xvmc" = xauto; then
1538	PKG_CHECK_EXISTS([xvmc], [enable_xvmc=yes], [enable_xvmc=no])
1539    fi
1540
1541    if test "x$enable_vdpau" = xauto; then
1542	PKG_CHECK_EXISTS([vdpau], [enable_vdpau=yes], [enable_vdpau=no])
1543    fi
1544
1545    if test "x$enable_va" = xauto; then
1546	#don't enable vaapi state tracker even if package exists
1547	#PKG_CHECK_EXISTS([libva], [enable_vdpau=yes], [enable_vdpau=no])
1548        enable_va=no
1549    fi
1550fi
1551
1552if test "x$enable_xvmc" = xyes; then
1553    PKG_CHECK_MODULES([XVMC], [xvmc >= 1.0.6 xorg-server])
1554    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg/xvmc"
1555    HAVE_ST_XVMC="yes"
1556fi
1557
1558if test "x$enable_vdpau" = xyes; then
1559    PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.4.1])
1560    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vdpau"
1561    HAVE_ST_VDPAU="yes"
1562fi
1563
1564if test "x$enable_va" = xyes; then
1565    PKG_CHECK_MODULES([LIBVA], [libva = 0.31.1])
1566    AC_MSG_WARN([vaapi state tracker currently unmaintained])
1567    GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS va"
1568    HAVE_ST_VA="yes"
1569fi
1570
1571dnl
1572dnl GLU configuration
1573dnl
1574AC_ARG_ENABLE([glu],
1575    [AS_HELP_STRING([--disable-glu],
1576        [enable OpenGL Utility library @<:@default=enabled@:>@])],
1577    [enable_glu="$enableval"],
1578    [enable_glu=yes])
1579
1580if test "x$enable_glu" = xyes; then
1581    if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
1582        AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
1583        enable_glu=no
1584    fi
1585fi
1586
1587if test "x$enable_glu" = xyes; then
1588    SRC_DIRS="$SRC_DIRS glu"
1589
1590    if test "x$enable_glx" = xno; then
1591        # Link libGLU to libOSMesa instead of libGL
1592        GLU_LIB_DEPS=""
1593        GLU_PC_REQ="osmesa"
1594        if test "$enable_static" = no; then
1595            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
1596        else
1597            GLU_MESA_DEPS=""
1598        fi
1599    else
1600        # If static, empty GLU_LIB_DEPS and add libs for programs to link
1601        GLU_PC_REQ="gl"
1602        GLU_PC_LIB_PRIV="-lm"
1603        if test "$enable_static" = no; then
1604            GLU_LIB_DEPS="-lm"
1605            GLU_MESA_DEPS='-l$(GL_LIB)'
1606        else
1607            GLU_LIB_DEPS=""
1608            GLU_MESA_DEPS=""
1609        fi
1610    fi
1611fi
1612if test "$enable_static" = no; then
1613    GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
1614fi
1615GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
1616AC_SUBST([GLU_LIB_DEPS])
1617AC_SUBST([GLU_MESA_DEPS])
1618AC_SUBST([GLU_PC_REQ])
1619AC_SUBST([GLU_PC_REQ_PRIV])
1620AC_SUBST([GLU_PC_LIB_PRIV])
1621AC_SUBST([GLU_PC_CFLAGS])
1622
1623AC_SUBST([PROGRAM_DIRS])
1624
1625dnl
1626dnl Gallium configuration
1627dnl
1628if test "x$with_gallium_drivers" != x; then
1629    SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
1630fi
1631
1632AC_SUBST([LLVM_CFLAGS])
1633AC_SUBST([LLVM_LIBS])
1634AC_SUBST([LLVM_LDFLAGS])
1635AC_SUBST([LLVM_VERSION])
1636
1637case "x$enable_opengl$enable_gles1$enable_gles2" in
1638x*yes*)
1639    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1640    ;;
1641esac
1642
1643AC_SUBST([VG_LIB_DEPS])
1644AC_SUBST([EGL_CLIENT_APIS])
1645
1646AC_ARG_WITH([egl-platforms],
1647    [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1648        [comma delimited native platforms libEGL supports, e.g.
1649        "x11,drm" @<:@default=auto@:>@])],
1650    [with_egl_platforms="$withval"],
1651    [with_egl_platforms=yes])
1652
1653EGL_PLATFORMS=""
1654WAYLAND_EGL_LIB_DEPS=""
1655
1656case "$with_egl_platforms" in
1657yes)
1658    if test "x$enable_egl" = xyes; then
1659        EGL_PLATFORMS="x11"
1660    fi
1661    ;;
1662*)
1663    if test "x$enable_egl" != xyes; then
1664        AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1665    fi
1666    # verify the requested driver directories exist
1667    egl_platforms=`IFS=', '; echo $with_egl_platforms`
1668    for plat in $egl_platforms; do
1669        test -d "$srcdir/src/gallium/state_trackers/egl/$plat" || \
1670            AC_MSG_ERROR([EGL platform '$plat' doesn't exist])
1671        if test "$plat" = "fbdev"; then
1672                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/fbdev"
1673        fi
1674        if test "$plat" = "null"; then
1675                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
1676        fi
1677	if test "$plat" = "wayland"; then
1678		PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
1679				  [AC_MSG_ERROR([cannot find libwayland-client])])
1680		WAYLAND_EGL_LIB_DEPS="$WAYLAND_LIBS $LIBDRM_LIBS"
1681                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
1682	fi
1683        if test "$plat" = "drm" && test "x$enable_gbm" = "xno"; then
1684                AC_MSG_ERROR([EGL platform drm needs gbm])
1685        fi
1686        case "$plat$have_libudev" in
1687                waylandno|drmno)
1688                    AC_MSG_ERROR([cannot build $plat platfrom without udev]) ;;
1689        esac
1690    done
1691    EGL_PLATFORMS="$egl_platforms"
1692    ;;
1693esac
1694AC_SUBST([EGL_PLATFORMS])
1695
1696AC_SUBST([WAYLAND_EGL_LIB_DEPS])
1697WAYLAND_EGL_PC_REQ_PRIV="wayland-client libdrm"
1698WAYLAND_EGL_PC_LIB_PRIV=
1699WAYLAND_EGL_PC_CFLAGS=
1700
1701AC_SUBST([WAYLAND_EGL_PC_REQ_PRIV])
1702AC_SUBST([WAYLAND_EGL_PC_LIB_PRIV])
1703AC_SUBST([WAYLAND_EGL_PC_CFLAGS])
1704
1705
1706AC_ARG_WITH([egl-driver-dir],
1707    [AS_HELP_STRING([--with-egl-driver-dir=DIR],
1708                    [directory for EGL drivers [[default=${libdir}/egl]]])],
1709    [EGL_DRIVER_INSTALL_DIR="$withval"],
1710    [EGL_DRIVER_INSTALL_DIR='${libdir}/egl'])
1711AC_SUBST([EGL_DRIVER_INSTALL_DIR])
1712
1713AC_ARG_WITH([xorg-driver-dir],
1714    [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1715                    [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1716    [XORG_DRIVER_INSTALL_DIR="$withval"],
1717    [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1718AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1719
1720AC_ARG_WITH([max-width],
1721    [AS_HELP_STRING([--with-max-width=N],
1722                    [Maximum framebuffer width (4096)])],
1723    [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1724     AS_IF([test "${withval}" -gt "4096"],
1725           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1726)
1727AC_ARG_WITH([max-height],
1728    [AS_HELP_STRING([--with-max-height=N],
1729                    [Maximum framebuffer height (4096)])],
1730    [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1731     AS_IF([test "${withval}" -gt "4096"],
1732           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1733)
1734
1735dnl
1736dnl Gallium LLVM
1737dnl
1738AC_ARG_ENABLE([gallium-llvm],
1739    [AS_HELP_STRING([--enable-gallium-llvm],
1740        [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1741    [enable_gallium_llvm="$enableval"],
1742    [enable_gallium_llvm=auto])
1743if test "x$with_gallium_drivers" = x; then
1744    enable_gallium_llvm=no
1745fi
1746if test "x$enable_gallium_llvm" = xauto; then
1747    case "$host_cpu" in
1748    i*86|x86_64) enable_gallium_llvm=yes;;
1749    esac
1750fi
1751if test "x$enable_gallium_llvm" = xyes; then
1752    AC_PATH_PROG([LLVM_CONFIG], [llvm-config], [no])
1753
1754    if test "x$LLVM_CONFIG" != xno; then
1755	LLVM_VERSION=`$LLVM_CONFIG --version`
1756	LLVM_CFLAGS=`$LLVM_CONFIG --cppflags|sed -e 's/-DNDEBUG\>//g' -e 's/-pedantic//g'`
1757	LLVM_LIBS="`$LLVM_CONFIG --libs`"
1758
1759	LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1760	DEFINES="$DEFINES -D__STDC_CONSTANT_MACROS"
1761	MESA_LLVM=1
1762    else
1763	MESA_LLVM=0
1764    fi
1765else
1766    MESA_LLVM=0
1767fi
1768
1769dnl Directory for VDPAU libs
1770AC_ARG_WITH([vdpau-libdir],
1771    [AS_HELP_STRING([--with-vdpau-libdir=DIR],
1772        [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
1773    [VDPAU_LIB_INSTALL_DIR="$withval"],
1774    [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
1775AC_SUBST([VDPAU_LIB_INSTALL_DIR])
1776
1777dnl Directory for VA libs
1778AC_ARG_WITH([va-libdir],
1779    [AS_HELP_STRING([--with-va-libdir=DIR],
1780        [directory for the VA libraries @<:@default=${libdir}/va@:>@])],
1781    [VA_LIB_INSTALL_DIR="$withval"],
1782    [VA_LIB_INSTALL_DIR='${libdir}/va'])
1783AC_SUBST([VA_LIB_INSTALL_DIR])
1784
1785dnl
1786dnl Gallium helper functions
1787dnl
1788gallium_check_st() {
1789    if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = xyes ||
1790	 test "x$HAVE_ST_XA" = xyes || test "x$HAVE_ST_XVMC" = xyes ||
1791	 test "x$HAVE_ST_VDPAU" = xyes || test "x$HAVE_ST_VA" = xyes; then
1792         if test "x$have_libdrm" != xyes; then
1793            AC_MSG_ERROR([DRI or Xorg DDX requires libdrm >= $LIBDRM_REQUIRED])
1794         fi
1795         GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS $1"
1796    fi
1797    if test "x$HAVE_ST_DRI" = xyes && test "x$2" != x; then
1798         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $2"
1799    fi
1800    if test "x$HAVE_ST_XORG" = xyes && test "x$3" != x; then
1801         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $3"
1802    fi
1803    if test "x$HAVE_ST_XA" = xyes && test "x$4" != x; then
1804         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $4"
1805    fi
1806    if test "x$HAVE_ST_XVMC" = xyes && test "x$5" != x; then
1807         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $5"
1808         NEED_G3DVL_DRI="yes"
1809    fi
1810    if test "x$HAVE_ST_VDPAU" = xyes && test "x$6" != x; then
1811         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $6"
1812         NEED_G3DVL_DRI="yes"
1813    fi
1814    if test "x$HAVE_ST_VA" = xyes && test "x$7" != x; then
1815         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $7"
1816         NEED_G3DVL_DRI="yes"
1817    fi
1818}
1819
1820gallium_require_llvm() {
1821    if test "x$MESA_LLVM" = x0; then
1822        case "$host_cpu" in
1823        i*86|x86_64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
1824        esac
1825    fi
1826}
1827
1828dnl Gallium drivers
1829dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
1830if test "x$with_gallium_drivers" != x; then
1831    gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
1832    for driver in $gallium_drivers; do
1833        case "x$driver" in
1834        xsvga)
1835            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
1836            gallium_check_st "svga/drm" "dri-vmwgfx" "" "xa-vmwgfx"
1837            ;;
1838        xi915)
1839            PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1840            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 softpipe"
1841            if test "x$MESA_LLVM" = x1; then
1842                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1843            fi
1844            GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
1845            gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
1846            ;;
1847        xr300)
1848            gallium_require_llvm "Gallium R300"
1849            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
1850            gallium_check_st "radeon/drm" "dri-r300" "xorg-r300" "" "xvmc-r300" "vdpau-r300" "va-r300"
1851            ;;
1852        xr600)
1853            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
1854            gallium_check_st "radeon/drm" "dri-r600" "xorg-r600" "" "xvmc-r600" "vdpau-r600" "va-r600"
1855            ;;
1856        xnouveau)
1857            PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1858            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nvfx nv50 nvc0"
1859            gallium_check_st "nouveau/drm" "dri-nouveau" "xorg-nouveau" "" "xvmc-nouveau" "vdpau-nouveau"
1860            ;;
1861        xswrast)
1862            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS softpipe"
1863            if test "x$MESA_LLVM" = x1; then
1864                GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1865            fi
1866
1867            if test "x$HAVE_ST_DRI" = xyes; then
1868                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
1869            fi
1870            if test "x$HAVE_ST_VDPAU" = xyes; then
1871                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS vdpau-softpipe"
1872            fi
1873            if test "x$HAVE_ST_XVMC" = xyes; then
1874                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS xvmc-softpipe"
1875            fi
1876            if test "x$HAVE_ST_VA" = xyes; then
1877                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS va-softpipe"
1878            fi
1879            if test "x$HAVE_ST_VDPAU" = xyes ||
1880               test "x$HAVE_ST_XVMC" = xyes ||
1881               test "x$HAVE_ST_VA" = xyes; then
1882               if test "x$HAVE_WINSYS_XLIB" != xyes; then
1883                  GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
1884               fi
1885            fi
1886            ;;
1887        *)
1888            AC_MSG_ERROR([Unknown Gallium driver: $driver])
1889            ;;
1890        esac
1891    done
1892fi
1893
1894if test "x$NEED_G3DVL_DRI" = xyes; then
1895    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS g3dvl/dri"
1896fi
1897
1898dnl prepend CORE_DIRS to SRC_DIRS
1899SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1900
1901dnl Restore LDFLAGS and CPPFLAGS
1902LDFLAGS="$_SAVE_LDFLAGS"
1903CPPFLAGS="$_SAVE_CPPFLAGS"
1904
1905dnl Add user CFLAGS and CXXFLAGS
1906CFLAGS="$CFLAGS $USER_CFLAGS"
1907CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
1908
1909dnl Substitute the config
1910AC_CONFIG_FILES([configs/autoconf])
1911
1912dnl Replace the configs/current symlink
1913AC_CONFIG_COMMANDS([configs],[
1914if test -f configs/current || test -L configs/current; then
1915    rm -f configs/current
1916fi
1917ln -s autoconf configs/current
1918])
1919
1920dnl Sort the dirs alphabetically
1921GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1922GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1923GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1924GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1925
1926AC_OUTPUT
1927
1928dnl
1929dnl Output some configuration info for the user
1930dnl
1931echo ""
1932echo "        prefix:          $prefix"
1933echo "        exec_prefix:     $exec_prefix"
1934echo "        libdir:          $libdir"
1935echo "        includedir:      $includedir"
1936
1937dnl API info
1938echo ""
1939echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
1940echo "        OpenVG:          $enable_openvg"
1941
1942dnl Driver info
1943echo ""
1944if test "x$enable_osmesa" != xno; then
1945        echo "        OSMesa:          lib$OSMESA_LIB"
1946else
1947        echo "        OSMesa:          no"
1948fi
1949
1950if test "x$enable_dri" != xno; then
1951        # cleanup the drivers var
1952        dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1953        if test "x$DRI_DIRS" = x; then
1954            echo "        DRI drivers:     no"
1955        else
1956            echo "        DRI drivers:     $dri_dirs"
1957        fi
1958        echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1959        echo "        Shared dricore:  $enable_dricore"
1960fi
1961
1962case "x$enable_glx$enable_xlib_glx" in
1963xyesyes)
1964    echo "        GLX:             Xlib-based"
1965    ;;
1966xyesno)
1967    echo "        GLX:             DRI-based"
1968    echo "        Use XCB:         $enable_xcb"
1969    ;;
1970*)
1971    echo "        GLX:             $enable_glx"
1972    ;;
1973esac
1974
1975echo ""
1976echo "        GLU:             $enable_glu"
1977
1978dnl EGL
1979echo ""
1980echo "        EGL:             $enable_egl"
1981if test "$enable_egl" = yes; then
1982    echo "        EGL platforms:   $EGL_PLATFORMS"
1983
1984    egl_drivers=""
1985    for d in $EGL_DRIVERS_DIRS; do
1986        egl_drivers="$egl_drivers builtin:egl_$d"
1987    done
1988
1989    if test "x$HAVE_ST_EGL" = xyes; then
1990        echo "        EGL drivers:    ${egl_drivers} egl_gallium"
1991        echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
1992    else
1993        echo "        EGL drivers:    $egl_drivers"
1994    fi
1995fi
1996
1997echo ""
1998if test "x$MESA_LLVM" = x1; then
1999    echo "        llvm:            yes"
2000    echo "        llvm-config:     $LLVM_CONFIG"
2001    echo "        llvm-version:    $LLVM_VERSION"
2002else
2003    echo "        llvm:            no"
2004fi
2005
2006echo ""
2007if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
2008    echo "        Gallium:         yes"
2009    echo "        Gallium dirs:    $GALLIUM_DIRS"
2010    echo "        Target dirs:     $GALLIUM_TARGET_DIRS"
2011    echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
2012    echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
2013    echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
2014else
2015    echo "        Gallium:         no"
2016fi
2017
2018
2019dnl Libraries
2020echo ""
2021echo "        Shared libs:     $enable_shared"
2022echo "        Static libs:     $enable_static"
2023
2024dnl Compiler options
2025# cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2026cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2027    $SED 's/^ *//;s/  */ /;s/ *$//'`
2028cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2029    $SED 's/^ *//;s/  */ /;s/ *$//'`
2030defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
2031echo ""
2032echo "        CFLAGS:          $cflags"
2033echo "        CXXFLAGS:        $cxxflags"
2034echo "        Macros:          $defines"
2035echo ""
2036echo "        PYTHON2:         $PYTHON2"
2037
2038echo ""
2039echo "        Run '${MAKE-make}' to build Mesa"
2040echo ""
2041