OSDN Git Service

3499e99f5e43e1fe2e5844cdde6ddad5c06f2433
[android-x86/external-mesa.git] / configure.ac
1 dnl Copyright © 2011-2014 Intel Corporation
2 dnl Copyright © 2011-2014 Emil Velikov <emil.l.velikov@gmail.com>
3 dnl Copyright © 2007-2010 Dan Nicholson
4 dnl Copyright © 2010-2014 Marek Olšák <maraeo@gmail.com>
5 dnl Copyright © 2010-2014 Christian König
6 dnl Copyright © 2012-2014 Tom Stellard <tstellar@gmail.com>
7 dnl Copyright © 2009-2012 Jakob Bornecrantz
8 dnl Copyright © 2009-2014 Jon TURNEY
9 dnl Copyright © 2011-2012 Benjamin Franzke
10 dnl Copyright © 2008-2014 David Airlie
11 dnl Copyright © 2009-2013 Brian Paul
12 dnl Copyright © 2003-2007 Keith Packard, Daniel Stone
13 dnl
14 dnl Permission is hereby granted, free of charge, to any person obtaining a
15 dnl copy of this software and associated documentation files (the "Software"),
16 dnl to deal in the Software without restriction, including without limitation
17 dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
18 dnl and/or sell copies of the Software, and to permit persons to whom the
19 dnl Software is furnished to do so, subject to the following conditions:
20 dnl
21 dnl The above copyright notice and this permission notice (including the next
22 dnl paragraph) shall be included in all copies or substantial portions of the
23 dnl Software.
24 dnl
25 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26 dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27 dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
28 dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29 dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
30 dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
31 dnl DEALINGS IN THE SOFTWARE.
32 dnl
33 dnl Process this file with autoconf to create configure.
34
35 AC_PREREQ([2.60])
36
37 dnl Tell the user about autoconf.html in the --help output
38 m4_divert_once([HELP_END], [
39 See docs/autoconf.html for more details on the options for Mesa.])
40
41 m4_define(MESA_VERSION, m4_normalize(m4_include(VERSION)))
42 AC_INIT([Mesa], [MESA_VERSION],
43     [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
44 AC_CONFIG_AUX_DIR([bin])
45 AC_CONFIG_MACRO_DIR([m4])
46 AC_CANONICAL_SYSTEM
47 AM_INIT_AUTOMAKE([foreign tar-ustar dist-xz subdir-objects])
48
49 dnl We only support native Windows builds (MinGW/MSVC) through SCons.
50 case "$host_os" in
51 mingw*)
52     AC_MSG_ERROR([MinGW build not supported through autoconf/automake, use SCons instead])
53     ;;
54 esac
55
56 # Support silent build rules, requires at least automake-1.11. Disable
57 # by either passing --disable-silent-rules to configure or passing V=1
58 # to make
59 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
60     [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
61
62 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
63
64 dnl Set internal versions
65 OSMESA_VERSION=8
66 AC_SUBST([OSMESA_VERSION])
67 OPENCL_VERSION=1
68 AC_SUBST([OPENCL_VERSION])
69
70 dnl Versions for external dependencies
71 LIBDRM_REQUIRED=2.4.66
72 LIBDRM_RADEON_REQUIRED=2.4.56
73 LIBDRM_AMDGPU_REQUIRED=2.4.63
74 LIBDRM_INTEL_REQUIRED=2.4.61
75 LIBDRM_NVVIEUX_REQUIRED=2.4.66
76 LIBDRM_NOUVEAU_REQUIRED=2.4.66
77 LIBDRM_FREEDRENO_REQUIRED=2.4.67
78 DRI2PROTO_REQUIRED=2.6
79 DRI3PROTO_REQUIRED=1.0
80 PRESENTPROTO_REQUIRED=1.0
81 LIBUDEV_REQUIRED=151
82 GLPROTO_REQUIRED=1.4.14
83 LIBOMXIL_BELLAGIO_REQUIRED=0.0
84 LIBVA_REQUIRED=0.38.0
85 VDPAU_REQUIRED=1.1
86 WAYLAND_REQUIRED=1.2.0
87 XCB_REQUIRED=1.9.3
88 XCBDRI2_REQUIRED=1.8
89 XCBGLX_REQUIRED=1.8.1
90 XSHMFENCE_REQUIRED=1.1
91 XVMC_REQUIRED=1.0.6
92 PYTHON_MAKO_REQUIRED=0.3.4
93
94 dnl Check for progs
95 AC_PROG_CPP
96 AC_PROG_CC
97 AC_PROG_CXX
98 AM_PROG_CC_C_O
99 AM_PROG_AS
100 AX_CHECK_GNU_MAKE
101 AC_CHECK_PROGS([PYTHON2], [python2.7 python2 python])
102 AC_CHECK_PROGS([PYTHON3], [python3.5 python3.4 python3])
103 AC_PROG_SED
104 AC_PROG_MKDIR_P
105
106 AC_SYS_LARGEFILE
107
108 LT_PREREQ([2.2])
109 LT_INIT([disable-static])
110
111 AC_CHECK_PROG(RM, rm, [rm -f])
112
113 AX_PROG_BISON([],
114               AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-parse.c"],
115                     [AC_MSG_ERROR([bison not found - unable to compile glcpp-parse.y])]))
116 AX_PROG_FLEX([],
117              AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-lex.c"],
118                    [AC_MSG_ERROR([flex not found - unable to compile glcpp-lex.l])]))
119
120 AC_CHECK_PROG(INDENT, indent, indent, cat)
121 if test "x$INDENT" != "xcat"; then
122     # Only GNU indent is supported
123     INDENT_VERSION=`indent --version | grep GNU`
124     if test $? -eq 0; then
125        AC_SUBST(INDENT_FLAGS, '-i4 -nut -br -brs -npcs -ce -TGLubyte -TGLbyte -TBool')
126     else
127        INDENT="cat"
128     fi
129 fi
130
131 AX_CHECK_PYTHON_MAKO_MODULE($PYTHON_MAKO_REQUIRED)
132
133 if test -z "$PYTHON2"; then
134     if test ! -f "$srcdir/src/util/format_srgb.c"; then
135         AC_MSG_ERROR([Python not found - unable to generate sources])
136     fi
137 else
138     if test "x$acv_mako_found" = xno; then
139         if test ! -f "$srcdir/src/mesa/main/format_unpack.c"; then
140             AC_MSG_ERROR([Python mako module v$PYTHON_MAKO_REQUIRED or higher not found])
141         fi
142     fi
143 fi
144
145 AC_PROG_INSTALL
146
147 dnl We need a POSIX shell for parts of the build. Assume we have one
148 dnl in most cases.
149 case "$host_os" in
150 solaris*)
151     # Solaris /bin/sh is too old/non-POSIX compliant
152     AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
153     SHELL="$POSIX_SHELL"
154     ;;
155 esac
156
157 dnl clang is mostly GCC-compatible, but its version is much lower,
158 dnl so we have to check for it.
159 AC_MSG_CHECKING([if compiling with clang])
160
161 AC_COMPILE_IFELSE(
162 [AC_LANG_PROGRAM([], [[
163 #ifndef __clang__
164        not clang
165 #endif
166 ]])],
167 [acv_mesa_CLANG=yes], [acv_mesa_CLANG=no])
168
169 AC_MSG_RESULT([$acv_mesa_CLANG])
170
171 dnl If we're using GCC, make sure that it is at least version 4.2.0.  Older
172 dnl versions are explictly not supported.
173 GEN_ASM_OFFSETS=no
174 USE_GNU99=no
175 if test "x$GCC" = xyes -a "x$acv_mesa_CLANG" = xno; then
176     AC_MSG_CHECKING([whether gcc version is sufficient])
177     major=0
178     minor=0
179
180     GCC_VERSION=`$CC -dumpversion`
181     if test $? -eq 0; then
182         GCC_VERSION_MAJOR=`echo $GCC_VERSION | cut -d. -f1`
183         GCC_VERSION_MINOR=`echo $GCC_VERSION | cut -d. -f2`
184     fi
185
186     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 2 ; then
187         AC_MSG_RESULT([no])
188         AC_MSG_ERROR([If using GCC, version 4.2.0 or later is required.])
189     else
190         AC_MSG_RESULT([yes])
191     fi
192
193     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6 ; then
194         USE_GNU99=yes
195     fi
196     if test "x$cross_compiling" = xyes; then
197         GEN_ASM_OFFSETS=yes
198     fi
199 fi
200
201 dnl We don't support building Mesa with Sun C compiler
202 dnl https://bugs.freedesktop.org/show_bug.cgi?id=93189
203 AC_CHECK_DECL([__SUNPRO_C], [SUNCC=yes], [SUNCC=no])
204 if test "x$SUNCC" = xyes; then
205     AC_MSG_ERROR([Building with Sun C compiler is not supported, use GCC instead.])
206 fi
207
208 dnl Check for compiler builtins
209 AX_GCC_BUILTIN([__builtin_bswap32])
210 AX_GCC_BUILTIN([__builtin_bswap64])
211 AX_GCC_BUILTIN([__builtin_clz])
212 AX_GCC_BUILTIN([__builtin_clzll])
213 AX_GCC_BUILTIN([__builtin_ctz])
214 AX_GCC_BUILTIN([__builtin_expect])
215 AX_GCC_BUILTIN([__builtin_ffs])
216 AX_GCC_BUILTIN([__builtin_ffsll])
217 AX_GCC_BUILTIN([__builtin_popcount])
218 AX_GCC_BUILTIN([__builtin_popcountll])
219 AX_GCC_BUILTIN([__builtin_unreachable])
220
221 AX_GCC_FUNC_ATTRIBUTE([const])
222 AX_GCC_FUNC_ATTRIBUTE([flatten])
223 AX_GCC_FUNC_ATTRIBUTE([format])
224 AX_GCC_FUNC_ATTRIBUTE([malloc])
225 AX_GCC_FUNC_ATTRIBUTE([packed])
226 AX_GCC_FUNC_ATTRIBUTE([pure])
227 AX_GCC_FUNC_ATTRIBUTE([returns_nonnull])
228 AX_GCC_FUNC_ATTRIBUTE([unused])
229 AX_GCC_FUNC_ATTRIBUTE([warn_unused_result])
230
231 AM_CONDITIONAL([GEN_ASM_OFFSETS], test "x$GEN_ASM_OFFSETS" = xyes)
232
233 dnl Make sure the pkg-config macros are defined
234 m4_ifndef([PKG_PROG_PKG_CONFIG],
235     [m4_fatal([Could not locate the pkg-config autoconf macros.
236   These are usually located in /usr/share/aclocal/pkg.m4. If your macros
237   are in a different location, try setting the environment variable
238   ACLOCAL="aclocal -I/other/macro/dir" before running autoreconf.])])
239 PKG_PROG_PKG_CONFIG()
240
241 dnl LIB_DIR - library basename
242 LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
243 AC_SUBST([LIB_DIR])
244
245 dnl Cache LDFLAGS and CPPFLAGS so we can add to them and restore later
246 _SAVE_LDFLAGS="$LDFLAGS"
247 _SAVE_CPPFLAGS="$CPPFLAGS"
248
249 dnl Compiler macros
250 DEFINES="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS"
251 AC_SUBST([DEFINES])
252 case "$host_os" in
253 linux*|*-gnu*|gnu*)
254     DEFINES="$DEFINES -D_GNU_SOURCE"
255     ;;
256 solaris*)
257     DEFINES="$DEFINES -DSVR4"
258     ;;
259 cygwin*)
260     DEFINES="$DEFINES -D_XOPEN_SOURCE=700"
261     ;;
262 esac
263
264 dnl Add flags for gcc and g++
265 if test "x$GCC" = xyes; then
266     CFLAGS="$CFLAGS -Wall"
267
268     if test "x$USE_GNU99" = xyes; then
269         CFLAGS="$CFLAGS -std=gnu99"
270     else
271         CFLAGS="$CFLAGS -std=c99"
272     fi
273
274     # Enable -Werror=implicit-function-declaration and
275     # -Werror=missing-prototypes, if available, or otherwise, just
276     # -Wmissing-prototypes.  This is particularly useful to avoid
277     # generating a loadable driver module that has undefined symbols.
278     save_CFLAGS="$CFLAGS"
279     AC_MSG_CHECKING([whether $CC supports -Werror=missing-prototypes])
280     CFLAGS="$CFLAGS -Werror=implicit-function-declaration"
281     CFLAGS="$CFLAGS -Werror=missing-prototypes"
282     AC_LINK_IFELSE([AC_LANG_PROGRAM()],
283                    AC_MSG_RESULT([yes]),
284                    [CFLAGS="$save_CFLAGS -Wmissing-prototypes";
285                     AC_MSG_RESULT([no])]);
286
287     # Enable -fvisibility=hidden if using a gcc that supports it
288     save_CFLAGS="$CFLAGS"
289     AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
290     VISIBILITY_CFLAGS="-fvisibility=hidden"
291     CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
292     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
293                    [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
294
295     # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
296     CFLAGS=$save_CFLAGS
297
298     # Work around aliasing bugs - developers should comment this out
299     CFLAGS="$CFLAGS -fno-strict-aliasing"
300
301     # We don't want floating-point math functions to set errno or trap
302     CFLAGS="$CFLAGS -fno-math-errno -fno-trapping-math"
303
304     # gcc's builtin memcmp is slower than glibc's
305     # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
306     CFLAGS="$CFLAGS -fno-builtin-memcmp"
307
308     # Flags to help ensure that certain portions of the code -- and only those
309     # portions -- can be built with MSVC:
310     # - src/util, src/gallium/auxiliary, rc/gallium/drivers/llvmpipe, and
311     # - non-Linux/Posix OpenGL portions needs to build on MSVC 2013 (which
312     #   supports most of C99)
313     # - the rest has no compiler compiler restrictions
314     MSVC2013_COMPAT_CFLAGS="-Werror=pointer-arith"
315     MSVC2013_COMPAT_CXXFLAGS="-Werror=pointer-arith"
316
317     # Enable -Werror=vla if compiler supports it
318     save_CFLAGS="$CFLAGS"
319     AC_MSG_CHECKING([whether $CC supports -Werror=vla])
320     CFLAGS="$CFLAGS -Werror=vla"
321     AC_LINK_IFELSE([AC_LANG_PROGRAM()],
322                    [MSVC2013_COMPAT_CFLAGS="$MSVC2013_COMPAT_CFLAGS -Werror=vla";
323                     MSVC2013_COMPAT_CXXFLAGS="$MSVC2013_COMPAT_CXXFLAGS -Werror=vla";
324                     AC_MSG_RESULT([yes])],
325                     AC_MSG_RESULT([no]));
326     CFLAGS="$save_CFLAGS"
327 fi
328 if test "x$GXX" = xyes; then
329     CXXFLAGS="$CXXFLAGS -Wall"
330
331     # Enable -fvisibility=hidden if using a gcc that supports it
332     save_CXXFLAGS="$CXXFLAGS"
333     AC_MSG_CHECKING([whether $CXX supports -fvisibility=hidden])
334     VISIBILITY_CXXFLAGS="-fvisibility=hidden"
335     CXXFLAGS="$CXXFLAGS $VISIBILITY_CXXFLAGS"
336     AC_LANG_PUSH([C++])
337     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
338                    [VISIBILITY_CXXFLAGS="" ; AC_MSG_RESULT([no])]);
339     AC_LANG_POP([C++])
340
341     # Restore CXXFLAGS; VISIBILITY_CXXFLAGS are added to it where needed.
342     CXXFLAGS=$save_CXXFLAGS
343
344     # Work around aliasing bugs - developers should comment this out
345     CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
346
347     # gcc's builtin memcmp is slower than glibc's
348     # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
349     CXXFLAGS="$CXXFLAGS -fno-builtin-memcmp"
350 fi
351
352 AC_SUBST([MSVC2013_COMPAT_CFLAGS])
353 AC_SUBST([MSVC2013_COMPAT_CXXFLAGS])
354
355 dnl even if the compiler appears to support it, using visibility attributes isn't
356 dnl going to do anything useful currently on cygwin apart from emit lots of warnings
357 case "$host_os" in
358 cygwin*)
359     VISIBILITY_CFLAGS=""
360     VISIBILITY_CXXFLAGS=""
361     ;;
362 esac
363
364 AC_SUBST([VISIBILITY_CFLAGS])
365 AC_SUBST([VISIBILITY_CXXFLAGS])
366
367 dnl
368 dnl Optional flags, check for compiler support
369 dnl
370 SSE41_CFLAGS="-msse4.1"
371 dnl Code compiled by GCC with -msse* assumes a 16 byte aligned
372 dnl stack, but on x86-32 such alignment is not guaranteed.
373 case "$target_cpu" in
374 i?86)
375     SSE41_CFLAGS="$SSE41_CFLAGS -mstackrealign"
376     ;;
377 esac
378 save_CFLAGS="$CFLAGS"
379 CFLAGS="$SSE41_CFLAGS $CFLAGS"
380 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
381 #include <smmintrin.h>
382 int param;
383 int main () {
384     __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
385     c = _mm_max_epu32(a, b);
386     return _mm_cvtsi128_si32(c);
387 }]])], SSE41_SUPPORTED=1)
388 CFLAGS="$save_CFLAGS"
389 if test "x$SSE41_SUPPORTED" = x1; then
390     DEFINES="$DEFINES -DUSE_SSE41"
391 fi
392 AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1])
393 AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS)
394
395 dnl Check for Endianness
396 AC_C_BIGENDIAN(
397    little_endian=no,
398    little_endian=yes,
399    little_endian=no,
400    little_endian=no
401 )
402
403 dnl Check for POWER8 Architecture
404 PWR8_CFLAGS="-mpower8-vector"
405 have_pwr8_intrinsics=no
406 AC_MSG_CHECKING(whether gcc supports -mpower8-vector)
407 save_CFLAGS=$CFLAGS
408 CFLAGS="$PWR8_CFLAGS $CFLAGS"
409 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
410 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
411 #error "Need GCC >= 4.8 for sane POWER8 support"
412 #endif
413 #include <altivec.h>
414 int main () {
415     vector unsigned char r;
416     vector unsigned int v = vec_splat_u32 (1);
417     r = __builtin_vec_vgbbd ((vector unsigned char) v);
418     return 0;
419 }]])], have_pwr8_intrinsics=yes)
420 CFLAGS=$save_CFLAGS
421
422 AC_ARG_ENABLE(pwr8,
423    [AC_HELP_STRING([--disable-pwr8-inst],
424                    [disable POWER8-specific instructions])],
425    [enable_pwr8=$enableval], [enable_pwr8=auto])
426
427 if test "x$enable_pwr8" = xno ; then
428    have_pwr8_intrinsics=disabled
429 fi
430
431 if test $have_pwr8_intrinsics = yes && test $little_endian = yes ; then
432    DEFINES="$DEFINES -D_ARCH_PWR8"
433    CXXFLAGS="$CXXFLAGS $PWR8_CFLAGS"
434    CFLAGS="$CFLAGS $PWR8_CFLAGS"
435 else
436    PWR8_CFLAGS=
437 fi
438
439 AC_MSG_RESULT($have_pwr8_intrinsics)
440 if test "x$enable_pwr8" = xyes && test $have_pwr8_intrinsics = no ; then
441    AC_MSG_ERROR([POWER8 compiler support not detected])
442 fi
443
444 if test $have_pwr8_intrinsics = yes && test $little_endian = no ; then
445    AC_MSG_WARN([POWER8 optimization is enabled only on POWER8 Little-Endian])
446 fi
447
448 AC_SUBST([PWR8_CFLAGS], $PWR8_CFLAGS)
449
450 dnl Can't have static and shared libraries, default to static if user
451 dnl explicitly requested. If both disabled, set to static since shared
452 dnl was explicitly requested.
453 case "x$enable_static$enable_shared" in
454 xyesyes)
455     AC_MSG_WARN([Cannot build static and shared libraries, disabling shared])
456     enable_shared=no
457     ;;
458 xnono)
459     AC_MSG_WARN([Cannot disable both static and shared libraries, enabling shared])
460     enable_shared=yes
461     ;;
462 esac
463
464 AM_CONDITIONAL(BUILD_SHARED, test "x$enable_shared" = xyes)
465
466 dnl
467 dnl other compiler options
468 dnl
469 AC_ARG_ENABLE([debug],
470     [AS_HELP_STRING([--enable-debug],
471         [use debug compiler flags and macros @<:@default=disabled@:>@])],
472     [enable_debug="$enableval"],
473     [enable_debug=no]
474 )
475
476 AC_ARG_ENABLE([profile],
477     [AS_HELP_STRING([--enable-profile],
478         [enable profiling of code @<:@default=disabled@:>@])],
479     [enable_profile="$enableval"],
480     [enable_profile=no]
481 )
482
483 if test "x$enable_profile" = xyes; then
484     DEFINES="$DEFINES -DPROFILE"
485     if test "x$GCC" = xyes; then
486         CFLAGS="$CFLAGS -fno-omit-frame-pointer"
487     fi
488     if test "x$GXX" = xyes; then
489         CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
490     fi
491 fi
492
493 if test "x$enable_debug" = xyes; then
494     DEFINES="$DEFINES -DDEBUG"
495     if test "x$enable_profile" = xyes; then
496         AC_MSG_WARN([Debug and Profile are enabled at the same time])
497     fi
498     if test "x$GCC" = xyes; then
499         if ! echo "$CFLAGS" | grep -q -e '-g'; then
500             CFLAGS="$CFLAGS -g"
501         fi
502         if ! echo "$CFLAGS" | grep -q -e '-O'; then
503             CFLAGS="$CFLAGS -O0"
504         fi
505     fi
506     if test "x$GXX" = xyes; then
507         if ! echo "$CXXFLAGS" | grep -q -e '-g'; then
508             CXXFLAGS="$CXXFLAGS -g"
509         fi
510         if ! echo "$CXXFLAGS" | grep -q -e '-O'; then
511             CXXFLAGS="$CXXFLAGS -O0"
512         fi
513     fi
514 else
515    DEFINES="$DEFINES -DNDEBUG"
516 fi
517
518 dnl
519 dnl Check if linker supports -Bsymbolic
520 dnl
521 save_LDFLAGS=$LDFLAGS
522 LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
523 AC_MSG_CHECKING([if ld supports -Bsymbolic])
524 AC_LINK_IFELSE(
525     [AC_LANG_SOURCE([int main() { return 0;}])],
526     [AC_MSG_RESULT([yes])
527         BSYMBOLIC="-Wl,-Bsymbolic";],
528     [AC_MSG_RESULT([no])
529         BSYMBOLIC="";])
530 LDFLAGS=$save_LDFLAGS
531
532 AC_SUBST([BSYMBOLIC])
533
534 dnl
535 dnl Check if linker supports garbage collection
536 dnl
537 save_LDFLAGS=$LDFLAGS
538 LDFLAGS="$LDFLAGS -Wl,--gc-sections"
539 AC_MSG_CHECKING([whether ld supports --gc-sections])
540 AC_LINK_IFELSE(
541     [AC_LANG_SOURCE([static char UnusedFunc() { return 5; } int main() { return 0;}])],
542     [AC_MSG_RESULT([yes])
543         GC_SECTIONS="-Wl,--gc-sections";],
544     [AC_MSG_RESULT([no])
545         GC_SECTIONS="";])
546 LDFLAGS=$save_LDFLAGS
547
548 AC_SUBST([GC_SECTIONS])
549
550 dnl
551 dnl OpenBSD does not have DT_NEEDED entries for libc by design
552 dnl so when these flags are passed to ld via libtool the checks will fail
553 dnl
554 case "$host_os" in
555 openbsd* | darwin* )
556     LD_NO_UNDEFINED="" ;;
557 *)
558     LD_NO_UNDEFINED="-Wl,--no-undefined" ;;
559 esac
560
561 AC_SUBST([LD_NO_UNDEFINED])
562
563 dnl
564 dnl Check if linker supports version scripts
565 dnl
566 AC_MSG_CHECKING([if the linker supports version-scripts])
567 save_LDFLAGS=$LDFLAGS
568 LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
569 cat > conftest.map <<EOF
570 VERSION_1 {
571      global:
572          main;
573
574      local:
575          *;
576 };
577 EOF
578 AC_LINK_IFELSE(
579     [AC_LANG_SOURCE([int main() { return 0;}])],
580     [have_ld_version_script=yes;AC_MSG_RESULT(yes)],
581     [have_ld_version_script=no; AC_MSG_RESULT(no)])
582 LDFLAGS=$save_LDFLAGS
583 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
584
585 dnl
586 dnl Check if linker supports dynamic list files
587 dnl
588 AC_MSG_CHECKING([if the linker supports --dynamic-list])
589 save_LDFLAGS=$LDFLAGS
590 LDFLAGS="$LDFLAGS -Wl,--dynamic-list=conftest.dyn"
591 cat > conftest.dyn <<EOF
592 {
593         radeon_drm_winsys_create;
594 };
595 EOF
596 AC_LINK_IFELSE(
597     [AC_LANG_SOURCE([int main() { return 0;}])],
598     [have_ld_dynamic_list=yes;AC_MSG_RESULT(yes)],
599     [have_ld_dynamic_list=no; AC_MSG_RESULT(no)])
600 LDFLAGS=$save_LDFLAGS
601 AM_CONDITIONAL(HAVE_LD_DYNAMIC_LIST, test "$have_ld_dynamic_list" = "yes")
602
603 dnl
604 dnl compatibility symlinks
605 dnl
606 case "$host_os" in
607 linux* )
608     HAVE_COMPAT_SYMLINKS=yes ;;
609 * )
610     HAVE_COMPAT_SYMLINKS=no ;;
611 esac
612
613 AM_CONDITIONAL(HAVE_COMPAT_SYMLINKS, test "x$HAVE_COMPAT_SYMLINKS" = xyes)
614
615 dnl
616 dnl library names
617 dnl
618 dnl Unfortunately we need to do a few things that libtool can't help us with,
619 dnl so we need some knowledge of shared library filenames:
620 dnl
621 dnl LIB_EXT is the extension used when creating symlinks for alternate
622 dnl filenames for a shared library which will be dynamically loaded
623 dnl
624 dnl IMP_LIB_EXT is the extension used when checking for the presence of a
625 dnl the file for a shared library we wish to link with
626 dnl
627 case "$host_os" in
628 darwin* )
629     LIB_EXT='dylib'
630     IMP_LIB_EXT=$LIB_EXT
631     ;;
632 cygwin* )
633     LIB_EXT='dll'
634     IMP_LIB_EXT='dll.a'
635     ;;
636 aix* )
637     LIB_EXT='a'
638     IMP_LIB_EXT=$LIB_EXT
639     ;;
640 * )
641     LIB_EXT='so'
642     IMP_LIB_EXT=$LIB_EXT
643     ;;
644 esac
645
646 AC_SUBST([LIB_EXT])
647
648 AC_ARG_WITH([gl-lib-name],
649   [AS_HELP_STRING([--with-gl-lib-name@<:@=NAME@:>@],
650     [specify GL library name @<:@default=GL@:>@])],
651   [GL_LIB=$withval],
652   [GL_LIB=GL])
653 AC_ARG_WITH([osmesa-lib-name],
654   [AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@],
655     [specify OSMesa library name @<:@default=OSMesa@:>@])],
656   [OSMESA_LIB=$withval],
657   [OSMESA_LIB=OSMesa])
658 AS_IF([test "x$GL_LIB" = xyes], [GL_LIB=GL])
659 AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa])
660
661 dnl
662 dnl Mangled Mesa support
663 dnl
664 AC_ARG_ENABLE([mangling],
665   [AS_HELP_STRING([--enable-mangling],
666     [enable mangled symbols and library name @<:@default=disabled@:>@])],
667   [enable_mangling="${enableval}"],
668   [enable_mangling=no]
669 )
670 if test "x${enable_mangling}" = "xyes" ; then
671   DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE"
672   GL_LIB="Mangled${GL_LIB}"
673   OSMESA_LIB="Mangled${OSMESA_LIB}"
674 fi
675 AC_SUBST([GL_LIB])
676 AC_SUBST([OSMESA_LIB])
677
678 dnl
679 dnl potentially-infringing-but-nobody-knows-for-sure stuff
680 dnl
681 AC_ARG_ENABLE([texture-float],
682     [AS_HELP_STRING([--enable-texture-float],
683         [enable floating-point textures and renderbuffers @<:@default=disabled@:>@])],
684     [enable_texture_float="$enableval"],
685     [enable_texture_float=no]
686 )
687 if test "x$enable_texture_float" = xyes; then
688     AC_MSG_WARN([Floating-point textures enabled.])
689     AC_MSG_WARN([Please consult docs/patents.txt with your lawyer before building Mesa.])
690     DEFINES="$DEFINES -DTEXTURE_FLOAT_ENABLED"
691 fi
692
693 dnl
694 dnl Arch/platform-specific settings
695 dnl
696 AC_ARG_ENABLE([asm],
697     [AS_HELP_STRING([--disable-asm],
698         [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
699     [enable_asm="$enableval"],
700     [enable_asm=yes]
701 )
702 asm_arch=""
703 AC_MSG_CHECKING([whether to enable assembly])
704 test "x$enable_asm" = xno && AC_MSG_RESULT([no])
705 # disable if cross compiling on x86/x86_64 since we must run gen_matypes
706 if test "x$enable_asm" = xyes -a "x$cross_compiling" = xyes; then
707     case "$host_cpu" in
708     i?86 | x86_64 | amd64)
709         if test "x$host_cpu" != "x$target_cpu"; then
710             enable_asm=no
711             AC_MSG_RESULT([no, cross compiling])
712         fi
713         ;;
714     esac
715 fi
716 # check for supported arches
717 if test "x$enable_asm" = xyes; then
718     case "$host_cpu" in
719     i?86)
720         case "$host_os" in
721         linux* | *freebsd* | dragonfly* | *netbsd* | openbsd* | gnu*)
722             asm_arch=x86
723             ;;
724         esac
725         ;;
726     x86_64|amd64)
727         case "$host_os" in
728         linux* | *freebsd* | dragonfly* | *netbsd* | openbsd*)
729             asm_arch=x86_64
730             ;;
731         esac
732         ;;
733     sparc*)
734         case "$host_os" in
735         linux*)
736             asm_arch=sparc
737             ;;
738         esac
739         ;;
740     esac
741
742     case "$asm_arch" in
743     x86)
744         DEFINES="$DEFINES -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
745         AC_MSG_RESULT([yes, x86])
746         ;;
747     x86_64|amd64)
748         DEFINES="$DEFINES -DUSE_X86_64_ASM"
749         AC_MSG_RESULT([yes, x86_64])
750         ;;
751     sparc)
752         DEFINES="$DEFINES -DUSE_SPARC_ASM"
753         AC_MSG_RESULT([yes, sparc])
754         ;;
755     *)
756         AC_MSG_RESULT([no, platform not supported])
757         ;;
758     esac
759 fi
760
761 AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"])
762 AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
763 AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
764 AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"])
765
766 dnl Check to see if dlopen is in default libraries (like Solaris, which
767 dnl has it in libc), or if libdl is needed to get it.
768 AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"],
769     [AC_CHECK_LIB([dl], [dlopen],
770        [DEFINES="$DEFINES -DHAVE_DLOPEN"; DLOPEN_LIBS="-ldl"])])
771 AC_SUBST([DLOPEN_LIBS])
772
773 dnl Check if that library also has dladdr
774 save_LIBS="$LIBS"
775 LIBS="$LIBS $DLOPEN_LIBS"
776 AC_CHECK_FUNCS([dladdr])
777 LIBS="$save_LIBS"
778
779 case "$host_os" in
780 darwin*)
781     ;;
782 *)
783     AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
784                    [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
785                                  [AC_MSG_ERROR([Could not find clock_gettime])])])
786     AC_SUBST([CLOCK_LIB])
787     ;;
788 esac
789
790 dnl See if posix_memalign is available
791 AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
792
793 dnl Check for pthreads
794 AX_PTHREAD
795 if test "x$ax_pthread_ok" = xno; then
796     AC_MSG_ERROR([Building mesa on this platform requires pthreads])
797 fi
798 dnl AX_PTHREADS leaves PTHREAD_LIBS empty for gcc and sets PTHREAD_CFLAGS
799 dnl to -pthread, which causes problems if we need -lpthread to appear in
800 dnl pkgconfig files.
801 test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread"
802
803 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
804 AC_SUBST(PTHREADSTUBS_CFLAGS)
805 AC_SUBST(PTHREADSTUBS_LIBS)
806
807 dnl SELinux awareness.
808 AC_ARG_ENABLE([selinux],
809     [AS_HELP_STRING([--enable-selinux],
810         [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
811     [MESA_SELINUX="$enableval"],
812     [MESA_SELINUX=no])
813 if test "x$enable_selinux" = "xyes"; then
814     PKG_CHECK_MODULES([SELINUX], [libselinux], [],
815         [AC_CHECK_HEADER([selinux/selinux.h],[],
816                          [AC_MSG_ERROR([SELinux headers not found])])
817          AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
818                       [AC_MSG_ERROR([SELinux library not found])])
819          SELINUX_LIBS="-lselinux"])
820     DEFINES="$DEFINES -DMESA_SELINUX"
821 fi
822 AC_SUBST([SELINUX_CFLAGS])
823 AC_SUBST([SELINUX_LIBS])
824
825 dnl Options for APIs
826 AC_ARG_ENABLE([opengl],
827     [AS_HELP_STRING([--disable-opengl],
828         [disable support for standard OpenGL API @<:@default=enabled@:>@])],
829     [enable_opengl="$enableval"],
830     [enable_opengl=yes])
831 AC_ARG_ENABLE([gles1],
832     [AS_HELP_STRING([--disable-gles1],
833         [disable support for OpenGL ES 1.x API @<:@default=enabled@:>@])],
834     [enable_gles1="$enableval"],
835     [enable_gles1=yes])
836 AC_ARG_ENABLE([gles2],
837     [AS_HELP_STRING([--disable-gles2],
838         [disable support for OpenGL ES 2.x API @<:@default=enabled@:>@])],
839     [enable_gles2="$enableval"],
840     [enable_gles2=yes])
841
842 AC_ARG_ENABLE([dri],
843     [AS_HELP_STRING([--enable-dri],
844         [enable DRI modules @<:@default=enabled@:>@])],
845     [enable_dri="$enableval"],
846     [enable_dri=yes])
847
848 case "$host_os" in
849 linux*)
850     dri3_default=yes
851     ;;
852 *)
853     dri3_default=no
854     ;;
855 esac
856
857 if test "x$enable_dri" = xno; then
858     dri3_default=no
859 fi
860
861 AC_ARG_ENABLE([dri3],
862     [AS_HELP_STRING([--enable-dri3],
863         [enable DRI3 @<:@default=auto@:>@])],
864     [enable_dri3="$enableval"],
865     [enable_dri3="$dri3_default"])
866 AC_ARG_ENABLE([glx],
867     [AS_HELP_STRING([--enable-glx@<:@=dri|xlib|gallium-xlib@:>@],
868         [enable the GLX library and choose an implementation @<:@default=auto@:>@])],
869     [enable_glx="$enableval"],
870     [enable_glx=yes])
871 AC_ARG_ENABLE([osmesa],
872     [AS_HELP_STRING([--enable-osmesa],
873         [enable OSMesa library @<:@default=disabled@:>@])],
874     [enable_osmesa="$enableval"],
875     [enable_osmesa=no])
876 AC_ARG_ENABLE([gallium-osmesa],
877     [AS_HELP_STRING([--enable-gallium-osmesa],
878         [enable Gallium implementation of the OSMesa library @<:@default=disabled@:>@])],
879     [enable_gallium_osmesa="$enableval"],
880     [enable_gallium_osmesa=no])
881 AC_ARG_ENABLE([egl],
882     [AS_HELP_STRING([--disable-egl],
883         [disable EGL library @<:@default=enabled@:>@])],
884     [enable_egl="$enableval"],
885     [enable_egl=yes])
886
887 AC_ARG_ENABLE([xa],
888     [AS_HELP_STRING([--enable-xa],
889         [enable build of the XA X Acceleration API @<:@default=disabled@:>@])],
890     [enable_xa="$enableval"],
891     [enable_xa=no])
892 AC_ARG_ENABLE([gbm],
893    [AS_HELP_STRING([--enable-gbm],
894          [enable gbm library @<:@default=auto@:>@])],
895    [enable_gbm="$enableval"],
896    [enable_gbm=auto])
897 AC_ARG_ENABLE([nine],
898     [AS_HELP_STRING([--enable-nine],
899         [enable build of the nine Direct3D9 API @<:@default=no@:>@])],
900     [enable_nine="$enableval"],
901     [enable_nine=no])
902
903 AC_ARG_ENABLE([xvmc],
904    [AS_HELP_STRING([--enable-xvmc],
905          [enable xvmc library @<:@default=auto@:>@])],
906    [enable_xvmc="$enableval"],
907    [enable_xvmc=auto])
908 AC_ARG_ENABLE([vdpau],
909    [AS_HELP_STRING([--enable-vdpau],
910          [enable vdpau library @<:@default=auto@:>@])],
911    [enable_vdpau="$enableval"],
912    [enable_vdpau=auto])
913 AC_ARG_ENABLE([omx],
914    [AS_HELP_STRING([--enable-omx],
915          [enable OpenMAX library @<:@default=disabled@:>@])],
916    [enable_omx="$enableval"],
917    [enable_omx=no])
918 AC_ARG_ENABLE([va],
919    [AS_HELP_STRING([--enable-va],
920          [enable va library @<:@default=auto@:>@])],
921    [enable_va="$enableval"],
922    [enable_va=auto])
923 AC_ARG_ENABLE([opencl],
924    [AS_HELP_STRING([--enable-opencl],
925          [enable OpenCL library @<:@default=disabled@:>@])],
926    [enable_opencl="$enableval"],
927    [enable_opencl=no])
928 AC_ARG_ENABLE([opencl_icd],
929    [AS_HELP_STRING([--enable-opencl-icd],
930           [Build an OpenCL ICD library to be loaded by an ICD implementation
931            @<:@default=disabled@:>@])],
932     [enable_opencl_icd="$enableval"],
933     [enable_opencl_icd=no])
934
935 AC_ARG_ENABLE([gallium-tests],
936     [AS_HELP_STRING([--enable-gallium-tests],
937         [Enable optional Gallium tests) @<:@default=disabled@:>@])],
938     [enable_gallium_tests="$enableval"],
939     [enable_gallium_tests=no])
940
941 # Option for Gallium drivers
942
943 # Keep this in sync with the --with-gallium-drivers help string default value
944 GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"
945
946 AC_ARG_WITH([gallium-drivers],
947     [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
948         [comma delimited Gallium drivers list, e.g.
949         "i915,ilo,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,vc4,virgl"
950         @<:@default=r300,r600,svga,swrast@:>@])],
951     [with_gallium_drivers="$withval"],
952     [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
953
954 # Doing '--without-gallium-drivers' will set this variable to 'no'.  Clear it
955 # here so that the script doesn't choke on an unknown driver name later.
956 case "$with_gallium_drivers" in
957     yes) with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT" ;;
958     no) with_gallium_drivers='' ;;
959 esac
960
961 if test "x$enable_opengl" = xno -a \
962         "x$enable_gles1" = xno -a \
963         "x$enable_gles2" = xno -a \
964         "x$enable_nine" = xno -a \
965         "x$enable_xa" = xno -a \
966         "x$enable_xvmc" = xno -a \
967         "x$enable_vdpau" = xno -a \
968         "x$enable_omx" = xno -a \
969         "x$enable_va" = xno -a \
970         "x$enable_opencl" = xno; then
971     AC_MSG_ERROR([at least one API should be enabled])
972 fi
973
974 # Building OpenGL ES1 and/or ES2 without OpenGL is not supported on mesa 9.0.x
975 if test "x$enable_opengl" = xno -a \
976         "x$enable_gles1" = xyes; then
977     AC_MSG_ERROR([Building OpenGL ES1 without OpenGL is not supported])
978 fi
979
980 if test "x$enable_opengl" = xno -a \
981         "x$enable_gles2" = xyes; then
982     AC_MSG_ERROR([Building OpenGL ES2 without OpenGL is not supported])
983 fi
984
985 AM_CONDITIONAL(HAVE_OPENGL, test "x$enable_opengl" = xyes)
986 AM_CONDITIONAL(HAVE_OPENGL_ES1, test "x$enable_gles1" = xyes)
987 AM_CONDITIONAL(HAVE_OPENGL_ES2, test "x$enable_gles2" = xyes)
988 AM_CONDITIONAL(NEED_OPENGL_COMMON, test "x$enable_opengl" = xyes -o \
989                                         "x$enable_gles1" = xyes -o \
990                                         "x$enable_gles2" = xyes)
991
992 # Validate GLX options
993 if test "x$enable_glx" = xyes; then
994     if test "x$enable_dri" = xyes; then
995         enable_glx=dri
996     elif test -n "$with_gallium_drivers"; then
997         enable_glx=gallium-xlib
998     else
999         enable_glx=xlib
1000     fi
1001 fi
1002 case "x$enable_glx" in
1003 xdri | xxlib | xgallium-xlib)
1004     # GLX requires OpenGL
1005     if test "x$enable_opengl" = xno; then
1006         AC_MSG_ERROR([GLX cannot be built without OpenGL])
1007     fi
1008
1009     # Check individual dependencies
1010     case "x$enable_glx" in
1011     xdri)
1012         if test "x$enable_dri" = xno; then
1013             AC_MSG_ERROR([DRI-based GLX requires DRI to be enabled])
1014         fi
1015         ;;
1016     xxlib)
1017         if test "x$enable_dri" = xyes; then
1018             AC_MSG_ERROR([Xlib-based GLX cannot be built with DRI enabled])
1019         fi
1020         ;;
1021     xgallium-xlib )
1022         if test "x$enable_dri" = xyes; then
1023             AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built with DRI enabled])
1024         fi
1025         if test -z "$with_gallium_drivers"; then
1026             AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built without Gallium enabled])
1027         fi
1028         ;;
1029     esac
1030     ;;
1031 xno)
1032     ;;
1033 *)
1034     AC_MSG_ERROR([Illegal value for --enable-glx: $enable_glx])
1035     ;;
1036 esac
1037
1038 AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xdri)
1039 AM_CONDITIONAL(HAVE_XLIB_GLX, test "x$enable_glx" = xxlib)
1040 AM_CONDITIONAL(HAVE_GALLIUM_XLIB_GLX, test "x$enable_glx" = xgallium-xlib)
1041
1042 # Check for libdrm
1043 PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
1044                   [have_libdrm=yes], [have_libdrm=no])
1045 if test "x$have_libdrm" = xyes; then
1046         DEFINES="$DEFINES -DHAVE_LIBDRM"
1047 fi
1048
1049 # Select which platform-dependent DRI code gets built
1050 case "$host_os" in
1051 darwin*)
1052     dri_platform='apple' ;;
1053 gnu*|cygwin*)
1054     dri_platform='none' ;;
1055 *)
1056     dri_platform='drm' ;;
1057 esac
1058
1059 if test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes; then
1060     have_drisw_kms='yes'
1061 fi
1062
1063 AM_CONDITIONAL(HAVE_DRICOMMON, test "x$enable_dri" = xyes )
1064 AM_CONDITIONAL(HAVE_DRISW, test "x$enable_dri" = xyes )
1065 AM_CONDITIONAL(HAVE_DRISW_KMS, test "x$have_drisw_kms" = xyes )
1066 AM_CONDITIONAL(HAVE_DRI2, test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
1067 AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
1068 AM_CONDITIONAL(HAVE_APPLEDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xapple )
1069
1070 AC_ARG_ENABLE([shared-glapi],
1071     [AS_HELP_STRING([--enable-shared-glapi],
1072         [Enable shared glapi for OpenGL @<:@default=enabled@:>@])],
1073     [enable_shared_glapi="$enableval"],
1074     [enable_shared_glapi=yes])
1075
1076 case "x$enable_opengl$enable_gles1$enable_gles2" in
1077 x*yes*yes*)
1078     if test "x$enable_shared_glapi" = xno; then
1079         AC_MSG_ERROR([shared GLAPI required when building two or more of
1080                       the following APIs - opengl, gles1 gles2])
1081     fi
1082     ;;
1083 esac
1084
1085 AM_CONDITIONAL(HAVE_SHARED_GLAPI, test "x$enable_shared_glapi" = xyes)
1086
1087 # Build the pipe-drivers as separate libraries/modules.
1088 # Do not touch this unless you know what you are doing.
1089 # XXX: Expose via configure option ?
1090 enable_shared_pipe_drivers=no
1091
1092 dnl
1093 dnl Driver specific build directories
1094 dnl
1095
1096 if test "x$enable_gallium_osmesa" = xyes; then
1097     if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
1098         AC_MSG_ERROR([gallium_osmesa requires the gallium swrast driver])
1099     fi
1100     if test "x$enable_osmesa" = xyes; then
1101         AC_MSG_ERROR([Cannot enable both classic and Gallium OSMesa implementations])
1102     fi
1103 fi
1104
1105 AC_SUBST([MESA_LLVM])
1106
1107 # SHA1 hashing
1108 AC_ARG_WITH([sha1],
1109         [AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
1110         [choose SHA1 implementation])])
1111 case "x$with_sha1" in
1112 x | xlibc | xlibmd | xlibnettle | xlibgcrypt | xlibcrypto | xlibsha1 | xCommonCrypto | xCryptoAPI)
1113   ;;
1114 *)
1115         AC_MSG_ERROR([Illegal value for --with-sha1: $with_sha1])
1116 esac
1117
1118 AC_CHECK_FUNC([SHA1Init], [HAVE_SHA1_IN_LIBC=yes])
1119 if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_LIBC" = xyes; then
1120         with_sha1=libc
1121 fi
1122 if test "x$with_sha1" = xlibc && test "x$HAVE_SHA1_IN_LIBC" != xyes; then
1123         AC_MSG_ERROR([sha1 in libc requested but not found])
1124 fi
1125 if test "x$with_sha1" = xlibc; then
1126         AC_DEFINE([HAVE_SHA1_IN_LIBC], [1],
1127                 [Use libc SHA1 functions])
1128         SHA1_LIBS=""
1129 fi
1130 AC_CHECK_FUNC([CC_SHA1_Init], [HAVE_SHA1_IN_COMMONCRYPTO=yes])
1131 if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_COMMONCRYPTO" = xyes; then
1132         with_sha1=CommonCrypto
1133 fi
1134 if test "x$with_sha1" = xCommonCrypto && test "x$HAVE_SHA1_IN_COMMONCRYPTO" != xyes; then
1135         AC_MSG_ERROR([CommonCrypto requested but not found])
1136 fi
1137 if test "x$with_sha1" = xCommonCrypto; then
1138         AC_DEFINE([HAVE_SHA1_IN_COMMONCRYPTO], [1],
1139                 [Use CommonCrypto SHA1 functions])
1140         SHA1_LIBS=""
1141 fi
1142 dnl stdcall functions cannot be tested with AC_CHECK_LIB
1143 AC_CHECK_HEADER([wincrypt.h], [HAVE_SHA1_IN_CRYPTOAPI=yes], [], [#include <windows.h>])
1144 if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_CRYPTOAPI" = xyes; then
1145         with_sha1=CryptoAPI
1146 fi
1147 if test "x$with_sha1" = xCryptoAPI && test "x$HAVE_SHA1_IN_CRYPTOAPI" != xyes; then
1148         AC_MSG_ERROR([CryptoAPI requested but not found])
1149 fi
1150 if test "x$with_sha1" = xCryptoAPI; then
1151         AC_DEFINE([HAVE_SHA1_IN_CRYPTOAPI], [1],
1152                 [Use CryptoAPI SHA1 functions])
1153         SHA1_LIBS=""
1154 fi
1155 AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
1156 if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
1157         with_sha1=libmd
1158 fi
1159 if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
1160         AC_MSG_ERROR([libmd requested but not found])
1161 fi
1162 if test "x$with_sha1" = xlibmd; then
1163         AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
1164                   [Use libmd SHA1 functions])
1165         SHA1_LIBS=-lmd
1166 fi
1167 PKG_CHECK_MODULES([LIBSHA1], [libsha1], [HAVE_LIBSHA1=yes], [HAVE_LIBSHA1=no])
1168 if test "x$with_sha1" = x && test "x$HAVE_LIBSHA1" = xyes; then
1169    with_sha1=libsha1
1170 fi
1171 if test "x$with_sha1" = xlibsha1 && test "x$HAVE_LIBSHA1" != xyes; then
1172         AC_MSG_ERROR([libsha1 requested but not found])
1173 fi
1174 if test "x$with_sha1" = xlibsha1; then
1175         AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
1176                   [Use libsha1 for SHA1])
1177         SHA1_LIBS=-lsha1
1178 fi
1179 AC_CHECK_LIB([nettle], [nettle_sha1_init], [HAVE_LIBNETTLE=yes])
1180 if test "x$with_sha1" = x && test "x$HAVE_LIBNETTLE" = xyes; then
1181         with_sha1=libnettle
1182 fi
1183 if test "x$with_sha1" = xlibnettle && test "x$HAVE_LIBNETTLE" != xyes; then
1184         AC_MSG_ERROR([libnettle requested but not found])
1185 fi
1186 if test "x$with_sha1" = xlibnettle; then
1187         AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
1188                   [Use libnettle SHA1 functions])
1189         SHA1_LIBS=-lnettle
1190 fi
1191 AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
1192 if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
1193         with_sha1=libgcrypt
1194 fi
1195 if test "x$with_sha1" = xlibgcrypt && test "x$HAVE_LIBGCRYPT" != xyes; then
1196         AC_MSG_ERROR([libgcrypt requested but not found])
1197 fi
1198 if test "x$with_sha1" = xlibgcrypt; then
1199         AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
1200                   [Use libgcrypt SHA1 functions])
1201         SHA1_LIBS=-lgcrypt
1202 fi
1203 # We don't need all of the OpenSSL libraries, just libcrypto
1204 AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
1205 PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
1206                   [HAVE_OPENSSL_PKC=no])
1207 if test "x$HAVE_LIBCRYPTO" = xyes || test "x$HAVE_OPENSSL_PKC" = xyes; then
1208         if test "x$with_sha1" = x; then
1209                 with_sha1=libcrypto
1210         fi
1211 else
1212         if test "x$with_sha1" = xlibcrypto; then
1213                 AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
1214         fi
1215 fi
1216 if test "x$with_sha1" = xlibcrypto; then
1217         if test "x$HAVE_LIBCRYPTO" = xyes; then
1218                 SHA1_LIBS=-lcrypto
1219         else
1220                 SHA1_LIBS="$OPENSSL_LIBS"
1221                 SHA1_CFLAGS="$OPENSSL_CFLAGS"
1222         fi
1223 fi
1224 AC_MSG_CHECKING([for SHA1 implementation])
1225 AC_MSG_RESULT([$with_sha1])
1226 AC_SUBST(SHA1_LIBS)
1227 AC_SUBST(SHA1_CFLAGS)
1228
1229 # Enable a define for SHA1
1230 if test "x$with_sha1" != "x"; then
1231         DEFINES="$DEFINES -DHAVE_SHA1"
1232 fi
1233
1234 # Allow user to configure out the shader-cache feature
1235 AC_ARG_ENABLE([shader-cache],
1236     AS_HELP_STRING([--disable-shader-cache], [Disable binary shader cache]),
1237     [enable_shader_cache="$enableval"],
1238     [if test "x$with_sha1" != "x"; then
1239         enable_shader_cache=yes
1240      else
1241         enable_shader_cache=no
1242      fi])
1243 if test "x$with_sha1" = "x"; then
1244     if test "x$enable_shader_cache" = "xyes"; then
1245         AC_MSG_ERROR([Cannot enable shader cache (no SHA-1 implementation found)])
1246     fi
1247 fi
1248 AM_CONDITIONAL([ENABLE_SHADER_CACHE], [test x$enable_shader_cache = xyes])
1249
1250 case "$host_os" in
1251 linux*)
1252     need_pci_id=yes ;;
1253 *)
1254     need_pci_id=no ;;
1255 esac
1256
1257 PKG_CHECK_MODULES([LIBUDEV], [libudev >= $LIBUDEV_REQUIRED],
1258                   have_libudev=yes, have_libudev=no)
1259
1260 AC_ARG_ENABLE([sysfs],
1261     [AS_HELP_STRING([--enable-sysfs],
1262         [enable /sys PCI identification @<:@default=disabled@:>@])],
1263     [have_sysfs="$enableval"],
1264     [have_sysfs=no]
1265 )
1266
1267 if test "x$enable_dri" = xyes; then
1268     if test "$enable_static" = yes; then
1269         AC_MSG_ERROR([Cannot use static libraries for DRI drivers])
1270     fi
1271
1272     # not a hard requirement as swrast does not depend on it
1273     if test "x$have_libdrm" = xyes; then
1274         DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
1275     fi
1276 fi
1277
1278 AC_ARG_ENABLE([driglx-direct],
1279     [AS_HELP_STRING([--disable-driglx-direct],
1280         [disable direct rendering in GLX and EGL for DRI \
1281             @<:@default=auto@:>@])],
1282     [driglx_direct="$enableval"],
1283     [driglx_direct="yes"])
1284
1285 dnl
1286 dnl libGL configuration per driver
1287 dnl
1288 case "x$enable_glx" in
1289 xxlib | xgallium-xlib)
1290     # Xlib-based GLX
1291     dri_modules="x11 xext xcb"
1292     PKG_CHECK_MODULES([XLIBGL], [$dri_modules])
1293     GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
1294     X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
1295     GL_LIB_DEPS="$XLIBGL_LIBS"
1296     GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1297     GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm $PTHREAD_LIBS"
1298     ;;
1299 xdri)
1300     # DRI-based GLX
1301     PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
1302
1303     # find the DRI deps for libGL
1304     dri_modules="x11 xext xdamage xfixes x11-xcb xcb xcb-glx >= $XCBGLX_REQUIRED"
1305
1306     if test x"$driglx_direct" = xyes; then
1307         if test x"$dri_platform" = xdrm ; then
1308             DEFINES="$DEFINES -DGLX_USE_DRM"
1309             if test "x$have_libdrm" != xyes; then
1310                AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED])
1311             fi
1312
1313             PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
1314             GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
1315             if test x"$enable_dri3" = xyes; then
1316                PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
1317                PKG_CHECK_MODULES([PRESENTPROTO], [presentproto >= $PRESENTPROTO_REQUIRED])
1318             fi
1319
1320             if test x"$enable_dri" = xyes; then
1321                dri_modules="$dri_modules xcb-dri2 >= $XCBDRI2_REQUIRED"
1322             fi
1323
1324             if test x"$enable_dri3" = xyes; then
1325                PKG_CHECK_EXISTS([xcb >= $XCB_REQUIRED], [], AC_MSG_ERROR([DRI3 requires xcb >= $XCB_REQUIRED]))
1326                dri3_modules="xcb xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED"
1327                PKG_CHECK_MODULES([XCB_DRI3], [$dri3_modules])
1328             fi
1329         fi
1330         if test x"$dri_platform" = xapple ; then
1331             DEFINES="$DEFINES -DGLX_USE_APPLEGL"
1332         fi
1333     fi
1334
1335     # add xf86vidmode if available
1336     PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
1337     if test "$HAVE_XF86VIDMODE" = yes ; then
1338         dri_modules="$dri_modules xxf86vm"
1339     fi
1340
1341     PKG_CHECK_MODULES([DRIGL], [$dri_modules])
1342     GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
1343     X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
1344     GL_LIB_DEPS="$DRIGL_LIBS"
1345
1346     # need DRM libs, $PTHREAD_LIBS, etc.
1347     GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1348     GL_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1349     ;;
1350 esac
1351
1352 have_pci_id=no
1353 if test "$have_libudev" = yes; then
1354     DEFINES="$DEFINES -DHAVE_LIBUDEV"
1355     have_pci_id=yes
1356 fi
1357
1358 if test "$have_sysfs" = yes; then
1359     DEFINES="$DEFINES -DHAVE_SYSFS"
1360     have_pci_id=yes
1361 fi
1362
1363 # This is outside the case (above) so that it is invoked even for non-GLX
1364 # builds.
1365 AM_CONDITIONAL(HAVE_XF86VIDMODE, test "x$HAVE_XF86VIDMODE" = xyes)
1366
1367 GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1368 GLESv1_CM_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1369 GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1370 GLESv2_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1371
1372 AC_SUBST([X11_INCLUDES])
1373 AC_SUBST([GL_LIB_DEPS])
1374 AC_SUBST([GL_PC_REQ_PRIV])
1375 AC_SUBST([GL_PC_LIB_PRIV])
1376 AC_SUBST([GL_PC_CFLAGS])
1377 AC_SUBST([DRI_PC_REQ_PRIV])
1378 AC_SUBST([GLESv1_CM_LIB_DEPS])
1379 AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
1380 AC_SUBST([GLESv2_LIB_DEPS])
1381 AC_SUBST([GLESv2_PC_LIB_PRIV])
1382
1383 AC_SUBST([HAVE_XF86VIDMODE])
1384
1385 dnl
1386 dnl More GLX setup
1387 dnl
1388 case "x$enable_glx" in
1389 xxlib | xgallium-xlib)
1390     DEFINES="$DEFINES -DUSE_XSHM"
1391     ;;
1392 xdri)
1393     DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1394     if test "x$driglx_direct" = xyes; then
1395         DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1396     fi
1397     ;;
1398 esac
1399
1400 dnl
1401 dnl TLS detection
1402 dnl
1403
1404 AC_ARG_ENABLE([glx-tls],
1405     [AS_HELP_STRING([--enable-glx-tls],
1406         [enable TLS support in GLX @<:@default=disabled@:>@])],
1407     [GLX_USE_TLS="$enableval"],
1408     [GLX_USE_TLS=no])
1409 AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1410
1411 AS_IF([test "x$GLX_USE_TLS" = xyes -a "x$ax_pthread_ok" = xyes],
1412       [DEFINES="${DEFINES} -DGLX_USE_TLS"])
1413
1414 dnl Read-only text section on x86 hardened platforms
1415 AC_ARG_ENABLE([glx-read-only-text],
1416     [AS_HELP_STRING([--enable-glx-read-only-text],
1417         [Disable writable .text section on x86 (decreases performance) @<:@default=disabled@:>@])],
1418     [enable_glx_read_only_text="$enableval"],
1419     [enable_glx_read_only_text=no])
1420 if test "x$enable_glx_read_only_text" = xyes; then
1421     DEFINES="$DEFINES -DGLX_X86_READONLY_TEXT"
1422 fi
1423
1424 dnl
1425 dnl More DRI setup
1426 dnl
1427 dnl Directory for DRI drivers
1428 AC_ARG_WITH([dri-driverdir],
1429     [AS_HELP_STRING([--with-dri-driverdir=DIR],
1430         [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
1431     [DRI_DRIVER_INSTALL_DIR="$withval"],
1432     [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
1433 AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1434 dnl Extra search path for DRI drivers
1435 AC_ARG_WITH([dri-searchpath],
1436     [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
1437         [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
1438     [DRI_DRIVER_SEARCH_DIR="$withval"],
1439     [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
1440 AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1441 dnl Which drivers to build - default is chosen by platform
1442 AC_ARG_WITH([dri-drivers],
1443     [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
1444         [comma delimited classic DRI drivers list, e.g.
1445         "swrast,i965,radeon" @<:@default=auto@:>@])],
1446     [with_dri_drivers="$withval"],
1447     [with_dri_drivers=auto])
1448
1449 if test "x$with_dri_drivers" = xauto; then
1450     if test "x$enable_opengl" = xyes -a "x$enable_dri" = xyes; then
1451         with_dri_drivers="yes"
1452     else
1453         with_dri_drivers="no"
1454     fi
1455 fi
1456 if test "x$with_dri_drivers" = xno; then
1457     with_dri_drivers=''
1458 fi
1459
1460 dnl If $with_dri_drivers is yes, drivers will be added through
1461 dnl platform checks. Set DEFINES and LIB_DEPS
1462 if test "x$enable_dri" = xyes; then
1463     # Platform specific settings and drivers to build
1464     case "$host_os" in
1465     linux*)
1466         DEFINES="$DEFINES -DHAVE_ALIAS"
1467         if test "x$enable_dri3" = xyes; then
1468             DEFINES="$DEFINES -DHAVE_DRI3"
1469         fi
1470
1471         if test "x$have_pci_id" != xyes; then
1472             AC_MSG_ERROR([libudev-dev or sysfs required for building DRI])
1473         fi
1474
1475         case "$host_cpu" in
1476         powerpc* | sparc*)
1477             # Build only the drivers for cards that exist on PowerPC/sparc
1478             if test "x$with_dri_drivers" = "xyes"; then
1479                 with_dri_drivers="r200 radeon swrast"
1480             fi
1481             ;;
1482         esac
1483         ;;
1484     *freebsd* | dragonfly* | *netbsd* | openbsd*)
1485         DEFINES="$DEFINES -DHAVE_ALIAS"
1486         ;;
1487     gnu*)
1488         DEFINES="$DEFINES -DHAVE_ALIAS"
1489         ;;
1490     cygwin*)
1491         if test "x$with_dri_drivers" = "xyes"; then
1492             with_dri_drivers="swrast"
1493         fi
1494         ;;
1495     darwin*)
1496         DEFINES="$DEFINES -DGLX_ALIAS_UNSUPPORTED -DBUILDING_MESA"
1497         if test "x$with_dri_drivers" = "xyes"; then
1498             with_dri_drivers="swrast"
1499         fi
1500         ;;
1501     esac
1502
1503     # default drivers
1504     if test "x$with_dri_drivers" = "xyes"; then
1505         with_dri_drivers="i915 i965 nouveau r200 radeon swrast"
1506     fi
1507
1508     # Check for expat
1509     PKG_CHECK_MODULES([EXPAT], [expat], [],
1510         # expat version 2.0 and earlier do not provide expat.pc
1511         [AC_CHECK_HEADER([expat.h],[],
1512                          [AC_MSG_ERROR([Expat headers required for DRI not found])])
1513          AC_CHECK_LIB([expat],[XML_ParserCreate],[],
1514                      [AC_MSG_ERROR([Expat library required for DRI not found])])
1515          EXPAT_LIBS="-lexpat"])
1516
1517     # put all the necessary libs together
1518     DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1519 fi
1520
1521 AC_SUBST([DRI_LIB_DEPS])
1522
1523 DRI_DIRS=''
1524 dnl Duplicates in DRI_DIRS are removed by sorting it at the end of this block
1525 if test -n "$with_dri_drivers"; then
1526     if test "x$enable_opengl" != xyes; then
1527         AC_MSG_ERROR([--with-dri-drivers requires OpenGL])
1528     fi
1529
1530     dri_drivers=`IFS=', '; echo $with_dri_drivers`
1531     for driver in $dri_drivers; do
1532         DRI_DIRS="$DRI_DIRS $driver"
1533         case "x$driver" in
1534         xi915)
1535             HAVE_I915_DRI=yes;
1536             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1537             ;;
1538         xi965)
1539             HAVE_I965_DRI=yes;
1540             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1541             ;;
1542         xnouveau)
1543             HAVE_NOUVEAU_DRI=yes;
1544             PKG_CHECK_MODULES([NVVIEUX], [libdrm_nouveau >= $LIBDRM_NVVIEUX_REQUIRED])
1545             ;;
1546         xradeon)
1547             HAVE_RADEON_DRI=yes;
1548             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1549             ;;
1550         xr200)
1551             HAVE_R200_DRI=yes;
1552             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1553             ;;
1554         xswrast)
1555             HAVE_SWRAST_DRI=yes;
1556             ;;
1557         *)
1558             AC_MSG_ERROR([classic DRI driver '$driver' does not exist])
1559             ;;
1560         esac
1561     done
1562     DRI_DIRS=`echo $DRI_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1563 fi
1564
1565
1566 #
1567 # Vulkan driver configuration
1568 #
1569
1570 AC_ARG_WITH([vulkan-drivers],
1571     [AS_HELP_STRING([--with-vulkan-drivers@<:@=DIRS...@:>@],
1572         [comma delimited Vulkan drivers list, e.g.
1573         "intel"
1574         @<:@default=no@:>@])],
1575     [with_vulkan_drivers="$withval"],
1576     [with_vulkan_drivers="no"])
1577
1578 # Doing '--without-vulkan-drivers' will set this variable to 'no'.  Clear it
1579 # here so that the script doesn't choke on an unknown driver name later.
1580 case "x$with_vulkan_drivers" in
1581     xyes) with_vulkan_drivers="$VULKAN_DRIVERS_DEFAULT" ;;
1582     xno) with_vulkan_drivers='' ;;
1583 esac
1584
1585 AC_ARG_WITH([vulkan-icddir],
1586     [AS_HELP_STRING([--with-vulkan-icddir=DIR],
1587         [directory for the Vulkan driver icd files @<:@${sysconfdir}/vulkan/icd.d@:>@])],
1588     [VULKAN_ICD_INSTALL_DIR="$withval"],
1589     [VULKAN_ICD_INSTALL_DIR='${sysconfdir}/vulkan/icd.d'])
1590 AC_SUBST([VULKAN_ICD_INSTALL_DIR])
1591
1592 if test -n "$with_vulkan_drivers"; then
1593     VULKAN_DRIVERS=`IFS=', '; echo $with_vulkan_drivers`
1594     for driver in $VULKAN_DRIVERS; do
1595         case "x$driver" in
1596         xintel)
1597             if test "x$HAVE_I965_DRI" != xyes; then
1598                 AC_MSG_ERROR([Intel Vulkan driver requires the i965 dri driver])
1599             fi
1600             if test "x$with_sha1" == "x"; then
1601                 AC_MSG_ERROR([Intel Vulkan driver requires SHA1])
1602             fi
1603             HAVE_INTEL_VULKAN=yes;
1604
1605             ;;
1606         *)
1607             AC_MSG_ERROR([Vulkan driver '$driver' does not exist])
1608             ;;
1609         esac
1610     done
1611     VULKAN_DRIVERS=`echo $VULKAN_DRIVERS|tr " " "\n"|sort -u|tr "\n" " "`
1612 fi
1613
1614
1615 AM_CONDITIONAL(NEED_MEGADRIVER, test -n "$DRI_DIRS")
1616 AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_glx" = xxlib -o \
1617                                   "x$enable_osmesa" = xyes -o \
1618                                   -n "$DRI_DIRS")
1619
1620 dnl
1621 dnl OSMesa configuration
1622 dnl
1623
1624 dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1625 AC_ARG_WITH([osmesa-bits],
1626     [AS_HELP_STRING([--with-osmesa-bits=BITS],
1627         [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1628     [osmesa_bits="$withval"],
1629     [osmesa_bits=8])
1630 if test "x$osmesa_bits" != x8; then
1631     if test "x$enable_dri" = xyes -o "x$enable_glx" != xno; then
1632         AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1633         osmesa_bits=8
1634     fi
1635 fi
1636 case "x$osmesa_bits" in
1637 x8)
1638     OSMESA_LIB="${OSMESA_LIB}"
1639     ;;
1640 x16|x32)
1641     OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
1642     DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1643     ;;
1644 *)
1645     AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1646     ;;
1647 esac
1648
1649 if test "x$enable_osmesa" = xyes -o "x$enable_gallium_osmesa" = xyes; then
1650     # only link libraries with osmesa if shared
1651     if test "$enable_static" = no; then
1652         OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
1653     else
1654         OSMESA_LIB_DEPS=""
1655     fi
1656     OSMESA_PC_LIB_PRIV="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
1657 fi
1658
1659 AC_SUBST([OSMESA_LIB_DEPS])
1660 AC_SUBST([OSMESA_PC_REQ])
1661 AC_SUBST([OSMESA_PC_LIB_PRIV])
1662
1663 dnl
1664 dnl gbm configuration
1665 dnl
1666 if test "x$enable_gbm" = xauto; then
1667     case "$with_egl_platforms" in
1668         *drm*)
1669             enable_gbm=yes ;;
1670          *)
1671             enable_gbm=no ;;
1672     esac
1673 fi
1674 if test "x$enable_gbm" = xyes; then
1675     if test "x$need_pci_id$have_pci_id" = xyesno; then
1676         AC_MSG_ERROR([gbm requires udev >= $LIBUDEV_REQUIRED or sysfs])
1677     fi
1678
1679     if test "x$enable_dri" = xyes; then
1680         if test "x$enable_shared_glapi" = xno; then
1681             AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
1682         fi
1683     else
1684         # Strictly speaking libgbm does not require --enable-dri, although
1685         # both of its backends do. Thus one can build libgbm without any
1686         # backends if --disable-dri is set.
1687         # To avoid unnecessary complexity of checking if at least one backend
1688         # is available when building, just mandate --enable-dri.
1689         AC_MSG_ERROR([gbm requires --enable-dri])
1690     fi
1691 fi
1692 AM_CONDITIONAL(HAVE_GBM, test "x$enable_gbm" = xyes)
1693 if test "x$need_pci_id$have_libudev" = xyesyes; then
1694     GBM_PC_REQ_PRIV="libudev >= $LIBUDEV_REQUIRED"
1695 else
1696     GBM_PC_REQ_PRIV=""
1697 fi
1698 GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1699 AC_SUBST([GBM_PC_REQ_PRIV])
1700 AC_SUBST([GBM_PC_LIB_PRIV])
1701
1702 dnl
1703 dnl EGL configuration
1704 dnl
1705 EGL_CLIENT_APIS=""
1706
1707 if test "x$enable_egl" = xyes; then
1708     EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS $PTHREAD_LIBS"
1709
1710     AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
1711
1712     if test "$enable_static" != yes; then
1713         if test "x$enable_dri" = xyes; then
1714             HAVE_EGL_DRIVER_DRI2=1
1715             if test "x$enable_shared_glapi" = xno; then
1716                 AC_MSG_ERROR([egl_dri2 requires --enable-shared-glapi])
1717             fi
1718             if test "x$enable_dri3" = xyes; then
1719                 HAVE_EGL_DRIVER_DRI3=1
1720                 if test "x$enable_shared_glapi" = xno; then
1721                     AC_MSG_ERROR([egl_dri3 requires --enable-shared-glapi])
1722                 fi
1723             fi
1724         else
1725             # Avoid building an "empty" libEGL. Drop/update this
1726             # when other backends (haiku?) come along.
1727             AC_MSG_ERROR([egl requires --enable-dri])
1728         fi
1729
1730     fi
1731 fi
1732 AM_CONDITIONAL(HAVE_EGL, test "x$enable_egl" = xyes)
1733 AC_SUBST([EGL_LIB_DEPS])
1734
1735 gallium_st="mesa"
1736
1737 dnl
1738 dnl XA configuration
1739 dnl
1740 if test "x$enable_xa" = xyes; then
1741     if test "x$with_gallium_drivers" = xswrast; then
1742        AC_MSG_ERROR([
1743           Building xa requires at least one non swrast gallium driver.
1744           If you are looking to use libxatracker.so with the VMware driver,
1745           make sure to include svga in the gallium drivers list, apart from
1746           enabling XA.
1747           Example: ./configure --enable-xa --with-gallium-drivers=svga...])
1748     fi
1749     gallium_st="$gallium_st xa"
1750 fi
1751 AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
1752
1753 dnl
1754 dnl Gallium G3DVL configuration
1755 dnl
1756 if test -n "$with_gallium_drivers" -a "x$with_gallium_drivers" != xswrast; then
1757     if test "x$enable_xvmc" = xauto; then
1758         PKG_CHECK_EXISTS([xvmc >= $XVMC_REQUIRED], [enable_xvmc=yes], [enable_xvmc=no])
1759     fi
1760
1761     if test "x$enable_vdpau" = xauto; then
1762         PKG_CHECK_EXISTS([vdpau >= $VDPAU_REQUIRED], [enable_vdpau=yes], [enable_vdpau=no])
1763     fi
1764
1765     if test "x$enable_omx" = xauto; then
1766         PKG_CHECK_EXISTS([libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED], [enable_omx=yes], [enable_omx=no])
1767     fi
1768
1769     if test "x$enable_va" = xauto; then
1770         PKG_CHECK_EXISTS([libva >= $LIBVA_REQUIRED], [enable_va=yes], [enable_va=no])
1771     fi
1772 fi
1773
1774 if test "x$enable_dri" = xyes -o \
1775         "x$enable_xvmc" = xyes -o \
1776         "x$enable_vdpau" = xyes -o \
1777         "x$enable_omx" = xyes -o \
1778         "x$enable_va" = xyes; then
1779     need_gallium_vl=yes
1780 fi
1781 AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes)
1782
1783 if test "x$enable_xvmc" = xyes -o \
1784         "x$enable_vdpau" = xyes -o \
1785         "x$enable_omx" = xyes -o \
1786         "x$enable_va" = xyes; then
1787     if test x"$enable_dri3" = xyes; then
1788         PKG_CHECK_MODULES([VL], [xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED
1789                                  x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
1790     else
1791         PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
1792     fi
1793     need_gallium_vl_winsys=yes
1794 fi
1795 AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes)
1796
1797 if test "x$enable_xvmc" = xyes; then
1798     PKG_CHECK_MODULES([XVMC], [xvmc >= $XVMC_REQUIRED])
1799     gallium_st="$gallium_st xvmc"
1800 fi
1801 AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes)
1802
1803 if test "x$enable_vdpau" = xyes; then
1804     PKG_CHECK_MODULES([VDPAU], [vdpau >= $VDPAU_REQUIRED])
1805     gallium_st="$gallium_st vdpau"
1806     DEFINES="$DEFINES -DHAVE_ST_VDPAU"
1807 fi
1808 AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes)
1809
1810 if test "x$enable_omx" = xyes; then
1811     PKG_CHECK_MODULES([OMX], [libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED])
1812     gallium_st="$gallium_st omx"
1813 fi
1814 AM_CONDITIONAL(HAVE_ST_OMX, test "x$enable_omx" = xyes)
1815
1816 if test "x$enable_va" = xyes; then
1817     PKG_CHECK_MODULES([VA], [libva >= $LIBVA_REQUIRED])
1818     gallium_st="$gallium_st va"
1819 fi
1820 AM_CONDITIONAL(HAVE_ST_VA, test "x$enable_va" = xyes)
1821
1822 dnl
1823 dnl Nine Direct3D9 configuration
1824 dnl
1825 if test "x$enable_nine" = xyes; then
1826     if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
1827         AC_MSG_ERROR([nine requires the gallium swrast driver])
1828     fi
1829     if test "x$with_gallium_drivers" = xswrast; then
1830         AC_MSG_ERROR([nine requires at least one non-swrast gallium driver])
1831     fi
1832     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6; then
1833         AC_MSG_ERROR([gcc >= 4.6 is required to build nine])
1834     fi
1835
1836     if test "x$enable_dri3" = xno; then
1837         AC_MSG_WARN([using nine together with wine requires DRI3 enabled system])
1838     fi
1839
1840     gallium_st="$gallium_st nine"
1841 fi
1842 AM_CONDITIONAL(HAVE_ST_NINE, test "x$enable_nine" = xyes)
1843
1844 dnl
1845 dnl OpenCL configuration
1846 dnl
1847
1848 AC_ARG_WITH([clang-libdir],
1849    [AS_HELP_STRING([--with-clang-libdir],
1850          [Path to Clang libraries @<:@default=llvm-config --libdir@:>@])],
1851    [CLANG_LIBDIR="$withval"],
1852    [CLANG_LIBDIR=''])
1853
1854 PKG_CHECK_EXISTS([libclc], [have_libclc=yes], [have_libclc=no])
1855 PKG_CHECK_MODULES([LIBELF], [libelf], [have_libelf=yes], [have_libelf=no])
1856
1857 if test "x$have_libelf" = xno; then
1858    LIBELF_LIBS=''
1859    LIBELF_CFLAGS=''
1860    AC_CHECK_LIB([elf], [elf_memory], [have_libelf=yes;LIBELF_LIBS=-lelf], [have_libelf=no])
1861    AC_SUBST([LIBELF_LIBS])
1862    AC_SUBST([LIBELF_CFLAGS])
1863 fi
1864
1865 if test "x$enable_opencl" = xyes; then
1866     if test -z "$with_gallium_drivers"; then
1867         AC_MSG_ERROR([cannot enable OpenCL without Gallium])
1868     fi
1869
1870     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 7; then
1871         AC_MSG_ERROR([gcc >= 4.7 is required to build clover])
1872     fi
1873
1874     if test "x$have_libclc" = xno; then
1875         AC_MSG_ERROR([pkg-config cannot find libclc.pc which is required to build clover.
1876                     Make sure the directory containing libclc.pc is specified in your
1877                     PKG_CONFIG_PATH environment variable.
1878                     By default libclc.pc is installed to /usr/local/share/pkgconfig/])
1879     else
1880         LIBCLC_INCLUDEDIR=`$PKG_CONFIG --variable=includedir libclc`
1881         LIBCLC_LIBEXECDIR=`$PKG_CONFIG --variable=libexecdir libclc`
1882         AC_SUBST([LIBCLC_INCLUDEDIR])
1883         AC_SUBST([LIBCLC_LIBEXECDIR])
1884     fi
1885
1886     gallium_st="$gallium_st clover"
1887
1888     if test "x$enable_opencl_icd" = xyes; then
1889         OPENCL_LIBNAME="MesaOpenCL"
1890     else
1891         OPENCL_LIBNAME="OpenCL"
1892     fi
1893
1894     if test "x$have_libelf" != xyes; then
1895        AC_MSG_ERROR([Clover requires libelf])
1896     fi
1897 fi
1898 AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
1899 AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
1900 AC_SUBST([OPENCL_LIBNAME])
1901
1902 dnl
1903 dnl Gallium configuration
1904 dnl
1905 AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers")
1906
1907 AC_SUBST([LLVM_BINDIR])
1908 AC_SUBST([LLVM_CFLAGS])
1909 AC_SUBST([LLVM_CPPFLAGS])
1910 AC_SUBST([LLVM_CXXFLAGS])
1911 AC_SUBST([LLVM_LIBDIR])
1912 AC_SUBST([LLVM_LIBS])
1913 AC_SUBST([LLVM_LDFLAGS])
1914 AC_SUBST([LLVM_INCLUDEDIR])
1915 AC_SUBST([LLVM_VERSION])
1916 AC_SUBST([CLANG_RESOURCE_DIR])
1917
1918 case "x$enable_opengl$enable_gles1$enable_gles2" in
1919 x*yes*)
1920     EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1921     ;;
1922 esac
1923
1924 AC_SUBST([VG_LIB_DEPS])
1925 AC_SUBST([EGL_CLIENT_APIS])
1926
1927 dnl
1928 dnl EGL Platforms configuration
1929 dnl
1930 AC_ARG_WITH([egl-platforms],
1931     [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1932         [comma delimited native platforms libEGL supports, e.g.
1933         "x11,drm" @<:@default=auto@:>@])],
1934     [with_egl_platforms="$withval"],
1935     [if test "x$enable_egl" = xyes; then
1936         with_egl_platforms="x11"
1937     else
1938         with_egl_platforms=""
1939     fi])
1940
1941 if test "x$with_egl_platforms" != "x" -a "x$enable_egl" != xyes; then
1942     AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1943 fi
1944
1945 PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland_scanner],
1946         WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland_scanner`,
1947         WAYLAND_SCANNER='')
1948 if test "x$WAYLAND_SCANNER" = x; then
1949     AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner])
1950 fi
1951
1952 # Do per-EGL platform setups and checks
1953 egl_platforms=`IFS=', '; echo $with_egl_platforms`
1954 for plat in $egl_platforms; do
1955         case "$plat" in
1956         wayland)
1957                 test "x$have_libdrm" != xyes &&
1958                         AC_MSG_ERROR([EGL platform wayland requires libdrm >= $LIBDRM_REQUIRED])
1959
1960                 PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
1961
1962                 if test "x$WAYLAND_SCANNER" = x; then
1963                         AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform])
1964                 fi
1965                 ;;
1966
1967         x11)
1968                 PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED xcb-xfixes])
1969                 ;;
1970
1971         drm)
1972                 test "x$enable_gbm" = "xno" &&
1973                         AC_MSG_ERROR([EGL platform drm needs gbm])
1974                 test "x$have_libdrm" != xyes &&
1975                         AC_MSG_ERROR([EGL platform drm requires libdrm >= $LIBDRM_REQUIRED])
1976                 ;;
1977
1978         surfaceless)
1979                 test "x$have_libdrm" != xyes &&
1980                         AC_MSG_ERROR([EGL platform surfaceless requires libdrm >= $LIBDRM_REQUIRED])
1981                 ;;
1982
1983         *)
1984                 AC_MSG_ERROR([EGL platform '$plat' does not exist])
1985                 ;;
1986         esac
1987
1988         case "$plat$need_pci_id$have_pci_id" in
1989                 waylandyesno|drmyesno)
1990                     AC_MSG_ERROR([cannot build $plat platform without udev >= $LIBUDEV_REQUIRED or sysfs]) ;;
1991         esac
1992 done
1993
1994 # libEGL wants to default to the first platform specified in
1995 # ./configure.  parse that here.
1996 if test "x$egl_platforms" != "x"; then
1997     FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'`
1998     EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS"
1999 else
2000     EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM"
2001 fi
2002
2003 AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11')
2004 AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland')
2005 AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep -q 'drm')
2006 AM_CONDITIONAL(HAVE_EGL_PLATFORM_SURFACELESS, echo "$egl_platforms" | grep -q 'surfaceless')
2007
2008 AM_CONDITIONAL(HAVE_EGL_DRIVER_DRI2, test "x$HAVE_EGL_DRIVER_DRI2" != "x")
2009
2010 AC_SUBST([EGL_NATIVE_PLATFORM])
2011 AC_SUBST([EGL_CFLAGS])
2012
2013 # If we don't have the X11 platform, set this define so we don't try to include
2014 # the X11 headers.
2015 if ! echo "$egl_platforms" | grep -q 'x11'; then
2016     DEFINES="$DEFINES -DMESA_EGL_NO_X11_HEADERS"
2017     GL_PC_CFLAGS="$GL_PC_CFLAGS -DMESA_EGL_NO_X11_HEADERS"
2018 fi
2019
2020 dnl
2021 dnl Gallium LLVM
2022 dnl
2023 AC_ARG_ENABLE([gallium-llvm],
2024     [AS_HELP_STRING([--enable-gallium-llvm],
2025         [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
2026     [enable_gallium_llvm="$enableval"],
2027     [enable_gallium_llvm=auto])
2028
2029 AC_ARG_ENABLE([llvm-shared-libs],
2030     [AS_HELP_STRING([--enable-llvm-shared-libs],
2031         [link with LLVM shared libraries @<:@default=enabled@:>@])],
2032     [enable_llvm_shared_libs="$enableval"],
2033     [enable_llvm_shared_libs=yes])
2034
2035 AC_ARG_WITH([llvm-prefix],
2036     [AS_HELP_STRING([--with-llvm-prefix],
2037         [Prefix for LLVM installations in non-standard locations])],
2038     [llvm_prefix="$withval"],
2039     [llvm_prefix=''])
2040
2041
2042 # Call this inside ` ` to get the return value.
2043 # $1 is the llvm-config command with arguments.
2044 strip_unwanted_llvm_flags() {
2045     # Use \> (marks the end of the word)
2046     echo `$1` | sed \
2047         -e 's/-DNDEBUG\>//g' \
2048         -e 's/-D_GNU_SOURCE\>//g' \
2049         -e 's/-pedantic\>//g' \
2050         -e 's/-Wcovered-switch-default\>//g' \
2051         -e 's/-O.\>//g' \
2052         -e 's/-g\>//g' \
2053         -e 's/-Wall\>//g' \
2054         -e 's/-Wcast-qual\>//g' \
2055         -e 's/-Woverloaded-virtual\>//g' \
2056         -e 's/-fcolor-diagnostics\>//g' \
2057         -e 's/-fdata-sections\>//g' \
2058         -e 's/-ffunction-sections\>//g' \
2059         -e 's/-fno-exceptions\>//g' \
2060         -e 's/-fomit-frame-pointer\>//g' \
2061         -e 's/-fvisibility-inlines-hidden\>//g' \
2062         -e 's/-fPIC\>//g' \
2063         -e 's/-fstack-protector-strong\>//g'
2064 }
2065
2066 llvm_check_version_for() {
2067     if test "${LLVM_VERSION_INT}${LLVM_VERSION_PATCH}" -lt "${1}0${2}${3}"; then
2068         AC_MSG_ERROR([LLVM $1.$2.$3 or newer is required for $4])
2069     fi
2070 }
2071
2072
2073
2074 if test -z "$with_gallium_drivers"; then
2075     enable_gallium_llvm=no
2076 fi
2077 if test "x$enable_gallium_llvm" = xauto; then
2078     case "$host_cpu" in
2079     i*86|x86_64|amd64) enable_gallium_llvm=yes;;
2080     esac
2081 fi
2082 if test "x$enable_gallium_llvm" = xyes; then
2083     if test -n "$llvm_prefix"; then
2084         AC_PATH_TOOL([LLVM_CONFIG], [llvm-config], [no], ["$llvm_prefix/bin"])
2085     else
2086         AC_PATH_TOOL([LLVM_CONFIG], [llvm-config], [no])
2087     fi
2088
2089     if test "x$LLVM_CONFIG" != xno; then
2090         LLVM_VERSION=`$LLVM_CONFIG --version | egrep -o '^[[0-9.]]+'`
2091         LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
2092         LLVM_BINDIR=`$LLVM_CONFIG --bindir`
2093         LLVM_CPPFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cppflags"`
2094         LLVM_CFLAGS=$LLVM_CPPFLAGS   # CPPFLAGS seem to be sufficient
2095         LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"`
2096         LLVM_INCLUDEDIR=`$LLVM_CONFIG --includedir`
2097         LLVM_LIBDIR=`$LLVM_CONFIG --libdir`
2098
2099         AC_COMPUTE_INT([LLVM_VERSION_MAJOR], [LLVM_VERSION_MAJOR],
2100             [#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
2101         AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
2102             [#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
2103
2104         LLVM_VERSION_PATCH=`echo $LLVM_VERSION | cut -d. -f3 | egrep -o '^[[0-9]]+'`
2105         if test -z "$LLVM_VERSION_PATCH"; then
2106             LLVM_VERSION_PATCH=0
2107         fi
2108
2109         if test -n "${LLVM_VERSION_MAJOR}"; then
2110             LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
2111         else
2112             LLVM_VERSION_INT=`echo $LLVM_VERSION | sed -e 's/\([[0-9]]\)\.\([[0-9]]\)/\10\2/g'`
2113         fi
2114
2115         LLVM_REQUIRED_VERSION_MAJOR="3"
2116         LLVM_REQUIRED_VERSION_MINOR="3"
2117         if test "$LLVM_VERSION_INT" -lt "${LLVM_REQUIRED_VERSION_MAJOR}0${LLVM_REQUIRED_VERSION_MINOR}"; then
2118             AC_MSG_ERROR([LLVM $LLVM_REQUIRED_VERSION_MAJOR.$LLVM_REQUIRED_VERSION_MINOR or newer is required])
2119         fi
2120
2121         LLVM_COMPONENTS="engine bitwriter mcjit mcdisassembler"
2122
2123         if test "x$enable_opencl" = xyes; then
2124             llvm_check_version_for "3" "5" "0" "opencl"
2125
2126             LLVM_COMPONENTS="${LLVM_COMPONENTS} all-targets ipo linker instrumentation"
2127             LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader option objcarcopts profiledata"
2128         fi
2129         DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
2130         MESA_LLVM=1
2131
2132         dnl Check for Clang internal headers
2133         if test "x$enable_opencl" = xyes; then
2134             if test -z "$CLANG_LIBDIR"; then
2135                 CLANG_LIBDIR=${LLVM_LIBDIR}
2136             fi
2137             CLANG_RESOURCE_DIR=$CLANG_LIBDIR/clang/${LLVM_VERSION}
2138             AS_IF([test ! -f "$CLANG_RESOURCE_DIR/include/stddef.h"],
2139                 [AC_MSG_ERROR([Could not find clang internal header stddef.h in $CLANG_RESOURCE_DIR Use --with-clang-libdir to specify the correct path to the clang libraries.])])
2140         fi
2141     else
2142         MESA_LLVM=0
2143         LLVM_VERSION_INT=0
2144     fi
2145 else
2146     MESA_LLVM=0
2147     LLVM_VERSION_INT=0
2148
2149     if test "x$enable_opencl" = xyes; then
2150         AC_MSG_ERROR([cannot enable OpenCL without LLVM])
2151     fi
2152 fi
2153
2154 dnl Directory for XVMC libs
2155 AC_ARG_WITH([xvmc-libdir],
2156     [AS_HELP_STRING([--with-xvmc-libdir=DIR],
2157         [directory for the XVMC libraries @<:@default=${libdir}@:>@])],
2158     [XVMC_LIB_INSTALL_DIR="$withval"],
2159     [XVMC_LIB_INSTALL_DIR='${libdir}'])
2160 AC_SUBST([XVMC_LIB_INSTALL_DIR])
2161
2162 dnl
2163 dnl Gallium Tests
2164 dnl
2165 AM_CONDITIONAL(HAVE_GALLIUM_TESTS, test "x$enable_gallium_tests" = xyes)
2166
2167 dnl Directory for VDPAU libs
2168 AC_ARG_WITH([vdpau-libdir],
2169     [AS_HELP_STRING([--with-vdpau-libdir=DIR],
2170         [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
2171     [VDPAU_LIB_INSTALL_DIR="$withval"],
2172     [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
2173 AC_SUBST([VDPAU_LIB_INSTALL_DIR])
2174
2175 dnl Directory for OMX libs
2176
2177 AC_ARG_WITH([omx-libdir],
2178     [AS_HELP_STRING([--with-omx-libdir=DIR],
2179         [directory for the OMX libraries])],
2180     [OMX_LIB_INSTALL_DIR="$withval"],
2181     [OMX_LIB_INSTALL_DIR=`$PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`])
2182 AC_SUBST([OMX_LIB_INSTALL_DIR])
2183
2184 dnl Directory for VA libs
2185
2186 AC_ARG_WITH([va-libdir],
2187     [AS_HELP_STRING([--with-va-libdir=DIR],
2188         [directory for the VA libraries @<:@${libdir}/dri@:>@])],
2189     [VA_LIB_INSTALL_DIR="$withval"],
2190     [VA_LIB_INSTALL_DIR="${libdir}/dri"])
2191 AC_SUBST([VA_LIB_INSTALL_DIR])
2192
2193 AC_ARG_WITH([d3d-libdir],
2194     [AS_HELP_STRING([--with-d3d-libdir=DIR],
2195         [directory for the D3D modules @<:@${libdir}/d3d@:>@])],
2196     [D3D_DRIVER_INSTALL_DIR="$withval"],
2197     [D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
2198 AC_SUBST([D3D_DRIVER_INSTALL_DIR])
2199
2200 dnl
2201 dnl Gallium helper functions
2202 dnl
2203 gallium_require_drm() {
2204     if test "x$have_libdrm" != xyes; then
2205        AC_MSG_ERROR([$1 requires libdrm >= $LIBDRM_REQUIRED])
2206     fi
2207 }
2208
2209 gallium_require_llvm() {
2210     if test "x$MESA_LLVM" = x0; then
2211         case "$host" in *gnux32) return;; esac
2212         case "$host_cpu" in
2213         i*86|x86_64|amd64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
2214         esac
2215     fi
2216 }
2217
2218 gallium_require_drm_loader() {
2219     if test "x$need_pci_id$have_pci_id" = xyesno; then
2220         AC_MSG_ERROR([Gallium drm loader requires libudev >= $LIBUDEV_REQUIRED or sysfs])
2221     fi
2222 }
2223
2224 dnl This is for Glamor. Skip this if OpenGL is disabled.
2225 require_egl_drm() {
2226     if test "x$enable_opengl" = xno; then
2227         return 0
2228     fi
2229
2230     case "$with_egl_platforms" in
2231         *drm*)
2232             ;;
2233          *)
2234             AC_MSG_ERROR([--with-egl-platforms=drm is required to build the $1 driver.])
2235             ;;
2236     esac
2237     if test "x$enable_gbm" != xyes; then
2238             AC_MSG_ERROR([--enable-gbm is required to build the $1 driver.])
2239     fi
2240 }
2241
2242 radeon_llvm_check() {
2243     if test ${LLVM_VERSION_INT} -lt 307; then
2244         amdgpu_llvm_target_name='r600'
2245     else
2246         amdgpu_llvm_target_name='amdgpu'
2247     fi
2248     if test "x$enable_gallium_llvm" != "xyes"; then
2249         AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
2250     fi
2251     llvm_check_version_for "3" "6" "0" $1
2252     if test true && $LLVM_CONFIG --targets-built | grep -iqvw $amdgpu_llvm_target_name ; then
2253         AC_MSG_ERROR([LLVM $amdgpu_llvm_target_name not enabled in your LLVM build.])
2254     fi
2255     LLVM_COMPONENTS="${LLVM_COMPONENTS} $amdgpu_llvm_target_name bitreader ipo"
2256     NEED_RADEON_LLVM=yes
2257     if test "x$have_libelf" != xyes; then
2258        AC_MSG_ERROR([$1 requires libelf when using llvm])
2259     fi
2260 }
2261
2262 swr_llvm_check() {
2263     gallium_require_llvm $1
2264     if test ${LLVM_VERSION_INT} -lt 306; then
2265         AC_MSG_ERROR([LLVM version 3.6 or later required when building $1])
2266     fi
2267     if test "x$enable_gallium_llvm" != "xyes"; then
2268         AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
2269     fi
2270 }
2271
2272 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
2273 if test -n "$with_gallium_drivers"; then
2274     gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
2275     for driver in $gallium_drivers; do
2276         case "x$driver" in
2277         xsvga)
2278             HAVE_GALLIUM_SVGA=yes
2279             gallium_require_drm "svga"
2280             gallium_require_drm_loader
2281             ;;
2282         xi915)
2283             HAVE_GALLIUM_I915=yes
2284             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2285             gallium_require_drm "Gallium i915"
2286             gallium_require_drm_loader
2287             ;;
2288         xilo)
2289             HAVE_GALLIUM_ILO=yes
2290             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2291             gallium_require_drm "Gallium i965/ilo"
2292             gallium_require_drm_loader
2293             ;;
2294         xr300)
2295             HAVE_GALLIUM_R300=yes
2296             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2297             gallium_require_drm "Gallium R300"
2298             gallium_require_drm_loader
2299             gallium_require_llvm "Gallium R300"
2300             ;;
2301         xr600)
2302             HAVE_GALLIUM_R600=yes
2303             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2304             gallium_require_drm "Gallium R600"
2305             gallium_require_drm_loader
2306             if test "x$enable_opencl" = xyes; then
2307                 radeon_llvm_check "r600g"
2308                 LLVM_COMPONENTS="${LLVM_COMPONENTS} bitreader asmparser"
2309             fi
2310             ;;
2311         xradeonsi)
2312             HAVE_GALLIUM_RADEONSI=yes
2313             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2314             PKG_CHECK_MODULES([AMDGPU], [libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
2315             gallium_require_drm "radeonsi"
2316             gallium_require_drm_loader
2317             radeon_llvm_check "radeonsi"
2318             require_egl_drm "radeonsi"
2319             ;;
2320         xnouveau)
2321             HAVE_GALLIUM_NOUVEAU=yes
2322             PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
2323             gallium_require_drm "nouveau"
2324             gallium_require_drm_loader
2325             ;;
2326         xfreedreno)
2327             HAVE_GALLIUM_FREEDRENO=yes
2328             PKG_CHECK_MODULES([FREEDRENO], [libdrm_freedreno >= $LIBDRM_FREEDRENO_REQUIRED])
2329             gallium_require_drm "freedreno"
2330             gallium_require_drm_loader
2331             ;;
2332         xswrast)
2333             HAVE_GALLIUM_SOFTPIPE=yes
2334             if test "x$MESA_LLVM" = x1; then
2335                 HAVE_GALLIUM_LLVMPIPE=yes
2336             fi
2337             ;;
2338         xswr)
2339             swr_llvm_check "swr"
2340
2341             AC_MSG_CHECKING([whether $CXX supports c++11/AVX/AVX2])
2342             AVX_CXXFLAGS="-march=core-avx-i"
2343             AVX2_CXXFLAGS="-march=core-avx2"
2344
2345             AC_LANG_PUSH([C++])
2346             save_CXXFLAGS="$CXXFLAGS"
2347             CXXFLAGS="-std=c++11 $CXXFLAGS"
2348             AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[],
2349                               [AC_MSG_ERROR([c++11 compiler support not detected])])
2350             CXXFLAGS="$save_CXXFLAGS"
2351
2352             save_CXXFLAGS="$CXXFLAGS"
2353             CXXFLAGS="$AVX_CXXFLAGS $CXXFLAGS"
2354             AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[],
2355                               [AC_MSG_ERROR([AVX compiler support not detected])])
2356             CXXFLAGS="$save_CXXFLAGS"
2357
2358             save_CFLAGS="$CXXFLAGS"
2359             CXXFLAGS="$AVX2_CXXFLAGS $CXXFLAGS"
2360             AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[],
2361                               [AC_MSG_ERROR([AVX2 compiler support not detected])])
2362             CXXFLAGS="$save_CXXFLAGS"
2363             AC_LANG_POP([C++])
2364
2365             HAVE_GALLIUM_SWR=yes
2366             ;;
2367         xvc4)
2368             HAVE_GALLIUM_VC4=yes
2369             gallium_require_drm "vc4"
2370             gallium_require_drm_loader
2371
2372             PKG_CHECK_MODULES([SIMPENROSE], [simpenrose],
2373                               [USE_VC4_SIMULATOR=yes;
2374                                DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"],
2375                               [USE_VC4_SIMULATOR=no])
2376             ;;
2377         xvirgl)
2378             HAVE_GALLIUM_VIRGL=yes
2379             gallium_require_drm "virgl"
2380             gallium_require_drm_loader
2381             require_egl_drm "virgl"
2382             ;;
2383         *)
2384             AC_MSG_ERROR([Unknown Gallium driver: $driver])
2385             ;;
2386         esac
2387     done
2388 fi
2389
2390 dnl Set LLVM_LIBS - This is done after the driver configuration so
2391 dnl that drivers can add additional components to LLVM_COMPONENTS.
2392 dnl Previously, gallium drivers were updating LLVM_LIBS directly
2393 dnl by calling llvm-config --libs ${DRIVER_LLVM_COMPONENTS}, but
2394 dnl this was causing the same libraries to be appear multiple times
2395 dnl in LLVM_LIBS.
2396
2397 if test "x$MESA_LLVM" != x0; then
2398
2399     if ! $LLVM_CONFIG --libs ${LLVM_COMPONENTS} >/dev/null; then
2400        AC_MSG_ERROR([Calling ${LLVM_CONFIG} failed])
2401     fi
2402     LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
2403
2404     dnl llvm-config may not give the right answer when llvm is a built as a
2405     dnl single shared library, so we must work the library name out for
2406     dnl ourselves.
2407     dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
2408     if test "x$enable_llvm_shared_libs" = xyes; then
2409         dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
2410         LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
2411         AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
2412
2413         if test "x$llvm_have_one_so" = xyes; then
2414             dnl LLVM was built using auto*, so there is only one shared object.
2415             LLVM_LIBS="-l$LLVM_SO_NAME"
2416         else
2417             dnl If LLVM was built with CMake, there will be one shared object per
2418             dnl component.
2419             AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"],
2420                     [AC_MSG_ERROR([Could not find llvm shared libraries:
2421         Please make sure you have built llvm with the --enable-shared option
2422         and that your llvm libraries are installed in $LLVM_LIBDIR
2423         If you have installed your llvm libraries to a different directory you
2424         can use the --with-llvm-prefix= configure flag to specify this directory.
2425         NOTE: Mesa is attempting to use llvm shared libraries by default.
2426         If you do not want to build with llvm shared libraries and instead want to
2427         use llvm static libraries then add --disable-llvm-shared-libs to your configure
2428         invocation and rebuild.])])
2429
2430            dnl We don't need to update LLVM_LIBS in this case because the LLVM
2431            dnl install uses a shared object for each component and we have
2432            dnl already added all of these objects to LLVM_LIBS.
2433         fi
2434     else
2435         AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
2436         dnl We need to link to llvm system libs when using static libs
2437         dnl However, only llvm 3.5+ provides --system-libs
2438         if test $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
2439             LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
2440         fi
2441     fi
2442 fi
2443
2444 AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
2445 AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
2446 AM_CONDITIONAL(HAVE_GALLIUM_ILO, test "x$HAVE_GALLIUM_ILO" = xyes)
2447 AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
2448 AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
2449 AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
2450 AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_R600" = xyes -o \
2451                                                 "x$HAVE_GALLIUM_RADEONSI" = xyes)
2452 AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes)
2453 AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
2454 AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
2455 AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
2456 AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes)
2457 AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \
2458                                          "x$HAVE_GALLIUM_LLVMPIPE" = xyes -o \
2459                                          "x$HAVE_GALLIUM_SWR" = xyes)
2460 AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes)
2461 AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes)
2462
2463 AM_CONDITIONAL(HAVE_GALLIUM_STATIC_TARGETS, test "x$enable_shared_pipe_drivers" = xno)
2464
2465 if test "x$enable_dri" = xyes; then
2466     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_DRI"
2467 fi
2468
2469 if test "x$have_drisw_kms" = xyes; then
2470     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_KMS"
2471 fi
2472 AC_SUBST([GALLIUM_PIPE_LOADER_DEFINES])
2473
2474 AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
2475 AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
2476 AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
2477 AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes)
2478 AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
2479 AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
2480
2481 AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes)
2482
2483 AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \
2484                                         "x$HAVE_I965_DRI" = xyes)
2485
2486 AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$HAVE_GALLIUM_R300" = xyes -o \
2487                                             "x$HAVE_GALLIUM_R600" = xyes -o \
2488                                             "x$HAVE_GALLIUM_RADEONSI" = xyes)
2489 AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$enable_glx" = xgallium-xlib)
2490 AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes)
2491 AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes)
2492 AM_CONDITIONAL(HAVE_MESA_LLVM, test x$MESA_LLVM = x1)
2493 AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes)
2494 if test "x$USE_VC4_SIMULATOR" = xyes -a "x$HAVE_GALLIUM_ILO" = xyes; then
2495     AC_MSG_ERROR([VC4 simulator on x86 replaces i965 driver build, so ilo must be disabled.])
2496 fi
2497
2498 AM_CONDITIONAL(HAVE_LIBDRM, test "x$have_libdrm" = xyes)
2499 AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
2500 AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
2501
2502 AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
2503 AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
2504 AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
2505
2506 AC_SUBST([NINE_MAJOR], 1)
2507 AC_SUBST([NINE_MINOR], 0)
2508 AC_SUBST([NINE_TINY], 0)
2509 AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_TINY")
2510
2511 AC_SUBST([VDPAU_MAJOR], 1)
2512 AC_SUBST([VDPAU_MINOR], 0)
2513
2514 VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'`
2515 VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'`
2516 AC_SUBST([VA_MAJOR], $VA_MAJOR)
2517 AC_SUBST([VA_MINOR], $VA_MINOR)
2518
2519 AC_SUBST([XVMC_MAJOR], 1)
2520 AC_SUBST([XVMC_MINOR], 0)
2521
2522 XA_HEADER="$srcdir/src/gallium/state_trackers/xa/xa_tracker.h"
2523 XA_MAJOR=`grep "#define XA_TRACKER_VERSION_MAJOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MAJOR //'`
2524 XA_MINOR=`grep "#define XA_TRACKER_VERSION_MINOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MINOR //'`
2525 XA_TINY=`grep "#define XA_TRACKER_VERSION_PATCH" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_PATCH //'`
2526
2527 AC_SUBST([XA_MAJOR], $XA_MAJOR)
2528 AC_SUBST([XA_MINOR], $XA_MINOR)
2529 AC_SUBST([XA_TINY], $XA_TINY)
2530 AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
2531
2532 AC_ARG_ENABLE(valgrind,
2533               [AS_HELP_STRING([--enable-valgrind],
2534                              [Build mesa with valgrind support (default: auto)])],
2535                              [VALGRIND=$enableval], [VALGRIND=auto])
2536 if test "x$VALGRIND" != xno; then
2537         PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
2538 fi
2539 AC_MSG_CHECKING([whether to enable Valgrind support])
2540 if test "x$VALGRIND" = xauto; then
2541         VALGRIND="$have_valgrind"
2542 fi
2543
2544 if test "x$VALGRIND" = "xyes"; then
2545         if ! test "x$have_valgrind" = xyes; then
2546                 AC_MSG_ERROR([Valgrind support required but not present])
2547         fi
2548         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
2549 fi
2550
2551 AC_MSG_RESULT([$VALGRIND])
2552
2553 dnl Restore LDFLAGS and CPPFLAGS
2554 LDFLAGS="$_SAVE_LDFLAGS"
2555 CPPFLAGS="$_SAVE_CPPFLAGS"
2556
2557 dnl Suppress clang's warnings about unused CFLAGS and CXXFLAGS
2558 if test "x$acv_mesa_CLANG" = xyes; then
2559     CFLAGS="$CFLAGS -Qunused-arguments"
2560     CXXFLAGS="$CXXFLAGS -Qunused-arguments"
2561 fi
2562
2563 dnl Add user CFLAGS and CXXFLAGS
2564 CFLAGS="$CFLAGS $USER_CFLAGS"
2565 CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
2566
2567 dnl Substitute the config
2568 AC_CONFIG_FILES([Makefile
2569                 src/Makefile
2570                 src/compiler/Makefile
2571                 src/egl/Makefile
2572                 src/egl/main/egl.pc
2573                 src/egl/wayland/wayland-drm/Makefile
2574                 src/egl/wayland/wayland-egl/Makefile
2575                 src/egl/wayland/wayland-egl/wayland-egl.pc
2576                 src/gallium/Makefile
2577                 src/gallium/auxiliary/Makefile
2578                 src/gallium/auxiliary/pipe-loader/Makefile
2579                 src/gallium/drivers/freedreno/Makefile
2580                 src/gallium/drivers/ddebug/Makefile
2581                 src/gallium/drivers/i915/Makefile
2582                 src/gallium/drivers/ilo/Makefile
2583                 src/gallium/drivers/llvmpipe/Makefile
2584                 src/gallium/drivers/noop/Makefile
2585                 src/gallium/drivers/nouveau/Makefile
2586                 src/gallium/drivers/r300/Makefile
2587                 src/gallium/drivers/r600/Makefile
2588                 src/gallium/drivers/radeon/Makefile
2589                 src/gallium/drivers/radeonsi/Makefile
2590                 src/gallium/drivers/rbug/Makefile
2591                 src/gallium/drivers/softpipe/Makefile
2592                 src/gallium/drivers/svga/Makefile
2593                 src/gallium/drivers/swr/Makefile
2594                 src/gallium/drivers/trace/Makefile
2595                 src/gallium/drivers/vc4/Makefile
2596                 src/gallium/drivers/virgl/Makefile
2597                 src/gallium/state_trackers/clover/Makefile
2598                 src/gallium/state_trackers/dri/Makefile
2599                 src/gallium/state_trackers/glx/xlib/Makefile
2600                 src/gallium/state_trackers/nine/Makefile
2601                 src/gallium/state_trackers/omx/Makefile
2602                 src/gallium/state_trackers/osmesa/Makefile
2603                 src/gallium/state_trackers/va/Makefile
2604                 src/gallium/state_trackers/vdpau/Makefile
2605                 src/gallium/state_trackers/xa/Makefile
2606                 src/gallium/state_trackers/xvmc/Makefile
2607                 src/gallium/targets/d3dadapter9/Makefile
2608                 src/gallium/targets/d3dadapter9/d3d.pc
2609                 src/gallium/targets/dri/Makefile
2610                 src/gallium/targets/libgl-xlib/Makefile
2611                 src/gallium/targets/omx/Makefile
2612                 src/gallium/targets/opencl/Makefile
2613                 src/gallium/targets/opencl/mesa.icd
2614                 src/gallium/targets/osmesa/Makefile
2615                 src/gallium/targets/osmesa/osmesa.pc
2616                 src/gallium/targets/pipe-loader/Makefile
2617                 src/gallium/targets/va/Makefile
2618                 src/gallium/targets/vdpau/Makefile
2619                 src/gallium/targets/xa/Makefile
2620                 src/gallium/targets/xa/xatracker.pc
2621                 src/gallium/targets/xvmc/Makefile
2622                 src/gallium/tests/trivial/Makefile
2623                 src/gallium/tests/unit/Makefile
2624                 src/gallium/winsys/freedreno/drm/Makefile
2625                 src/gallium/winsys/i915/drm/Makefile
2626                 src/gallium/winsys/intel/drm/Makefile
2627                 src/gallium/winsys/nouveau/drm/Makefile
2628                 src/gallium/winsys/radeon/drm/Makefile
2629                 src/gallium/winsys/amdgpu/drm/Makefile
2630                 src/gallium/winsys/svga/drm/Makefile
2631                 src/gallium/winsys/sw/dri/Makefile
2632                 src/gallium/winsys/sw/kms-dri/Makefile
2633                 src/gallium/winsys/sw/null/Makefile
2634                 src/gallium/winsys/sw/wrapper/Makefile
2635                 src/gallium/winsys/sw/xlib/Makefile
2636                 src/gallium/winsys/vc4/drm/Makefile
2637                 src/gallium/winsys/virgl/drm/Makefile
2638                 src/gallium/winsys/virgl/vtest/Makefile
2639                 src/gbm/Makefile
2640                 src/gbm/main/gbm.pc
2641                 src/glx/Makefile
2642                 src/glx/apple/Makefile
2643                 src/glx/tests/Makefile
2644                 src/gtest/Makefile
2645                 src/intel/Makefile
2646                 src/intel/genxml/Makefile
2647                 src/intel/isl/Makefile
2648                 src/intel/vulkan/Makefile
2649                 src/loader/Makefile
2650                 src/mapi/Makefile
2651                 src/mapi/es1api/glesv1_cm.pc
2652                 src/mapi/es2api/glesv2.pc
2653                 src/mapi/glapi/gen/Makefile
2654                 src/mesa/Makefile
2655                 src/mesa/gl.pc
2656                 src/mesa/drivers/dri/dri.pc
2657                 src/mesa/drivers/dri/common/Makefile
2658                 src/mesa/drivers/dri/common/xmlpool/Makefile
2659                 src/mesa/drivers/dri/i915/Makefile
2660                 src/mesa/drivers/dri/i965/Makefile
2661                 src/mesa/drivers/dri/Makefile
2662                 src/mesa/drivers/dri/nouveau/Makefile
2663                 src/mesa/drivers/dri/r200/Makefile
2664                 src/mesa/drivers/dri/radeon/Makefile
2665                 src/mesa/drivers/dri/swrast/Makefile
2666                 src/mesa/drivers/osmesa/Makefile
2667                 src/mesa/drivers/osmesa/osmesa.pc
2668                 src/mesa/drivers/x11/Makefile
2669                 src/mesa/main/tests/Makefile
2670                 src/util/Makefile
2671                 src/util/tests/hash_table/Makefile])
2672
2673 AC_OUTPUT
2674
2675 # Fix up dependencies in *.Plo files, where we changed the extension of a
2676 # source file
2677 $SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo
2678 $SED -i -e 's/gen6_blorp.cpp/gen6_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen6_blorp.Plo
2679 $SED -i -e 's/gen7_blorp.cpp/gen7_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen7_blorp.Plo
2680 $SED -i -e 's/gen8_blorp.cpp/gen8_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen8_blorp.Plo
2681
2682
2683 dnl
2684 dnl Output some configuration info for the user
2685 dnl
2686 echo ""
2687 echo "        prefix:          $prefix"
2688 echo "        exec_prefix:     $exec_prefix"
2689 echo "        libdir:          $libdir"
2690 echo "        includedir:      $includedir"
2691
2692 dnl API info
2693 echo ""
2694 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
2695
2696 dnl Driver info
2697 echo ""
2698 case "x$enable_osmesa$enable_gallium_osmesa" in
2699 xnoyes)
2700         echo "        OSMesa:          lib$OSMESA_LIB (Gallium)"
2701         ;;
2702 xyesno)
2703         echo "        OSMesa:          lib$OSMESA_LIB"
2704         ;;
2705 xnono)
2706         echo "        OSMesa:          no"
2707         ;;
2708 esac
2709
2710 echo ""
2711 if test "x$enable_dri" != xno; then
2712         echo "        DRI platform:    $dri_platform"
2713         if test -z "$DRI_DIRS"; then
2714             echo "        DRI drivers:     no"
2715         else
2716             echo "        DRI drivers:     $DRI_DIRS"
2717         fi
2718         echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
2719 fi
2720
2721 case "x$enable_glx" in
2722 xdri)
2723     echo "        GLX:             DRI-based"
2724     ;;
2725 xxlib)
2726     echo "        GLX:             Xlib-based"
2727     ;;
2728 xgallium-xlib)
2729     echo "        GLX:             Xlib-based (Gallium)"
2730     ;;
2731 *)
2732     echo "        GLX:             $enable_glx"
2733     ;;
2734 esac
2735
2736 dnl EGL
2737 echo ""
2738 echo "        EGL:             $enable_egl"
2739 if test "$enable_egl" = yes; then
2740     echo "        EGL platforms:   $egl_platforms"
2741
2742     egl_drivers=""
2743     if test "x$HAVE_EGL_DRIVER_DRI2" != "x"; then
2744         egl_drivers="$egl_drivers builtin:egl_dri2"
2745     fi
2746     if test "x$HAVE_EGL_DRIVER_DRI3" != "x"; then
2747         egl_drivers="$egl_drivers builtin:egl_dri3"
2748     fi
2749
2750     echo "        EGL drivers:    $egl_drivers"
2751 fi
2752
2753 # Vulkan
2754 echo ""
2755 if test "x$VULKAN_DRIVERS" != x; then
2756     echo "        Vulkan drivers:  $VULKAN_DRIVERS"
2757     echo "        Vulkan ICD dir:  $VULKAN_ICD_INSTALL_DIR"
2758 else
2759     echo "        Vulkan drivers:  no"
2760 fi
2761
2762 echo ""
2763 if test "x$MESA_LLVM" = x1; then
2764     echo "        llvm:            yes"
2765     echo "        llvm-config:     $LLVM_CONFIG"
2766     echo "        llvm-version:    $LLVM_VERSION"
2767 else
2768     echo "        llvm:            no"
2769 fi
2770
2771 echo ""
2772 if test -n "$with_gallium_drivers"; then
2773     echo "        Gallium drivers: $gallium_drivers"
2774     echo "        Gallium st:      $gallium_st"
2775 else
2776     echo "        Gallium:         no"
2777 fi
2778
2779 dnl Shader cache
2780 echo ""
2781 echo "        Shader cache:    $enable_shader_cache"
2782 if test "x$enable_shader_cache" = "xyes"; then
2783     echo "        With SHA1 from:  $with_sha1"
2784 fi
2785
2786 dnl Libraries
2787 echo ""
2788 echo "        Shared libs:     $enable_shared"
2789 echo "        Static libs:     $enable_static"
2790 echo "        Shared-glapi:    $enable_shared_glapi"
2791
2792 dnl Compiler options
2793 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2794 cflags=`echo $CFLAGS | \
2795     $SED 's/^ *//;s/  */ /;s/ *$//'`
2796 cxxflags=`echo $CXXFLAGS | \
2797     $SED 's/^ *//;s/  */ /;s/ *$//'`
2798 defines=`echo $DEFINES | $SED 's/^ *//;s/  */ /;s/ *$//'`
2799 echo ""
2800 echo "        CFLAGS:          $cflags"
2801 echo "        CXXFLAGS:        $cxxflags"
2802 echo "        Macros:          $defines"
2803 echo ""
2804 if test "x$MESA_LLVM" = x1; then
2805     echo "        LLVM_CFLAGS:     $LLVM_CFLAGS"
2806     echo "        LLVM_CXXFLAGS:   $LLVM_CXXFLAGS"
2807     echo "        LLVM_CPPFLAGS:   $LLVM_CPPFLAGS"
2808     echo "        LLVM_LDFLAGS:    $LLVM_LDFLAGS"
2809     echo ""
2810 fi
2811 echo "        PYTHON2:         $PYTHON2"
2812 echo "        PYTHON3:         $PYTHON3"
2813
2814 echo ""
2815 echo "        Run '${MAKE-make}' to build Mesa"
2816 echo ""