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