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