configure.ac: use AC_PROG_MKDIR_P
[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 WAYLAND_EGL_LIB_NAME='lib$(WAYLAND_EGL_LIB).'${LIB_EXTENSION}
417 GBM_LIB_NAME='lib$(GBM_LIB).'${LIB_EXTENSION}
418
419 GL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
420 GLU_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLU_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
421 OSMESA_LIB_GLOB=${LIB_PREFIX_GLOB}'$(OSMESA_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
422 EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
423 EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
424 GLESv1_CM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv1_CM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
425 GLESv2_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv2_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
426 VG_LIB_GLOB=${LIB_PREFIX_GLOB}'$(VG_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
427 GLAPI_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLAPI_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
428 WAYLAND_EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(WAYLAND_EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
429 GBM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GBM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
430
431 AC_SUBST([GL_LIB_NAME])
432 AC_SUBST([GLU_LIB_NAME])
433 AC_SUBST([OSMESA_LIB_NAME])
434 AC_SUBST([EGL_LIB_NAME])
435 AC_SUBST([GLESv1_CM_LIB_NAME])
436 AC_SUBST([GLESv2_LIB_NAME])
437 AC_SUBST([VG_LIB_NAME])
438 AC_SUBST([GLAPI_LIB_NAME])
439 AC_SUBST([WAYLAND_EGL_LIB_NAME])
440 AC_SUBST([GBM_LIB_NAME])
441
442 AC_SUBST([GL_LIB_GLOB])
443 AC_SUBST([GLU_LIB_GLOB])
444 AC_SUBST([OSMESA_LIB_GLOB])
445 AC_SUBST([EGL_LIB_GLOB])
446 AC_SUBST([GLESv1_CM_LIB_GLOB])
447 AC_SUBST([GLESv2_LIB_GLOB])
448 AC_SUBST([VG_LIB_GLOB])
449 AC_SUBST([GLAPI_LIB_GLOB])
450 AC_SUBST([WAYLAND_EGL_LIB_GLOB])
451 AC_SUBST([GBM_LIB_GLOB])
452
453 dnl
454 dnl Arch/platform-specific settings
455 dnl
456 AC_ARG_ENABLE([asm],
457     [AS_HELP_STRING([--disable-asm],
458         [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
459     [enable_asm="$enableval"],
460     [enable_asm=yes]
461 )
462 asm_arch=""
463 ASM_FLAGS=""
464 MESA_ASM_SOURCES=""
465 GLAPI_ASM_SOURCES=""
466 AC_MSG_CHECKING([whether to enable assembly])
467 test "x$enable_asm" = xno && AC_MSG_RESULT([no])
468 # disable if cross compiling on x86/x86_64 since we must run gen_matypes
469 if test "x$enable_asm" = xyes && test "x$cross_compiling" = xyes; then
470     case "$host_cpu" in
471     i?86 | x86_64)
472         enable_asm=no
473         AC_MSG_RESULT([no, cross compiling])
474         ;;
475     esac
476 fi
477 # check for supported arches
478 if test "x$enable_asm" = xyes; then
479     case "$host_cpu" in
480     i?86)
481         case "$host_os" in
482         linux* | *freebsd* | dragonfly* | *netbsd*)
483             test "x$enable_64bit" = xyes && asm_arch=x86_64 || asm_arch=x86
484             ;;
485         esac
486         ;;
487     x86_64)
488         case "$host_os" in
489         linux* | *freebsd* | dragonfly* | *netbsd*)
490             test "x$enable_32bit" = xyes && asm_arch=x86 || asm_arch=x86_64
491             ;;
492         esac
493         ;;
494     powerpc)
495         case "$host_os" in
496         linux*)
497             asm_arch=ppc
498             ;;
499         esac
500         ;;
501     sparc*)
502         case "$host_os" in
503         linux*)
504             asm_arch=sparc
505             ;;
506         esac
507         ;;
508     esac
509
510     case "$asm_arch" in
511     x86)
512         ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
513         MESA_ASM_SOURCES='$(X86_SOURCES)'
514         GLAPI_ASM_SOURCES='$(X86_API)'
515         AC_MSG_RESULT([yes, x86])
516         ;;
517     x86_64)
518         ASM_FLAGS="-DUSE_X86_64_ASM"
519         MESA_ASM_SOURCES='$(X86-64_SOURCES)'
520         GLAPI_ASM_SOURCES='$(X86-64_API)'
521         AC_MSG_RESULT([yes, x86_64])
522         ;;
523     sparc)
524         ASM_FLAGS="-DUSE_SPARC_ASM"
525         MESA_ASM_SOURCES='$(SPARC_SOURCES)'
526         GLAPI_ASM_SOURCES='$(SPARC_API)'
527         AC_MSG_RESULT([yes, sparc])
528         ;;
529     *)
530         AC_MSG_RESULT([no, platform not supported])
531         ;;
532     esac
533 fi
534 AC_SUBST([ASM_FLAGS])
535 AC_SUBST([MESA_ASM_SOURCES])
536 AC_SUBST([GLAPI_ASM_SOURCES])
537
538 dnl PIC code macro
539 MESA_PIC_FLAGS
540
541 dnl Check to see if dlopen is in default libraries (like Solaris, which
542 dnl has it in libc), or if libdl is needed to get it.
543 AC_CHECK_FUNC([dlopen], [],
544     [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
545 AC_SUBST([DLOPEN_LIBS])
546
547 dnl See if posix_memalign is available
548 AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
549
550 dnl SELinux awareness.
551 AC_ARG_ENABLE([selinux],
552     [AS_HELP_STRING([--enable-selinux],
553         [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
554     [MESA_SELINUX="$enableval"],
555     [MESA_SELINUX=no])
556 if test "x$enable_selinux" = "xyes"; then
557     AC_CHECK_HEADER([selinux/selinux.h],[],
558                     [AC_MSG_ERROR([SELinux headers not found])])
559     AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
560                  [AC_MSG_ERROR([SELinux library not found])])
561     SELINUX_LIBS="-lselinux"
562     DEFINES="$DEFINES -DMESA_SELINUX"
563 fi
564
565 dnl Options for APIs
566 AC_ARG_ENABLE([opengl],
567     [AS_HELP_STRING([--disable-opengl],
568         [disable support for standard OpenGL API @<:@default=no@:>@])],
569     [enable_opengl="$enableval"],
570     [enable_opengl=yes])
571 AC_ARG_ENABLE([gles1],
572     [AS_HELP_STRING([--enable-gles1],
573         [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
574     [enable_gles1="$enableval"],
575     [enable_gles1=no])
576 AC_ARG_ENABLE([gles2],
577     [AS_HELP_STRING([--enable-gles2],
578         [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
579     [enable_gles2="$enableval"],
580     [enable_gles2=no])
581 AC_ARG_ENABLE([openvg],
582     [AS_HELP_STRING([--enable-openvg],
583         [enable support for OpenVG API @<:@default=no@:>@])],
584     [enable_openvg="$enableval"],
585     [enable_openvg=no])
586
587 AC_ARG_ENABLE([dri],
588     [AS_HELP_STRING([--enable-dri],
589         [enable DRI modules @<:@default=auto@:>@])],
590     [enable_dri="$enableval"],
591     [enable_dri=auto])
592 AC_ARG_ENABLE([glx],
593     [AS_HELP_STRING([--enable-glx],
594         [enable GLX library @<:@default=auto@:>@])],
595     [enable_glx="$enableval"],
596     [enable_glx=auto])
597 AC_ARG_ENABLE([osmesa],
598     [AS_HELP_STRING([--enable-osmesa],
599         [enable OSMesa library @<:@default=auto@:>@])],
600     [enable_osmesa="$enableval"],
601     [enable_osmesa=auto])
602 AC_ARG_ENABLE([egl],
603     [AS_HELP_STRING([--disable-egl],
604         [disable EGL library @<:@default=enabled@:>@])],
605     [enable_egl="$enableval"],
606     [enable_egl=yes])
607
608 AC_ARG_ENABLE([xorg],
609     [AS_HELP_STRING([--enable-xorg],
610         [enable support for X.Org DDX API @<:@default=no@:>@])],
611     [enable_xorg="$enableval"],
612     [enable_xorg=no])
613 AC_ARG_ENABLE([xa],
614     [AS_HELP_STRING([--enable-xa],
615         [enable build of the XA X Acceleration API @<:@default=no@:>@])],
616     [enable_xa="$enableval"],
617     [enable_xa=no])
618 AC_ARG_ENABLE([d3d1x],
619     [AS_HELP_STRING([--enable-d3d1x],
620         [enable support for Direct3D 10 & 11 low-level API @<:@default=no@:>@])],
621     [enable_d3d1x="$enableval"],
622     [enable_d3d1x=no])
623 AC_ARG_ENABLE([gbm],
624    [AS_HELP_STRING([--enable-gbm],
625          [enable gbm library @<:@default=auto@:>@])],
626    [enable_gbm="$enableval"],
627    [enable_gbm=auto])
628
629 AC_ARG_ENABLE([xvmc],
630    [AS_HELP_STRING([--enable-xvmc],
631          [enable xvmc library @<:@default=auto@:>@])],
632    [enable_xvmc="$enableval"],
633    [enable_xvmc=auto])
634 AC_ARG_ENABLE([vdpau],
635    [AS_HELP_STRING([--enable-vdpau],
636          [enable vdpau library @<:@default=auto@:>@])],
637    [enable_vdpau="$enableval"],
638    [enable_vdpau=auto])
639 AC_ARG_ENABLE([va],
640    [AS_HELP_STRING([--enable-va],
641          [enable va library @<:@default=auto@:>@])],
642    [enable_va="$enableval"],
643    [enable_va=auto])
644
645 AC_ARG_ENABLE([xlib_glx],
646     [AS_HELP_STRING([--enable-xlib-glx],
647         [make GLX library Xlib-based instead of DRI-based @<:@default=disable@:>@])],
648     [enable_xlib_glx="$enableval"],
649     [enable_xlib_glx=auto])
650 AC_ARG_ENABLE([gallium_egl],
651     [AS_HELP_STRING([--enable-gallium-egl],
652         [enable optional EGL state tracker (not required
653          for EGL support in Gallium with OpenGL and OpenGL ES)
654          @<:@default=disable@:>@])],
655     [enable_gallium_egl="$enableval"],
656     [enable_gallium_egl=no])
657 AC_ARG_ENABLE([gallium_gbm],
658     [AS_HELP_STRING([--enable-gallium-gbm],
659         [enable optional gbm state tracker (not required for
660          gbm support in Gallium)
661          @<:@default=auto@:>@])],
662     [enable_gallium_gbm="$enableval"],
663     [enable_gallium_gbm=auto])
664
665 # Option for Gallium drivers
666 GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"
667
668 AC_ARG_WITH([gallium-drivers],
669     [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
670         [comma delimited Gallium drivers list, e.g.
671         "i915,nouveau,r300,r600,svga,swrast"
672         @<:@default=r300,r600,swrast@:>@])],
673     [with_gallium_drivers="$withval"],
674     [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
675
676 # Doing '--without-gallium-drivers' will set this variable to 'no'.  Clear it
677 # here so that the script doesn't choke on an unknown driver name later.
678 case "$with_gallium_drivers" in
679     yes) with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT" ;;
680     no) with_gallium_drivers='' ;;
681 esac
682
683 if test "x$enable_opengl" = xno -a \
684         "x$enable_gles1" = xno -a \
685         "x$enable_gles2" = xno -a \
686         "x$enable_openvg" = xno -a \
687         "x$enable_xorg" = xno -a \
688         "x$enable_xa" = xno -a \
689         "x$enable_d3d1x" = xno -a \
690         "x$enable_xvmc" = xno -a \
691         "x$enable_vdpau" = xno -a \
692         "x$enable_va" = xno; then
693     AC_MSG_ERROR([at least one API should be enabled])
694 fi
695
696 API_DEFINES=""
697 if test "x$enable_opengl" = xno; then
698     API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
699 else
700     API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
701 fi
702 if test "x$enable_gles1" = xyes; then
703     API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
704 fi
705 if test "x$enable_gles2" = xyes; then
706     API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
707 fi
708 AC_SUBST([API_DEFINES])
709
710 dnl
711 dnl Driver configuration. Options are xlib, dri and osmesa right now.
712 dnl More later: fbdev, ...
713 dnl
714 default_driver="xlib"
715
716 case "$host_os" in
717 linux*)
718     case "$host_cpu" in
719     i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
720     esac
721     ;;
722 *freebsd* | dragonfly* | *netbsd*)
723     case "$host_cpu" in
724     i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
725     esac
726     ;;
727 esac
728
729 if test "x$enable_opengl" = xno; then
730     default_driver="no"
731 fi
732
733 AC_ARG_WITH([driver],
734     [AS_HELP_STRING([--with-driver=DRIVER], [DEPRECATED])],
735     [mesa_driver="$withval"],
736     [mesa_driver=auto])
737 dnl Check for valid option
738 case "x$mesa_driver" in
739 xxlib|xdri|xosmesa|xno)
740     if test "x$enable_dri" != xauto -o \
741             "x$enable_glx" != xauto -o \
742             "x$enable_osmesa" != xauto -o \
743             "x$enable_xlib_glx" != xauto; then
744         AC_MSG_ERROR([--with-driver=$mesa_driver is deprecated])
745     fi
746     ;;
747 xauto)
748     mesa_driver="$default_driver"
749     ;;
750 *)
751     AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
752     ;;
753 esac
754
755 # map $mesa_driver to APIs
756 if test "x$enable_dri" = xauto; then
757     case "x$mesa_driver" in
758     xdri) enable_dri=yes ;;
759     *)    enable_dri=no ;;
760     esac
761 fi
762
763 if test "x$enable_glx" = xauto; then
764     case "x$mesa_driver" in
765     xdri|xxlib) enable_glx=yes ;;
766     *)          enable_glx=no ;;
767     esac
768 fi
769
770 if test "x$enable_osmesa" = xauto; then
771     case "x$mesa_driver" in
772     xxlib|xosmesa) enable_osmesa=yes ;;
773     *)             enable_osmesa=no ;;
774     esac
775 fi
776
777 if test "x$enable_xlib_glx" = xauto; then
778     case "x$mesa_driver" in
779     xxlib) enable_xlib_glx=yes ;;
780     *)     enable_xlib_glx=no ;;
781     esac
782 fi
783
784 if test "x$enable_glx" = xno; then
785     enable_xlib_glx=no
786 fi
787
788 dnl
789 dnl Driver specific build directories
790 dnl
791
792 dnl this variable will be prepended to SRC_DIRS and is not exported
793 CORE_DIRS="mapi/shared-glapi"
794
795 SRC_DIRS=""
796 GLU_DIRS="sgi"
797 GALLIUM_DIRS="auxiliary drivers state_trackers"
798 GALLIUM_TARGET_DIRS=""
799 GALLIUM_WINSYS_DIRS="sw"
800 GALLIUM_DRIVERS_DIRS="galahad trace rbug noop identity"
801 GALLIUM_STATE_TRACKERS_DIRS=""
802
803 # build glapi if OpenGL is enabled
804 if test "x$enable_opengl" = xyes; then
805     CORE_DIRS="$CORE_DIRS mapi/glapi"
806 fi
807
808 # build es1api if OpenGL ES 1.x is enabled
809 if test "x$enable_gles1" = xyes; then
810     CORE_DIRS="$CORE_DIRS mapi/es1api"
811 fi
812
813 # build es2api if OpenGL ES 2.x is enabled
814 if test "x$enable_gles2" = xyes; then
815     CORE_DIRS="$CORE_DIRS mapi/es2api"
816 fi
817
818 # build glsl and mesa if OpenGL or OpenGL ES is enabled
819 case "x$enable_opengl$enable_gles1$enable_gles2" in
820 x*yes*)
821     CORE_DIRS="$CORE_DIRS glsl mesa"
822     ;;
823 esac
824
825 case "x$enable_glx$enable_xlib_glx" in
826 xyesyes)
827     DRIVER_DIRS="$DRIVER_DIRS x11"
828     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
829     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS libgl-xlib"
830     GALLIUM_STATE_TRACKERS_DIRS="glx $GALLIUM_STATE_TRACKERS_DIRS"
831     HAVE_WINSYS_XLIB="yes"
832     ;;
833 xyesno)
834     # DRI-based GLX
835     SRC_DIRS="$SRC_DIRS glx"
836     ;;
837 esac
838
839 if test "x$enable_dri" = xyes; then
840     DRIVER_DIRS="$DRIVER_DIRS dri"
841
842     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/dri"
843     GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
844     HAVE_ST_DRI="yes"
845 fi
846
847 if test "x$enable_osmesa" = xyes; then
848     # the empty space matters for osmesa... (see src/mesa/Makefile)
849     if test -n "$DRIVER_DIRS"; then
850         DRIVER_DIRS="$DRIVER_DIRS osmesa"
851     else
852         DRIVER_DIRS="osmesa"
853     fi
854 fi
855
856 AC_SUBST([SRC_DIRS])
857 AC_SUBST([GLU_DIRS])
858 AC_SUBST([DRIVER_DIRS])
859 AC_SUBST([GALLIUM_DIRS])
860 AC_SUBST([GALLIUM_TARGET_DIRS])
861 AC_SUBST([GALLIUM_WINSYS_DIRS])
862 AC_SUBST([GALLIUM_DRIVERS_DIRS])
863 AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
864 AC_SUBST([MESA_LLVM])
865
866 # Check for libdrm
867 PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
868                   [have_libdrm=yes], [have_libdrm=no])
869
870 if test "x$enable_dri" = xyes; then
871     # DRI must be shared, I think
872     if test "$enable_static" = yes; then
873         AC_MSG_ERROR([Can't use static libraries for DRI drivers])
874     fi
875
876     # not a hard requirement as swrast does not depend on it
877     if test "x$have_libdrm" = xyes; then
878         DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
879     fi
880 fi
881
882 dnl
883 dnl Find out if X is available. The variable have_x is set if libX11 is
884 dnl found to mimic AC_PATH_XTRA.
885 dnl
886 if test -n "$PKG_CONFIG"; then
887     AC_MSG_CHECKING([pkg-config files for X11 are available])
888     PKG_CHECK_EXISTS([x11],[
889         x11_pkgconfig=yes
890         have_x=yes
891         ],[
892         x11_pkgconfig=no
893     ])
894     AC_MSG_RESULT([$x11_pkgconfig])
895 else
896     x11_pkgconfig=no
897 fi
898 dnl Use the autoconf macro if no pkg-config files
899 if test "$x11_pkgconfig" = yes; then
900     PKG_CHECK_MODULES([X11], [x11])
901 else
902     AC_PATH_XTRA
903     test -z "$X11_CFLAGS" && X11_CFLAGS="$X_CFLAGS"
904     test -z "$X11_LIBS" && X11_LIBS="$X_LIBS -lX11"
905     AC_SUBST([X11_CFLAGS])
906     AC_SUBST([X11_LIBS])
907 fi
908
909 dnl Try to tell the user that the --x-* options are only used when
910 dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
911 m4_divert_once([HELP_BEGIN],
912 [These options are only used when the X libraries cannot be found by the
913 pkg-config utility.])
914
915 dnl We need X for xlib and dri, so bomb now if it's not found
916 if test "x$enable_glx" = xyes -a "x$no_x" = xyes; then
917     AC_MSG_ERROR([X11 development libraries needed for GLX])
918 fi
919
920 if test "x$enable_glx" = xyes; then
921     DEFINES="$DEFINES -DUSE_XCB"
922 fi
923
924 dnl Direct rendering or just indirect rendering
925 case "$host_os" in
926 gnu*)
927     dnl Disable by default on GNU/Hurd
928     driglx_direct_default="no"
929     ;;
930 cygwin*)
931     dnl Disable by default on cygwin
932     driglx_direct_default="no"
933     ;;
934 *)
935     driglx_direct_default="yes"
936     ;;
937 esac
938 AC_ARG_ENABLE([driglx-direct],
939     [AS_HELP_STRING([--disable-driglx-direct],
940         [enable direct rendering in GLX and EGL for DRI \
941             @<:@default=auto@:>@])],
942     [driglx_direct="$enableval"],
943     [driglx_direct="$driglx_direct_default"])
944
945 dnl
946 dnl libGL configuration per driver
947 dnl
948 case "x$enable_glx$enable_xlib_glx" in
949 xyesyes)
950     # Xlib-based GLX
951     if test "$x11_pkgconfig" = yes; then
952         PKG_CHECK_MODULES([XLIBGL], [x11 xext])
953         GL_PC_REQ_PRIV="x11 xext"
954         X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
955         GL_LIB_DEPS="$XLIBGL_LIBS"
956     else
957         # should check these...
958         X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
959         GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
960         GL_PC_LIB_PRIV="$GL_LIB_DEPS"
961         GL_PC_CFLAGS="$X11_INCLUDES"
962     fi
963     GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread $DLOPEN_LIBS"
964     GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm -lpthread"
965     ;;
966 xyesno)
967     # DRI-based GLX
968     PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
969     GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED"
970     if test x"$driglx_direct" = xyes; then
971         if test "x$have_libdrm" != xyes; then
972             AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED])
973         fi
974         PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
975         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED"
976     fi
977
978     # find the DRI deps for libGL
979     if test "$x11_pkgconfig" = yes; then
980         dri_modules="x11 xext xdamage xfixes x11-xcb xcb-glx"
981
982         # add xf86vidmode if available
983         PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
984         if test "$HAVE_XF86VIDMODE" = yes ; then
985             dri_modules="$dri_modules xxf86vm"
986         fi
987
988         PKG_CHECK_MODULES([DRIGL], [$dri_modules])
989         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
990         X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
991         GL_LIB_DEPS="$DRIGL_LIBS"
992     else
993         # should check these...
994         X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
995         if test "x$HAVE_XF86VIDMODE" == xyes; then
996            GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
997         else
998            GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXdamage -lXfixes"
999         fi
1000         GL_PC_LIB_PRIV="$GL_LIB_DEPS"
1001         GL_PC_CFLAGS="$X11_INCLUDES"
1002
1003         # XCB can only be used from pkg-config
1004         PKG_CHECK_MODULES([XCB],[x11-xcb xcb-glx])
1005         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV x11-xcb xcb-glx"
1006         X11_INCLUDES="$X11_INCLUDES $XCB_CFLAGS"
1007         GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
1008     fi
1009
1010     # Check to see if the xcb-glx library is new enough to support
1011     # GLX_ARB_create_context.  This bit of hackery is necessary until XCB 1.8
1012     # is released.
1013     save_CPPFLAGS="$CPPFLAGS"
1014     save_LDFLAGS="$LDFLAGS"
1015     CPPFLAGS="$CPPFLAGS $X11_INCLUDES"
1016     LDFLAGS="$LDFLAGS $GL_LIB_DEPS"
1017     AC_CHECK_LIB(xcb-glx, xcb_glx_create_context_attribs_arb_checked,
1018         [HAVE_XCB_GLX_CREATE_CONTEXT=yes],
1019         [HAVE_XCB_GLX_CREATE_CONTEXT=no])
1020     CPPFLAGS="$save_CPPFLAGS"
1021     LDFLAGS="$save_LDFLAGS"
1022
1023     if test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes; then
1024         X11_INCLUDES="$X11_INCLUDES -DHAVE_XCB_GLX_CREATE_CONTEXT"
1025     fi
1026
1027     # need DRM libs, -lpthread, etc.
1028     GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1029     GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1030     ;;
1031 esac
1032
1033 # This is outside the case (above) so that it is invoked even for non-GLX
1034 # builds.
1035 AM_CONDITIONAL(HAVE_XCB_GLX_CREATE_CONTEXT,
1036     test x$HAVE_XCB_GLX_CREATE_CONTEXT = xyes)
1037
1038 GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1039 GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1040 GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
1041 GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
1042
1043 AC_SUBST([GL_LIB_DEPS])
1044 AC_SUBST([GL_PC_REQ_PRIV])
1045 AC_SUBST([GL_PC_LIB_PRIV])
1046 AC_SUBST([GL_PC_CFLAGS])
1047 AC_SUBST([DRI_PC_REQ_PRIV])
1048 AC_SUBST([GLESv1_CM_LIB_DEPS])
1049 AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
1050 AC_SUBST([GLESv2_LIB_DEPS])
1051 AC_SUBST([GLESv2_PC_LIB_PRIV])
1052
1053 GLAPI_LIB_DEPS="-lpthread $SELINUX_LIBS"
1054 AC_SUBST([GLAPI_LIB_DEPS])
1055
1056
1057 dnl Setup default DRI CFLAGS
1058 DRI_CFLAGS='$(CFLAGS)'
1059 DRI_CXXFLAGS='$(CXXFLAGS)'
1060 DRI_LIB_DEPS='$(TOP)/src/mesa/libmesa.a'
1061 MESA_MODULES='$(TOP)/src/mesa/libmesa.a'
1062
1063 if test "x$enable_dri" = xyes ; then
1064     DRICORE_GLSL_LIBS='$(TOP)/$(LIB_DIR)/libglsl.so'
1065     DRICORE_LIBS='$(TOP)/$(LIB_DIR)/libdricore.so'
1066     DRICORE_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -lglsl'
1067     DRI_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -ldricore -lglsl'
1068     DRI_CFLAGS='$(CFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1069     DRI_CXXFLAGS='$(CXXFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1070     MESA_MODULES='$(DRICORE_LIBS) $(DRICORE_GLSL_LIBS)'
1071 fi
1072 AC_SUBST([DRICORE_LIBS])
1073 AC_SUBST([DRICORE_GLSL_LIBS])
1074 AC_SUBST([DRICORE_LIB_DEPS])
1075 AC_SUBST([DRI_CXXFLAGS])
1076 AC_SUBST([DRI_CFLAGS])
1077 AC_SUBST([MESA_MODULES])
1078
1079 AC_SUBST([HAVE_XF86VIDMODE])
1080
1081 dnl
1082 dnl More GLX setup
1083 dnl
1084 case "x$enable_glx$enable_xlib_glx" in
1085 xyesyes)
1086     DEFINES="$DEFINES -DUSE_XSHM"
1087     ;;
1088 xyesno)
1089     DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1090     if test "x$driglx_direct" = xyes; then
1091         DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1092     fi
1093     ;;
1094 esac
1095
1096 dnl
1097 dnl TLS detection
1098 dnl
1099
1100 AC_ARG_ENABLE([glx-tls],
1101     [AS_HELP_STRING([--enable-glx-tls],
1102         [enable TLS support in GLX @<:@default=disabled@:>@])],
1103     [GLX_USE_TLS="$enableval"],
1104     [GLX_USE_TLS=no])
1105 AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1106
1107 AS_IF([test "x$GLX_USE_TLS" = xyes],
1108       [DEFINES="${DEFINES} -DGLX_USE_TLS -DPTHREADS"])
1109
1110 dnl
1111 dnl More DRI setup
1112 dnl
1113 dnl Directory for DRI drivers
1114 AC_ARG_WITH([dri-driverdir],
1115     [AS_HELP_STRING([--with-dri-driverdir=DIR],
1116         [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
1117     [DRI_DRIVER_INSTALL_DIR="$withval"],
1118     [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
1119 AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1120 dnl Extra search path for DRI drivers
1121 AC_ARG_WITH([dri-searchpath],
1122     [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
1123         [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
1124     [DRI_DRIVER_SEARCH_DIR="$withval"],
1125     [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
1126 AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1127 dnl Which drivers to build - default is chosen by platform
1128 AC_ARG_WITH([dri-drivers],
1129     [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
1130         [comma delimited DRI drivers list, e.g.
1131         "swrast,i965,radeon" @<:@default=auto@:>@])],
1132     [with_dri_drivers="$withval"],
1133     [with_dri_drivers=yes])
1134 if test "x$with_dri_drivers" = x; then
1135     with_dri_drivers=no
1136 fi
1137
1138 dnl If $with_dri_drivers is yes, directories will be added through
1139 dnl platform checks
1140 DRI_DIRS=""
1141 case "$with_dri_drivers" in
1142 no) ;;
1143 yes)
1144     # classic DRI drivers require FEATURE_GL to build
1145     if test "x$enable_opengl" = xyes; then
1146         DRI_DIRS="yes"
1147     fi
1148     ;;
1149 *)
1150     # verify the requested driver directories exist
1151     dri_drivers=`IFS=', '; echo $with_dri_drivers`
1152     for driver in $dri_drivers; do
1153         test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
1154             AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
1155     done
1156     DRI_DIRS="$dri_drivers"
1157     if test -n "$DRI_DIRS" -a "x$enable_opengl" != xyes; then
1158         AC_MSG_ERROR([--with-dri-drivers requires OpenGL])
1159     fi
1160     ;;
1161 esac
1162
1163 dnl Set DRI_DIRS, DEFINES and LIB_DEPS
1164 if test "x$enable_dri" = xyes; then
1165     # Platform specific settings and drivers to build
1166     case "$host_os" in
1167     linux*)
1168         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1169         DEFINES="$DEFINES -DHAVE_ALIAS"
1170
1171         case "$host_cpu" in
1172         x86_64)
1173             if test "x$DRI_DIRS" = "xyes"; then
1174                 DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1175             fi
1176             ;;
1177         powerpc*)
1178             # Build only the drivers for cards that exist on PowerPC.
1179             if test "x$DRI_DIRS" = "xyes"; then
1180                 DRI_DIRS="r200 radeon swrast"
1181             fi
1182             ;;
1183         sparc*)
1184             # Build only the drivers for cards that exist on sparc
1185             if test "x$DRI_DIRS" = "xyes"; then
1186                 DRI_DIRS="r200 radeon swrast"
1187             fi
1188             ;;
1189         esac
1190         ;;
1191     freebsd* | dragonfly* | *netbsd*)
1192         DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
1193         DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
1194
1195         if test "x$DRI_DIRS" = "xyes"; then
1196             DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1197         fi
1198         ;;
1199     gnu*)
1200         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1201         DEFINES="$DEFINES -DHAVE_ALIAS"
1202         ;;
1203     solaris*)
1204         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1205         ;;
1206     cygwin*)
1207         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1208         if test "x$DRI_DIRS" = "xyes"; then
1209             DRI_DIRS="swrast"
1210         fi
1211         ;;
1212     esac
1213
1214     # default drivers
1215     if test "x$DRI_DIRS" = "xyes"; then
1216         DRI_DIRS="i915 i965 nouveau r200 radeon swrast"
1217     fi
1218
1219     DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
1220
1221     # Check for expat
1222     if test "x$enable_dri" = xyes; then
1223         EXPAT_INCLUDES=""
1224         EXPAT_LIB=-lexpat
1225         AC_ARG_WITH([expat],
1226             [AS_HELP_STRING([--with-expat=DIR],
1227                 [expat install directory])],[
1228             EXPAT_INCLUDES="-I$withval/include"
1229             CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
1230             LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
1231             EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
1232             ])
1233         AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
1234         AC_CHECK_LIB([expat],[XML_ParserCreate],[],
1235             [AC_MSG_ERROR([Expat required for DRI.])])
1236     fi
1237
1238     # libdrm is required for all except swrast
1239     if test -n "$DRI_DIRS" -a x"$DRI_DIRS" != xswrast; then
1240         if test "x$have_libdrm" != xyes; then
1241             AC_MSG_ERROR([DRI drivers requires libdrm >= $LIBDRM_REQUIRED])
1242         fi
1243     fi
1244
1245     # put all the necessary libs together
1246     DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
1247 fi
1248 AC_SUBST([DRI_DIRS])
1249 AC_SUBST([EXPAT_INCLUDES])
1250 AC_SUBST([DRI_LIB_DEPS])
1251
1252 case $DRI_DIRS in
1253 *i915*|*i965*)
1254     PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1255
1256     for d in $(echo $DRI_DIRS | sed 's/,/ /g'); do
1257         case $d in
1258         i915)
1259             HAVE_I915_DRI=yes;
1260             ;;
1261         i965)
1262             HAVE_I965_DRI=yes;
1263             ;;
1264         esac
1265     done
1266
1267     ;;
1268 esac
1269
1270 case $DRI_DIRS in
1271 *nouveau*)
1272     PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1273     HAVE_NOUVEAU_DRI=yes;
1274     ;;
1275 esac
1276
1277 case $DRI_DIRS in
1278 *radeon*|*r200*)
1279     PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1280
1281     for d in $(echo $DRI_DIRS | sed 's/,/ /g'); do
1282         case $d in
1283         radeon)
1284             HAVE_RADEON_DRI=yes;
1285             ;;
1286         r200)
1287             HAVE_R200_DRI=yes;
1288             ;;
1289         esac
1290     done
1291
1292     ;;
1293 esac
1294
1295 case $DRI_DIRS in
1296 *swrast*)
1297     HAVE_SWRAST_DRI=yes;
1298     ;;
1299 esac
1300
1301 AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
1302 AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
1303 AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
1304 AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes)
1305 AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
1306 AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
1307
1308 dnl
1309 dnl OSMesa configuration
1310 dnl
1311
1312 dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1313 AC_ARG_WITH([osmesa-bits],
1314     [AS_HELP_STRING([--with-osmesa-bits=BITS],
1315         [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1316     [osmesa_bits="$withval"],
1317     [osmesa_bits=8])
1318 if test "x$osmesa_bits" != x8; then
1319     if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then
1320         AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1321         osmesa_bits=8
1322     fi
1323 fi
1324 case "x$osmesa_bits" in
1325 x8)
1326     OSMESA_LIB="${OSMESA_LIB}"
1327     ;;
1328 x16|x32)
1329     OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
1330     DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1331     ;;
1332 *)
1333     AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1334     ;;
1335 esac
1336
1337 if test "x$enable_osmesa" = xyes; then
1338     # only link libraries with osmesa if shared
1339     if test "$enable_static" = no; then
1340         OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1341     else
1342         OSMESA_LIB_DEPS=""
1343     fi
1344     OSMESA_MESA_DEPS=""
1345     OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1346 fi
1347 AC_SUBST([OSMESA_LIB_DEPS])
1348 AC_SUBST([OSMESA_MESA_DEPS])
1349 AC_SUBST([OSMESA_PC_REQ])
1350 AC_SUBST([OSMESA_PC_LIB_PRIV])
1351
1352 dnl
1353 dnl gbm configuration
1354 dnl
1355 if test "x$enable_gbm" = xauto; then
1356     case "$with_egl_platforms" in
1357         *drm*)
1358             enable_gbm=yes ;;
1359          *)
1360             enable_gbm=no ;;
1361     esac
1362 fi
1363 if test "x$enable_gbm" = xyes; then
1364     SRC_DIRS="$SRC_DIRS gbm"
1365     GBM_BACKEND_DIRS=""
1366
1367     PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
1368                       AC_MSG_ERROR([gbm needs udev]))
1369     GBM_LIB_DEPS="$DLOPEN_LIBS $LIBUDEV_LIBS"
1370
1371     if test "x$enable_dri" = xyes; then
1372         GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
1373     fi
1374 fi
1375 AC_SUBST([GBM_LIB_DEPS])
1376 AC_SUBST([GBM_BACKEND_DIRS])
1377 GBM_PC_REQ_PRIV="libudev"
1378 GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1379 GBM_PC_CFLAGS=
1380 AC_SUBST([GBM_PC_REQ_PRIV])
1381 AC_SUBST([GBM_PC_LIB_PRIV])
1382 AC_SUBST([GBM_PC_CFLAGS])
1383
1384 dnl
1385 dnl EGL configuration
1386 dnl
1387 EGL_CLIENT_APIS=""
1388
1389 if test "x$enable_egl" = xyes; then
1390     SRC_DIRS="$SRC_DIRS egl"
1391     EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread"
1392     EGL_DRIVERS_DIRS=""
1393
1394     AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
1395
1396     if test "$enable_static" != yes; then
1397         # build egl_glx when libGL is built
1398         if test "x$enable_glx" = xyes; then
1399             EGL_DRIVERS_DIRS="glx"
1400         fi
1401
1402         PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
1403                           [have_libudev=yes],[have_libudev=no])
1404         if test "$have_libudev" = yes; then
1405             DEFINES="$DEFINES -DHAVE_LIBUDEV"
1406         fi
1407         if test "x$enable_dri" = xyes; then
1408             # build egl_dri2 when xcb-dri2 is available
1409             PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes],
1410                           [have_xcb_dri2=yes],[have_xcb_dri2=no])
1411             
1412             if test "$have_xcb_dri2" = yes; then
1413                 EGL_DRIVER_DRI2=dri2
1414                 DEFINES="$DEFINES -DHAVE_XCB_DRI2"
1415                 # workaround a bug in xcb-dri2 generated by xcb-proto 1.6
1416                 AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
1417                           [DEFINES="$DEFINES -DXCB_DRI2_CONNECT_DEVICE_NAME_BROKEN"])
1418             fi
1419         fi
1420
1421         EGL_DRIVERS_DIRS="$EGL_DRIVERS_DIRS $EGL_DRIVER_DRI2"
1422     fi
1423 fi
1424 AC_SUBST([EGL_LIB_DEPS])
1425 AC_SUBST([EGL_DRIVERS_DIRS])
1426
1427 dnl
1428 dnl EGL Gallium configuration
1429 dnl
1430 if test "x$enable_gallium_egl" = xyes; then
1431     if test "x$with_gallium_drivers" = x; then
1432         AC_MSG_ERROR([cannot enable egl_gallium without Gallium])
1433     fi
1434     if test "x$enable_egl" = xno; then
1435         AC_MSG_ERROR([cannot enable egl_gallium without EGL])
1436     fi
1437     if test "x$have_libdrm" != xyes; then
1438         AC_MSG_ERROR([egl_gallium requires libdrm >= $LIBDRM_REQUIRED])
1439     fi
1440
1441     GALLIUM_STATE_TRACKERS_DIRS="egl $GALLIUM_STATE_TRACKERS_DIRS"
1442     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS egl-static"
1443     HAVE_ST_EGL="yes"
1444 fi
1445
1446 dnl
1447 dnl gbm Gallium configuration
1448 dnl
1449 if test "x$enable_gallium_gbm" = xauto; then
1450     case "$enable_gbm$HAVE_ST_EGL$enable_dri$with_egl_platforms" in
1451         yesyesyes*drm*)
1452             enable_gallium_gbm=yes ;;
1453          *)
1454             enable_gallium_gbm=no ;;
1455     esac
1456 fi
1457 if test "x$enable_gallium_gbm" = xyes; then
1458     if test "x$with_gallium_drivers" = x; then
1459         AC_MSG_ERROR([cannot enable gbm_gallium without Gallium])
1460     fi
1461     if test "x$enable_gbm" = xno; then
1462         AC_MSG_ERROR([cannot enable gbm_gallium without gbm])
1463     fi
1464     # gbm_gallium abuses DRI_LIB_DEPS to link.  Make sure it is set.
1465     if test "x$enable_dri" = xno; then
1466         AC_MSG_ERROR([gbm_gallium requires --enable-dri to build])
1467     fi
1468
1469     GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
1470     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
1471     HAVE_ST_GBM="yes"
1472 fi
1473
1474 dnl
1475 dnl X.Org DDX configuration
1476 dnl
1477 if test "x$enable_xorg" = xyes; then
1478     PKG_CHECK_MODULES([XORG], [xorg-server >= 1.6.0])
1479     PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED])
1480     PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
1481     PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1482         HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1483         HAVE_XEXTPROTO_71="no")
1484     GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
1485     HAVE_ST_XORG=yes
1486 fi
1487
1488 dnl
1489 dnl XA configuration
1490 dnl
1491 if test "x$enable_xa" = xyes; then
1492 AC_PROG_AWK
1493 AC_PROG_GREP
1494 AC_CHECK_PROG(NM, nm, "nm")
1495 if test "x$AWK" = x || test "x$GREP" = x || test "x$NM" = x; then
1496 AC_MSG_WARN([Missing one of nm, grep or awk. Disabling xa.])
1497 enable_xa=no
1498 fi
1499 fi
1500 if test "x$enable_xa" = xyes; then
1501     GALLIUM_STATE_TRACKERS_DIRS="xa $GALLIUM_STATE_TRACKERS_DIRS"
1502     HAVE_ST_XA=yes
1503     AC_SUBST(AWK)
1504     AC_SUBST(GREP)
1505     AC_SUBST(NM)
1506 fi
1507
1508 dnl
1509 dnl OpenVG configuration
1510 dnl
1511 VG_LIB_DEPS=""
1512
1513 if test "x$enable_openvg" = xyes; then
1514     if test "x$enable_egl" = xno; then
1515         AC_MSG_ERROR([cannot enable OpenVG without EGL])
1516     fi
1517     if test "x$with_gallium_drivers" = x; then
1518         AC_MSG_ERROR([cannot enable OpenVG without Gallium])
1519     fi
1520     if test "x$enable_gallium_egl" = xno; then
1521         AC_MSG_ERROR([cannot enable OpenVG without egl_gallium])
1522     fi
1523
1524     EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
1525     VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
1526     CORE_DIRS="$CORE_DIRS mapi/vgapi"
1527     GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
1528     HAVE_ST_VEGA=yes
1529 fi
1530
1531 dnl
1532 dnl D3D1X configuration
1533 dnl
1534
1535 if test "x$enable_d3d1x" = xyes; then
1536     if test "x$with_gallium_drivers" = x; then
1537         AC_MSG_ERROR([cannot enable D3D1X without Gallium])
1538     fi
1539
1540     GALLIUM_STATE_TRACKERS_DIRS="d3d1x $GALLIUM_STATE_TRACKERS_DIRS"
1541     HAVE_ST_D3D1X=yes
1542 fi
1543
1544 dnl
1545 dnl Gallium G3DVL configuration
1546 dnl
1547 AC_ARG_ENABLE([gallium-g3dvl],
1548     [AS_HELP_STRING([--enable-gallium-g3dvl],
1549         [build gallium g3dvl @<:@default=disabled@:>@])],
1550     [enable_gallium_g3dvl="$enableval"],
1551     [enable_gallium_g3dvl=no])
1552 if test "x$enable_gallium_g3dvl" = xyes; then
1553     if test "x$with_gallium_drivers" = x; then
1554         AC_MSG_ERROR([cannot enable G3DVL without Gallium])
1555     fi
1556
1557     if test "x$enable_xvmc" = xauto; then
1558         PKG_CHECK_EXISTS([xvmc], [enable_xvmc=yes], [enable_xvmc=no])
1559     fi
1560
1561     if test "x$enable_vdpau" = xauto; then
1562         PKG_CHECK_EXISTS([vdpau], [enable_vdpau=yes], [enable_vdpau=no])
1563     fi
1564
1565     if test "x$enable_va" = xauto; then
1566         #don't enable vaapi state tracker even if package exists
1567         #PKG_CHECK_EXISTS([libva], [enable_vdpau=yes], [enable_vdpau=no])
1568         enable_va=no
1569     fi
1570 fi
1571
1572 if test "x$enable_xvmc" = xyes; then
1573     PKG_CHECK_MODULES([XVMC], [xvmc >= 1.0.6 xorg-server])
1574     GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg/xvmc"
1575     HAVE_ST_XVMC="yes"
1576 fi
1577
1578 if test "x$enable_vdpau" = xyes; then
1579     PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.4.1])
1580     GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vdpau"
1581     HAVE_ST_VDPAU="yes"
1582 fi
1583
1584 if test "x$enable_va" = xyes; then
1585     PKG_CHECK_MODULES([LIBVA], [libva = 0.31.1])
1586     AC_MSG_WARN([vaapi state tracker currently unmaintained])
1587     GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS va"
1588     HAVE_ST_VA="yes"
1589 fi
1590
1591 dnl
1592 dnl GLU configuration
1593 dnl
1594 AC_ARG_ENABLE([glu],
1595     [AS_HELP_STRING([--disable-glu],
1596         [enable OpenGL Utility library @<:@default=enabled@:>@])],
1597     [enable_glu="$enableval"],
1598     [enable_glu=yes])
1599
1600 if test "x$enable_glu" = xyes; then
1601     if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
1602         AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
1603         enable_glu=no
1604     fi
1605 fi
1606
1607 if test "x$enable_glu" = xyes; then
1608     SRC_DIRS="$SRC_DIRS glu"
1609
1610     if test "x$enable_glx" = xno; then
1611         # Link libGLU to libOSMesa instead of libGL
1612         GLU_LIB_DEPS=""
1613         GLU_PC_REQ="osmesa"
1614         if test "$enable_static" = no; then
1615             GLU_MESA_DEPS='-l$(OSMESA_LIB)'
1616         else
1617             GLU_MESA_DEPS=""
1618         fi
1619     else
1620         # If static, empty GLU_LIB_DEPS and add libs for programs to link
1621         GLU_PC_REQ="gl"
1622         GLU_PC_LIB_PRIV="-lm"
1623         if test "$enable_static" = no; then
1624             GLU_LIB_DEPS="-lm"
1625             GLU_MESA_DEPS='-l$(GL_LIB)'
1626         else
1627             GLU_LIB_DEPS=""
1628             GLU_MESA_DEPS=""
1629         fi
1630     fi
1631 fi
1632 if test "$enable_static" = no; then
1633     GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
1634 fi
1635 GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
1636 AC_SUBST([GLU_LIB_DEPS])
1637 AC_SUBST([GLU_MESA_DEPS])
1638 AC_SUBST([GLU_PC_REQ])
1639 AC_SUBST([GLU_PC_REQ_PRIV])
1640 AC_SUBST([GLU_PC_LIB_PRIV])
1641 AC_SUBST([GLU_PC_CFLAGS])
1642
1643 AC_SUBST([PROGRAM_DIRS])
1644
1645 dnl
1646 dnl Gallium configuration
1647 dnl
1648 if test "x$with_gallium_drivers" != x; then
1649     SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
1650 fi
1651
1652 AC_SUBST([LLVM_CFLAGS])
1653 AC_SUBST([LLVM_LIBS])
1654 AC_SUBST([LLVM_LDFLAGS])
1655 AC_SUBST([LLVM_VERSION])
1656
1657 case "x$enable_opengl$enable_gles1$enable_gles2" in
1658 x*yes*)
1659     EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1660     ;;
1661 esac
1662
1663 AC_SUBST([VG_LIB_DEPS])
1664 AC_SUBST([EGL_CLIENT_APIS])
1665
1666 AC_ARG_WITH([egl-platforms],
1667     [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1668         [comma delimited native platforms libEGL supports, e.g.
1669         "x11,drm" @<:@default=auto@:>@])],
1670     [with_egl_platforms="$withval"],
1671     [with_egl_platforms=yes])
1672
1673 EGL_PLATFORMS=""
1674 WAYLAND_EGL_LIB_DEPS=""
1675
1676 case "$with_egl_platforms" in
1677 yes)
1678     if test "x$enable_egl" = xyes; then
1679         EGL_PLATFORMS="x11"
1680     fi
1681     ;;
1682 *)
1683     if test "x$enable_egl" != xyes; then
1684         AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1685     fi
1686     # verify the requested driver directories exist
1687     egl_platforms=`IFS=', '; echo $with_egl_platforms`
1688     for plat in $egl_platforms; do
1689         test -d "$srcdir/src/gallium/state_trackers/egl/$plat" || \
1690             AC_MSG_ERROR([EGL platform '$plat' doesn't exist])
1691         if test "$plat" = "fbdev"; then
1692                 GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/fbdev"
1693         fi
1694         if test "$plat" = "null"; then
1695                 GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
1696         fi
1697         if test "$plat" = "wayland"; then
1698                 PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
1699                                   [AC_MSG_ERROR([cannot find libwayland-client])])
1700                 WAYLAND_EGL_LIB_DEPS="$WAYLAND_LIBS $LIBDRM_LIBS"
1701                 GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
1702         fi
1703         if test "$plat" = "drm" && test "x$enable_gbm" = "xno"; then
1704                 AC_MSG_ERROR([EGL platform drm needs gbm])
1705         fi
1706         case "$plat$have_libudev" in
1707                 waylandno|drmno)
1708                     AC_MSG_ERROR([cannot build $plat platfrom without udev]) ;;
1709         esac
1710     done
1711     EGL_PLATFORMS="$egl_platforms"
1712     ;;
1713 esac
1714 AC_SUBST([EGL_PLATFORMS])
1715
1716 AC_SUBST([WAYLAND_EGL_LIB_DEPS])
1717 WAYLAND_EGL_PC_REQ_PRIV="wayland-client libdrm"
1718 WAYLAND_EGL_PC_LIB_PRIV=
1719 WAYLAND_EGL_PC_CFLAGS=
1720
1721 AC_SUBST([WAYLAND_EGL_PC_REQ_PRIV])
1722 AC_SUBST([WAYLAND_EGL_PC_LIB_PRIV])
1723 AC_SUBST([WAYLAND_EGL_PC_CFLAGS])
1724
1725
1726 AC_ARG_WITH([egl-driver-dir],
1727     [AS_HELP_STRING([--with-egl-driver-dir=DIR],
1728                     [directory for EGL drivers [[default=${libdir}/egl]]])],
1729     [EGL_DRIVER_INSTALL_DIR="$withval"],
1730     [EGL_DRIVER_INSTALL_DIR='${libdir}/egl'])
1731 AC_SUBST([EGL_DRIVER_INSTALL_DIR])
1732
1733 AC_ARG_WITH([xorg-driver-dir],
1734     [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1735                     [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1736     [XORG_DRIVER_INSTALL_DIR="$withval"],
1737     [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1738 AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1739
1740 AC_ARG_WITH([max-width],
1741     [AS_HELP_STRING([--with-max-width=N],
1742                     [Maximum framebuffer width (4096)])],
1743     [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1744      AS_IF([test "${withval}" -gt "4096"],
1745            [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1746 )
1747 AC_ARG_WITH([max-height],
1748     [AS_HELP_STRING([--with-max-height=N],
1749                     [Maximum framebuffer height (4096)])],
1750     [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1751      AS_IF([test "${withval}" -gt "4096"],
1752            [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1753 )
1754
1755 dnl
1756 dnl Gallium LLVM
1757 dnl
1758 AC_ARG_ENABLE([gallium-llvm],
1759     [AS_HELP_STRING([--enable-gallium-llvm],
1760         [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1761     [enable_gallium_llvm="$enableval"],
1762     [enable_gallium_llvm=auto])
1763 if test "x$with_gallium_drivers" = x; then
1764     enable_gallium_llvm=no
1765 fi
1766 if test "x$enable_gallium_llvm" = xauto; then
1767     case "$host_cpu" in
1768     i*86|x86_64) enable_gallium_llvm=yes;;
1769     esac
1770 fi
1771 if test "x$enable_gallium_llvm" = xyes; then
1772     AC_PATH_PROG([LLVM_CONFIG], [llvm-config], [no])
1773
1774     if test "x$LLVM_CONFIG" != xno; then
1775         LLVM_VERSION=`$LLVM_CONFIG --version | sed 's/svn.*//g'`
1776         LLVM_CFLAGS=`$LLVM_CONFIG --cppflags|sed -e 's/-DNDEBUG\>//g' -e 's/-pedantic//g'`
1777         LLVM_LIBS="`$LLVM_CONFIG --libs`"
1778
1779         LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1780         DEFINES="$DEFINES -D__STDC_CONSTANT_MACROS"
1781         MESA_LLVM=1
1782     else
1783         MESA_LLVM=0
1784     fi
1785 else
1786     MESA_LLVM=0
1787 fi
1788
1789 dnl Directory for VDPAU libs
1790 AC_ARG_WITH([vdpau-libdir],
1791     [AS_HELP_STRING([--with-vdpau-libdir=DIR],
1792         [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
1793     [VDPAU_LIB_INSTALL_DIR="$withval"],
1794     [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
1795 AC_SUBST([VDPAU_LIB_INSTALL_DIR])
1796
1797 dnl Directory for VA libs
1798 AC_ARG_WITH([va-libdir],
1799     [AS_HELP_STRING([--with-va-libdir=DIR],
1800         [directory for the VA libraries @<:@default=${libdir}/va@:>@])],
1801     [VA_LIB_INSTALL_DIR="$withval"],
1802     [VA_LIB_INSTALL_DIR='${libdir}/va'])
1803 AC_SUBST([VA_LIB_INSTALL_DIR])
1804
1805 dnl
1806 dnl Gallium helper functions
1807 dnl
1808 gallium_check_st() {
1809     if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = xyes ||
1810          test "x$HAVE_ST_XA" = xyes || test "x$HAVE_ST_XVMC" = xyes ||
1811          test "x$HAVE_ST_VDPAU" = xyes || test "x$HAVE_ST_VA" = xyes; then
1812          if test "x$have_libdrm" != xyes; then
1813             AC_MSG_ERROR([DRI or Xorg DDX requires libdrm >= $LIBDRM_REQUIRED])
1814          fi
1815          GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS $1"
1816     fi
1817     if test "x$HAVE_ST_DRI" = xyes && test "x$2" != x; then
1818          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $2"
1819     fi
1820     if test "x$HAVE_ST_XORG" = xyes && test "x$3" != x; then
1821          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $3"
1822     fi
1823     if test "x$HAVE_ST_XA" = xyes && test "x$4" != x; then
1824          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $4"
1825     fi
1826     if test "x$HAVE_ST_XVMC" = xyes && test "x$5" != x; then
1827          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $5"
1828          NEED_G3DVL_DRI="yes"
1829     fi
1830     if test "x$HAVE_ST_VDPAU" = xyes && test "x$6" != x; then
1831          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $6"
1832          NEED_G3DVL_DRI="yes"
1833     fi
1834     if test "x$HAVE_ST_VA" = xyes && test "x$7" != x; then
1835          GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $7"
1836          NEED_G3DVL_DRI="yes"
1837     fi
1838 }
1839
1840 gallium_require_llvm() {
1841     if test "x$MESA_LLVM" = x0; then
1842         case "$host_cpu" in
1843         i*86|x86_64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
1844         esac
1845     fi
1846 }
1847
1848 dnl Gallium drivers
1849 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
1850 if test "x$with_gallium_drivers" != x; then
1851     gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
1852     for driver in $gallium_drivers; do
1853         case "x$driver" in
1854         xsvga)
1855             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga softpipe"
1856             gallium_check_st "svga/drm" "dri-vmwgfx" "" "xa-vmwgfx"
1857             ;;
1858         xi915)
1859             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1860             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 softpipe"
1861             if test "x$MESA_LLVM" = x1; then
1862                 GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1863             fi
1864             GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
1865             gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
1866             ;;
1867         xr300)
1868             gallium_require_llvm "Gallium R300"
1869             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
1870             gallium_check_st "radeon/drm" "dri-r300" "xorg-r300" "" "xvmc-r300" "vdpau-r300" "va-r300"
1871             ;;
1872         xr600)
1873             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
1874             gallium_check_st "radeon/drm" "dri-r600" "xorg-r600" "" "xvmc-r600" "vdpau-r600" "va-r600"
1875             ;;
1876         xnouveau)
1877             PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1878             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nvfx nv50 nvc0"
1879             gallium_check_st "nouveau/drm" "dri-nouveau" "xorg-nouveau" "" "xvmc-nouveau" "vdpau-nouveau"
1880             ;;
1881         xswrast)
1882             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS softpipe"
1883             if test "x$MESA_LLVM" = x1; then
1884                 GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1885             fi
1886
1887             if test "x$HAVE_ST_DRI" = xyes; then
1888                 GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
1889             fi
1890             if test "x$HAVE_ST_VDPAU" = xyes; then
1891                 GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS vdpau-softpipe"
1892             fi
1893             if test "x$HAVE_ST_XVMC" = xyes; then
1894                 GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS xvmc-softpipe"
1895             fi
1896             if test "x$HAVE_ST_VA" = xyes; then
1897                 GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS va-softpipe"
1898             fi
1899             if test "x$HAVE_ST_VDPAU" = xyes ||
1900                test "x$HAVE_ST_XVMC" = xyes ||
1901                test "x$HAVE_ST_VA" = xyes; then
1902                if test "x$HAVE_WINSYS_XLIB" != xyes; then
1903                   GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
1904                fi
1905             fi
1906             ;;
1907         *)
1908             AC_MSG_ERROR([Unknown Gallium driver: $driver])
1909             ;;
1910         esac
1911     done
1912 fi
1913
1914 if test "x$NEED_G3DVL_DRI" = xyes; then
1915     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS g3dvl/dri"
1916 fi
1917
1918 dnl prepend CORE_DIRS to SRC_DIRS
1919 SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1920
1921 dnl Restore LDFLAGS and CPPFLAGS
1922 LDFLAGS="$_SAVE_LDFLAGS"
1923 CPPFLAGS="$_SAVE_CPPFLAGS"
1924
1925 dnl Add user CFLAGS and CXXFLAGS
1926 CFLAGS="$CFLAGS $USER_CFLAGS"
1927 CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
1928
1929 dnl Substitute the config
1930 AC_CONFIG_FILES([configs/autoconf
1931                 src/mesa/drivers/dri/dri.pc
1932                 src/mesa/drivers/dri/Makefile
1933                 src/mesa/drivers/dri/i915/Makefile
1934                 src/mesa/drivers/dri/i965/Makefile
1935                 src/mesa/drivers/dri/nouveau/Makefile
1936                 src/mesa/drivers/dri/r200/Makefile
1937                 src/mesa/drivers/dri/radeon/Makefile
1938                 src/mesa/drivers/dri/swrast/Makefile
1939                 tests/Makefile
1940                 tests/glx/Makefile])
1941
1942 dnl Replace the configs/current symlink
1943 AC_CONFIG_COMMANDS([configs],[
1944 if test -f configs/current || test -L configs/current; then
1945     rm -f configs/current
1946 fi
1947 ln -s autoconf configs/current
1948 ])
1949
1950 dnl Sort the dirs alphabetically
1951 GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1952 GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1953 GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1954 GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1955
1956 AC_OUTPUT
1957
1958 dnl
1959 dnl Output some configuration info for the user
1960 dnl
1961 echo ""
1962 echo "        prefix:          $prefix"
1963 echo "        exec_prefix:     $exec_prefix"
1964 echo "        libdir:          $libdir"
1965 echo "        includedir:      $includedir"
1966
1967 dnl API info
1968 echo ""
1969 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
1970 echo "        OpenVG:          $enable_openvg"
1971
1972 dnl Driver info
1973 echo ""
1974 if test "x$enable_osmesa" != xno; then
1975         echo "        OSMesa:          lib$OSMESA_LIB"
1976 else
1977         echo "        OSMesa:          no"
1978 fi
1979
1980 if test "x$enable_dri" != xno; then
1981         # cleanup the drivers var
1982         dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1983         if test "x$DRI_DIRS" = x; then
1984             echo "        DRI drivers:     no"
1985         else
1986             echo "        DRI drivers:     $dri_dirs"
1987         fi
1988         echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1989 fi
1990
1991 case "x$enable_glx$enable_xlib_glx" in
1992 xyesyes)
1993     echo "        GLX:             Xlib-based"
1994     ;;
1995 xyesno)
1996     echo "        GLX:             DRI-based"
1997     ;;
1998 *)
1999     echo "        GLX:             $enable_glx"
2000     ;;
2001 esac
2002
2003 echo ""
2004 echo "        GLU:             $enable_glu"
2005
2006 dnl EGL
2007 echo ""
2008 echo "        EGL:             $enable_egl"
2009 if test "$enable_egl" = yes; then
2010     echo "        EGL platforms:   $EGL_PLATFORMS"
2011
2012     egl_drivers=""
2013     for d in $EGL_DRIVERS_DIRS; do
2014         egl_drivers="$egl_drivers builtin:egl_$d"
2015     done
2016
2017     if test "x$HAVE_ST_EGL" = xyes; then
2018         echo "        EGL drivers:    ${egl_drivers} egl_gallium"
2019         echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
2020     else
2021         echo "        EGL drivers:    $egl_drivers"
2022     fi
2023 fi
2024
2025 echo ""
2026 if test "x$MESA_LLVM" = x1; then
2027     echo "        llvm:            yes"
2028     echo "        llvm-config:     $LLVM_CONFIG"
2029     echo "        llvm-version:    $LLVM_VERSION"
2030 else
2031     echo "        llvm:            no"
2032 fi
2033
2034 echo ""
2035 if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
2036     echo "        Gallium:         yes"
2037     echo "        Gallium dirs:    $GALLIUM_DIRS"
2038     echo "        Target dirs:     $GALLIUM_TARGET_DIRS"
2039     echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
2040     echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
2041     echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
2042 else
2043     echo "        Gallium:         no"
2044 fi
2045
2046
2047 dnl Libraries
2048 echo ""
2049 echo "        Shared libs:     $enable_shared"
2050 echo "        Static libs:     $enable_static"
2051
2052 dnl Compiler options
2053 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2054 cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2055     $SED 's/^ *//;s/  */ /;s/ *$//'`
2056 cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2057     $SED 's/^ *//;s/  */ /;s/ *$//'`
2058 defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
2059 echo ""
2060 echo "        CFLAGS:          $cflags"
2061 echo "        CXXFLAGS:        $cxxflags"
2062 echo "        Macros:          $defines"
2063 echo ""
2064 echo "        PYTHON2:         $PYTHON2"
2065
2066 echo ""
2067 echo "        Run '${MAKE-make}' to build Mesa"
2068 echo ""