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