configure.ac revision a1306f4ef6f83a86d03720641f3cdc5e13485fa6
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'])])
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.15
22LIBDRM_RADEON_REQUIRED=2.4.17
23DRI2PROTO_REQUIRED=2.2
24GLPROTO_REQUIRED=1.4.11
25
26dnl Check for progs
27AC_PROG_CPP
28AC_PROG_CC
29AC_PROG_CXX
30AC_CHECK_PROGS([MAKE], [gmake make])
31AC_PATH_PROG([MKDEP], [makedepend])
32AC_PATH_PROG([SED], [sed])
33
34dnl Our fallback install-sh is a symlink to minstall. Use the existing
35dnl configuration in that case.
36AC_PROG_INSTALL
37test "x$INSTALL" = "x$ac_install_sh" && INSTALL='$(MINSTALL)'
38
39dnl We need a POSIX shell for parts of the build. Assume we have one
40dnl in most cases.
41case "$host_os" in
42solaris*)
43    # Solaris /bin/sh is too old/non-POSIX compliant
44    AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
45    SHELL="$POSIX_SHELL"
46    ;;
47esac
48
49MKDEP_OPTIONS=-fdepend
50dnl Ask gcc where it's keeping its secret headers
51if test "x$GCC" = xyes; then
52    for dir in include include-fixed; do
53        GCC_INCLUDES=`$CC -print-file-name=$dir`
54        if test "x$GCC_INCLUDES" != x && \
55           test "$GCC_INCLUDES" != "$dir" && \
56           test -d "$GCC_INCLUDES"; then
57            MKDEP_OPTIONS="$MKDEP_OPTIONS -I$GCC_INCLUDES"
58        fi
59    done
60fi
61AC_SUBST([MKDEP_OPTIONS])
62
63dnl Make sure the pkg-config macros are defined
64m4_ifndef([PKG_PROG_PKG_CONFIG],
65    [m4_fatal([Could not locate the pkg-config autoconf macros.
66  These are usually located in /usr/share/aclocal/pkg.m4. If your macros
67  are in a different location, try setting the environment variable
68  ACLOCAL="aclocal -I/other/macro/dir" before running autoreconf.])])
69PKG_PROG_PKG_CONFIG()
70
71dnl LIB_DIR - library basename
72LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
73AC_SUBST([LIB_DIR])
74
75dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
76_SAVE_LDFLAGS="$LDFLAGS"
77AC_ARG_VAR([EXTRA_LIB_PATH],[Extra -L paths for the linker])
78AC_SUBST([EXTRA_LIB_PATH])
79
80dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
81_SAVE_CPPFLAGS="$CPPFLAGS"
82AC_ARG_VAR([X11_INCLUDES],[Extra -I paths for X11 headers])
83AC_SUBST([X11_INCLUDES])
84
85dnl Compiler macros
86DEFINES=""
87AC_SUBST([DEFINES])
88case "$host_os" in
89linux*|*-gnu*|gnu*)
90    DEFINES="$DEFINES -D_GNU_SOURCE -DPTHREADS"
91    ;;
92solaris*)
93    DEFINES="$DEFINES -DPTHREADS -DSVR4"
94    ;;
95esac
96
97dnl Add flags for gcc and g++
98if test "x$GCC" = xyes; then
99    CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -std=c99 -ffast-math"
100
101    # Enable -fvisibility=hidden if using a gcc that supports it
102    save_CFLAGS="$CFLAGS"
103    AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
104    CFLAGS="$CFLAGS -fvisibility=hidden"
105    AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
106		   [CFLAGS="$save_CFLAGS" ; AC_MSG_RESULT([no])]);
107
108    # Work around aliasing bugs - developers should comment this out
109    CFLAGS="$CFLAGS -fno-strict-aliasing"
110fi
111if test "x$GXX" = xyes; then
112    CXXFLAGS="$CXXFLAGS -Wall"
113
114    # Work around aliasing bugs - developers should comment this out
115    CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
116fi
117
118dnl These should be unnecessary, but let the user set them if they want
119AC_ARG_VAR([OPT_FLAGS], [Additional optimization flags for the compiler.
120    Default is to use CFLAGS.])
121AC_ARG_VAR([ARCH_FLAGS], [Additional architecture specific flags for the
122    compiler. Default is to use CFLAGS.])
123AC_SUBST([OPT_FLAGS])
124AC_SUBST([ARCH_FLAGS])
125
126dnl
127dnl Hacks to enable 32 or 64 bit build
128dnl
129AC_ARG_ENABLE([32-bit],
130    [AS_HELP_STRING([--enable-32-bit],
131        [build 32-bit libraries @<:@default=auto@:>@])],
132    [enable_32bit="$enableval"],
133    [enable_32bit=auto]
134)
135if test "x$enable_32bit" = xyes; then
136    if test "x$GCC" = xyes; then
137        CFLAGS="$CFLAGS -m32"
138        ARCH_FLAGS="$ARCH_FLAGS -m32"
139    fi
140    if test "x$GXX" = xyes; then
141        CXXFLAGS="$CXXFLAGS -m32"
142    fi
143fi
144AC_ARG_ENABLE([64-bit],
145    [AS_HELP_STRING([--enable-64-bit],
146        [build 64-bit libraries @<:@default=auto@:>@])],
147    [enable_64bit="$enableval"],
148    [enable_64bit=auto]
149)
150if test "x$enable_64bit" = xyes; then
151    if test "x$GCC" = xyes; then
152        CFLAGS="$CFLAGS -m64"
153    fi
154    if test "x$GXX" = xyes; then
155        CXXFLAGS="$CXXFLAGS -m64"
156    fi
157fi
158
159dnl
160dnl shared/static libraries, mimic libtool options
161dnl
162AC_ARG_ENABLE([static],
163    [AS_HELP_STRING([--enable-static],
164        [build static libraries @<:@default=disabled@:>@])],
165    [enable_static="$enableval"],
166    [enable_static=no]
167)
168case "x$enable_static" in
169xyes|xno ) ;;
170x ) enable_static=no ;;
171* )
172    AC_MSG_ERROR([Static library option '$enable_static' is not a valid])
173    ;;
174esac
175AC_ARG_ENABLE([shared],
176    [AS_HELP_STRING([--disable-shared],
177        [build shared libraries @<:@default=enabled@:>@])],
178    [enable_shared="$enableval"],
179    [enable_shared=yes]
180)
181case "x$enable_shared" in
182xyes|xno ) ;;
183x ) enable_shared=yes ;;
184* )
185    AC_MSG_ERROR([Shared library option '$enable_shared' is not a valid])
186    ;;
187esac
188
189dnl Can't have static and shared libraries, default to static if user
190dnl explicitly requested. If both disabled, set to static since shared
191dnl was explicitly requirested.
192case "x$enable_static$enable_shared" in
193xyesyes )
194    AC_MSG_WARN([Can't build static and shared libraries, disabling shared])
195    enable_shared=no
196    ;;
197xnono )
198    AC_MSG_WARN([Can't disable both static and shared libraries, enabling static])
199    enable_static=yes
200    ;;
201esac
202
203dnl
204dnl mklib options
205dnl
206AC_ARG_VAR([MKLIB_OPTIONS],[Options for the Mesa library script, mklib])
207if test "$enable_static" = yes; then
208    MKLIB_OPTIONS="$MKLIB_OPTIONS -static"
209fi
210AC_SUBST([MKLIB_OPTIONS])
211
212dnl
213dnl other compiler options
214dnl
215AC_ARG_ENABLE([debug],
216    [AS_HELP_STRING([--enable-debug],
217        [use debug compiler flags and macros @<:@default=disabled@:>@])],
218    [enable_debug="$enableval"],
219    [enable_debug=no]
220)
221if test "x$enable_debug" = xyes; then
222    DEFINES="$DEFINES -DDEBUG"
223    if test "x$GCC" = xyes; then
224        CFLAGS="$CFLAGS -g"
225    fi
226    if test "x$GXX" = xyes; then
227        CXXFLAGS="$CXXFLAGS -g"
228    fi
229fi
230
231dnl
232dnl library names
233dnl
234if test "$enable_static" = yes; then
235    LIB_EXTENSION='a'
236else
237    case "$host_os" in
238    darwin* )
239        LIB_EXTENSION='dylib' ;;
240    cygwin* )
241        LIB_EXTENSION='dll' ;;
242    aix* )
243        LIB_EXTENSION='a' ;;
244    * )
245        LIB_EXTENSION='so' ;;
246    esac
247fi
248
249GL_LIB_NAME='lib$(GL_LIB).'${LIB_EXTENSION}
250GLU_LIB_NAME='lib$(GLU_LIB).'${LIB_EXTENSION}
251GLUT_LIB_NAME='lib$(GLUT_LIB).'${LIB_EXTENSION}
252GLW_LIB_NAME='lib$(GLW_LIB).'${LIB_EXTENSION}
253OSMESA_LIB_NAME='lib$(OSMESA_LIB).'${LIB_EXTENSION}
254EGL_LIB_NAME='lib$(EGL_LIB).'${LIB_EXTENSION}
255
256GL_LIB_GLOB='lib$(GL_LIB).*'${LIB_EXTENSION}'*'
257GLU_LIB_GLOB='lib$(GLU_LIB).*'${LIB_EXTENSION}'*'
258GLUT_LIB_GLOB='lib$(GLUT_LIB).*'${LIB_EXTENSION}'*'
259GLW_LIB_GLOB='lib$(GLW_LIB).*'${LIB_EXTENSION}'*'
260OSMESA_LIB_GLOB='lib$(OSMESA_LIB).*'${LIB_EXTENSION}'*'
261EGL_LIB_GLOB='lib$(EGL_LIB).*'${LIB_EXTENSION}'*'
262
263AC_SUBST([GL_LIB_NAME])
264AC_SUBST([GLU_LIB_NAME])
265AC_SUBST([GLUT_LIB_NAME])
266AC_SUBST([GLW_LIB_NAME])
267AC_SUBST([OSMESA_LIB_NAME])
268AC_SUBST([EGL_LIB_NAME])
269
270AC_SUBST([GL_LIB_GLOB])
271AC_SUBST([GLU_LIB_GLOB])
272AC_SUBST([GLUT_LIB_GLOB])
273AC_SUBST([GLW_LIB_GLOB])
274AC_SUBST([OSMESA_LIB_GLOB])
275AC_SUBST([EGL_LIB_GLOB])
276
277dnl
278dnl Arch/platform-specific settings
279dnl
280AC_ARG_ENABLE([asm],
281    [AS_HELP_STRING([--disable-asm],
282        [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
283    [enable_asm="$enableval"],
284    [enable_asm=yes]
285)
286asm_arch=""
287ASM_FLAGS=""
288MESA_ASM_SOURCES=""
289GLAPI_ASM_SOURCES=""
290AC_MSG_CHECKING([whether to enable assembly])
291test "x$enable_asm" = xno && AC_MSG_RESULT([no])
292# disable if cross compiling on x86/x86_64 since we must run gen_matypes
293if test "x$enable_asm" = xyes && test "x$cross_compiling" = xyes; then
294    case "$host_cpu" in
295    i?86 | x86_64)
296        enable_asm=no
297        AC_MSG_RESULT([no, cross compiling])
298        ;;
299    esac
300fi
301# check for supported arches
302if test "x$enable_asm" = xyes; then
303    case "$host_cpu" in
304    i?86)
305        case "$host_os" in
306        linux* | *freebsd* | dragonfly*)
307            test "x$enable_64bit" = xyes && asm_arch=x86_64 || asm_arch=x86
308            ;;
309        esac
310        ;;
311    x86_64)
312        case "$host_os" in
313        linux* | *freebsd* | dragonfly*)
314            test "x$enable_32bit" = xyes && asm_arch=x86 || asm_arch=x86_64
315            ;;
316        esac
317        ;;
318    powerpc)
319        case "$host_os" in
320        linux*)
321            asm_arch=ppc
322            ;;
323        esac
324        ;;
325    sparc*)
326        case "$host_os" in
327        linux*)
328            asm_arch=sparc
329            ;;
330        esac
331        ;;
332    esac
333
334    case "$asm_arch" in
335    x86)
336        ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
337        MESA_ASM_SOURCES='$(X86_SOURCES)'
338        GLAPI_ASM_SOURCES='$(X86_API)'
339        AC_MSG_RESULT([yes, x86])
340        ;;
341    x86_64)
342        ASM_FLAGS="-DUSE_X86_64_ASM"
343        MESA_ASM_SOURCES='$(X86-64_SOURCES)'
344        GLAPI_ASM_SOURCES='$(X86-64_API)'
345        AC_MSG_RESULT([yes, x86_64])
346        ;;
347    ppc)
348        ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
349        MESA_ASM_SOURCES='$(PPC_SOURCES)'
350        AC_MSG_RESULT([yes, ppc])
351        ;;
352    sparc)
353        ASM_FLAGS="-DUSE_SPARC_ASM"
354        MESA_ASM_SOURCES='$(SPARC_SOURCES)'
355        GLAPI_ASM_SOURCES='$(SPARC_API)'
356        AC_MSG_RESULT([yes, sparc])
357        ;;
358    *)
359        AC_MSG_RESULT([no, platform not supported])
360        ;;
361    esac
362fi
363AC_SUBST([ASM_FLAGS])
364AC_SUBST([MESA_ASM_SOURCES])
365AC_SUBST([GLAPI_ASM_SOURCES])
366
367dnl PIC code macro
368MESA_PIC_FLAGS
369
370dnl Check to see if dlopen is in default libraries (like Solaris, which
371dnl has it in libc), or if libdl is needed to get it.
372AC_CHECK_FUNC([dlopen], [],
373    [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
374
375dnl See if posix_memalign is available
376AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
377
378dnl SELinux awareness.
379AC_ARG_ENABLE([selinux],
380    [AS_HELP_STRING([--enable-selinux],
381        [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
382    [MESA_SELINUX="$enableval"],
383    [MESA_SELINUX=no])
384if test "x$enable_selinux" = "xyes"; then
385    AC_CHECK_HEADER([selinux/selinux.h],[],
386                    [AC_MSG_ERROR([SELinux headers not found])])
387    AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
388                 [AC_MSG_ERROR([SELinux library not found])])
389    SELINUX_LIBS="-lselinux"
390    DEFINES="$DEFINES -DMESA_SELINUX"
391fi
392
393dnl
394dnl Driver configuration. Options are xlib, dri and osmesa right now.
395dnl More later: directfb, fbdev, ...
396dnl
397default_driver="xlib"
398
399case "$host_os" in
400linux*)
401    case "$host_cpu" in
402    i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
403    esac
404    ;;
405*freebsd* | dragonfly*)
406    case "$host_cpu" in
407    i*86|x86_64|powerpc*|sparc*) default_driver="dri";;
408    esac
409    ;;
410esac
411
412AC_ARG_WITH([driver],
413    [AS_HELP_STRING([--with-driver=DRIVER],
414        [driver for Mesa: xlib,dri,osmesa @<:@default=dri when available, or xlib@:>@])],
415    [mesa_driver="$withval"],
416    [mesa_driver="$default_driver"])
417dnl Check for valid option
418case "x$mesa_driver" in
419xxlib|xdri|xosmesa)
420    ;;
421*)
422    AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
423    ;;
424esac
425
426dnl
427dnl Driver specific build directories
428dnl
429
430dnl this variable will be prepended to SRC_DIRS and is not exported
431CORE_DIRS="glsl mesa"
432
433SRC_DIRS="glew"
434GLU_DIRS="sgi"
435WINDOW_SYSTEM=""
436GALLIUM_DIRS="auxiliary drivers state_trackers"
437GALLIUM_WINSYS_DIRS=""
438GALLIUM_WINSYS_DRM_DIRS=""
439GALLIUM_DRIVERS_DIRS="softpipe failover trace identity"
440GALLIUM_STATE_TRACKERS_DIRS=""
441
442case "$mesa_driver" in
443xlib)
444    DRIVER_DIRS="x11"
445    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS xlib"
446    ;;
447dri)
448    CORE_DIRS="glx/x11 $CORE_DIRS"
449    DRIVER_DIRS="dri"
450    WINDOW_SYSTEM="dri"
451    GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS drm"
452    ;;
453osmesa)
454    DRIVER_DIRS="osmesa"
455    ;;
456esac
457AC_SUBST([SRC_DIRS])
458AC_SUBST([GLU_DIRS])
459AC_SUBST([DRIVER_DIRS])
460AC_SUBST([WINDOW_SYSTEM])
461AC_SUBST([GALLIUM_DIRS])
462AC_SUBST([GALLIUM_WINSYS_DIRS])
463AC_SUBST([GALLIUM_WINSYS_DRM_DIRS])
464AC_SUBST([GALLIUM_DRIVERS_DIRS])
465AC_SUBST([GALLIUM_STATE_TRACKERS_DIRS])
466
467dnl
468dnl User supplied program configuration
469dnl
470if test -d "$srcdir/progs/demos"; then
471    default_demos=yes
472else
473    default_demos=no
474fi
475AC_ARG_WITH([demos],
476    [AS_HELP_STRING([--with-demos@<:@=DIRS...@:>@],
477        [optional comma delimited demo directories to build
478        @<:@default=auto if source available@:>@])],
479    [with_demos="$withval"],
480    [with_demos="$default_demos"])
481if test "x$with_demos" = x; then
482    with_demos=no
483fi
484
485dnl If $with_demos is yes, directories will be added as libs available
486PROGRAM_DIRS=""
487case "$with_demos" in
488no) ;;
489yes)
490    # If the driver isn't osmesa, we have libGL and can build xdemos
491    if test "$mesa_driver" != osmesa; then
492        PROGRAM_DIRS="xdemos"
493    fi
494    ;;
495*)
496    # verify the requested demos directories exist
497    demos=`IFS=,; echo $with_demos`
498    for demo in $demos; do
499        test -d "$srcdir/progs/$demo" || \
500            AC_MSG_ERROR([Program directory '$demo' doesn't exist])
501    done
502    PROGRAM_DIRS="$demos"
503    ;;
504esac
505
506dnl
507dnl Find out if X is available. The variable have_x is set if libX11 is
508dnl found to mimic AC_PATH_XTRA.
509dnl
510if test -n "$PKG_CONFIG"; then
511    AC_MSG_CHECKING([pkg-config files for X11 are available])
512    PKG_CHECK_EXISTS([x11],[
513        x11_pkgconfig=yes
514        have_x=yes
515        ],[
516        x11_pkgconfig=no
517    ])
518    AC_MSG_RESULT([$x11_pkgconfig])
519else
520    x11_pkgconfig=no
521fi
522dnl Use the autoconf macro if no pkg-config files
523if test "$x11_pkgconfig" = no; then
524    AC_PATH_XTRA
525fi
526
527dnl Try to tell the user that the --x-* options are only used when
528dnl pkg-config is not available. This must be right after AC_PATH_XTRA.
529m4_divert_once([HELP_BEGIN],
530[These options are only used when the X libraries cannot be found by the
531pkg-config utility.])
532
533dnl We need X for xlib and dri, so bomb now if it's not found
534case "$mesa_driver" in
535xlib|dri)
536    if test "$no_x" = yes; then
537        AC_MSG_ERROR([X11 development libraries needed for $mesa_driver driver])
538    fi
539    ;;
540esac
541
542dnl XCB - this is only used for GLX right now
543AC_ARG_ENABLE([xcb],
544    [AS_HELP_STRING([--enable-xcb],
545        [use XCB for GLX @<:@default=disabled@:>@])],
546    [enable_xcb="$enableval"],
547    [enable_xcb=no])
548if test "x$enable_xcb" = xyes; then
549    DEFINES="$DEFINES -DUSE_XCB"
550else
551    enable_xcb=no
552fi
553
554dnl
555dnl libGL configuration per driver
556dnl
557case "$mesa_driver" in
558xlib)
559    if test "$x11_pkgconfig" = yes; then
560        PKG_CHECK_MODULES([XLIBGL], [x11 xext])
561        GL_PC_REQ_PRIV="x11 xext"
562        X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
563        GL_LIB_DEPS="$XLIBGL_LIBS"
564    else
565        # should check these...
566        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
567        GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
568        GL_PC_LIB_PRIV="$GL_LIB_DEPS"
569        GL_PC_CFLAGS="$X11_INCLUDES"
570    fi
571    GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread"
572    GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm -lpthread"
573
574    # if static, move the external libraries to the programs
575    # and empty the libraries for libGL
576    if test "$enable_static" = yes; then
577        APP_LIB_DEPS="$APP_LIB_DEPS $GL_LIB_DEPS"
578        GL_LIB_DEPS=""
579    fi
580    ;;
581dri)
582    # DRI must be shared, I think
583    if test "$enable_static" = yes; then
584        AC_MSG_ERROR([Can't use static libraries for DRI drivers])
585    fi
586
587    # Check for libdrm
588    PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED])
589    PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
590    PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
591    GL_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED glproto >= $GLPROTO_REQUIRED"
592    DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
593
594    # find the DRI deps for libGL
595    if test "$x11_pkgconfig" = yes; then
596        # add xcb modules if necessary
597        dri_modules="x11 xext xxf86vm xdamage xfixes"
598        if test "$enable_xcb" = yes; then
599            dri_modules="$dri_modules x11-xcb xcb-glx"
600        fi
601
602        PKG_CHECK_MODULES([DRIGL], [$dri_modules])
603        GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
604        X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
605        GL_LIB_DEPS="$DRIGL_LIBS"
606    else
607        # should check these...
608        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
609        GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
610        GL_PC_LIB_PRIV="$GL_LIB_DEPS"
611        GL_PC_CFLAGS="$X11_INCLUDES"
612
613        # XCB can only be used from pkg-config
614        if test "$enable_xcb" = yes; then
615            PKG_CHECK_MODULES([XCB],[x11-xcb xcb-glx])
616            GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV x11-xcb xcb-glx"
617            X11_INCLUDES="$X11_INCLUDES $XCB_CFLAGS"
618            GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
619        fi
620    fi
621
622    # need DRM libs, -lpthread, etc.
623    GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
624    GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS"
625    ;;
626osmesa)
627    # No libGL for osmesa
628    GL_LIB_DEPS=""
629    ;;
630esac
631AC_SUBST([GL_LIB_DEPS])
632AC_SUBST([GL_PC_REQ_PRIV])
633AC_SUBST([GL_PC_LIB_PRIV])
634AC_SUBST([GL_PC_CFLAGS])
635AC_SUBST([DRI_PC_REQ_PRIV])
636
637dnl
638dnl More X11 setup
639dnl
640if test "$mesa_driver" = xlib; then
641    DEFINES="$DEFINES -DUSE_XSHM"
642fi
643
644dnl
645dnl More DRI setup
646dnl
647AC_ARG_ENABLE([glx-tls],
648    [AS_HELP_STRING([--enable-glx-tls],
649        [enable TLS support in GLX @<:@default=disabled@:>@])],
650    [GLX_USE_TLS="$enableval"],
651    [GLX_USE_TLS=no])
652dnl Directory for DRI drivers
653AC_ARG_WITH([dri-driverdir],
654    [AS_HELP_STRING([--with-dri-driverdir=DIR],
655        [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
656    [DRI_DRIVER_INSTALL_DIR="$withval"],
657    [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
658AC_SUBST([DRI_DRIVER_INSTALL_DIR])
659dnl Extra search path for DRI drivers
660AC_ARG_WITH([dri-searchpath],
661    [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
662        [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
663    [DRI_DRIVER_SEARCH_DIR="$withval"],
664    [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
665AC_SUBST([DRI_DRIVER_SEARCH_DIR])
666dnl Direct rendering or just indirect rendering
667AC_ARG_ENABLE([driglx-direct],
668    [AS_HELP_STRING([--disable-driglx-direct],
669        [enable direct rendering in GLX for DRI @<:@default=enabled@:>@])],
670    [driglx_direct="$enableval"],
671    [driglx_direct="yes"])
672dnl Which drivers to build - default is chosen by platform
673AC_ARG_WITH([dri-drivers],
674    [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
675        [comma delimited DRI drivers list, e.g.
676        "swrast,i965,radeon" @<:@default=auto@:>@])],
677    [with_dri_drivers="$withval"],
678    [with_dri_drivers=yes])
679if test "x$with_dri_drivers" = x; then
680    with_dri_drivers=no
681fi
682
683dnl If $with_dri_drivers is yes, directories will be added through
684dnl platform checks
685DRI_DIRS=""
686case "$with_dri_drivers" in
687no) ;;
688yes)
689    DRI_DIRS="yes"
690    ;;
691*)
692    # verify the requested driver directories exist
693    dri_drivers=`IFS=', '; echo $with_dri_drivers`
694    for driver in $dri_drivers; do
695        test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
696            AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
697    done
698    DRI_DIRS="$dri_drivers"
699    ;;
700esac
701
702dnl Set DRI_DIRS, DEFINES and LIB_DEPS
703if test "$mesa_driver" = dri; then
704    # Use TLS in GLX?
705    if test "x$GLX_USE_TLS" = xyes; then
706        DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
707    fi
708
709    # Platform specific settings and drivers to build
710    case "$host_os" in
711    linux*)
712        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
713        if test "x$driglx_direct" = xyes; then
714            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
715        fi
716        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
717
718        case "$host_cpu" in
719        x86_64)
720            # ffb, gamma, and sis are missing because they have not be
721            # converted to use the new interface.  i810 are missing
722            # because there is no x86-64 system where they could *ever*
723            # be used.
724            if test "x$DRI_DIRS" = "xyes"; then
725                DRI_DIRS="i915 i965 mach64 mga r128 r200 r300 r600 radeon \
726                    savage tdfx unichrome swrast"
727            fi
728            ;;
729        powerpc*)
730            # Build only the drivers for cards that exist on PowerPC.
731            # At some point MGA will be added, but not yet.
732            if test "x$DRI_DIRS" = "xyes"; then
733                DRI_DIRS="mach64 r128 r200 r300 r600 radeon tdfx swrast"
734            fi
735            ;;
736        sparc*)
737            # Build only the drivers for cards that exist on sparc`
738            if test "x$DRI_DIRS" = "xyes"; then
739                DRI_DIRS="mach64 r128 r200 r300 r600 radeon ffb swrast"
740            fi
741            ;;
742        esac
743        ;;
744    freebsd* | dragonfly*)
745        DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
746        DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
747        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
748        if test "x$driglx_direct" = xyes; then
749            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
750        fi
751        if test "x$GXX" = xyes; then
752            CXXFLAGS="$CXXFLAGS -ansi -pedantic"
753        fi
754
755        # ffb and gamma are missing because they have not been converted
756        # to use the new interface.
757        if test "x$DRI_DIRS" = "xyes"; then
758            DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon tdfx \
759                unichrome savage sis swrast"
760        fi
761        ;;
762    gnu*)
763        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
764        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
765	;;
766    solaris*)
767        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
768        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
769        if test "x$driglx_direct" = xyes; then
770            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
771        fi
772        ;;
773    esac
774
775    # default drivers
776    if test "x$DRI_DIRS" = "xyes"; then
777        DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 r600 radeon \
778            savage sis tdfx unichrome ffb swrast"
779    fi
780
781    DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
782
783    # Check for expat
784    EXPAT_INCLUDES=""
785    EXPAT_LIB=-lexpat
786    AC_ARG_WITH([expat],
787        [AS_HELP_STRING([--with-expat=DIR],
788            [expat install directory])],[
789        EXPAT_INCLUDES="-I$withval/include"
790        CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
791        LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
792        EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
793        ])
794    AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
795    AC_CHECK_LIB([expat],[XML_ParserCreate],[],
796        [AC_MSG_ERROR([Expat required for DRI.])])
797
798    # put all the necessary libs together
799    DRI_LIB_DEPS="$SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
800fi
801AC_SUBST([DRI_DIRS])
802AC_SUBST([EXPAT_INCLUDES])
803AC_SUBST([DRI_LIB_DEPS])
804
805case $DRI_DIRS in
806*i915*|*i965*)
807    PKG_CHECK_MODULES([INTEL], [libdrm_intel])
808    ;;
809esac
810
811case $DRI_DIRS in
812*radeon*|*r200*|*r300*|*r600*)
813    PKG_CHECK_MODULES([LIBDRM_RADEON],
814		      [libdrm_radeon libdrm >= $LIBDRM_RADEON_REQUIRED],
815		      HAVE_LIBDRM_RADEON=yes,
816		      HAVE_LIBDRM_RADEON=no)
817
818    if test "$HAVE_LIBDRM_RADEON" = yes; then
819	RADEON_CFLAGS="-DHAVE_LIBDRM_RADEON=1 $LIBDRM_RADEON_CFLAGS"
820	RADEON_LDFLAGS=$LIBDRM_RADEON_LIBS
821    fi
822    ;;
823esac
824AC_SUBST([RADEON_CFLAGS])
825AC_SUBST([RADEON_LDFLAGS])
826
827
828dnl
829dnl OSMesa configuration
830dnl
831if test "$mesa_driver" = xlib; then
832    default_gl_osmesa=yes
833else
834    default_gl_osmesa=no
835fi
836AC_ARG_ENABLE([gl-osmesa],
837    [AS_HELP_STRING([--enable-gl-osmesa],
838        [enable OSMesa on libGL @<:@default=enabled for xlib driver@:>@])],
839    [gl_osmesa="$enableval"],
840    [gl_osmesa="$default_gl_osmesa"])
841if test "x$gl_osmesa" = xyes; then
842    if test "$mesa_driver" = osmesa; then
843        AC_MSG_ERROR([libGL is not available for OSMesa driver])
844    else
845        DRIVER_DIRS="$DRIVER_DIRS osmesa"
846    fi
847fi
848
849dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
850AC_ARG_WITH([osmesa-bits],
851    [AS_HELP_STRING([--with-osmesa-bits=BITS],
852        [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
853    [osmesa_bits="$withval"],
854    [osmesa_bits=8])
855if test "$mesa_driver" != osmesa && test "x$osmesa_bits" != x8; then
856    AC_MSG_WARN([Ignoring OSMesa channel bits for non-OSMesa driver])
857    osmesa_bits=8
858fi
859case "x$osmesa_bits" in
860x8)
861    OSMESA_LIB=OSMesa
862    ;;
863x16|x32)
864    OSMESA_LIB="OSMesa$osmesa_bits"
865    DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
866    ;;
867*)
868    AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
869    ;;
870esac
871AC_SUBST([OSMESA_LIB])
872
873case "$mesa_driver" in
874osmesa)
875    # only link libraries with osmesa if shared
876    if test "$enable_static" = no; then
877        OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
878    else
879        OSMESA_LIB_DEPS=""
880    fi
881    OSMESA_MESA_DEPS=""
882    OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS"
883    ;;
884*)
885    # Link OSMesa to libGL otherwise
886    OSMESA_LIB_DEPS=""
887    # only link libraries with osmesa if shared
888    if test "$enable_static" = no; then
889        OSMESA_MESA_DEPS='-l$(GL_LIB)'
890    else
891        OSMESA_MESA_DEPS=""
892    fi
893    OSMESA_PC_REQ="gl"
894    ;;
895esac
896OSMESA_PC_LIB_PRIV="$OSMESA_PC_LIB_PRIV"
897AC_SUBST([OSMESA_LIB_DEPS])
898AC_SUBST([OSMESA_MESA_DEPS])
899AC_SUBST([OSMESA_PC_REQ])
900AC_SUBST([OSMESA_PC_LIB_PRIV])
901
902dnl
903dnl EGL configuration
904dnl
905AC_ARG_ENABLE([egl],
906    [AS_HELP_STRING([--disable-egl],
907        [disable EGL library @<:@default=enabled@:>@])],
908    [enable_egl="$enableval"],
909    [enable_egl=yes])
910if test "x$enable_egl" = xyes; then
911    SRC_DIRS="$SRC_DIRS egl"
912    EGL_LIB_DEPS="$DLOPEN_LIBS -lpthread"
913    EGL_DRIVERS_DIRS=""
914    if test "$enable_static" != yes && test "$mesa_driver" != osmesa; then
915        # build egl_glx when libGL is built
916        EGL_DRIVERS_DIRS="glx"
917    fi
918fi
919AC_SUBST([EGL_LIB_DEPS])
920AC_SUBST([EGL_DRIVERS_DIRS])
921
922dnl
923dnl GLU configuration
924dnl
925AC_ARG_ENABLE([glu],
926    [AS_HELP_STRING([--disable-glu],
927        [enable OpenGL Utility library @<:@default=enabled@:>@])],
928    [enable_glu="$enableval"],
929    [enable_glu=yes])
930if test "x$enable_glu" = xyes; then
931    SRC_DIRS="$SRC_DIRS glu"
932
933    case "$mesa_driver" in
934    osmesa)
935        # If GLU is available and we have libOSMesa (not 16 or 32),
936        # we can build the osdemos
937        if test "$with_demos" = yes && test "$osmesa_bits" = 8; then
938            PROGRAM_DIRS="$PROGRAM_DIRS osdemos"
939        fi
940
941        # Link libGLU to libOSMesa instead of libGL
942        GLU_LIB_DEPS=""
943        GLU_PC_REQ="osmesa"
944        if test "$enable_static" = no; then
945            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
946        else
947            GLU_MESA_DEPS=""
948        fi
949        ;;
950    *)
951        # If static, empty GLU_LIB_DEPS and add libs for programs to link
952        GLU_PC_REQ="gl"
953        GLU_PC_LIB_PRIV="-lm"
954        if test "$enable_static" = no; then
955            GLU_LIB_DEPS="-lm"
956            GLU_MESA_DEPS='-l$(GL_LIB)'
957        else
958            GLU_LIB_DEPS=""
959            GLU_MESA_DEPS=""
960            APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++"
961        fi
962        ;;
963    esac
964fi
965if test "$enable_static" = no; then
966    GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS"
967fi
968GLU_PC_LIB_PRIV="$GLU_PC_LIB_PRIV $OS_CPLUSPLUS_LIBS"
969AC_SUBST([GLU_LIB_DEPS])
970AC_SUBST([GLU_MESA_DEPS])
971AC_SUBST([GLU_PC_REQ])
972AC_SUBST([GLU_PC_REQ_PRIV])
973AC_SUBST([GLU_PC_LIB_PRIV])
974AC_SUBST([GLU_PC_CFLAGS])
975
976dnl
977dnl GLw configuration
978dnl
979AC_ARG_ENABLE([glw],
980    [AS_HELP_STRING([--disable-glw],
981        [enable Xt/Motif widget library @<:@default=enabled@:>@])],
982    [enable_glw="$enableval"],
983    [enable_glw=yes])
984dnl Don't build GLw on osmesa
985if test "x$enable_glw" = xyes && test "$mesa_driver" = osmesa; then
986    AC_MSG_WARN([Disabling GLw since the driver is OSMesa])
987    enable_glw=no
988fi
989AC_ARG_ENABLE([motif],
990    [AS_HELP_STRING([--enable-motif],
991        [use Motif widgets in GLw @<:@default=disabled@:>@])],
992    [enable_motif="$enableval"],
993    [enable_motif=no])
994
995if test "x$enable_glw" = xyes; then
996    SRC_DIRS="$SRC_DIRS glw"
997    if test "$x11_pkgconfig" = yes; then
998        PKG_CHECK_MODULES([GLW],[x11 xt])
999        GLW_PC_REQ_PRIV="x11 xt"
1000        GLW_LIB_DEPS="$GLW_LIBS"
1001    else
1002        # should check these...
1003        GLW_LIB_DEPS="$X_LIBS -lXt -lX11"
1004        GLW_PC_LIB_PRIV="$GLW_LIB_DEPS"
1005        GLW_PC_CFLAGS="$X11_INCLUDES"
1006    fi
1007
1008    GLW_SOURCES="GLwDrawA.c"
1009    MOTIF_CFLAGS=
1010    if test "x$enable_motif" = xyes; then
1011        GLW_SOURCES="$GLW_SOURCES GLwMDrawA.c"
1012        AC_PATH_PROG([MOTIF_CONFIG], [motif-config], [no])
1013        if test "x$MOTIF_CONFIG" != xno; then
1014            MOTIF_CFLAGS=`$MOTIF_CONFIG --cflags`
1015            MOTIF_LIBS=`$MOTIF_CONFIG --libs`
1016        else
1017            AC_CHECK_HEADER([Xm/PrimitiveP.h], [],
1018                [AC_MSG_ERROR([Can't locate Motif headers])])
1019            AC_CHECK_LIB([Xm], [XmGetPixmap], [MOTIF_LIBS="-lXm"],
1020                [AC_MSG_ERROR([Can't locate Motif Xm library])])
1021        fi
1022        # MOTIF_LIBS is prepended to GLW_LIB_DEPS since Xm needs Xt/X11
1023        GLW_LIB_DEPS="$MOTIF_LIBS $GLW_LIB_DEPS"
1024        GLW_PC_LIB_PRIV="$MOTIF_LIBS $GLW_PC_LIB_PRIV"
1025        GLW_PC_CFLAGS="$MOTIF_CFLAGS $GLW_PC_CFLAGS"
1026    fi
1027
1028    # If static, empty GLW_LIB_DEPS and add libs for programs to link
1029    GLW_PC_LIB_PRIV="$GLW_PC_LIB_PRIV"
1030    if test "$enable_static" = no; then
1031        GLW_MESA_DEPS='-l$(GL_LIB)'
1032        GLW_LIB_DEPS="$GLW_LIB_DEPS"
1033    else
1034        APP_LIB_DEPS="$APP_LIB_DEPS $GLW_LIB_DEPS"
1035        GLW_LIB_DEPS=""
1036        GLW_MESA_DEPS=""
1037    fi
1038fi
1039AC_SUBST([GLW_LIB_DEPS])
1040AC_SUBST([GLW_MESA_DEPS])
1041AC_SUBST([GLW_SOURCES])
1042AC_SUBST([MOTIF_CFLAGS])
1043AC_SUBST([GLW_PC_REQ_PRIV])
1044AC_SUBST([GLW_PC_LIB_PRIV])
1045AC_SUBST([GLW_PC_CFLAGS])
1046
1047dnl
1048dnl GLUT configuration
1049dnl
1050if test -f "$srcdir/include/GL/glut.h"; then
1051    default_glut=yes
1052else
1053    default_glut=no
1054fi
1055AC_ARG_ENABLE([glut],
1056    [AS_HELP_STRING([--disable-glut],
1057        [enable GLUT library @<:@default=enabled if source available@:>@])],
1058    [enable_glut="$enableval"],
1059    [enable_glut="$default_glut"])
1060
1061dnl Can't build glut if GLU not available
1062if test "x$enable_glu$enable_glut" = xnoyes; then
1063    AC_MSG_WARN([Disabling glut since GLU is disabled])
1064    enable_glut=no
1065fi
1066dnl Don't build glut on osmesa
1067if test "x$enable_glut" = xyes && test "$mesa_driver" = osmesa; then
1068    AC_MSG_WARN([Disabling glut since the driver is OSMesa])
1069    enable_glut=no
1070fi
1071
1072if test "x$enable_glut" = xyes; then
1073    SRC_DIRS="$SRC_DIRS glut/glx"
1074    GLUT_CFLAGS=""
1075    if test "x$GCC" = xyes; then
1076        GLUT_CFLAGS="-fexceptions"
1077    fi
1078    if test "$x11_pkgconfig" = yes; then
1079        PKG_CHECK_MODULES([GLUT],[x11 xmu xi])
1080        GLUT_PC_REQ_PRIV="x11 xmu xi"
1081        GLUT_LIB_DEPS="$GLUT_LIBS"
1082    else
1083        # should check these...
1084        GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXi"
1085        GLUT_PC_LIB_PRIV="$GLUT_LIB_DEPS"
1086        GLUT_PC_CFLAGS="$X11_INCLUDES"
1087    fi
1088    GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
1089    GLUT_PC_LIB_PRIV="$GLUT_PC_LIB_PRIV -lm"
1090
1091    # If glut is available, we can build most programs
1092    if test "$with_demos" = yes; then
1093        PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
1094    fi
1095
1096    # If static, empty GLUT_LIB_DEPS and add libs for programs to link
1097    if test "$enable_static" = no; then
1098        GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
1099    else
1100        APP_LIB_DEPS="$APP_LIB_DEPS $GLUT_LIB_DEPS"
1101        GLUT_LIB_DEPS=""
1102        GLUT_MESA_DEPS=""
1103    fi
1104fi
1105AC_SUBST([GLUT_LIB_DEPS])
1106AC_SUBST([GLUT_MESA_DEPS])
1107AC_SUBST([GLUT_CFLAGS])
1108AC_SUBST([GLUT_PC_REQ_PRIV])
1109AC_SUBST([GLUT_PC_LIB_PRIV])
1110AC_SUBST([GLUT_PC_CFLAGS])
1111
1112dnl
1113dnl Program library dependencies
1114dnl    Only libm is added here if necessary as the libraries should
1115dnl    be pulled in by the linker
1116dnl
1117if test "x$APP_LIB_DEPS" = x; then
1118    case "$host_os" in
1119    solaris*)
1120        APP_LIB_DEPS="-lX11 -lsocket -lnsl -lm"
1121        ;;
1122    cygwin*)
1123        APP_LIB_DEPS="-lX11"
1124        ;;
1125    *)
1126        APP_LIB_DEPS="-lm"
1127        ;;
1128    esac
1129fi
1130AC_SUBST([APP_LIB_DEPS])
1131AC_SUBST([PROGRAM_DIRS])
1132
1133dnl
1134dnl Gallium configuration
1135dnl
1136AC_ARG_ENABLE([gallium],
1137    [AS_HELP_STRING([--disable-gallium],
1138        [build gallium @<:@default=enabled@:>@])],
1139    [enable_gallium="$enableval"],
1140    [enable_gallium=yes])
1141if test "x$enable_gallium" = xyes; then
1142    SRC_DIRS="$SRC_DIRS gallium gallium/winsys"
1143fi
1144
1145dnl
1146dnl Gallium state trackers configuration
1147dnl
1148AC_ARG_WITH([state-trackers],
1149    [AS_HELP_STRING([--with-state-trackers@<:@=DIRS...@:>@],
1150        [comma delimited state_trackers list, e.g.
1151        "egl,glx" @<:@default=auto@:>@])],
1152    [with_state_trackers="$withval"],
1153    [with_state_trackers=yes])
1154
1155case "$with_state_trackers" in
1156no)
1157    GALLIUM_STATE_TRACKERS_DIRS=""
1158    ;;
1159yes)
1160    # look at what else is built
1161    case "$mesa_driver" in
1162    xlib)
1163        GALLIUM_STATE_TRACKERS_DIRS=glx
1164        ;;
1165    dri)
1166        GALLIUM_STATE_TRACKERS_DIRS="dri"
1167        if test "x$enable_egl" = xyes; then
1168            GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS egl_g3d"
1169        fi
1170        # Have only tested st/xorg on 1.6.0 servers
1171        PKG_CHECK_MODULES(XORG, [xorg-server >= 1.6.0],
1172            HAVE_XORG="yes"; GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg",
1173            HAVE_XORG="no")
1174        ;;
1175    esac
1176    ;;
1177*)
1178    # verify the requested state tracker exist
1179    state_trackers=`IFS=', '; echo $with_state_trackers`
1180    for tracker in $state_trackers; do
1181        test -d "$srcdir/src/gallium/state_trackers/$tracker" || \
1182            AC_MSG_ERROR([state tracker '$tracker' doesn't exist])
1183
1184        case "$tracker" in
1185        egl_g3d)
1186            if test "x$enable_egl" != xyes; then
1187                AC_MSG_ERROR([cannot build egl_g3d state tracker without EGL library])
1188            fi
1189            ;;
1190        xorg)
1191	    PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
1192                  HAVE_XEXTPROTO_71="yes"; DEFINES="$DEFINES -DHAVE_XEXTPROTO_71",
1193                  HAVE_XEXTPROTO_71="no")
1194            ;;
1195        es)
1196            # mesa/es is required to build es state tracker
1197            CORE_DIRS="$CORE_DIRS mesa/es"
1198            ;;
1199        esac
1200    done
1201    GALLIUM_STATE_TRACKERS_DIRS="$state_trackers"
1202    ;;
1203esac
1204
1205AC_ARG_WITH([egl-displays],
1206    [AS_HELP_STRING([--with-egl-displays@<:@=DIRS...@:>@],
1207        [comma delimited native displays libEGL supports, e.g.
1208        "x11,kms" @<:@default=auto@:>@])],
1209    [with_egl_displays="$withval"],
1210    [with_egl_displays=yes])
1211
1212EGL_DISPLAYS=""
1213case "$with_egl_displays" in
1214yes)
1215    if test "x$enable_egl" = xyes && test "x$mesa_driver" != xosmesa; then
1216        EGL_DISPLAYS="x11"
1217    fi
1218    ;;
1219*)
1220    if test "x$enable_egl" != xyes; then
1221        AC_MSG_ERROR([cannot build egl state tracker without EGL library])
1222    fi
1223    # verify the requested driver directories exist
1224    egl_displays=`IFS=', '; echo $with_egl_displays`
1225    for dpy in $egl_displays; do
1226        test -d "$srcdir/src/gallium/state_trackers/egl_g3d/$dpy" || \
1227            AC_MSG_ERROR([EGL display '$dpy' does't exist])
1228    done
1229    EGL_DISPLAYS="$egl_displays"
1230    ;;
1231esac
1232AC_SUBST([EGL_DISPLAYS])
1233
1234AC_ARG_WITH([xorg-driver-dir],
1235    [AS_HELP_STRING([--with-xorg-driver-dir=DIR],
1236                    [Default xorg driver directory[[default=${libdir}/xorg/modules/drivers]]])],
1237    [XORG_DRIVER_INSTALL_DIR="$withval"],
1238    [XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
1239AC_SUBST([XORG_DRIVER_INSTALL_DIR])
1240
1241AC_ARG_WITH([max-width],
1242    [AS_HELP_STRING([--with-max-width=N],
1243                    [Maximum framebuffer width (4096)])],
1244    [DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
1245     AS_IF([test "${withval}" -gt "4096"],
1246           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1247)
1248AC_ARG_WITH([max-height],
1249    [AS_HELP_STRING([--with-max-height=N],
1250                    [Maximum framebuffer height (4096)])],
1251    [DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
1252     AS_IF([test "${withval}" -gt "4096"],
1253           [AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
1254)
1255
1256dnl
1257dnl Gallium SVGA configuration
1258dnl
1259AC_ARG_ENABLE([gallium-svga],
1260    [AS_HELP_STRING([--enable-gallium-svga],
1261        [build gallium SVGA @<:@default=disabled@:>@])],
1262    [enable_gallium_svga="$enableval"],
1263    [enable_gallium_svga=auto])
1264if test "x$enable_gallium_svga" = xyes; then
1265    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS vmware"
1266    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga"
1267elif test "x$enable_gallium_svga" = xauto; then
1268    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS svga"
1269fi
1270
1271dnl
1272dnl Gallium Intel configuration
1273dnl
1274AC_ARG_ENABLE([gallium-intel],
1275    [AS_HELP_STRING([--enable-gallium-intel],
1276        [build gallium intel @<:@default=disabled@:>@])],
1277    [enable_gallium_intel="$enableval"],
1278    [enable_gallium_intel=auto])
1279if test "x$enable_gallium_intel" = xyes; then
1280    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS intel i965"
1281    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 i965"
1282elif test "x$enable_gallium_intel" = xauto; then
1283    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS i915 i965"
1284fi
1285
1286dnl
1287dnl Gallium Radeon configuration
1288dnl
1289AC_ARG_ENABLE([gallium-radeon],
1290    [AS_HELP_STRING([--enable-gallium-radeon],
1291        [build gallium radeon @<:@default=disabled@:>@])],
1292    [enable_gallium_radeon="$enableval"],
1293    [enable_gallium_radeon=auto])
1294if test "x$enable_gallium_radeon" = xyes; then
1295    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS radeon"
1296    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
1297elif test "x$enable_gallium_radeon" = xauto; then
1298    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS r300"
1299fi
1300
1301dnl
1302dnl Gallium Nouveau configuration
1303dnl
1304AC_ARG_ENABLE([gallium-nouveau],
1305    [AS_HELP_STRING([--enable-gallium-nouveau],
1306        [build gallium nouveau @<:@default=disabled@:>@])],
1307    [enable_gallium_nouveau="$enableval"],
1308    [enable_gallium_nouveau=no])
1309if test "x$enable_gallium_nouveau" = xyes; then
1310    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS nouveau"
1311    GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau nv04 nv10 nv20 nv30 nv40 nv50"
1312fi
1313
1314dnl
1315dnl Gallium swrast configuration
1316dnl
1317AC_ARG_ENABLE([gallium-swrast],
1318    [AS_HELP_STRING([--enable-gallium-swrast],
1319        [build gallium swrast @<:@default=disabled@:>@])],
1320    [enable_gallium_swrast="$enableval"],
1321    [enable_gallium_swrast=auto])
1322if test "x$enable_gallium_swrast" = xyes; then
1323    GALLIUM_WINSYS_DRM_DIRS="$GALLIUM_WINSYS_DRM_DIRS swrast"
1324fi
1325
1326dnl prepend CORE_DIRS to SRC_DIRS
1327SRC_DIRS="$CORE_DIRS $SRC_DIRS"
1328
1329dnl Restore LDFLAGS and CPPFLAGS
1330LDFLAGS="$_SAVE_LDFLAGS"
1331CPPFLAGS="$_SAVE_CPPFLAGS"
1332
1333dnl Substitute the config
1334AC_CONFIG_FILES([configs/autoconf])
1335
1336dnl Replace the configs/current symlink
1337AC_CONFIG_COMMANDS([configs],[
1338if test -f configs/current || test -L configs/current; then
1339    rm -f configs/current
1340fi
1341ln -s autoconf configs/current
1342])
1343
1344AC_OUTPUT
1345
1346dnl
1347dnl Output some configuration info for the user
1348dnl
1349echo ""
1350echo "        prefix:          $prefix"
1351echo "        exec_prefix:     $exec_prefix"
1352echo "        libdir:          $libdir"
1353echo "        includedir:      $includedir"
1354
1355dnl Driver info
1356echo ""
1357echo "        Driver:          $mesa_driver"
1358if echo "$DRIVER_DIRS" | grep 'osmesa' >/dev/null 2>&1; then
1359    echo "        OSMesa:          lib$OSMESA_LIB"
1360else
1361    echo "        OSMesa:          no"
1362fi
1363if test "$mesa_driver" = dri; then
1364    # cleanup the drivers var
1365    dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1366if test "x$DRI_DIRS" = x; then
1367    echo "        DRI drivers:     no"
1368else
1369    echo "        DRI drivers:     $dri_dirs"
1370fi
1371    echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
1372fi
1373echo "        Use XCB:         $enable_xcb"
1374
1375echo ""
1376if echo "$SRC_DIRS" | grep 'gallium' >/dev/null 2>&1; then
1377    echo "        Gallium:         yes"
1378    echo "        Gallium dirs:    $GALLIUM_DIRS"
1379    echo "        Winsys dirs:     $GALLIUM_WINSYS_DIRS"
1380    echo "        Winsys drm dirs:$GALLIUM_WINSYS_DRM_DIRS"
1381    echo "        Driver dirs:     $GALLIUM_DRIVERS_DIRS"
1382    echo "        Trackers dirs:   $GALLIUM_STATE_TRACKERS_DIRS"
1383else
1384    echo "        Gallium:         no"
1385fi
1386
1387dnl Libraries
1388echo ""
1389echo "        Shared libs:     $enable_shared"
1390echo "        Static libs:     $enable_static"
1391echo "        EGL:             $enable_egl"
1392echo "        GLU:             $enable_glu"
1393echo "        GLw:             $enable_glw (Motif: $enable_motif)"
1394echo "        glut:            $enable_glut"
1395
1396dnl Programs
1397# cleanup the programs var for display
1398program_dirs=`echo $PROGRAM_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1399if test "x$program_dirs" = x; then
1400    echo "        Demos:           no"
1401else
1402    echo "        Demos:           $program_dirs"
1403fi
1404
1405dnl Compiler options
1406# cleanup the CFLAGS/CXXFLAGS/DEFINES vars
1407cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
1408    $SED 's/^ *//;s/  */ /;s/ *$//'`
1409cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
1410    $SED 's/^ *//;s/  */ /;s/ *$//'`
1411defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
1412echo ""
1413echo "        CFLAGS:          $cflags"
1414echo "        CXXFLAGS:        $cxxflags"
1415echo "        Macros:          $defines"
1416
1417echo ""
1418echo "        Run '${MAKE-make}' to build Mesa"
1419echo ""
1420