configure.ac revision 8123934d5a6a4a25a30dcd77e9f0f0d7b7b74a74
1dnl Process this file with autoconf to create configure.
2
3AC_PREREQ([2.59])
4
5dnl Versioning - scrape the version from configs/default
6m4_define([mesa_version],
7    [m4_esyscmd([${MAKE-make} -s -f bin/version.mk version | tr -d '\n' | tr -d '\r'])])
8m4_ifval(mesa_version,,
9    [m4_fatal([Failed to get the Mesa version from `make -f bin/version.mk version`])])
10
11dnl Tell the user about autoconf.html in the --help output
12m4_divert_once([HELP_END], [
13See docs/autoconf.html for more details on the options for Mesa.])
14
15AC_INIT([Mesa],[mesa_version],
16    [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
17AC_CONFIG_AUX_DIR([bin])
18AC_CANONICAL_HOST
19
20dnl Versions for external dependencies
21LIBDRM_REQUIRED=2.4.24
22LIBDRM_RADEON_REQUIRED=2.4.24
23LIBDRM_INTEL_REQUIRED=2.4.24
24LIBDRM_NOUVEAU_REQUIRED=0.6
25DRI2PROTO_REQUIRED=2.1
26GLPROTO_REQUIRED=1.4.11
27LIBDRM_XORG_REQUIRED=2.4.24
28LIBKMS_XORG_REQUIRED=1.0.0
29
30dnl Check for progs
31AC_PROG_CPP
32AC_PROG_CC
33AC_PROG_CXX
34AC_CHECK_PROGS([MAKE], [gmake make])
35AC_CHECK_PROGS([PYTHON2], [python2 python])
36AC_PATH_PROG([MKDEP], [makedepend])
37AC_PATH_PROG([SED], [sed])
38
39if test "x$MKDEP" = "x"; then
40    AC_MSG_ERROR([makedepend is required to build Mesa])
41fi
42
43AC_PATH_PROG([FLEX], [flex])
44test "x$FLEX" = "x" && AC_MSG_ERROR([flex is needed to build Mesa])
45
46AC_PATH_PROG([BISON], [bison])
47test "x$BISON" = "x" && AC_MSG_ERROR([bison is needed to build Mesa])
48
49dnl Our fallback install-sh is a symlink to minstall. Use the existing
50dnl configuration in that case.
51AC_PROG_INSTALL
52test "x$INSTALL" = "x$ac_install_sh" && INSTALL='$(MINSTALL)'
53
54dnl We need a POSIX shell for parts of the build. Assume we have one
55dnl in most cases.
56case "$host_os" in
57solaris*)
58    # Solaris /bin/sh is too old/non-POSIX compliant
59    AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
60    SHELL="$POSIX_SHELL"
61    ;;
62esac
63
64dnl clang is mostly GCC-compatible, but its version is much lower,
65dnl so we have to check for it.
66AC_MSG_CHECKING([if compiling with clang])
67
68AC_COMPILE_IFELSE(
69[AC_LANG_PROGRAM([], [[
70#ifndef __clang__
71       not clang
72#endif
73]])],
74[CLANG=yes], [CLANG=no])
75
76AC_MSG_RESULT([$CLANG])
77
78dnl If we're using GCC, make sure that it is at least version 3.3.0.  Older
79dnl versions are explictly not supported.
80if 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
97fi
98
99
100MKDEP_OPTIONS=-fdepend
101dnl Ask gcc where it's keeping its secret headers
102if 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
111fi
112AC_SUBST([MKDEP_OPTIONS])
113
114dnl Make sure the pkg-config macros are defined
115m4_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.])])
120PKG_PROG_PKG_CONFIG()
121
122dnl LIB_DIR - library basename
123LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
124AC_SUBST([LIB_DIR])
125
126dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
127_SAVE_LDFLAGS="$LDFLAGS"
128AC_ARG_VAR([EXTRA_LIB_PATH],[Extra -L paths for the linker])
129AC_SUBST([EXTRA_LIB_PATH])
130
131dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
132_SAVE_CPPFLAGS="$CPPFLAGS"
133AC_ARG_VAR([X11_INCLUDES],[Extra -I paths for X11 headers])
134AC_SUBST([X11_INCLUDES])
135
136dnl Compiler macros
137DEFINES=""
138AC_SUBST([DEFINES])
139case "$host_os" in
140linux*|*-gnu*|gnu*)
141    DEFINES="$DEFINES -D_GNU_SOURCE -DPTHREADS"
142    ;;
143solaris*)
144    DEFINES="$DEFINES -DPTHREADS -DSVR4"
145    ;;
146cygwin*)
147    DEFINES="$DEFINES -DPTHREADS"
148    ;;
149esac
150
151dnl Add flags for gcc and g++
152if 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"
171fi
172if 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"
190fi
191
192dnl even if the compiler appears to support it, using visibility attributes isn't
193dnl going to do anything useful currently on cygwin apart from emit lots of warnings
194case "$host_os" in
195cygwin*)
196    VISIBILITY_CFLAGS=""
197    VISIBILITY_CXXFLAGS=""
198    ;;
199esac
200
201AC_SUBST([VISIBILITY_CFLAGS])
202AC_SUBST([VISIBILITY_CXXFLAGS])
203
204dnl These should be unnecessary, but let the user set them if they want
205AC_ARG_VAR([OPT_FLAGS], [Additional optimization flags for the compiler.
206    Default is to use CFLAGS.])
207AC_ARG_VAR([ARCH_FLAGS], [Additional architecture specific flags for the
208    compiler. Default is to use CFLAGS.])
209AC_SUBST([OPT_FLAGS])
210AC_SUBST([ARCH_FLAGS])
211
212dnl
213dnl Hacks to enable 32 or 64 bit build
214dnl
215AC_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)
221if 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
229fi
230AC_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)
236if 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
243fi
244
245dnl
246dnl shared/static libraries, mimic libtool options
247dnl
248AC_ARG_ENABLE([static],
249    [AS_HELP_STRING([--enable-static],
250        [build static libraries @<:@default=disabled@:>@])],
251    [enable_static="$enableval"],
252    [enable_static=no]
253)
254case "x$enable_static" in
255xyes|xno ) ;;
256x ) enable_static=no ;;
257* )
258    AC_MSG_ERROR([Static library option '$enable_static' is not a valid])
259    ;;
260esac
261AC_ARG_ENABLE([shared],
262    [AS_HELP_STRING([--disable-shared],
263        [build shared libraries @<:@default=enabled@:>@])],
264    [enable_shared="$enableval"],
265    [enable_shared=yes]
266)
267case "x$enable_shared" in
268xyes|xno ) ;;
269x ) enable_shared=yes ;;
270* )
271    AC_MSG_ERROR([Shared library option '$enable_shared' is not a valid])
272    ;;
273esac
274
275dnl Can't have static and shared libraries, default to static if user
276dnl explicitly requested. If both disabled, set to static since shared
277dnl was explicitly requirested.
278case "x$enable_static$enable_shared" in
279xyesyes )
280    AC_MSG_WARN([Can't build static and shared libraries, disabling shared])
281    enable_shared=no
282    ;;
283xnono )
284    AC_MSG_WARN([Can't disable both static and shared libraries, enabling static])
285    enable_static=yes
286    ;;
287esac
288
289dnl
290dnl mklib options
291dnl
292AC_ARG_VAR([MKLIB_OPTIONS],[Options for the Mesa library script, mklib])
293if test "$enable_static" = yes; then
294    MKLIB_OPTIONS="$MKLIB_OPTIONS -static"
295fi
296AC_SUBST([MKLIB_OPTIONS])
297
298dnl
299dnl other compiler options
300dnl
301AC_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)
307if 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
315fi
316
317dnl
318dnl library names
319dnl
320LIB_PREFIX_GLOB='lib'
321LIB_VERSION_SEPARATOR='.'
322if test "$enable_static" = yes; then
323    LIB_EXTENSION='a'
324else
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
338fi
339
340dnl
341dnl potentially-infringing-but-nobody-knows-for-sure stuff
342dnl
343AC_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)
349if 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"
353fi
354
355GL_LIB_NAME='lib$(GL_LIB).'${LIB_EXTENSION}
356GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
357GLUT_LIB_NAME='lib$(GLUT_LIB).'${LIB_EXTENSION}
358GLW_LIB_NAME='lib$(GLW_LIB).'${LIB_EXTENSION}
359OSMESA_LIB_NAME='lib$(OSMESA_LIB).'${LIB_EXTENSION}
360EGL_LIB_NAME='lib$(EGL_LIB).'${LIB_EXTENSION}
361GLESv1_CM_LIB_NAME='lib$(GLESv1_CM_LIB).'${LIB_EXTENSION}
362GLESv2_LIB_NAME='lib$(GLESv2_LIB).'${LIB_EXTENSION}
363VG_LIB_NAME='lib$(VG_LIB).'${LIB_EXTENSION}
364GLAPI_LIB_NAME='lib$(GLAPI_LIB).'${LIB_EXTENSION}
365WAYLAND_EGL_LIB_NAME='lib$(WAYLAND_EGL_LIB).'${LIB_EXTENSION}
366GBM_LIB_NAME='lib$(GBM_LIB).'${LIB_EXTENSION}
367
368GL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
369GLU_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLU_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
370GLUT_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLUT_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
371GLW_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLW_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
372OSMESA_LIB_GLOB=${LIB_PREFIX_GLOB}'$(OSMESA_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
373EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
374EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
375GLESv1_CM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv1_CM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
376GLESv2_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLESv2_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
377VG_LIB_GLOB=${LIB_PREFIX_GLOB}'$(VG_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
378GLAPI_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GLAPI_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
379WAYLAND_EGL_LIB_GLOB=${LIB_PREFIX_GLOB}'$(WAYLAND_EGL_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
380GBM_LIB_GLOB=${LIB_PREFIX_GLOB}'$(GBM_LIB)'${LIB_VERSION_SEPARATOR}'*'${LIB_EXTENSION}'*'
381
382AC_SUBST([GL_LIB_NAME])
383AC_SUBST([GLU_LIB_NAME])
384AC_SUBST([GLUT_LIB_NAME])
385AC_SUBST([GLW_LIB_NAME])
386AC_SUBST([OSMESA_LIB_NAME])
387AC_SUBST([EGL_LIB_NAME])
388AC_SUBST([GLESv1_CM_LIB_NAME])
389AC_SUBST([GLESv2_LIB_NAME])
390AC_SUBST([VG_LIB_NAME])
391AC_SUBST([GLAPI_LIB_NAME])
392AC_SUBST([WAYLAND_EGL_LIB_NAME])
393AC_SUBST([GBM_LIB_NAME])
394
395AC_SUBST([GL_LIB_GLOB])
396AC_SUBST([GLU_LIB_GLOB])
397AC_SUBST([GLUT_LIB_GLOB])
398AC_SUBST([GLW_LIB_GLOB])
399AC_SUBST([OSMESA_LIB_GLOB])
400AC_SUBST([EGL_LIB_GLOB])
401AC_SUBST([GLESv1_CM_LIB_GLOB])
402AC_SUBST([GLESv2_LIB_GLOB])
403AC_SUBST([VG_LIB_GLOB])
404AC_SUBST([GLAPI_LIB_GLOB])
405AC_SUBST([WAYLAND_EGL_LIB_GLOB])
406AC_SUBST([GBM_LIB_GLOB])
407
408dnl
409dnl Arch/platform-specific settings
410dnl
411AC_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)
417asm_arch=""
418ASM_FLAGS=""
419MESA_ASM_SOURCES=""
420GLAPI_ASM_SOURCES=""
421AC_MSG_CHECKING([whether to enable assembly])
422test "x$enable_asm" = xno && AC_MSG_RESULT([no])
423# disable if cross compiling on x86/x86_64 since we must run gen_matypes
424if 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
431fi
432# check for supported arches
433if 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
493fi
494AC_SUBST([ASM_FLAGS])
495AC_SUBST([MESA_ASM_SOURCES])
496AC_SUBST([GLAPI_ASM_SOURCES])
497
498dnl PIC code macro
499MESA_PIC_FLAGS
500
501dnl Check to see if dlopen is in default libraries (like Solaris, which
502dnl has it in libc), or if libdl is needed to get it.
503AC_CHECK_FUNC([dlopen], [],
504    [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
505AC_SUBST([DLOPEN_LIBS])
506
507dnl See if posix_memalign is available
508AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
509
510dnl SELinux awareness.
511AC_ARG_ENABLE([selinux],
512    [AS_HELP_STRING([--enable-selinux],
513        [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
514    [MESA_SELINUX="$enableval"],
515    [MESA_SELINUX=no])
516if 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"
523fi
524
525dnl Options for APIs
526AC_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])
531AC_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])
536AC_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])
541AC_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
547AC_ARG_ENABLE([dri],
548    [AS_HELP_STRING([--enable-dri],
549        [enable DRI modules @<:@default=auto@:>@])],
550    [enable_dri="$enableval"],
551    [enable_dri=auto])
552AC_ARG_ENABLE([glx],
553    [AS_HELP_STRING([--enable-glx],
554        [enable GLX library @<:@default=auto@:>@])],
555    [enable_glx="$enableval"],
556    [enable_glx=auto])
557AC_ARG_ENABLE([osmesa],
558    [AS_HELP_STRING([--enable-osmesa],
559        [enable OSMesa library @<:@default=auto@:>@])],
560    [enable_osmesa="$enableval"],
561    [enable_osmesa=auto])
562AC_ARG_ENABLE([egl],
563    [AS_HELP_STRING([--disable-egl],
564        [disable EGL library @<:@default=enabled@:>@])],
565    [enable_egl="$enableval"],
566    [enable_egl=yes])
567
568AC_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])
573AC_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])
578AC_ARG_ENABLE([gbm],
579   [AS_HELP_STRING([--enable-gbm],
580         [enable gbm library @<:@default=auto@:>@])],
581   [enable_gbm="$enableval"],
582   [enable_gbm=auto])
583
584AC_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])
589AC_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])
596AC_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
605GALLIUM_DRIVERS_DEFAULT="r300,r600,swrast"
606
607AC_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
615if 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])
622fi
623
624API_DEFINES=""
625if test "x$enable_opengl" = xno; then
626    API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
627else
628    API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
629fi
630if test "x$enable_gles1" = xyes; then
631    API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
632fi
633if test "x$enable_gles2" = xyes; then
634    API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
635fi
636AC_SUBST([API_DEFINES])
637
638AC_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
644SHARED_GLAPI="0"
645if test "x$enable_shared_glapi" = xyes; then
646    SHARED_GLAPI="1"
647fi
648AC_SUBST([SHARED_GLAPI])
649
650dnl
651dnl Driver configuration. Options are xlib, dri and osmesa right now.
652dnl More later: fbdev, ...
653dnl
654default_driver="xlib"
655
656case "$host_os" in
657linux*)
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    ;;
667esac
668
669if test "x$enable_opengl" = xno; then
670    default_driver="no"
671fi
672
673AC_ARG_WITH([driver],
674    [AS_HELP_STRING([--with-driver=DRIVER], [DEPRECATED])],
675    [mesa_driver="$withval"],
676    [mesa_driver=auto])
677dnl Check for valid option
678case "x$mesa_driver" in
679xxlib|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    ;;
687xauto)
688    mesa_driver="$default_driver"
689    ;;
690*)
691    AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
692    ;;
693esac
694
695# map $mesa_driver to APIs
696if test "x$enable_dri" = xauto; then
697    case "x$mesa_driver" in
698    xdri) enable_dri=yes ;;
699    *)    enable_dri=no ;;
700    esac
701fi
702
703if test "x$enable_glx" = xauto; then
704    case "x$mesa_driver" in
705    xdri|xxlib) enable_glx=yes ;;
706    *)          enable_glx=no ;;
707    esac
708fi
709
710if test "x$enable_osmesa" = xauto; then
711    case "x$mesa_driver" in
712    xxlib|xosmesa) enable_osmesa=yes ;;
713    *)             enable_osmesa=no ;;
714    esac
715fi
716
717if 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
722fi
723
724if test "x$enable_glx" = xno; then
725    enable_xlib_glx=no
726fi
727
728dnl
729dnl Driver specific build directories
730dnl
731
732dnl this variable will be prepended to SRC_DIRS and is not exported
733CORE_DIRS=""
734
735SRC_DIRS=""
736GLU_DIRS="sgi"
737GALLIUM_DIRS="auxiliary drivers state_trackers"
738GALLIUM_TARGET_DIRS=""
739GALLIUM_WINSYS_DIRS="sw"
740GALLIUM_DRIVERS_DIRS="softpipe failover galahad trace rbug noop identity"
741GALLIUM_STATE_TRACKERS_DIRS=""
742
743# build shared-glapi if enabled for OpenGL or if OpenGL ES is enabled
744case "x$enable_shared_glapi$enable_gles1$enable_gles2" in
745x*yes*)
746    CORE_DIRS="$CORE_DIRS mapi/shared-glapi"
747    ;;
748esac
749
750# build glapi if OpenGL is enabled
751if test "x$enable_opengl" = xyes; then
752    CORE_DIRS="$CORE_DIRS mapi/glapi"
753fi
754
755# build es1api if OpenGL ES 1.x is enabled
756if test "x$enable_gles1" = xyes; then
757    CORE_DIRS="$CORE_DIRS mapi/es1api"
758fi
759
760# build es2api if OpenGL ES 2.x is enabled
761if test "x$enable_gles2" = xyes; then
762    CORE_DIRS="$CORE_DIRS mapi/es2api"
763fi
764
765# build glsl and mesa if OpenGL or OpenGL ES is enabled
766case "x$enable_opengl$enable_gles1$enable_gles2" in
767x*yes*)
768    CORE_DIRS="$CORE_DIRS glsl mesa"
769    ;;
770esac
771
772case "x$enable_glx$enable_xlib_glx" in
773xyesyes)
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    ;;
779xyesno)
780    # DRI-based GLX
781    SRC_DIRS="$SRC_DIRS glx"
782    ;;
783esac
784
785if 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"
791fi
792
793if 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
800fi
801
802AC_SUBST([SRC_DIRS])
803AC_SUBST([GLU_DIRS])
804AC_SUBST([DRIVER_DIRS])
805AC_SUBST([GALLIUM_DIRS])
806AC_SUBST([GALLIUM_TARGET_DIRS])
807AC_SUBST([GALLIUM_WINSYS_DIRS])
808AC_SUBST([GALLIUM_DRIVERS_DIRS])
809AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
810AC_SUBST([MESA_LLVM])
811
812# Check for libdrm
813PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
814                  [have_libdrm=yes], [have_libdrm=no])
815
816if 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
826fi
827
828dnl
829dnl Find out if X is available. The variable have_x is set if libX11 is
830dnl found to mimic AC_PATH_XTRA.
831dnl
832if 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])
841else
842    x11_pkgconfig=no
843fi
844dnl Use the autoconf macro if no pkg-config files
845if test "$x11_pkgconfig" = yes; then
846    PKG_CHECK_MODULES([X11], [x11])
847else
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])
853fi
854
855dnl Try to tell the user that the --x-* options are only used when
856dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
857m4_divert_once([HELP_BEGIN],
858[These options are only used when the X libraries cannot be found by the
859pkg-config utility.])
860
861dnl We need X for xlib and dri, so bomb now if it's not found
862if test "x$enable_glx" = xyes -a "x$no_x" = xyes; then
863    AC_MSG_ERROR([X11 development libraries needed for GLX])
864fi
865
866dnl XCB - this is only used for GLX right now
867AC_ARG_ENABLE([xcb],
868    [AS_HELP_STRING([--enable-xcb],
869        [use XCB for GLX @<:@default=disabled@:>@])],
870    [enable_xcb="$enableval"],
871    [enable_xcb=no])
872if test "x$enable_xcb" = xyes; then
873    DEFINES="$DEFINES -DUSE_XCB"
874else
875    enable_xcb=no
876fi
877
878dnl Direct rendering or just indirect rendering
879case "$host_os" in
880gnu*)
881    dnl Disable by default on GNU/Hurd
882    driglx_direct_default="no"
883    ;;
884cygwin*)
885    dnl Disable by default on cygwin
886    driglx_direct_default="no"
887    ;;
888*)
889    driglx_direct_default="yes"
890    ;;
891esac
892AC_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
899dnl
900dnl libGL configuration per driver
901dnl
902case "x$enable_glx$enable_xlib_glx" in
903xyesyes)
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    ;;
927xyesno)
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    ;;
982esac
983
984GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
985GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
986GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
987GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
988
989AC_SUBST([GL_LIB_DEPS])
990AC_SUBST([GL_PC_REQ_PRIV])
991AC_SUBST([GL_PC_LIB_PRIV])
992AC_SUBST([GL_PC_CFLAGS])
993AC_SUBST([DRI_PC_REQ_PRIV])
994AC_SUBST([GLESv1_CM_LIB_DEPS])
995AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
996AC_SUBST([GLESv2_LIB_DEPS])
997AC_SUBST([GLESv2_PC_LIB_PRIV])
998
999GLAPI_LIB_DEPS="-lpthread"
1000AC_SUBST([GLAPI_LIB_DEPS])
1001
1002
1003dnl Setup default DRI CFLAGS
1004DRI_CFLAGS='$(CFLAGS)'
1005DRI_CXXFLAGS='$(CXXFLAGS)'
1006DRI_LIB_DEPS='$(TOP)/src/mesa/libmesa.a'
1007MESA_MODULES='$(TOP)/src/mesa/libmesa.a'
1008
1009AC_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])
1014if 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
1029fi
1030AC_SUBST([DRICORE_LIBS])
1031AC_SUBST([DRICORE_GLSL_LIBS])
1032AC_SUBST([DRICORE_LIB_DEPS])
1033AC_SUBST([DRI_CXXFLAGS])
1034AC_SUBST([DRI_CFLAGS])
1035AC_SUBST([MESA_MODULES])
1036
1037AC_SUBST([HAVE_XF86VIDMODE])
1038
1039PKG_CHECK_MODULES([LIBDRM_RADEON],
1040		  [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED],
1041		  HAVE_LIBDRM_RADEON=yes,
1042		  HAVE_LIBDRM_RADEON=no)
1043
1044dnl
1045dnl More GLX setup
1046dnl
1047case "x$enable_glx$enable_xlib_glx" in
1048xyesyes)
1049    DEFINES="$DEFINES -DUSE_XSHM"
1050    ;;
1051xyesno)
1052    DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1053    if test "x$driglx_direct" = xyes; then
1054        DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1055    fi
1056    ;;
1057esac
1058
1059dnl
1060dnl TLS detection
1061dnl
1062
1063AC_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])
1068AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1069
1070AS_IF([test "x$GLX_USE_TLS" = xyes],
1071      [DEFINES="${DEFINES} -DGLX_USE_TLS -DPTHREADS"])
1072
1073dnl
1074dnl More DRI setup
1075dnl
1076dnl Directory for DRI drivers
1077AC_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'])
1082AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1083dnl Extra search path for DRI drivers
1084AC_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}'])
1089AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1090dnl Which drivers to build - default is chosen by platform
1091AC_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])
1097if test "x$with_dri_drivers" = x; then
1098    with_dri_drivers=no
1099fi
1100
1101dnl If $with_dri_drivers is yes, directories will be added through
1102dnl platform checks
1103DRI_DIRS=""
1104case "$with_dri_drivers" in
1105no) ;;
1106yes)
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    ;;
1124esac
1125
1126dnl Set DRI_DIRS, DEFINES and LIB_DEPS
1127if 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"
1217fi
1218AC_SUBST([DRI_DIRS])
1219AC_SUBST([EXPAT_INCLUDES])
1220AC_SUBST([DRI_LIB_DEPS])
1221
1222case $DRI_DIRS in
1223*i915*|*i965*)
1224    PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1225    ;;
1226esac
1227
1228case $DRI_DIRS in
1229*nouveau*)
1230    PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
1231    ;;
1232esac
1233
1234case $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    ;;
1241esac
1242AC_SUBST([RADEON_CFLAGS])
1243AC_SUBST([RADEON_LDFLAGS])
1244
1245
1246dnl
1247dnl OSMesa configuration
1248dnl
1249
1250dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1251AC_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])
1256if 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
1261fi
1262case "x$osmesa_bits" in
1263x8)
1264    OSMESA_LIB=OSMesa
1265    ;;
1266x16|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    ;;
1273esac
1274AC_SUBST([OSMESA_LIB])
1275
1276if 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"
1285fi
1286AC_SUBST([OSMESA_LIB_DEPS])
1287AC_SUBST([OSMESA_MESA_DEPS])
1288AC_SUBST([OSMESA_PC_REQ])
1289AC_SUBST([OSMESA_PC_LIB_PRIV])
1290
1291dnl
1292dnl EGL configuration
1293dnl
1294EGL_CLIENT_APIS=""
1295
1296if 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
1328fi
1329AC_SUBST([EGL_LIB_DEPS])
1330AC_SUBST([EGL_DRIVERS_DIRS])
1331
1332dnl
1333dnl gbm configuration
1334dnl
1335if 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
1342fi
1343if 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
1357fi
1358AC_SUBST([GBM_LIB_DEPS])
1359AC_SUBST([GBM_BACKEND_DIRS])
1360GBM_PC_REQ_PRIV="libudev"
1361GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1362GBM_PC_CFLAGS=
1363AC_SUBST([GBM_PC_REQ_PRIV])
1364AC_SUBST([GBM_PC_LIB_PRIV])
1365AC_SUBST([GBM_PC_CFLAGS])
1366
1367dnl
1368dnl EGL Gallium configuration
1369dnl
1370if 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"
1384fi
1385
1386dnl
1387dnl gbm Gallium configuration
1388dnl
1389if test "x$enable_gallium_gbm" = xyes; then
1390    if test "x$with_gallium_drivers" = x; then
1391        AC_MSG_ERROR([cannot enable gbm_gallium without Gallium])
1392    fi
1393    if test "x$enable_gbm" = xno; then
1394        AC_MSG_ERROR([cannot enable gbm_gallium without gbm])
1395    fi
1396
1397    GALLIUM_STATE_TRACKERS_DIRS="gbm $GALLIUM_STATE_TRACKERS_DIRS"
1398    GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS gbm"
1399    HAVE_ST_GBM="yes"
1400fi
1401
1402dnl
1403dnl X.Org DDX configuration
1404dnl
1405if test "x$enable_xorg" = xyes; then
1406    PKG_CHECK_MODULES([XORG], [xorg-server >= 1.6.0])
1407    PKG_CHECK_MODULES([LIBDRM_XORG], [libdrm >= $LIBDRM_XORG_REQUIRED])
1408    PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
1409    PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1410        HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1411        HAVE_XEXTPROTO_71="no")
1412    GALLIUM_STATE_TRACKERS_DIRS="xorg $GALLIUM_STATE_TRACKERS_DIRS"
1413    HAVE_ST_XORG=yes
1414fi
1415
1416dnl
1417dnl OpenVG configuration
1418dnl
1419VG_LIB_DEPS=""
1420
1421if test "x$enable_openvg" = xyes; then
1422    if test "x$enable_egl" = xno; then
1423        AC_MSG_ERROR([cannot enable OpenVG without EGL])
1424    fi
1425    if test "x$with_gallium_drivers" = x; then
1426        AC_MSG_ERROR([cannot enable OpenVG without Gallium])
1427    fi
1428    if test "x$enable_gallium_egl" = xno; then
1429        AC_MSG_ERROR([cannot enable OpenVG without egl_gallium])
1430    fi
1431
1432    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
1433    VG_LIB_DEPS="$VG_LIB_DEPS $SELINUX_LIBS -lpthread"
1434    CORE_DIRS="$CORE_DIRS mapi/vgapi"
1435    GALLIUM_STATE_TRACKERS_DIRS="vega $GALLIUM_STATE_TRACKERS_DIRS"
1436    HAVE_ST_VEGA=yes
1437fi
1438
1439dnl
1440dnl D3D1X configuration
1441dnl
1442
1443if test "x$enable_d3d1x" = xyes; then
1444    if test "x$with_gallium_drivers" = x; then
1445        AC_MSG_ERROR([cannot enable D3D1X without Gallium])
1446    fi
1447
1448    GALLIUM_STATE_TRACKERS_DIRS="d3d1x $GALLIUM_STATE_TRACKERS_DIRS"
1449    HAVE_ST_D3D1X=yes
1450fi
1451
1452dnl
1453dnl GLU configuration
1454dnl
1455AC_ARG_ENABLE([glu],
1456    [AS_HELP_STRING([--disable-glu],
1457        [enable OpenGL Utility library @<:@default=enabled@:>@])],
1458    [enable_glu="$enableval"],
1459    [enable_glu=yes])
1460
1461if test "x$enable_glu" = xyes; then
1462    if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then
1463        AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver])
1464        enable_glu=no
1465    fi
1466fi
1467
1468if test "x$enable_glu" = xyes; then
1469    SRC_DIRS="$SRC_DIRS glu"
1470
1471    if test "x$enable_glx" = xno; then
1472        # Link libGLU to libOSMesa instead of libGL
1473        GLU_LIB_DEPS=""
1474        GLU_PC_REQ="osmesa"
1475        if test "$enable_static" = no; then
1476            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
1477        else
1478            GLU_MESA_DEPS=""
1479        fi
1480    else
1481        # If static, empty GLU_LIB_DEPS and add libs for programs to link
1482        GLU_PC_REQ="gl"
1483        GLU_PC_LIB_PRIV="-lm"
1484        if test "$enable_static" = no; then
1485            GLU_LIB_DEPS="-lm"
1486            GLU_MESA_DEPS='-l$(GL_LIB)'
1487        else
1488            GLU_LIB_DEPS=""
1489            GLU_MESA_DEPS=""
1490            APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++"
1491        fi
1492    fi
1493fi
1494if test "$enable_static" = no; then
1495    GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
1496fi
1497GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
1498AC_SUBST([GLU_LIB_DEPS])
1499AC_SUBST([GLU_MESA_DEPS])
1500AC_SUBST([GLU_PC_REQ])
1501AC_SUBST([GLU_PC_REQ_PRIV])
1502AC_SUBST([GLU_PC_LIB_PRIV])
1503AC_SUBST([GLU_PC_CFLAGS])
1504
1505dnl
1506dnl GLw configuration
1507dnl
1508AC_ARG_ENABLE([glw],
1509    [AS_HELP_STRING([--disable-glw],
1510        [enable Xt/Motif widget library @<:@default=enabled@:>@])],
1511    [enable_glw="$enableval"],
1512    [enable_glw=yes])
1513dnl Don't build GLw on osmesa
1514if test "x$enable_glw" = xyes -a "x$enable_glx" = xno; then
1515    AC_MSG_NOTICE([Disabling GLw since there is no OpenGL driver])
1516    enable_glw=no
1517fi
1518AC_ARG_ENABLE([motif],
1519    [AS_HELP_STRING([--enable-motif],
1520        [use Motif widgets in GLw @<:@default=disabled@:>@])],
1521    [enable_motif="$enableval"],
1522    [enable_motif=no])
1523
1524if test "x$enable_glw" = xyes; then
1525    SRC_DIRS="$SRC_DIRS glw"
1526    if test "$x11_pkgconfig" = yes; then
1527        PKG_CHECK_MODULES([GLW],[x11 xt])
1528        GLW_PC_REQ_PRIV="x11 xt"
1529        GLW_LIB_DEPS="$GLW_LIBS"
1530    else
1531        # should check these...
1532        GLW_LIB_DEPS="$X_LIBS -lXt -lX11"
1533        GLW_PC_LIB_PRIV="$GLW_LIB_DEPS"
1534        GLW_PC_CFLAGS="$X11_INCLUDES"
1535    fi
1536
1537    GLW_SOURCES="GLwDrawA.c"
1538    MOTIF_CFLAGS=
1539    if test "x$enable_motif" = xyes; then
1540        GLW_SOURCES="$GLW_SOURCES GLwMDrawA.c"
1541        AC_PATH_PROG([MOTIF_CONFIG], [motif-config], [no])
1542        if test "x$MOTIF_CONFIG" != xno; then
1543            MOTIF_CFLAGS=`$MOTIF_CONFIG --cflags`
1544            MOTIF_LIBS=`$MOTIF_CONFIG --libs`
1545        else
1546            AC_CHECK_HEADER([Xm/PrimitiveP.h], [],
1547                [AC_MSG_ERROR([Can't locate Motif headers])])
1548            AC_CHECK_LIB([Xm], [XmGetPixmap], [MOTIF_LIBS="-lXm"],
1549                [AC_MSG_ERROR([Can't locate Motif Xm library])])
1550        fi
1551        # MOTIF_LIBS is prepended to GLW_LIB_DEPS since Xm needs Xt/X11
1552        GLW_LIB_DEPS="$MOTIF_LIBS $GLW_LIB_DEPS"
1553        GLW_PC_LIB_PRIV="$MOTIF_LIBS $GLW_PC_LIB_PRIV"
1554        GLW_PC_CFLAGS="$MOTIF_CFLAGS $GLW_PC_CFLAGS"
1555    fi
1556
1557    # If static, empty GLW_LIB_DEPS and add libs for programs to link
1558    GLW_PC_LIB_PRIV="$GLW_PC_LIB_PRIV"
1559    if test "$enable_static" = no; then
1560        GLW_MESA_DEPS='-l$(GL_LIB)'
1561        GLW_LIB_DEPS="$GLW_LIB_DEPS"
1562    else
1563        APP_LIB_DEPS="$APP_LIB_DEPS $GLW_LIB_DEPS"
1564        GLW_LIB_DEPS=""
1565        GLW_MESA_DEPS=""
1566    fi
1567fi
1568AC_SUBST([GLW_LIB_DEPS])
1569AC_SUBST([GLW_MESA_DEPS])
1570AC_SUBST([GLW_SOURCES])
1571AC_SUBST([MOTIF_CFLAGS])
1572AC_SUBST([GLW_PC_REQ_PRIV])
1573AC_SUBST([GLW_PC_LIB_PRIV])
1574AC_SUBST([GLW_PC_CFLAGS])
1575
1576dnl
1577dnl GLUT configuration
1578dnl
1579if test -f "$srcdir/include/GL/glut.h"; then
1580    default_glut=yes
1581else
1582    default_glut=no
1583fi
1584AC_ARG_ENABLE([glut],
1585    [AS_HELP_STRING([--disable-glut],
1586        [enable GLUT library @<:@default=enabled if source available@:>@])],
1587    [enable_glut="$enableval"],
1588    [enable_glut="$default_glut"])
1589
1590dnl Don't build glut without GLX
1591if test "x$enable_glut" = xyes -a "x$enable_glx" = xno; then
1592    AC_MSG_NOTICE([Disabling glut since there is no OpenGL driver])
1593    enable_glut=no
1594fi
1595dnl Can't build glut if GLU not available
1596if test "x$enable_glu$enable_glut" = xnoyes; then
1597    AC_MSG_WARN([Disabling glut since GLU is disabled])
1598    enable_glut=no
1599fi
1600
1601if test "x$enable_glut" = xyes; then
1602    SRC_DIRS="$SRC_DIRS glut/glx"
1603    if test "$x11_pkgconfig" = yes; then
1604        PKG_CHECK_MODULES([GLUT],[x11 xmu xi])
1605        GLUT_PC_REQ_PRIV="x11 xmu xi"
1606        GLUT_LIB_DEPS="$GLUT_LIBS"
1607    else
1608        # should check these...
1609        GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXi"
1610        GLUT_PC_LIB_PRIV="$GLUT_LIB_DEPS"
1611        GLUT_PC_CFLAGS="$X11_INCLUDES"
1612    fi
1613    if test "x$GCC" = xyes; then
1614        GLUT_CFLAGS="$GLUT_CFLAGS -fexceptions"
1615    fi
1616    GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
1617    GLUT_PC_LIB_PRIV="$GLUT_PC_LIB_PRIV -lm"
1618
1619    # If static, empty GLUT_LIB_DEPS and add libs for programs to link
1620    if test "$enable_static" = no; then
1621        GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
1622    else
1623        APP_LIB_DEPS="$APP_LIB_DEPS $GLUT_LIB_DEPS"
1624        GLUT_LIB_DEPS=""
1625        GLUT_MESA_DEPS=""
1626    fi
1627fi
1628AC_SUBST([GLUT_LIB_DEPS])
1629AC_SUBST([GLUT_MESA_DEPS])
1630AC_SUBST([GLUT_CFLAGS])
1631AC_SUBST([GLUT_PC_REQ_PRIV])
1632AC_SUBST([GLUT_PC_LIB_PRIV])
1633AC_SUBST([GLUT_PC_CFLAGS])
1634
1635dnl
1636dnl Program library dependencies
1637dnl    Only libm is added here if necessary as the libraries should
1638dnl    be pulled in by the linker
1639dnl
1640if test "x$APP_LIB_DEPS" = x; then
1641    case "$host_os" in
1642    solaris*)
1643        APP_LIB_DEPS="-lX11 -lsocket -lnsl -lm"
1644        ;;
1645    cygwin*)
1646        APP_LIB_DEPS="-lX11"
1647        ;;
1648    *)
1649        APP_LIB_DEPS="-lm"
1650        ;;
1651    esac
1652fi
1653AC_SUBST([APP_LIB_DEPS])
1654AC_SUBST([PROGRAM_DIRS])
1655
1656dnl
1657dnl Gallium configuration
1658dnl
1659if test "x$with_gallium_drivers" != x; then
1660    SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
1661    AC_PATH_PROG([LLVM_CONFIG], [llvm-config], [no])
1662else
1663    LLVM_CONFIG=no
1664fi
1665
1666AC_SUBST([LLVM_CFLAGS])
1667AC_SUBST([LLVM_LIBS])
1668AC_SUBST([LLVM_LDFLAGS])
1669AC_SUBST([LLVM_VERSION])
1670
1671
1672
1673case "x$enable_opengl$enable_gles1$enable_gles2" in
1674x*yes*)
1675    EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
1676    ;;
1677esac
1678
1679AC_SUBST([VG_LIB_DEPS])
1680AC_SUBST([EGL_CLIENT_APIS])
1681
1682AC_ARG_WITH([egl-platforms],
1683    [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
1684        [comma delimited native platforms libEGL supports, e.g.
1685        "x11,drm" @<:@default=auto@:>@])],
1686    [with_egl_platforms="$withval"],
1687    [with_egl_platforms=yes])
1688
1689EGL_PLATFORMS=""
1690WAYLAND_EGL_LIB_DEPS=""
1691
1692case "$with_egl_platforms" in
1693yes)
1694    if test "x$enable_egl" = xyes; then
1695        EGL_PLATFORMS="x11"
1696    fi
1697    ;;
1698*)
1699    if test "x$enable_egl" != xyes; then
1700        AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1701    fi
1702    # verify the requested driver directories exist
1703    egl_platforms=`IFS=', '; echo $with_egl_platforms`
1704    for plat in $egl_platforms; do
1705        test -d "$srcdir/src/gallium/state_trackers/egl/$plat" || \
1706            AC_MSG_ERROR([EGL platform '$plat' doesn't exist])
1707        if test "$plat" = "fbdev"; then
1708                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/fbdev"
1709        fi
1710	if test "$plat" = "wayland"; then
1711		PKG_CHECK_MODULES([WAYLAND], [wayland-client wayland-server],, \
1712				  [AC_MSG_ERROR([cannot find libwayland-client])])
1713		WAYLAND_EGL_LIB_DEPS="$WAYLAND_LIBS $LIBDRM_LIBS"
1714                GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/wayland"
1715	fi
1716        if test "$plat" = "drm" && test "x$enable_gbm" = no; then
1717                AC_MSG_ERROR([EGL platform drm needs gbm])
1718        fi
1719    done
1720    EGL_PLATFORMS="$egl_platforms"
1721    ;;
1722esac
1723AC_SUBST([EGL_PLATFORMS])
1724
1725AC_SUBST([WAYLAND_EGL_LIB_DEPS])
1726WAYLAND_EGL_PC_REQ_PRIV="wayland-client libdrm"
1727WAYLAND_EGL_PC_LIB_PRIV=
1728WAYLAND_EGL_PC_CFLAGS=
1729
1730AC_SUBST([WAYLAND_EGL_PC_REQ_PRIV])
1731AC_SUBST([WAYLAND_EGL_PC_LIB_PRIV])
1732AC_SUBST([WAYLAND_EGL_PC_CFLAGS])
1733
1734
1735AC_ARG_WITH([egl-driver-dir],
1736    [AS_HELP_STRING([--with-egl-driver-dir=DIR],
1737                    [directory for EGL drivers [[default=${libdir}/egl]]])],
1738    [EGL_DRIVER_INSTALL_DIR="$withval"],
1739    [EGL_DRIVER_INSTALL_DIR='${libdir}/egl'])
1740AC_SUBST([EGL_DRIVER_INSTALL_DIR])
1741
1742AC_ARG_WITH([xorg-driver-dir],
1743    [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1744                    [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1745    [XORG_DRIVER_INSTALL_DIR="$withval"],
1746    [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1747AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1748
1749AC_ARG_WITH([max-width],
1750    [AS_HELP_STRING([--with-max-width=N],
1751                    [Maximum framebuffer width (4096)])],
1752    [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1753     AS_IF([test "${withval}" -gt "4096"],
1754           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1755)
1756AC_ARG_WITH([max-height],
1757    [AS_HELP_STRING([--with-max-height=N],
1758                    [Maximum framebuffer height (4096)])],
1759    [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1760     AS_IF([test "${withval}" -gt "4096"],
1761           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1762)
1763
1764dnl
1765dnl Gallium LLVM
1766dnl
1767AC_ARG_ENABLE([gallium-llvm],
1768    [AS_HELP_STRING([--enable-gallium-llvm],
1769        [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1770    [enable_gallium_llvm="$enableval"],
1771    [enable_gallium_llvm=auto])
1772if test "x$with_gallium_drivers" = x; then
1773    enable_gallium_llvm=no
1774fi
1775if test "x$enable_gallium_llvm" = xauto; then
1776    case "$host_cpu" in
1777    i*86|x86_64) enable_gallium_llvm=yes;;
1778    esac
1779fi
1780if test "x$enable_gallium_llvm" = xyes; then
1781    if test "x$LLVM_CONFIG" != xno; then
1782	LLVM_VERSION=`$LLVM_CONFIG --version`
1783	LLVM_CFLAGS=`$LLVM_CONFIG --cppflags`
1784	LLVM_LIBS="`$LLVM_CONFIG --libs` -lstdc++"
1785
1786	LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
1787	GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS llvmpipe"
1788	DEFINES="$DEFINES -DGALLIUM_LLVMPIPE -D__STDC_CONSTANT_MACROS"
1789	MESA_LLVM=1
1790    else
1791	MESA_LLVM=0
1792    fi
1793else
1794    MESA_LLVM=0
1795fi
1796
1797dnl
1798dnl Gallium helper functions
1799dnl
1800gallium_check_st() {
1801    if test "x$HAVE_ST_DRI" = xyes || test "x$HAVE_ST_XORG" = xyes; then
1802         if test "x$have_libdrm" != xyes; then
1803            AC_MSG_ERROR([DRI or Xorg DDX requires libdrm >= $LIBDRM_REQUIRED])
1804         fi
1805         GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS $1"
1806    fi
1807    if test "x$HAVE_ST_DRI" = xyes && test "x$2" != x; then
1808         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $2"
1809    fi
1810    if test "x$HAVE_ST_XORG" = xyes && test "x$3" != x; then
1811         GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS $3"
1812    fi
1813}
1814
1815gallium_require_llvm() {
1816    if test "x$MESA_LLVM" = x0; then
1817        case "$host_cpu" in
1818        i*86|x86_64) AC_MSG_ERROR([LLVM is required to build $1 on x86 and x86_64]);;
1819        esac
1820    fi
1821}
1822
1823dnl Gallium drivers
1824if test "x$with_gallium_drivers" != x; then
1825    # This is for compile-testing
1826    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 i965 r300 svga"
1827    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS i915/sw"
1828
1829    gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
1830    for driver in $gallium_drivers; do
1831        case "x$driver" in
1832        xsvga)
1833            gallium_check_st "svga/drm" "dri-vmwgfx" "xorg-vmwgfx"
1834            ;;
1835        xi915)
1836            gallium_check_st "i915/drm" "dri-i915" "xorg-i915"
1837            ;;
1838        xi965)
1839            gallium_check_st "i965/drm" "dri-i965" "xorg-i965"
1840            ;;
1841        xr300)
1842            gallium_require_llvm "Gallium R300"
1843            gallium_check_st "radeon/drm" "dri-r300" "xorg-r300"
1844            ;;
1845        xr600)
1846            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r600"
1847            gallium_check_st "r600/drm" "dri-r600"
1848            ;;
1849        xnouveau)
1850            GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nvfx nv50 nvc0"
1851            gallium_check_st "nouveau/drm" "dri-nouveau" "xorg-nouveau"
1852            ;;
1853        xswrast)
1854            if test "x$HAVE_ST_DRI" = xyes; then
1855                GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS dri-swrast"
1856            fi
1857            ;;
1858        *)
1859            AC_MSG_ERROR([Unknown Gallium driver: $driver])
1860            ;;
1861        esac
1862    done
1863fi
1864
1865dnl prepend CORE_DIRS to SRC_DIRS
1866SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1867
1868dnl Restore LDFLAGS and CPPFLAGS
1869LDFLAGS="$_SAVE_LDFLAGS"
1870CPPFLAGS="$_SAVE_CPPFLAGS"
1871
1872dnl Substitute the config
1873AC_CONFIG_FILES([configs/autoconf])
1874
1875dnl Replace the configs/current symlink
1876AC_CONFIG_COMMANDS([configs],[
1877if test -f configs/current || test -L configs/current; then
1878    rm -f configs/current
1879fi
1880ln -s autoconf configs/current
1881])
1882
1883dnl Sort the dirs alphabetically
1884GALLIUM_TARGET_DIRS=`echo $GALLIUM_TARGET_DIRS|tr " " "\n"|sort|tr "\n" " "`
1885GALLIUM_WINSYS_DIRS=`echo $GALLIUM_WINSYS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1886GALLIUM_DRIVERS_DIRS=`echo $GALLIUM_DRIVERS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1887GALLIUM_STATE_TRACKERS_DIRS=`echo $GALLIUM_STATE_TRACKERS_DIRS|tr " " "\n"|sort|tr "\n" " "`
1888
1889AC_OUTPUT
1890
1891dnl
1892dnl Output some configuration info for the user
1893dnl
1894echo ""
1895echo "        prefix:          $prefix"
1896echo "        exec_prefix:     $exec_prefix"
1897echo "        libdir:          $libdir"
1898echo "        includedir:      $includedir"
1899
1900dnl API info
1901echo ""
1902echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
1903echo "        OpenVG:          $enable_openvg"
1904
1905dnl Driver info
1906echo ""
1907if test "x$enable_osmesa" != xno; then
1908        echo "        OSMesa:          lib$OSMESA_LIB"
1909else
1910        echo "        OSMesa:          no"
1911fi
1912
1913if test "x$enable_dri" != xno; then
1914        # cleanup the drivers var
1915        dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1916        if test "x$DRI_DIRS" = x; then
1917            echo "        DRI drivers:     no"
1918        else
1919            echo "        DRI drivers:     $dri_dirs"
1920        fi
1921        echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1922        echo "        Shared dricore:  $enable_dricore"
1923fi
1924
1925case "x$enable_glx$enable_xlib_glx" in
1926xyesyes)
1927    echo "        GLX:             Xlib-based"
1928    ;;
1929xyesno)
1930    echo "        GLX:             DRI-based"
1931    echo "        Use XCB:         $enable_xcb"
1932    ;;
1933*)
1934    echo "        GLX:             $enable_glx"
1935    ;;
1936esac
1937
1938echo ""
1939echo "        GLU:             $enable_glu"
1940echo "        GLw:             $enable_glw (Motif: $enable_motif)"
1941echo "        glut:            $enable_glut"
1942
1943dnl EGL
1944echo ""
1945echo "        EGL:             $enable_egl"
1946if test "$enable_egl" = yes; then
1947    echo "        EGL platforms:   $EGL_PLATFORMS"
1948
1949    egl_drivers=""
1950    for d in $EGL_DRIVERS_DIRS; do
1951        egl_drivers="$egl_drivers builtin:egl_$d"
1952    done
1953
1954    if test "x$HAVE_ST_EGL" = xyes; then
1955        echo "        EGL drivers:    ${egl_drivers} egl_gallium"
1956        echo "        EGL Gallium STs:$EGL_CLIENT_APIS"
1957    else
1958        echo "        EGL drivers:    $egl_drivers"
1959    fi
1960fi
1961
1962echo ""
1963if test "x$MESA_LLVM" = x1; then
1964    echo "        llvm:            yes"
1965    echo "        llvm-config:     $LLVM_CONFIG"
1966    echo "        llvm-version:    $LLVM_VERSION"
1967else
1968    echo "        llvm:            no"
1969fi
1970
1971echo ""
1972if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
1973    echo "        Gallium:         yes"
1974    echo "        Gallium dirs:    $GALLIUM_DIRS"
1975    echo "        Target dirs:     $GALLIUM_TARGET_DIRS"
1976    echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
1977    echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
1978    echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
1979else
1980    echo "        Gallium:         no"
1981fi
1982
1983dnl Libraries
1984echo ""
1985echo "        Shared libs:     $enable_shared"
1986echo "        Static libs:     $enable_static"
1987
1988dnl Compiler options
1989# cleanup the CFLAGS/CXXFLAGS/DEFINES vars
1990cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
1991    $SED 's/^ *//;s/  */ /;s/ *$//'`
1992cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
1993    $SED 's/^ *//;s/  */ /;s/ *$//'`
1994defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1995echo ""
1996echo "        CFLAGS:          $cflags"
1997echo "        CXXFLAGS:        $cxxflags"
1998echo "        Macros:          $defines"
1999echo ""
2000echo "        PYTHON2:         $PYTHON2"
2001
2002echo ""
2003echo "        Run '${MAKE-make}' to build Mesa"
2004echo ""
2005