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