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