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