OSDN Git Service

configure: Require libudev for drm & wayland egl platforms
[android-x86/external-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=auto@:>@])],
601     [enable_gallium_gbm="$enableval"],
602     [enable_gallium_gbm=auto])
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 dnl
729 dnl Driver specific build directories
730 dnl
731
732 dnl this variable will be prepended to SRC_DIRS and is not exported
733 CORE_DIRS=""
734
735 SRC_DIRS=""
736 GLU_DIRS="sgi"
737 GALLIUM_DIRS="auxiliary drivers state_trackers"
738 GALLIUM_TARGET_DIRS=""
739 GALLIUM_WINSYS_DIRS="sw"
740 GALLIUM_DRIVERS_DIRS="softpipe failover galahad trace rbug noop identity"
741 GALLIUM_STATE_TRACKERS_DIRS=""
742
743 # build shared-glapi if enabled for OpenGL or if OpenGL ES is enabled
744 case "x$enable_shared_glapi$enable_gles1$enable_gles2" in
745 x*yes*)
746     CORE_DIRS="$CORE_DIRS mapi/shared-glapi"
747     ;;
748 esac
749
750 # build glapi if OpenGL is enabled
751 if test "x$enable_opengl" = xyes; then
752     CORE_DIRS="$CORE_DIRS mapi/glapi"
753 fi
754
755 # build es1api if OpenGL ES 1.x is enabled
756 if test "x$enable_gles1" = xyes; then
757     CORE_DIRS="$CORE_DIRS mapi/es1api"
758 fi
759
760 # build es2api if OpenGL ES 2.x is enabled
761 if test "x$enable_gles2" = xyes; then
762     CORE_DIRS="$CORE_DIRS mapi/es2api"
763 fi
764
765 # build glsl and mesa if OpenGL or OpenGL ES is enabled
766 case "x$enable_opengl$enable_gles1$enable_gles2" in
767 x*yes*)
768     CORE_DIRS="$CORE_DIRS glsl mesa"
769     ;;
770 esac
771
772 case "x$enable_glx$enable_xlib_glx" in
773 xyesyes)
774     DRIVER_DIRS="$DRIVER_DIRS x11"
775     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib"
776     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS libgl-xlib"
777     GALLIUM_STATE_TRACKERS_DIRS="glx $GALLIUM_STATE_TRACKERS_DIRS"
778     ;;
779 xyesno)
780     # DRI-based GLX
781     SRC_DIRS="$SRC_DIRS glx"
782     ;;
783 esac
784
785 if test "x$enable_dri" = xyes; then
786     DRIVER_DIRS="$DRIVER_DIRS dri"
787
788     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib sw/dri"
789     GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
790     HAVE_ST_DRI="yes"
791 fi
792
793 if test "x$enable_osmesa" = xyes; then
794     # the empty space matters for osmesa... (see src/mesa/Makefile)
795     if test -n "$DRIVER_DIRS"; then
796         DRIVER_DIRS="$DRIVER_DIRS osmesa"
797     else
798         DRIVER_DIRS="osmesa"
799     fi
800 fi
801
802 AC_SUBST([SRC_DIRS])
803 AC_SUBST([GLU_DIRS])
804 AC_SUBST([DRIVER_DIRS])
805 AC_SUBST([GALLIUM_DIRS])
806 AC_SUBST([GALLIUM_TARGET_DIRS])
807 AC_SUBST([GALLIUM_WINSYS_DIRS])
808 AC_SUBST([GALLIUM_DRIVERS_DIRS])
809 AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
810 AC_SUBST([MESA_LLVM])
811
812 # Check for libdrm
813 PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
814                   [have_libdrm=yes], [have_libdrm=no])
815
816 if test "x$enable_dri" = xyes; then
817     # DRI must be shared, I think
818     if test "$enable_static" = yes; then
819         AC_MSG_ERROR([Can't use static libraries for DRI drivers])
820     fi
821
822     # not a hard requirement as swrast does not depend on it
823     if test "x$have_libdrm" = xyes; then
824         DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
825     fi
826 fi
827
828 dnl
829 dnl Find out if X is available. The variable have_x is set if libX11 is
830 dnl found to mimic AC_PATH_XTRA.
831 dnl
832 if test -n "$PKG_CONFIG"; then
833     AC_MSG_CHECKING([pkg-config files for X11 are available])
834     PKG_CHECK_EXISTS([x11],[
835         x11_pkgconfig=yes
836         have_x=yes
837         ],[
838         x11_pkgconfig=no
839     ])
840     AC_MSG_RESULT([$x11_pkgconfig])
841 else
842     x11_pkgconfig=no
843 fi
844 dnl Use the autoconf macro if no pkg-config files
845 if test "$x11_pkgconfig" = yes; then
846     PKG_CHECK_MODULES([X11], [x11])
847 else
848     AC_PATH_XTRA
849     test -z "$X11_CFLAGS" && X11_CFLAGS="$X_CFLAGS"
850     test -z "$X11_LIBS" && X11_LIBS="$X_LIBS -lX11"
851     AC_SUBST([X11_CFLAGS])
852     AC_SUBST([X11_LIBS])
853 fi
854
855 dnl Try to tell the user that the --x-* options are only used when
856 dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
857 m4_divert_once([HELP_BEGIN],
858 [These options are only used when the X libraries cannot be found by the
859 pkg-config utility.])
860
861 dnl We need X for xlib and dri, so bomb now if it's not found
862 if test "x$enable_glx" = xyes -a "x$no_x" = xyes; then
863     AC_MSG_ERROR([X11 development libraries needed for GLX])
864 fi
865
866 dnl XCB - this is only used for GLX right now
867 AC_ARG_ENABLE([xcb],
868     [AS_HELP_STRING([--enable-xcb],
869         [use XCB for GLX @<:@default=disabled@:>@])],
870     [enable_xcb="$enableval"],
871     [enable_xcb=no])
872 if test "x$enable_xcb" = xyes; then
873     DEFINES="$DEFINES -DUSE_XCB"
874 else
875     enable_xcb=no
876 fi
877
878 dnl Direct rendering or just indirect rendering
879 case "$host_os" in
880 gnu*)
881     dnl Disable by default on GNU/Hurd
882     driglx_direct_default="no"
883     ;;
884 cygwin*)
885     dnl Disable by default on cygwin
886     driglx_direct_default="no"
887     ;;
888 *)
889     driglx_direct_default="yes"
890     ;;
891 esac
892 AC_ARG_ENABLE([driglx-direct],
893     [AS_HELP_STRING([--disable-driglx-direct],
894         [enable direct rendering in GLX and EGL for DRI \
895             @<:@default=auto@:>@])],
896     [driglx_direct="$enableval"],
897     [driglx_direct="$driglx_direct_default"])
898
899 dnl
900 dnl libGL configuration per driver
901 dnl
902 case "x$enable_glx$enable_xlib_glx" in
903 xyesyes)
904     # Xlib-based GLX
905     if test "$x11_pkgconfig" = yes; then
906         PKG_CHECK_MODULES([XLIBGL], [x11 xext])
907         GL_PC_REQ_PRIV="x11 xext"
908         X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
909         GL_LIB_DEPS="$XLIBGL_LIBS"
910     else
911         # should check these...
912         X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
913         GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
914         GL_PC_LIB_PRIV="$GL_LIB_DEPS"
915         GL_PC_CFLAGS="$X11_INCLUDES"
916     fi
917     GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread"
918     GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm -lpthread"
919
920     # if static, move the external libraries to the programs
921     # and empty the libraries for libGL
922     if test "$enable_static" = yes; then
923         APP_LIB_DEPS="$APP_LIB_DEPS $GL_LIB_DEPS"
924         GL_LIB_DEPS=""
925     fi
926     ;;
927 xyesno)
928     # DRI-based GLX
929     PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
930     GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED"
931     if test x"$driglx_direct" = xyes; then
932         if test "x$have_libdrm" != xyes; then
933             AC_MSG_ERROR([Direct rendering requires libdrm >= $LIBDRM_REQUIRED])
934         fi
935         PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
936         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED"
937     fi
938
939     # find the DRI deps for libGL
940     if test "$x11_pkgconfig" = yes; then
941         dri_modules="x11 xext xdamage xfixes"
942
943         # add xf86vidmode if available
944         PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
945         if test "$HAVE_XF86VIDMODE" = yes ; then
946             dri_modules="$dri_modules xxf86vm"
947         fi
948
949         # add xcb modules if necessary
950         if test "$enable_xcb" = yes; then
951             dri_modules="$dri_modules x11-xcb xcb-glx"
952         fi
953
954         PKG_CHECK_MODULES([DRIGL], [$dri_modules])
955         GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
956         X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
957         GL_LIB_DEPS="$DRIGL_LIBS"
958     else
959         # should check these...
960         X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
961         if test "x$HAVE_XF86VIDMODE" == xyes; then
962            GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
963         else
964            GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXdamage -lXfixes"
965         fi
966         GL_PC_LIB_PRIV="$GL_LIB_DEPS"
967         GL_PC_CFLAGS="$X11_INCLUDES"
968
969         # XCB can only be used from pkg-config
970         if test "$enable_xcb" = yes; then
971             PKG_CHECK_MODULES([XCB],[x11-xcb xcb-glx])
972             GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV x11-xcb xcb-glx"
973             X11_INCLUDES="$X11_INCLUDES $XCB_CFLAGS"
974             GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
975         fi
976     fi
977
978     # need DRM libs, -lpthread, etc.
979     GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
980     GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
981     ;;
982 esac
983
984 GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
985 GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
986 GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
987 GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
988
989 AC_SUBST([GL_LIB_DEPS])
990 AC_SUBST([GL_PC_REQ_PRIV])
991 AC_SUBST([GL_PC_LIB_PRIV])
992 AC_SUBST([GL_PC_CFLAGS])
993 AC_SUBST([DRI_PC_REQ_PRIV])
994 AC_SUBST([GLESv1_CM_LIB_DEPS])
995 AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
996 AC_SUBST([GLESv2_LIB_DEPS])
997 AC_SUBST([GLESv2_PC_LIB_PRIV])
998
999 GLAPI_LIB_DEPS="-lpthread"
1000 AC_SUBST([GLAPI_LIB_DEPS])
1001
1002
1003 dnl Setup default DRI CFLAGS
1004 DRI_CFLAGS='$(CFLAGS)'
1005 DRI_CXXFLAGS='$(CXXFLAGS)'
1006 DRI_LIB_DEPS='$(TOP)/src/mesa/libmesa.a'
1007 MESA_MODULES='$(TOP)/src/mesa/libmesa.a'
1008
1009 AC_ARG_ENABLE([shared-dricore],
1010     [AS_HELP_STRING([--enable-shared-dricore],
1011         [link DRI modules with shared core DRI routines @<:@default=disabled@:>@])],
1012     [enable_dricore="$enableval"],
1013     [enable_dricore=no])
1014 if test "x$enable_dri" = xyes ; then
1015    if test "$enable_dricore" = yes ; then
1016       if test "$GCC$GXX" != yesyes ; then
1017          AC_MSG_WARN([Shared dricore requires GCC-compatible rpath handling.  Disabling shared dricore])
1018          enable_dricore=no
1019       else
1020          DRICORE_GLSL_LIBS='$(TOP)/$(LIB_DIR)/libglsl.so'
1021          DRICORE_LIBS='$(TOP)/$(LIB_DIR)/libdricore.so'
1022          DRICORE_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -lglsl'
1023          DRI_LIB_DEPS='-L$(TOP)/$(LIB_DIR) -Wl,-R$(DRI_DRIVER_INSTALL_DIR) -ldricore -lglsl'
1024          DRI_CFLAGS='$(CFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1025          DRI_CXXFLAGS='$(CXXFLAGS_NOVISIBILITY) -DUSE_DRICORE'
1026          MESA_MODULES='$(DRICORE_LIBS) $(DRICORE_GLSL_LIBS)'
1027       fi
1028    fi
1029 fi
1030 AC_SUBST([DRICORE_LIBS])
1031 AC_SUBST([DRICORE_GLSL_LIBS])
1032 AC_SUBST([DRICORE_LIB_DEPS])
1033 AC_SUBST([DRI_CXXFLAGS])
1034 AC_SUBST([DRI_CFLAGS])
1035 AC_SUBST([MESA_MODULES])
1036
1037 AC_SUBST([HAVE_XF86VIDMODE])
1038
1039 PKG_CHECK_MODULES([LIBDRM_RADEON],
1040                   [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED],
1041                   HAVE_LIBDRM_RADEON=yes,
1042                   HAVE_LIBDRM_RADEON=no)
1043
1044 dnl
1045 dnl More GLX setup
1046 dnl
1047 case "x$enable_glx$enable_xlib_glx" in
1048 xyesyes)
1049     DEFINES="$DEFINES -DUSE_XSHM"
1050     ;;
1051 xyesno)
1052     DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1053     if test "x$driglx_direct" = xyes; then
1054         DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1055     fi
1056     ;;
1057 esac
1058
1059 dnl
1060 dnl TLS detection
1061 dnl
1062
1063 AC_ARG_ENABLE([glx-tls],
1064     [AS_HELP_STRING([--enable-glx-tls],
1065         [enable TLS support in GLX @<:@default=disabled@:>@])],
1066     [GLX_USE_TLS="$enableval"],
1067     [GLX_USE_TLS=no])
1068 AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1069
1070 AS_IF([test "x$GLX_USE_TLS" = xyes],
1071       [DEFINES="${DEFINES} -DGLX_USE_TLS -DPTHREADS"])
1072
1073 dnl
1074 dnl More DRI setup
1075 dnl
1076 dnl Directory for DRI drivers
1077 AC_ARG_WITH([dri-driverdir],
1078     [AS_HELP_STRING([--with-dri-driverdir=DIR],
1079         [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
1080     [DRI_DRIVER_INSTALL_DIR="$withval"],
1081     [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
1082 AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1083 dnl Extra search path for DRI drivers
1084 AC_ARG_WITH([dri-searchpath],
1085     [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
1086         [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
1087     [DRI_DRIVER_SEARCH_DIR="$withval"],
1088     [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
1089 AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1090 dnl Which drivers to build - default is chosen by platform
1091 AC_ARG_WITH([dri-drivers],
1092     [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
1093         [comma delimited DRI drivers list, e.g.
1094         "swrast,i965,radeon" @<:@default=auto@:>@])],
1095     [with_dri_drivers="$withval"],
1096     [with_dri_drivers=yes])
1097 if test "x$with_dri_drivers" = x; then
1098     with_dri_drivers=no
1099 fi
1100
1101 dnl If $with_dri_drivers is yes, directories will be added through
1102 dnl platform checks
1103 DRI_DIRS=""
1104 case "$with_dri_drivers" in
1105 no) ;;
1106 yes)
1107     # classic DRI drivers require FEATURE_GL to build
1108     if test "x$enable_opengl" = xyes; then
1109         DRI_DIRS="yes"
1110     fi
1111     ;;
1112 *)
1113     # verify the requested driver directories exist
1114     dri_drivers=`IFS=', '; echo $with_dri_drivers`
1115     for driver in $dri_drivers; do
1116         test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
1117             AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
1118     done
1119     DRI_DIRS="$dri_drivers"
1120     if test -n "$DRI_DIRS" -a "x$enable_opengl" != xyes; then
1121         AC_MSG_ERROR([--with-dri-drivers requires OpenGL])
1122     fi
1123     ;;
1124 esac
1125
1126 dnl Set DRI_DIRS, DEFINES and LIB_DEPS
1127 if test "x$enable_dri" = xyes; then
1128     # Platform specific settings and drivers to build
1129     case "$host_os" in
1130     linux*)
1131         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1132         DEFINES="$DEFINES -DHAVE_ALIAS"
1133
1134         case "$host_cpu" in
1135         x86_64)
1136             # sis is missing because they have not be converted to use
1137             # the new interface.  i810 are missing because there is no
1138             # x86-64 system where they could *ever* be used.
1139             if test "x$DRI_DIRS" = "xyes"; then
1140                 DRI_DIRS="i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
1141                     radeon savage tdfx unichrome swrast"
1142             fi
1143             ;;
1144         powerpc*)
1145             # Build only the drivers for cards that exist on PowerPC.
1146             # At some point MGA will be added, but not yet.
1147             if test "x$DRI_DIRS" = "xyes"; then
1148                 DRI_DIRS="mach64 r128 r200 r300 r600 radeon tdfx swrast"
1149             fi
1150             ;;
1151         sparc*)
1152             # Build only the drivers for cards that exist on sparc`
1153             if test "x$DRI_DIRS" = "xyes"; then
1154                 DRI_DIRS="mach64 r128 r200 r300 r600 radeon swrast"
1155             fi
1156             ;;
1157         esac
1158         ;;
1159     freebsd* | dragonfly* | *netbsd*)
1160         DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
1161         DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
1162
1163         if test "x$DRI_DIRS" = "xyes"; then
1164             DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 \
1165                 radeon tdfx unichrome savage sis swrast"
1166         fi
1167         ;;
1168     gnu*)
1169         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1170         DEFINES="$DEFINES -DHAVE_ALIAS"
1171         ;;
1172     solaris*)
1173         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1174         ;;
1175     cygwin*)
1176         DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
1177         if test "x$DRI_DIRS" = "xyes"; then
1178             DRI_DIRS="swrast"
1179         fi
1180         ;;
1181     esac
1182
1183     # default drivers
1184     if test "x$DRI_DIRS" = "xyes"; then
1185         DRI_DIRS="i810 i915 i965 mach64 mga nouveau r128 r200 r300 r600 radeon \
1186             savage sis tdfx unichrome swrast"
1187     fi
1188
1189     DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
1190
1191     # Check for expat
1192     if test "x$enable_dri" = xyes; then
1193         EXPAT_INCLUDES=""
1194         EXPAT_LIB=-lexpat
1195         AC_ARG_WITH([expat],
1196             [AS_HELP_STRING([--with-expat=DIR],
1197                 [expat install directory])],[
1198             EXPAT_INCLUDES="-I$withval/include"
1199             CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
1200             LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
1201             EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
1202             ])
1203         AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
1204         AC_CHECK_LIB([expat],[XML_ParserCreate],[],
1205             [AC_MSG_ERROR([Expat required for DRI.])])
1206     fi
1207
1208     # libdrm is required for all except swrast
1209     if test -n "$DRI_DIRS" -a x"$DRI_DIRS" != xswrast; then
1210         if test "x$have_libdrm" != xyes; then
1211             AC_MSG_ERROR([DRI drivers requires libdrm >= $LIBDRM_REQUIRED])
1212         fi
1213     fi
1214
1215     # put all the necessary libs together, including possibly libdricore
1216     DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
1217 fi
1218 AC_SUBST([DRI_DIRS])
1219 AC_SUBST([EXPAT_INCLUDES])
1220 AC_SUBST([DRI_LIB_DEPS])
1221
1222 case $DRI_DIRS in
1223 *i915*|*i965*)
1224     PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1225     ;;
1226 esac
1227
1228 case $DRI_DIRS in
1229 *nouveau*)
1230     PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1231     ;;
1232 esac
1233
1234 case $DRI_DIRS in
1235 *radeon*|*r200*|*r300*|*r600*)
1236     if test "x$HAVE_LIBDRM_RADEON" = xyes; then
1237         RADEON_CFLAGS="-DHAVE_LIBDRM_RADEON=1 $LIBDRM_RADEON_CFLAGS"
1238         RADEON_LDFLAGS=$LIBDRM_RADEON_LIBS
1239     fi
1240     ;;
1241 esac
1242 AC_SUBST([RADEON_CFLAGS])
1243 AC_SUBST([RADEON_LDFLAGS])
1244
1245
1246 dnl
1247 dnl OSMesa configuration
1248 dnl
1249
1250 dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1251 AC_ARG_WITH([osmesa-bits],
1252     [AS_HELP_STRING([--with-osmesa-bits=BITS],
1253         [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1254     [osmesa_bits="$withval"],
1255     [osmesa_bits=8])
1256 if test "x$osmesa_bits" != x8; then
1257     if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then
1258         AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1259         osmesa_bits=8
1260     fi
1261 fi
1262 case "x$osmesa_bits" in
1263 x8)
1264     OSMESA_LIB=OSMesa
1265     ;;
1266 x16|x32)
1267     OSMESA_LIB="OSMesa$osmesa_bits"
1268     DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1269     ;;
1270 *)
1271     AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1272     ;;
1273 esac
1274 AC_SUBST([OSMESA_LIB])
1275
1276 if test "x$enable_osmesa" = xyes; then
1277     # only link libraries with osmesa if shared
1278     if test "$enable_static" = no; then
1279         OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1280     else
1281         OSMESA_LIB_DEPS=""
1282     fi
1283     OSMESA_MESA_DEPS=""
1284     OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
1285 fi
1286 AC_SUBST([OSMESA_LIB_DEPS])
1287 AC_SUBST([OSMESA_MESA_DEPS])
1288 AC_SUBST([OSMESA_PC_REQ])
1289 AC_SUBST([OSMESA_PC_LIB_PRIV])
1290
1291 dnl
1292 dnl EGL configuration
1293 dnl
1294 EGL_CLIENT_APIS=""
1295
1296 if test "x$enable_egl" = xyes; then
1297     SRC_DIRS="$SRC_DIRS egl"
1298     EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread"
1299     EGL_DRIVERS_DIRS=""
1300
1301     if test "$enable_static" != yes; then
1302         # build egl_glx when libGL is built
1303         if test "x$enable_glx" = xyes; then
1304             EGL_DRIVERS_DIRS="glx"
1305         fi
1306
1307         PKG_CHECK_MODULES([LIBUDEV], [libudev > 150],
1308                           [have_libudev=yes],[have_libudev=no])
1309         if test "$have_libudev" = yes; then
1310             DEFINES="$DEFINES -DHAVE_LIBUDEV"
1311         fi
1312         if test "x$enable_dri" = xyes; then
1313             # build egl_dri2 when xcb-dri2 is available
1314             PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes],
1315                           [have_xcb_dri2=yes],[have_xcb_dri2=no])
1316             
1317             if test "$have_xcb_dri2" = yes; then
1318                 EGL_DRIVER_DRI2=dri2
1319                 DEFINES="$DEFINES -DHAVE_XCB_DRI2"
1320                 # workaround a bug in xcb-dri2 generated by xcb-proto 1.6
1321                 AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [],
1322                           [DEFINES="$DEFINES -DXCB_DRI2_CONNECT_DEVICE_NAME_BROKEN"])
1323             fi
1324         fi
1325
1326         EGL_DRIVERS_DIRS="$EGL_DRIVERS_DIRS $EGL_DRIVER_DRI2"
1327     fi
1328 fi
1329 AC_SUBST([EGL_LIB_DEPS])
1330 AC_SUBST([EGL_DRIVERS_DIRS])
1331
1332 dnl
1333 dnl gbm configuration
1334 dnl
1335 if test "x$enable_gbm" = xauto; then
1336     case "$with_egl_platforms" in
1337         *drm*)
1338             enable_gbm=yes ;;
1339          *)
1340             enable_gbm=no ;;
1341     esac
1342 fi
1343 if test "x$enable_gbm" = xyes; then
1344     SRC_DIRS="$SRC_DIRS gbm"
1345     GBM_BACKEND_DIRS=""
1346
1347     PKG_CHECK_MODULES([LIBUDEV], [libudev], [],
1348                       AC_MSG_ERROR([gbm needs udev]))
1349     GBM_LIB_DEPS="$DLOPEN_LIBS $LIBUDEV_LIBS"
1350
1351     if test "x$enable_dri" = xyes; then
1352         GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri"
1353         if test "$SHARED_GLAPI" -eq 0; then
1354             AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi])
1355         fi
1356     fi
1357 fi
1358 AC_SUBST([GBM_LIB_DEPS])
1359 AC_SUBST([GBM_BACKEND_DIRS])
1360 GBM_PC_REQ_PRIV="libudev"
1361 GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1362 GBM_PC_CFLAGS=
1363 AC_SUBST([GBM_PC_REQ_PRIV])
1364 AC_SUBST([GBM_PC_LIB_PRIV])
1365 AC_SUBST([GBM_PC_CFLAGS])
1366
1367 dnl
1368 dnl EGL Gallium configuration
1369 dnl
1370 if test "x$enable_gallium_egl" = xyes; then
1371     if test "x$with_gallium_drivers" = x; then
1372         AC_MSG_ERROR([cannot enable egl_gallium without Gallium])
1373     fi
1374     if test "x$enable_egl" = xno; then
1375         AC_MSG_ERROR([cannot enable egl_gallium without EGL])
1376     fi
1377     if test "x$have_libdrm" != xyes; then
1378         AC_MSG_ERROR([egl_gallium requires libdrm >= $LIBDRM_REQUIRED])
1379     fi
1380
1381     GALLIUM_STATE_TRACKERS_DIRS="egl $GALLIUM_STATE_TRACKERS_DIRS"
1382     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS egl-static"
1383     HAVE_ST_EGL="yes"
1384 fi
1385
1386 dnl
1387 dnl gbm Gallium configuration
1388 dnl
1389 if test "x$enable_gallium_gbm" = xauto; then
1390     case "$enable_gbm$HAVE_ST_EGL$with_egl_platforms" in
1391         yesyes*drm*)
1392             enable_gallium_gbm=yes ;;
1393          *)
1394             enable_gallium_gbm=no ;;
1395     esac
1396 fi
1397 if test "x$enable_gallium_gbm" = xyes; then
1398     if test "x$with_gallium_drivers" = x; then
1399         AC_MSG_ERROR([cannot enable gbm_gallium without Gallium])
1400     fi
1401     if test "x$enable_gbm" = xno; then
1402         AC_MSG_ERROR([cannot enable gbm_gallium without gbm])
1403     fi
1404
1405     GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
1406     GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
1407     HAVE_ST_GBM="yes"
1408 fi
1409
1410 dnl
1411 dnl X.Org DDX configuration
1412 dnl
1413 if test "x$enable_xorg" = xyes; then
1414     PKG_CHECK_MODULES([XORG], [xorg-server >= 1.6.0])
1415     PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED])
1416     PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
1417     PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1418         HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1419         HAVE_XEXTPROTO_71="no")
1420     GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
1421     HAVE_ST_XORG=yes
1422 fi
1423
1424 dnl
1425 dnl OpenVG configuration
1426 dnl
1427 VG_LIB_DEPS=""
1428
1429 if test "x$enable_openvg" = xyes; then
1430     if test "x$enable_egl" = xno; then
1431         AC_MSG_ERROR([cannot enable OpenVG without EGL])
1432     fi
1433     if test "x$with_gallium_drivers" = x; then
1434         AC_MSG_ERROR([cannot enable OpenVG without Gallium])
1435     fi
1436     if test "x$enable_gallium_egl" = xno; then
1437         AC_MSG_ERROR([cannot enable OpenVG without egl_gallium])
1438     fi
1439
1440     EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
1441     VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
1442     CORE_DIRS="$CORE_DIRS mapi/vgapi"
1443     GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
1444     HAVE_ST_VEGA=yes
1445 fi
1446
1447 dnl
1448 dnl D3D1X configuration
1449 dnl
1450
1451 if test "x$enable_d3d1x" = xyes; then
1452     if test "x$with_gallium_drivers" = x; then
1453         AC_MSG_ERROR([cannot enable D3D1X without Gallium])
1454     fi
1455
1456     GALLIUM_STATE_TRACKERS_DIRS="d3d1x $GALLIUM_STATE_TRACKERS_DIRS"
1457     HAVE_ST_D3D1X=yes
1458 fi
1459
1460 dnl
1461 dnl GLU configuration
1462 dnl
1463 AC_ARG_ENABLE([glu],
1464     [AS_HELP_STRING([--disable-glu],
1465         [enable OpenGL Utility library @<:@default=enabled@:>@])],
1466     [enable_glu="$enableval"],
1467     [enable_glu=yes])
1468
1469 if test "x$enable_glu" = xyes; then
1470     if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
1471         AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
1472         enable_glu=no
1473     fi
1474 fi
1475
1476 if test "x$enable_glu" = xyes; then
1477     SRC_DIRS="$SRC_DIRS glu"
1478
1479     if test "x$enable_glx" = xno; then
1480         # Link libGLU to libOSMesa instead of libGL
1481         GLU_LIB_DEPS=""
1482         GLU_PC_REQ="osmesa"
1483         if test "$enable_static" = no; then
1484             GLU_MESA_DEPS='-l$(OSMESA_LIB)'
1485         else
1486             GLU_MESA_DEPS=""
1487         fi
1488     else
1489         # If static, empty GLU_LIB_DEPS and add libs for programs to link
1490         GLU_PC_REQ="gl"
1491         GLU_PC_LIB_PRIV="-lm"
1492         if test "$enable_static" = no; then
1493             GLU_LIB_DEPS="-lm"
1494             GLU_MESA_DEPS='-l$(GL_LIB)'
1495         else
1496             GLU_LIB_DEPS=""
1497             GLU_MESA_DEPS=""
1498             APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++"
1499         fi
1500     fi
1501 fi
1502 if test "$enable_static" = no; then
1503     GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
1504 fi
1505 GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
1506 AC_SUBST([GLU_LIB_DEPS])
1507 AC_SUBST([GLU_MESA_DEPS])
1508 AC_SUBST([GLU_PC_REQ])
1509 AC_SUBST([GLU_PC_REQ_PRIV])
1510 AC_SUBST([GLU_PC_LIB_PRIV])
1511 AC_SUBST([GLU_PC_CFLAGS])
1512
1513 dnl
1514 dnl GLw configuration
1515 dnl
1516 AC_ARG_ENABLE([glw],
1517     [AS_HELP_STRING([--disable-glw],
1518         [enable Xt/Motif widget library @<:@default=enabled@:>@])],
1519     [enable_glw="$enableval"],
1520     [enable_glw=yes])
1521 dnl Don't build GLw on osmesa
1522 if test "x$enable_glw" = xyes -a "x$enable_glx" = xno; then
1523     AC_MSG_NOTICE([Disabling GLw since there is no OpenGL driver])
1524     enable_glw=no
1525 fi
1526 AC_ARG_ENABLE([motif],
1527     [AS_HELP_STRING([--enable-motif],
1528         [use Motif widgets in GLw @<:@default=disabled@:>@])],
1529     [enable_motif="$enableval"],
1530     [enable_motif=no])
1531
1532 if test "x$enable_glw" = xyes; then
1533     SRC_DIRS="$SRC_DIRS glw"
1534     if test "$x11_pkgconfig" = yes; then
1535         PKG_CHECK_MODULES([GLW],[x11 xt])
1536         GLW_PC_REQ_PRIV="x11 xt"
1537         GLW_LIB_DEPS="$GLW_LIBS"
1538     else
1539         # should check these...
1540         GLW_LIB_DEPS="$X_LIBS -lXt -lX11"
1541         GLW_PC_LIB_PRIV="$GLW_LIB_DEPS"
1542         GLW_PC_CFLAGS="$X11_INCLUDES"
1543     fi
1544
1545     GLW_SOURCES="GLwDrawA.c"
1546     MOTIF_CFLAGS=
1547     if test "x$enable_motif" = xyes; then
1548         GLW_SOURCES="$GLW_SOURCES GLwMDrawA.c"
1549         AC_PATH_PROG([MOTIF_CONFIG], [motif-config], [no])
1550         if test "x$MOTIF_CONFIG" != xno; then
1551             MOTIF_CFLAGS=`$MOTIF_CONFIG --cflags`
1552             MOTIF_LIBS=`$MOTIF_CONFIG --libs`
1553         else
1554             AC_CHECK_HEADER([Xm/PrimitiveP.h], [],
1555                 [AC_MSG_ERROR([Can't locate Motif headers])])
1556             AC_CHECK_LIB([Xm], [XmGetPixmap], [MOTIF_LIBS="-lXm"],
1557                 [AC_MSG_ERROR([Can't locate Motif Xm library])])
1558         fi
1559         # MOTIF_LIBS is prepended to GLW_LIB_DEPS since Xm needs Xt/X11
1560         GLW_LIB_DEPS="$MOTIF_LIBS $GLW_LIB_DEPS"
1561         GLW_PC_LIB_PRIV="$MOTIF_LIBS $GLW_PC_LIB_PRIV"
1562         GLW_PC_CFLAGS="$MOTIF_CFLAGS $GLW_PC_CFLAGS"
1563     fi
1564
1565     # If static, empty GLW_LIB_DEPS and add libs for programs to link
1566     GLW_PC_LIB_PRIV="$GLW_PC_LIB_PRIV"
1567     if test "$enable_static" = no; then
1568         GLW_MESA_DEPS='-l$(GL_LIB)'
1569         GLW_LIB_DEPS="$GLW_LIB_DEPS"
1570     else
1571         APP_LIB_DEPS="$APP_LIB_DEPS $GLW_LIB_DEPS"
1572         GLW_LIB_DEPS=""
1573         GLW_MESA_DEPS=""
1574     fi
1575 fi
1576 AC_SUBST([GLW_LIB_DEPS])
1577 AC_SUBST([GLW_MESA_DEPS])
1578 AC_SUBST([GLW_SOURCES])
1579 AC_SUBST([MOTIF_CFLAGS])
1580 AC_SUBST([GLW_PC_REQ_PRIV])
1581 AC_SUBST([GLW_PC_LIB_PRIV])
1582 AC_SUBST([GLW_PC_CFLAGS])
1583
1584 dnl
1585 dnl GLUT configuration
1586 dnl
1587 if test -f "$srcdir/include/GL/glut.h"; then
1588     default_glut=yes
1589 else
1590     default_glut=no
1591 fi
1592 AC_ARG_ENABLE([glut],
1593     [AS_HELP_STRING([--disable-glut],
1594         [enable GLUT library @<:@default=enabled if source available@:>@])],
1595     [enable_glut="$enableval"],
1596     [enable_glut="$default_glut"])
1597
1598 dnl Don't build glut without GLX
1599 if test "x$enable_glut" = xyes -a "x$enable_glx" = xno; then
1600     AC_MSG_NOTICE([Disabling glut since there is no OpenGL driver])
1601     enable_glut=no
1602 fi
1603 dnl Can't build glut if GLU not available
1604 if test "x$enable_glu$enable_glut" = xnoyes; then
1605     AC_MSG_WARN([Disabling glut since GLU is disabled])
1606     enable_glut=no
1607 fi
1608
1609 if test "x$enable_glut" = xyes; then
1610     SRC_DIRS="$SRC_DIRS glut/glx"
1611     if test "$x11_pkgconfig" = yes; then
1612         PKG_CHECK_MODULES([GLUT],[x11 xmu xi])
1613         GLUT_PC_REQ_PRIV="x11 xmu xi"
1614         GLUT_LIB_DEPS="$GLUT_LIBS"
1615     else
1616         # should check these...
1617         GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXi"
1618         GLUT_PC_LIB_PRIV="$GLUT_LIB_DEPS"
1619         GLUT_PC_CFLAGS="$X11_INCLUDES"
1620     fi
1621     if test "x$GCC" = xyes; then
1622         GLUT_CFLAGS="$GLUT_CFLAGS -fexceptions"
1623     fi
1624     GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
1625     GLUT_PC_LIB_PRIV="$GLUT_PC_LIB_PRIV -lm"
1626
1627     # If static, empty GLUT_LIB_DEPS and add libs for programs to link
1628     if test "$enable_static" = no; then
1629         GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
1630     else
1631         APP_LIB_DEPS="$APP_LIB_DEPS $GLUT_LIB_DEPS"
1632         GLUT_LIB_DEPS=""
1633         GLUT_MESA_DEPS=""
1634     fi
1635 fi
1636 AC_SUBST([GLUT_LIB_DEPS])
1637 AC_SUBST([GLUT_MESA_DEPS])
1638 AC_SUBST([GLUT_CFLAGS])
1639 AC_SUBST([GLUT_PC_REQ_PRIV])
1640 AC_SUBST([GLUT_PC_LIB_PRIV])
1641 AC_SUBST([GLUT_PC_CFLAGS])
1642
1643 dnl
1644 dnl Program library dependencies
1645 dnl    Only libm is added here if necessary as the libraries should
1646 dnl    be pulled in by the linker
1647 dnl
1648 if test "x$APP_LIB_DEPS" = x; then
1649     case "$host_os" in
1650     solaris*)
1651         APP_LIB_DEPS="-lX11 -lsocket -lnsl -lm"
1652         ;;
1653     cygwin*)
1654         APP_LIB_DEPS="-lX11"
1655         ;;
1656     *)
1657         APP_LIB_DEPS="-lm"
1658         ;;
1659     esac
1660 fi
1661 AC_SUBST([APP_LIB_DEPS])
1662 AC_SUBST([PROGRAM_DIRS])
1663
1664 dnl
1665 dnl Gallium configuration
1666 dnl
1667 if test "x$with_gallium_drivers" != x; then
1668     SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
1669     AC_PATH_PROG([LLVM_CONFIG], [llvm-config], [no])
1670 else
1671     LLVM_CONFIG=no
1672 fi
1673
1674 AC_SUBST([LLVM_CFLAGS])
1675 AC_SUBST([LLVM_LIBS])
1676 AC_SUBST([LLVM_LDFLAGS])
1677 AC_SUBST([LLVM_VERSION])
1678
1679
1680
1681 case "x$enable_opengl$enable_gles1$enable_gles2" in
1682 x*yes*)
1683     EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1684     ;;
1685 esac
1686
1687 AC_SUBST([VG_LIB_DEPS])
1688 AC_SUBST([EGL_CLIENT_APIS])
1689
1690 AC_ARG_WITH([egl-platforms],
1691     [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1692         [comma delimited native platforms libEGL supports, e.g.
1693         "x11,drm" @<:@default=auto@:>@])],
1694     [with_egl_platforms="$withval"],
1695     [with_egl_platforms=yes])
1696
1697 EGL_PLATFORMS=""
1698 WAYLAND_EGL_LIB_DEPS=""
1699
1700 case "$with_egl_platforms" in
1701 yes)
1702     if test "x$enable_egl" = xyes; then
1703         EGL_PLATFORMS="x11"
1704     fi
1705     ;;
1706 *)
1707     if test "x$enable_egl" != xyes; then
1708         AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1709     fi
1710     # verify the requested driver directories exist
1711     egl_platforms=`IFS=', '; echo $with_egl_platforms`
1712     for plat in $egl_platforms; do
1713         test -d "$srcdir/src/gallium/state_trackers/egl/$plat" || \
1714             AC_MSG_ERROR([EGL platform '$plat' doesn't exist])
1715         if test "$plat" = "fbdev"; then
1716                 GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/fbdev"
1717         fi
1718         if test "$plat" = "wayland"; then
1719                 PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
1720                                   [AC_MSG_ERROR([cannot find libwayland-client])])
1721                 WAYLAND_EGL_LIB_DEPS="$WAYLAND_LIBS $LIBDRM_LIBS"
1722                 GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
1723         fi
1724         if test "$plat" = "drm" && test "x$enable_gbm" = "xno"; then
1725                 AC_MSG_ERROR([EGL platform drm needs gbm])
1726         fi
1727         case "$plat$have_libudev" in
1728                 waylandno|drmno)
1729                     AC_MSG_ERROR([cannot build $plat platfrom without udev]) ;;
1730         esac
1731     done
1732     EGL_PLATFORMS="$egl_platforms"
1733     ;;
1734 esac
1735 AC_SUBST([EGL_PLATFORMS])
1736
1737 AC_SUBST([WAYLAND_EGL_LIB_DEPS])
1738 WAYLAND_EGL_PC_REQ_PRIV="wayland-client libdrm"
1739 WAYLAND_EGL_PC_LIB_PRIV=
1740 WAYLAND_EGL_PC_CFLAGS=
1741
1742 AC_SUBST([WAYLAND_EGL_PC_REQ_PRIV])
1743 AC_SUBST([WAYLAND_EGL_PC_LIB_PRIV])
1744 AC_SUBST([WAYLAND_EGL_PC_CFLAGS])
1745
1746
1747 AC_ARG_WITH([egl-driver-dir],
1748     [AS_HELP_STRING([--with-egl-driver-dir=DIR],
1749                     [directory for EGL drivers [[default=${libdir}/egl]]])],
1750     [EGL_DRIVER_INSTALL_DIR="$withval"],
1751     [EGL_DRIVER_INSTALL_DIR='${libdir}/egl'])
1752 AC_SUBST([EGL_DRIVER_INSTALL_DIR])
1753
1754 AC_ARG_WITH([xorg-driver-dir],
1755     [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1756                     [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1757     [XORG_DRIVER_INSTALL_DIR="$withval"],
1758     [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1759 AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1760
1761 AC_ARG_WITH([max-width],
1762     [AS_HELP_STRING([--with-max-width=N],
1763                     [Maximum framebuffer width (4096)])],
1764     [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1765      AS_IF([test "${withval}" -gt "4096"],
1766            [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1767 )
1768 AC_ARG_WITH([max-height],
1769     [AS_HELP_STRING([--with-max-height=N],
1770                     [Maximum framebuffer height (4096)])],
1771     [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1772      AS_IF([test "${withval}" -gt "4096"],
1773            [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1774 )
1775
1776 dnl
1777 dnl Gallium LLVM
1778 dnl
1779 AC_ARG_ENABLE([gallium-llvm],
1780     [AS_HELP_STRING([--enable-gallium-llvm],
1781         [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1782     [enable_gallium_llvm="$enableval"],
1783     [enable_gallium_llvm=auto])
1784 if test "x$with_gallium_drivers" = x; then
1785     enable_gallium_llvm=no
1786 fi
1787 if test "x$enable_gallium_llvm" = xauto; then
1788     case "$host_cpu" in
1789     i*86|x86_64) enable_gallium_llvm=yes;;
1790     esac
1791 fi
1792 if test "x$enable_gallium_llvm" = xyes; then
1793     if test "x$LLVM_CONFIG" != xno; then
1794         LLVM_VERSION=`$LLVM_CONFIG --version`
1795         LLVM_CFLAGS=`$LLVM_CONFIG --cppflags`
1796         LLVM_LIBS="`$LLVM_CONFIG --libs` -lstdc++"
1797
1798         LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1799         GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1800         DEFINES="$DEFINES -DGALLIUM_LLVMPIPE -D__STDC_CONSTANT_MACROS"
1801         MESA_LLVM=1
1802     else
1803         MESA_LLVM=0
1804     fi
1805 else
1806     MESA_LLVM=0
1807 fi
1808
1809 dnl
1810 dnl Gallium helper functions
1811 dnl
1812 gallium_check_st() {
1813     if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = 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 }
1826
1827 gallium_require_llvm() {
1828     if test "x$MESA_LLVM" = x0; then
1829         case "$host_cpu" in
1830         i*86|x86_64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
1831         esac
1832     fi
1833 }
1834
1835 dnl Gallium drivers
1836 if test "x$with_gallium_drivers" != x; then
1837     # This is for compile-testing
1838     GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 i965 r300 svga"
1839     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
1840
1841     gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
1842     for driver in $gallium_drivers; do
1843         case "x$driver" in
1844         xsvga)
1845             gallium_check_st "svga/drm" "dri-vmwgfx" "xorg-vmwgfx"
1846             ;;
1847         xi915)
1848             gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
1849             ;;
1850         xi965)
1851             gallium_check_st "i965/drm" "dri-i965" "xorg-i965"
1852             ;;
1853         xr300)
1854             gallium_require_llvm "Gallium R300"
1855             gallium_check_st "radeon/drm" "dri-r300" "xorg-r300"
1856             ;;
1857         xr600)
1858             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
1859             gallium_check_st "r600/drm" "dri-r600"
1860             ;;
1861         xnouveau)
1862             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nvfx nv50 nvc0"
1863             gallium_check_st "nouveau/drm" "dri-nouveau" "xorg-nouveau"
1864             ;;
1865         xswrast)
1866             if test "x$HAVE_ST_DRI" = xyes; then
1867                 GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
1868             fi
1869             ;;
1870         *)
1871             AC_MSG_ERROR([Unknown Gallium driver: $driver])
1872             ;;
1873         esac
1874     done
1875 fi
1876
1877 dnl prepend CORE_DIRS to SRC_DIRS
1878 SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1879
1880 dnl Restore LDFLAGS and CPPFLAGS
1881 LDFLAGS="$_SAVE_LDFLAGS"
1882 CPPFLAGS="$_SAVE_CPPFLAGS"
1883
1884 dnl Substitute the config
1885 AC_CONFIG_FILES([configs/autoconf])
1886
1887 dnl Replace the configs/current symlink
1888 AC_CONFIG_COMMANDS([configs],[
1889 if test -f configs/current || test -L configs/current; then
1890     rm -f configs/current
1891 fi
1892 ln -s autoconf configs/current
1893 ])
1894
1895 dnl Sort the dirs alphabetically
1896 GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort|tr "\n" " "`
1897 GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1898 GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1899 GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1900
1901 AC_OUTPUT
1902
1903 dnl
1904 dnl Output some configuration info for the user
1905 dnl
1906 echo ""
1907 echo "        prefix:          $prefix"
1908 echo "        exec_prefix:     $exec_prefix"
1909 echo "        libdir:          $libdir"
1910 echo "        includedir:      $includedir"
1911
1912 dnl API info
1913 echo ""
1914 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
1915 echo "        OpenVG:          $enable_openvg"
1916
1917 dnl Driver info
1918 echo ""
1919 if test "x$enable_osmesa" != xno; then
1920         echo "        OSMesa:          lib$OSMESA_LIB"
1921 else
1922         echo "        OSMesa:          no"
1923 fi
1924
1925 if test "x$enable_dri" != xno; then
1926         # cleanup the drivers var
1927         dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1928         if test "x$DRI_DIRS" = x; then
1929             echo "        DRI drivers:     no"
1930         else
1931             echo "        DRI drivers:     $dri_dirs"
1932         fi
1933         echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1934         echo "        Shared dricore:  $enable_dricore"
1935 fi
1936
1937 case "x$enable_glx$enable_xlib_glx" in
1938 xyesyes)
1939     echo "        GLX:             Xlib-based"
1940     ;;
1941 xyesno)
1942     echo "        GLX:             DRI-based"
1943     echo "        Use XCB:         $enable_xcb"
1944     ;;
1945 *)
1946     echo "        GLX:             $enable_glx"
1947     ;;
1948 esac
1949
1950 echo ""
1951 echo "        GLU:             $enable_glu"
1952 echo "        GLw:             $enable_glw (Motif: $enable_motif)"
1953 echo "        glut:            $enable_glut"
1954
1955 dnl EGL
1956 echo ""
1957 echo "        EGL:             $enable_egl"
1958 if test "$enable_egl" = yes; then
1959     echo "        EGL platforms:   $EGL_PLATFORMS"
1960
1961     egl_drivers=""
1962     for d in $EGL_DRIVERS_DIRS; do
1963         egl_drivers="$egl_drivers builtin:egl_$d"
1964     done
1965
1966     if test "x$HAVE_ST_EGL" = xyes; then
1967         echo "        EGL drivers:    ${egl_drivers} egl_gallium"
1968         echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
1969     else
1970         echo "        EGL drivers:    $egl_drivers"
1971     fi
1972 fi
1973
1974 echo ""
1975 if test "x$MESA_LLVM" = x1; then
1976     echo "        llvm:            yes"
1977     echo "        llvm-config:     $LLVM_CONFIG"
1978     echo "        llvm-version:    $LLVM_VERSION"
1979 else
1980     echo "        llvm:            no"
1981 fi
1982
1983 echo ""
1984 if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
1985     echo "        Gallium:         yes"
1986     echo "        Gallium dirs:    $GALLIUM_DIRS"
1987     echo "        Target dirs:     $GALLIUM_TARGET_DIRS"
1988     echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
1989     echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
1990     echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
1991 else
1992     echo "        Gallium:         no"
1993 fi
1994
1995 dnl Libraries
1996 echo ""
1997 echo "        Shared libs:     $enable_shared"
1998 echo "        Static libs:     $enable_static"
1999
2000 dnl Compiler options
2001 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2002 cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2003     $SED 's/^ *//;s/  */ /;s/ *$//'`
2004 cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
2005     $SED 's/^ *//;s/  */ /;s/ *$//'`
2006 defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
2007 echo ""
2008 echo "        CFLAGS:          $cflags"
2009 echo "        CXXFLAGS:        $cxxflags"
2010 echo "        Macros:          $defines"
2011 echo ""
2012 echo "        PYTHON2:         $PYTHON2"
2013
2014 echo ""
2015 echo "        Run '${MAKE-make}' to build Mesa"
2016 echo ""