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