configure.ac revision 871125a68d11c26efdfa930cf29cdeb8dcc169a5
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_errprint([Error: Failed to get the Mesa version from the output of
10       running `make -f bin/version.mk version'
11])
12    m4_exit([1])
13])
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.3.1
22DRI2PROTO_REQUIRED=1.1
23
24dnl Check for progs
25AC_PROG_CPP
26AC_PROG_CC
27AC_PROG_CXX
28AC_CHECK_PROGS([MAKE], [gmake make])
29AC_PATH_PROG([MKDEP], [makedepend])
30AC_PATH_PROG([SED], [sed])
31
32MKDEP_OPTIONS=-fdepend
33dnl Ask gcc where it's keeping its secret headers
34if test "x$GCC" = xyes; then
35    GCC_INCLUDES=`$CC -print-file-name=include`
36    if test "x$GCC_INCLUDES" != x; then
37        MKDEP_OPTIONS="$MKDEP_OPTIONS -I$GCC_INCLUDES"
38    fi
39fi
40AC_SUBST([MKDEP_OPTIONS])
41
42dnl Make sure the pkg-config macros are defined
43m4_ifdef([PKG_PROG_PKG_CONFIG],[],[
44    m4_errprint([Error: Could not locate the pkg-config autoconf macros.
45       These are usually located in /usr/share/aclocal/pkg.m4. If your
46       macros are in a different location, try setting the environment
47       variable ACLOCAL="aclocal -I/other/macro/dir" before running
48       autoreconf.
49])
50    m4_exit([1])
51])
52PKG_PROG_PKG_CONFIG()
53
54dnl LIB_DIR - library basename
55LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
56AC_SUBST([LIB_DIR])
57
58dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
59_SAVE_LDFLAGS="$LDFLAGS"
60AC_ARG_VAR([EXTRA_LIB_PATH],[Extra -L paths for the linker])
61AC_SUBST([EXTRA_LIB_PATH])
62
63dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
64_SAVE_CPPFLAGS="$CPPFLAGS"
65AC_ARG_VAR([X11_INCLUDES],[Extra -I paths for X11 headers])
66AC_SUBST([X11_INCLUDES])
67
68dnl Compiler macros
69DEFINES=""
70AC_SUBST([DEFINES])
71case "$host_os" in
72linux*)
73if test "x$GCC" = xyes; then
74    DEFINES="$DEFINES -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE"
75fi
76    DEFINES="$DEFINES -D_SVID_SOURCE -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN"
77    ;;
78esac
79
80dnl Add flags for gcc and g++
81if test "x$GCC" = xyes; then
82    CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -std=c99 -ffast-math"
83
84    # Work around aliasing bugs - developers should comment this out
85    CFLAGS="$CFLAGS -fno-strict-aliasing"
86fi
87if test "x$GXX" = xyes; then
88    CXXFLAGS="$CXXFLAGS -Wall"
89
90    # Work around aliasing bugs - developers should comment this out
91    CXXFLAGS="$CXXFLAGS -fno-strict-aliasing"
92fi
93
94dnl These should be unnecessary, but let the user set them if they want
95AC_ARG_VAR([OPT_FLAGS], [Additional optimization flags for the compiler.
96    Default is to use CFLAGS.])
97AC_ARG_VAR([ARCH_FLAGS], [Additional architecture specific flags for the
98    compiler. Default is to use CFLAGS.])
99AC_SUBST([OPT_FLAGS])
100AC_SUBST([ARCH_FLAGS])
101
102dnl
103dnl Hacks to enable 32 or 64 bit build
104dnl
105AC_ARG_ENABLE([32-bit],
106    [AS_HELP_STRING([--enable-32-bit],
107        [build 32-bit libraries @<:@default=auto@:>@])],
108    [enable_32bit="$enableval"],
109    [enable_32bit=auto]
110)
111if test "x$enable_32bit" = xyes; then
112    if test "x$GCC" = xyes; then
113        CFLAGS="$CFLAGS -m32"
114    fi
115    if test "x$GXX" = xyes; then
116        CXXFLAGS="$CXXFLAGS -m32"
117    fi
118fi
119AC_ARG_ENABLE([64-bit],
120    [AS_HELP_STRING([--enable-64-bit],
121        [build 64-bit libraries @<:@default=auto@:>@])],
122    [enable_64bit="$enableval"],
123    [enable_64bit=auto]
124)
125if test "x$enable_64bit" = xyes; then
126    if test "x$GCC" = xyes; then
127        CFLAGS="$CFLAGS -m64"
128    fi
129    if test "x$GXX" = xyes; then
130        CXXFLAGS="$CXXFLAGS -m64"
131    fi
132fi
133
134dnl
135dnl shared/static libraries, mimic libtool options
136dnl
137AC_ARG_ENABLE([static],
138    [AS_HELP_STRING([--enable-static],
139        [build static libraries @<:@default=disabled@:>@])],
140    [enable_static="$enableval"],
141    [enable_static=no]
142)
143case "x$enable_static" in
144xyes|xno ) ;;
145x ) enable_static=no ;;
146* )
147    AC_MSG_ERROR([Static library option '$enable_static' is not a valid])
148    ;;
149esac
150AC_ARG_ENABLE([shared],
151    [AS_HELP_STRING([--disable-shared],
152        [build shared libraries @<:@default=enabled@:>@])],
153    [enable_shared="$enableval"],
154    [enable_shared=yes]
155)
156case "x$enable_shared" in
157xyes|xno ) ;;
158x ) enable_shared=yes ;;
159* )
160    AC_MSG_ERROR([Shared library option '$enable_shared' is not a valid])
161    ;;
162esac
163
164dnl Can't have static and shared libraries, default to static if user
165dnl explicitly requested. If both disabled, set to static since shared
166dnl was explicitly requirested.
167case "x$enable_static$enable_shared" in
168xyesyes )
169    AC_MSG_WARN([Can't build static and shared libraries, disabling shared])
170    enable_shared=no
171    ;;
172xnono )
173    AC_MSG_WARN([Can't disable both static and shared libraries, enabling static])
174    enable_static=yes
175    ;;
176esac
177
178dnl
179dnl mklib options
180dnl
181AC_ARG_VAR([MKLIB_OPTIONS],[Options for the Mesa library script, mklib])
182if test "$enable_static" = yes; then
183    MKLIB_OPTIONS="$MKLIB_OPTIONS -static"
184fi
185AC_SUBST([MKLIB_OPTIONS])
186
187dnl
188dnl other compiler options
189dnl
190AC_ARG_ENABLE([debug],
191    [AS_HELP_STRING([--enable-debug],
192        [use debug compiler flags and macros @<:@default=disabled@:>@])],
193    [enable_debug="$enableval"],
194    [enable_debug=no]
195)
196if test "x$enable_debug" = xyes; then
197    DEFINES="$DEFINES -DDEBUG"
198    if test "x$GCC" = xyes; then
199        CFLAGS="$CFLAGS -g"
200    fi
201    if test "x$GXX" = xyes; then
202        CXXFLAGS="$CXXFLAGS -g"
203    fi
204fi
205
206dnl
207dnl library names
208dnl
209if test "$enable_static" = yes; then
210    GL_LIB_NAME='lib$(GL_LIB).a'
211    GLU_LIB_NAME='lib$(GLU_LIB).a'
212    GLUT_LIB_NAME='lib$(GLUT_LIB).a'
213    GLW_LIB_NAME='lib$(GLW_LIB).a'
214    OSMESA_LIB_NAME='lib$(OSMESA_LIB).a'
215else
216    GL_LIB_NAME='lib$(GL_LIB).so'
217    GLU_LIB_NAME='lib$(GLU_LIB).so'
218    GLUT_LIB_NAME='lib$(GLUT_LIB).so'
219    GLW_LIB_NAME='lib$(GLW_LIB).so'
220    OSMESA_LIB_NAME='lib$(OSMESA_LIB).so'
221fi
222AC_SUBST([GL_LIB_NAME])
223AC_SUBST([GLU_LIB_NAME])
224AC_SUBST([GLUT_LIB_NAME])
225AC_SUBST([GLW_LIB_NAME])
226AC_SUBST([OSMESA_LIB_NAME])
227
228dnl
229dnl Arch/platform-specific settings
230dnl
231AC_ARG_ENABLE([asm],
232    [AS_HELP_STRING([--disable-asm],
233        [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
234    [enable_asm="$enableval"],
235    [enable_asm=yes]
236)
237asm_arch=""
238ASM_FLAGS=""
239ASM_SOURCES=""
240ASM_API=""
241AC_MSG_CHECKING([whether to enable assembly])
242test "x$enable_asm" = xno && AC_MSG_RESULT([no])
243# disable if cross compiling on x86/x86_64 since we must run gen_matypes
244if test "x$enable_asm" = xyes && test "x$cross_compiling" = xyes; then
245    case "$host_cpu" in
246    i?86 | x86_64)
247        enable_asm=no
248        AC_MSG_RESULT([no, cross compiling])
249        ;;
250    esac
251fi
252# check for supported arches
253if test "x$enable_asm" = xyes; then
254    case "$host_cpu" in
255    i?86)
256        case "$host_os" in
257        linux* | freebsd* | dragonfly*)
258            test "x$enable_64bit" = xyes && asm_arch=x86_64 || asm_arch=x86
259            ;;
260        esac
261        ;;
262    x86_64)
263        case "$host_os" in
264        linux* | freebsd* | dragonfly*)
265            test "x$enable_32bit" = xyes && asm_arch=x86 || asm_arch=x86_64
266            ;;
267        esac
268        ;;
269    powerpc)
270        case "$host_os" in
271        linux*)
272            asm_arch=ppc
273            ;;
274        esac
275        ;;
276    esac
277
278    case "$asm_arch" in
279    x86)
280        ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
281        ASM_SOURCES='$(X86_SOURCES)'
282        ASM_API='$(X86_API)'
283        AC_MSG_RESULT([yes, x86])
284        ;;
285    x86_64)
286        ASM_FLAGS="-DUSE_X86_64_ASM"
287        ASM_SOURCES='$(X86-64_SOURCES)'
288        ASM_API='$(X86-64_API)'
289        AC_MSG_RESULT([yes, x86_64])
290        ;;
291    ppc)
292        ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
293        ASM_SOURCES='$(PPC_SOURCES)'
294        AC_MSG_RESULT([yes, ppc])
295        ;;
296    *)
297        AC_MSG_RESULT([no, platform not supported])
298        ;;
299    esac
300fi
301AC_SUBST([ASM_FLAGS])
302AC_SUBST([ASM_SOURCES])
303AC_SUBST([ASM_API])
304
305dnl PIC code macro
306MESA_PIC_FLAGS
307
308dnl Check to see if dlopen is in default libraries (like Solaris, which
309dnl has it in libc), or if libdl is needed to get it.
310AC_CHECK_FUNC([dlopen], [],
311    [AC_CHECK_LIB([dl], [dlopen], [DLOPEN_LIBS="-ldl"])])
312
313dnl SELinux awareness.
314AC_ARG_ENABLE([selinux],
315    [AS_HELP_STRING([--enable-selinux],
316        [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
317    [MESA_SELINUX="$enableval"],
318    [MESA_SELINUX=no])
319if test "x$enable_selinux" = "xyes"; then
320    AC_CHECK_HEADER([selinux/selinux.h],[],
321                    [AC_MSG_ERROR([SELinux headers not found])])
322    AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
323                 [AC_MSG_ERROR([SELinux library not found])])
324    SELINUX_LIBS="-lselinux"
325    DEFINES="$DEFINES -DMESA_SELINUX"
326fi
327
328
329dnl
330dnl Driver configuration. Options are xlib, dri and osmesa right now.
331dnl More later: directfb, fbdev, ...
332dnl
333default_driver="xlib"
334
335case "$host_os" in
336linux*)
337    case "$host_cpu" in
338    i*86|x86_64|powerpc*) default_driver="dri";;
339    esac
340    ;;
341freebsd* | dragonfly*)
342    case "$host_cpu" in
343    i*86|x86_64) default_driver="dri";;
344    esac
345    ;;
346esac
347
348AC_ARG_WITH([driver],
349    [AS_HELP_STRING([--with-driver=DRIVER],
350        [driver for Mesa: xlib,dri,osmesa @<:@default=dri when available, or xlib@:>@])],
351    [mesa_driver="$withval"],
352    [mesa_driver="$default_driver"])
353dnl Check for valid option
354case "x$mesa_driver" in
355xxlib|xdri|xosmesa)
356    ;;
357*)
358    AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
359    ;;
360esac
361
362dnl
363dnl Driver specific build directories
364dnl
365SRC_DIRS="mesa"
366GLU_DIRS="sgi"
367WINDOW_SYSTEM=""
368case "$mesa_driver" in
369xlib)
370    DRIVER_DIRS="x11"
371    ;;
372dri)
373    SRC_DIRS="glx/x11 $SRC_DIRS"
374    DRIVER_DIRS="dri"
375    WINDOW_SYSTEM="dri"
376    ;;
377osmesa)
378    DRIVER_DIRS="osmesa"
379    ;;
380esac
381AC_SUBST([SRC_DIRS])
382AC_SUBST([GLU_DIRS])
383AC_SUBST([DRIVER_DIRS])
384AC_SUBST([WINDOW_SYSTEM])
385
386dnl
387dnl User supplied program configuration
388dnl
389if test -d "$srcdir/progs/demos"; then
390    default_demos=yes
391else
392    default_demos=no
393fi
394AC_ARG_WITH([demos],
395    [AS_HELP_STRING([--with-demos@<:@=DIRS...@:>@],
396        [optional comma delimited demo directories to build
397        @<:@default=auto if source available@:>@])],
398    [with_demos="$withval"],
399    [with_demos="$default_demos"])
400if test "x$with_demos" = x; then
401    with_demos=no
402fi
403
404dnl If $with_demos is yes, directories will be added as libs available
405PROGRAM_DIRS=""
406case "$with_demos" in
407no) ;;
408yes)
409    # If the driver isn't osmesa, we have libGL and can build xdemos
410    if test "$mesa_driver" != osmesa; then
411        PROGRAM_DIRS="xdemos"
412    fi
413    ;;
414*)
415    # verify the requested demos directories exist
416    demos=`IFS=,; echo $with_demos`
417    for demo in $demos; do
418        test -d "$srcdir/progs/$demo" || \
419            AC_MSG_ERROR([Program directory '$demo' doesn't exist])
420    done
421    PROGRAM_DIRS="$demos"
422    ;;
423esac
424
425dnl
426dnl Find out if X is available. The variable have_x is set if libX11 is
427dnl to mimic AC_PATH_XTRA.
428dnl
429if test -n "$PKG_CONFIG"; then
430    AC_MSG_CHECKING([pkg-config files for X11 are available])
431    PKG_CHECK_EXISTS([x11],[
432        x11_pkgconfig=yes
433        have_x=yes
434        ],[
435        x11_pkgconfig=no
436    ])
437    AC_MSG_RESULT([$x11_pkgconfig])
438else
439    x11_pkgconfig=no
440fi
441dnl Use the autoconf macro if no pkg-config files
442if test "$x11_pkgconfig" = no; then
443    AC_PATH_XTRA
444fi
445
446dnl We need X for xlib and dri, so bomb now if it's not found
447case "$mesa_driver" in
448xlib|dri)
449    if test "$no_x" = yes; then
450        AC_MSG_ERROR([X11 development libraries needed for $mesa_driver driver])
451    fi
452    ;;
453esac
454
455dnl XCB - this is only used for GLX right now
456AC_ARG_ENABLE([xcb],
457    [AS_HELP_STRING([--enable-xcb],
458        [use XCB for GLX @<:@default=disabled@:>@])],
459    [enable_xcb="$enableval"],
460    [enable_xcb=no])
461if test "x$enable_xcb" = xyes; then
462    DEFINES="$DEFINES -DUSE_XCB"
463else
464    enable_xcb=no
465fi
466
467dnl
468dnl libGL configuration per driver
469dnl
470case "$mesa_driver" in
471xlib)
472    if test "$x11_pkgconfig" = yes; then
473        PKG_CHECK_MODULES([XLIBGL], [x11 xext])
474        X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
475        GL_LIB_DEPS="$XLIBGL_LIBS"
476    else
477        # should check these...
478        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
479        GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
480    fi
481    GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm -lpthread"
482
483    # if static, move the external libraries to the programs
484    # and empty the libraries for libGL
485    if test "$enable_static" = yes; then
486        APP_LIB_DEPS="$APP_LIB_DEPS $GL_LIB_DEPS"
487        GL_LIB_DEPS=""
488    fi
489    ;;
490dri)
491    # DRI must be shared, I think
492    if test "$enable_static" = yes; then
493        AC_MSG_ERROR([Can't use static libraries for DRI drivers])
494    fi
495
496    # Check for libdrm
497    PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED])
498    PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
499
500    # find the DRI deps for libGL
501    if test "$x11_pkgconfig" = yes; then
502        # add xcb modules if necessary
503        dri_modules="x11 xext xxf86vm xdamage xfixes"
504        if test "$enable_xcb" = yes; then
505            dri_modules="$dri_modules x11-xcb xcb-glx"
506        fi
507
508        PKG_CHECK_MODULES([DRIGL], [$dri_modules])
509        X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
510        GL_LIB_DEPS="$DRIGL_LIBS"
511    else
512        # should check these...
513        X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
514        GL_LIB_DEPS="$X_LIBS -lX11 -lXext -lXxf86vm -lXdamage -lXfixes"
515
516        # XCB can only be used from pkg-config
517        if test "$enable_xcb" = yes; then
518            PKG_CHECK_MODULES([XCB],[x11-xcb xcb-glx])
519            X11_INCLUDES="$X11_INCLUDES $XCB_CFLAGS"
520            GL_LIB_DEPS="$GL_LIB_DEPS $XCB_LIBS"
521        fi
522    fi
523
524    # need DRM libs, -lpthread, etc.
525    GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS"
526    ;;
527osmesa)
528    # No libGL for osmesa
529    GL_LIB_DEPS=""
530    ;;
531esac
532AC_SUBST([GL_LIB_DEPS])
533
534dnl
535dnl More X11 setup
536dnl
537if test "$mesa_driver" = xlib; then
538    DEFINES="$DEFINES -DUSE_XSHM"
539fi
540
541dnl
542dnl More DRI setup
543dnl
544AC_ARG_ENABLE([glx-tls],
545    [AS_HELP_STRING([--enable-glx-tls],
546        [enable TLS support in GLX @<:@default=disabled@:>@])],
547    [GLX_USE_TLS="$enableval"],
548    [GLX_USE_TLS=no])
549dnl Directory for DRI drivers
550AC_ARG_WITH([dri-driverdir],
551    [AS_HELP_STRING([--with-dri-driverdir=DIR],
552        [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
553    [DRI_DRIVER_INSTALL_DIR="$withval"],
554    [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
555AC_SUBST([DRI_DRIVER_INSTALL_DIR])
556dnl Direct rendering or just indirect rendering
557AC_ARG_ENABLE([driglx-direct],
558    [AS_HELP_STRING([--disable-driglx-direct],
559        [enable direct rendering in GLX for DRI @<:@default=enabled@:>@])],
560    [driglx_direct="$enableval"],
561    [driglx_direct="yes"])
562dnl ttm support
563AC_ARG_ENABLE([ttm-api],
564    [AS_HELP_STRING([--enable-ttm-api],
565        [enable TTM API users @<:@default=disabled@:>@])],
566    [ttmapi="$enableval"],
567    [ttmapi="no"])
568
569if test "x$ttmapi" = "xyes"; then
570    save_CFLAGS=$CFLAGS
571    CFLAGS=$LIBDRM_CFLAGS
572    AC_CHECK_HEADERS([xf86mm.h],[],[AC_MSG_ERROR([xf86mm.h required for TTM.])],[#include "stdint.h"\n#include "drm.h"])
573    CFLAGS=$save_CFLAGS
574fi
575
576dnl Which drivers to build - default is chosen by platform
577AC_ARG_WITH([dri-drivers],
578    [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
579        [comma delimited DRI drivers, e.g. "i965,radeon,nouveau" @<:@default=auto@:>@])],
580    [with_dri_drivers="$withval"],
581    [with_dri_drivers=yes])
582if test "x$with_dri_drivers" = x; then
583    with_dri_drivers=no
584fi
585
586dnl If $with_dri_drivers is yes, directories will be added through
587dnl platform checks
588DRI_DIRS=""
589case "$with_dri_drivers" in
590no|yes) ;;
591*)
592    # verify the requested driver directories exist
593    dri_drivers=`IFS=,; echo $with_dri_drivers`
594    for driver in $dri_drivers; do
595        test -d "$srcdir/src/mesa/drivers/dri/$driver" || \
596            AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist])
597    done
598    DRI_DIRS="$dri_drivers"
599    ;;
600esac
601
602dnl Just default to no EGL for now
603USING_EGL=0
604AC_SUBST([USING_EGL])
605
606dnl Set DRI_DIRS, DEFINES and LIB_DEPS
607if test "$mesa_driver" = dri; then
608    # Use TLS in GLX?
609    if test "x$GLX_USE_TLS" = xyes; then
610        DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
611    fi
612
613    if test "x$ttmapi" = xyes; then
614        DEFINES="$DEFINES -DTTM_API"
615    fi
616
617    if test "x$USING_EGL" = x1; then
618        PROGRAM_DIRS="egl"
619    fi
620
621    # Platform specific settings and drivers to build
622    case "$host_os" in
623    linux*)
624        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DIN_DRI_DRIVER"
625        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING -DHAVE_ALIAS"
626        if test "x$driglx_direct" = xyes; then
627            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
628        fi
629
630        case "$host_cpu" in
631        x86_64)
632            # ffb, gamma, and sis are missing because they have not be
633            # converted to use the new interface.  i810 are missing
634            # because there is no x86-64 system where they could *ever*
635            # be used.
636            if test "x$DRI_DIRS" = x; then
637                DRI_DIRS="i915 i965 mach64 mga r128 r200 r300 radeon \
638                    savage tdfx unichrome swrast"
639            fi
640            ;;
641        powerpc*)
642            # Build only the drivers for cards that exist on PowerPC.
643            # At some point MGA will be added, but not yet.
644            if test "x$DRI_DIRS" = x; then
645                DRI_DIRS="mach64 r128 r200 r300 radeon tdfx swrast"
646            fi
647            ;;
648        esac
649        ;;
650    freebsd* | dragonfly*)
651        DEFINES="$DEFINES -DPTHREADS -DUSE_EXTERNAL_DXTN_LIB=1"
652        DEFINES="$DEFINES -DIN_DRI_DRIVER -DHAVE_ALIAS"
653        DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
654        if test "x$driglx_direct" = xyes; then
655            DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
656        fi
657        if test "x$GXX" = xyes; then
658            CXXFLAGS="$CXXFLAGS -ansi -pedantic"
659        fi
660
661        # ffb and gamma are missing because they have not been converted
662        # to use the new interface.
663        if test "x$DRI_DIRS" = x; then
664            DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 radeon tdfx \
665                unichrome savage sis swrast"
666        fi
667        ;;
668    esac
669
670    # default drivers
671    if test "x$DRI_DIRS" = x; then
672        DRI_DIRS="i810 i915 i965 mach64 mga r128 r200 r300 radeon s3v \
673            savage sis tdfx trident unichrome ffb swrast"
674    fi
675
676    DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/  */ /g'`
677
678    # Check for expat
679    EXPAT_INCLUDES=""
680    EXPAT_LIB=-lexpat
681    AC_ARG_WITH([expat],
682        [AS_HELP_STRING([--with-expat=DIR],
683            [expat install directory])],[
684        EXPAT_INCLUDES="-I$withval/include"
685        CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
686        LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
687        EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
688        ])
689    AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
690    AC_CHECK_LIB([expat],[XML_ParserCreate],[],
691        [AC_MSG_ERROR([Expat required for DRI.])])
692
693    # put all the necessary libs together
694    DRI_LIB_DEPS="$SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS"
695fi
696AC_SUBST([DRI_DIRS])
697AC_SUBST([EXPAT_INCLUDES])
698AC_SUBST([DRI_LIB_DEPS])
699
700dnl
701dnl OSMesa configuration
702dnl
703if test "$mesa_driver" = xlib; then
704    default_gl_osmesa=yes
705else
706    default_gl_osmesa=no
707fi
708AC_ARG_ENABLE([gl-osmesa],
709    [AS_HELP_STRING([--enable-gl-osmesa],
710        [enable OSMesa on libGL @<:@default=enabled for xlib driver@:>@])],
711    [gl_osmesa="$enableval"],
712    [gl_osmesa="$default_gl_osmesa"])
713if test "x$gl_osmesa" = xyes; then
714    if test "$mesa_driver" = osmesa; then
715        AC_MSG_ERROR([libGL is not available for OSMesa driver])
716    else
717        DRIVER_DIRS="$DRIVER_DIRS osmesa"
718    fi
719fi
720
721dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
722AC_ARG_WITH([osmesa-bits],
723    [AS_HELP_STRING([--with-osmesa-bits=BITS],
724        [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
725    [osmesa_bits="$withval"],
726    [osmesa_bits=8])
727if test "$mesa_driver" != osmesa && test "x$osmesa_bits" != x8; then
728    AC_MSG_WARN([Ignoring OSMesa channel bits for non-OSMesa driver])
729    osmesa_bits=8
730fi
731case "x$osmesa_bits" in
732x8)
733    OSMESA_LIB=OSMesa
734    ;;
735x16|x32)
736    OSMESA_LIB="OSMesa$osmesa_bits"
737    DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
738    ;;
739*)
740    AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
741    ;;
742esac
743AC_SUBST([OSMESA_LIB])
744
745case "$mesa_driver" in
746osmesa)
747    # only link librararies with osmesa if shared
748    if test "$enable_static" = no; then
749        OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS"
750    else
751        OSMESA_LIB_DEPS=""
752    fi
753    OSMESA_MESA_DEPS=""
754    ;;
755*)
756    # Link OSMesa to libGL otherwise
757    OSMESA_LIB_DEPS=""
758    # only link librararies with osmesa if shared
759    if test "$enable_static" = no; then
760        OSMESA_MESA_DEPS='-l$(GL_LIB)'
761    else
762        OSMESA_MESA_DEPS=""
763    fi
764    ;;
765esac
766AC_SUBST([OSMESA_LIB_DEPS])
767AC_SUBST([OSMESA_MESA_DEPS])
768
769dnl
770dnl GLU configuration
771dnl
772AC_ARG_ENABLE([glu],
773    [AS_HELP_STRING([--disable-glu],
774        [enable OpenGL Utility library @<:@default=enabled@:>@])],
775    [enable_glu="$enableval"],
776    [enable_glu=yes])
777if test "x$enable_glu" = xyes; then
778    SRC_DIRS="$SRC_DIRS glu"
779
780    case "$mesa_driver" in
781    osmesa)
782        # If GLU is available and we have libOSMesa (not 16 or 32),
783        # we can build the osdemos
784        if test "$with_demos" = yes && test "$osmesa_bits" = 8; then
785            PROGRAM_DIRS="$PROGRAM_DIRS osdemos"
786        fi
787
788        # Link libGLU to libOSMesa instead of libGL
789        GLU_LIB_DEPS=""
790        if test "$enable_static" = no; then
791            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
792        else
793            GLU_MESA_DEPS=""
794        fi
795        ;;
796    *)
797        # If static, empty GLU_LIB_DEPS and add libs for programs to link
798        if test "$enable_static" = no; then
799            GLU_LIB_DEPS="-lm"
800            GLU_MESA_DEPS='-l$(GL_LIB)'
801        else
802            GLU_LIB_DEPS=""
803            GLU_MESA_DEPS=""
804            APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++"
805        fi
806        ;;
807    esac
808fi
809AC_SUBST([GLU_LIB_DEPS])
810AC_SUBST([GLU_MESA_DEPS])
811
812dnl
813dnl GLw configuration
814dnl
815AC_ARG_ENABLE([glw],
816    [AS_HELP_STRING([--disable-glw],
817        [enable Xt/Motif widget library @<:@default=enabled@:>@])],
818    [enable_glw="$enableval"],
819    [enable_glw=yes])
820dnl Don't build GLw on osmesa
821if test "x$enable_glw" = xyes && test "$mesa_driver" = osmesa; then
822    AC_MSG_WARN([Disabling GLw since the driver is OSMesa])
823    enable_glw=no
824fi
825if test "x$enable_glw" = xyes; then
826    SRC_DIRS="$SRC_DIRS glw"
827    if test "$x11_pkgconfig" = yes; then
828        PKG_CHECK_MODULES([GLW],[x11 xt])
829        GLW_LIB_DEPS="$GLW_LIBS"
830    else
831        # should check these...
832        GLW_LIB_DEPS="$X_LIBS -lX11 -lXt"
833    fi
834
835    # If static, empty GLW_LIB_DEPS and add libs for programs to link
836    if test "$enable_static" = no; then
837        GLW_MESA_DEPS='-l$(GL_LIB)'
838    else
839        APP_LIB_DEPS="$APP_LIB_DEPS $GLW_LIB_DEPS"
840        GLW_LIB_DEPS=""
841        GLW_MESA_DEPS=""
842    fi
843fi
844AC_SUBST([GLW_LIB_DEPS])
845AC_SUBST([GLW_MESA_DEPS])
846
847dnl
848dnl GLUT configuration
849dnl
850if test -f "$srcdir/include/GL/glut.h"; then
851    default_glut=yes
852else
853    default_glut=no
854fi
855AC_ARG_ENABLE([glut],
856    [AS_HELP_STRING([--disable-glut],
857        [enable GLUT library @<:@default=enabled if source available@:>@])],
858    [enable_glut="$enableval"],
859    [enable_glut="$default_glut"])
860
861dnl Can't build glut if GLU not available
862if test "x$enable_glu$enable_glut" = xnoyes; then
863    AC_MSG_WARN([Disabling glut since GLU is disabled])
864    enable_glut=no
865fi
866dnl Don't build glut on osmesa
867if test "x$enable_glut" = xyes && test "$mesa_driver" = osmesa; then
868    AC_MSG_WARN([Disabling glut since the driver is OSMesa])
869    enable_glut=no
870fi
871
872if test "x$enable_glut" = xyes; then
873    SRC_DIRS="$SRC_DIRS glut/glx"
874    GLUT_CFLAGS=""
875    if test "x$GCC" = xyes; then
876        GLUT_CFLAGS="-fexceptions"
877    fi
878    if test "$x11_pkgconfig" = yes; then
879        PKG_CHECK_MODULES([GLUT],[x11 xmu xi])
880        GLUT_LIB_DEPS="$GLUT_LIBS"
881    else
882        # should check these...
883        GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXi"
884    fi
885    GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
886
887    # If glut is available, we can build most programs
888    if test "$with_demos" = yes; then
889        PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
890    fi
891
892    # If static, empty GLUT_LIB_DEPS and add libs for programs to link
893    if test "$enable_static" = no; then
894        GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
895    else
896        APP_LIB_DEPS="$APP_LIB_DEPS $GLUT_LIB_DEPS"
897        GLUT_LIB_DEPS=""
898        GLUT_MESA_DEPS=""
899    fi
900fi
901AC_SUBST([GLUT_LIB_DEPS])
902AC_SUBST([GLUT_MESA_DEPS])
903AC_SUBST([GLUT_CFLAGS])
904
905dnl
906dnl Program library dependencies
907dnl    Only libm is added here if necessary as the libraries should
908dnl    be pulled in by the linker
909dnl
910if test "x$APP_LIB_DEPS" = x; then
911    APP_LIB_DEPS="-lm"
912fi
913AC_SUBST([APP_LIB_DEPS])
914AC_SUBST([PROGRAM_DIRS])
915
916
917dnl Restore LDFLAGS and CPPFLAGS
918LDFLAGS="$_SAVE_LDFLAGS"
919CPPFLAGS="$_SAVE_CPPFLAGS"
920
921dnl Substitute the config
922AC_CONFIG_FILES([configs/autoconf])
923
924dnl Replace the configs/current symlink
925AC_CONFIG_COMMANDS([configs],[
926if test -f configs/current || test -L configs/current; then
927    rm -f configs/current
928fi
929ln -s autoconf configs/current
930])
931
932AC_OUTPUT
933
934dnl
935dnl Output some configuration info for the user
936dnl
937echo ""
938echo "        prefix:          $prefix"
939echo "        exec_prefix:     $exec_prefix"
940echo "        libdir:          $libdir"
941
942dnl Driver info
943echo ""
944echo "        Driver:          $mesa_driver"
945if echo "$DRIVER_DIRS" | grep 'osmesa' >/dev/null 2>&1; then
946    echo "        OSMesa:          lib$OSMESA_LIB"
947else
948    echo "        OSMesa:          no"
949fi
950if test "$mesa_driver" = dri; then
951    # cleanup the drivers var
952    dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
953    echo "        DRI drivers:     $dri_dirs"
954    echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
955    echo "        TTM API support: $ttmapi"
956fi
957
958dnl Libraries
959echo ""
960echo "        Shared libs:     $enable_shared"
961echo "        Static libs:     $enable_static"
962echo "        GLU:             $enable_glu"
963echo "        GLw:             $enable_glw"
964echo "        glut:            $enable_glut"
965
966dnl Programs
967# cleanup the programs var for display
968program_dirs=`echo $PROGRAM_DIRS | $SED 's/^ *//;s/  */ /;s/ *$//'`
969if test "x$program_dirs" = x; then
970    echo "        Demos:           no"
971else
972    echo "        Demos:           $program_dirs"
973fi
974
975dnl Compiler options
976# cleanup the CFLAGS/CXXFLAGS/DEFINES vars
977cflags=`echo $CFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
978    $SED 's/^ *//;s/  */ /;s/ *$//'`
979cxxflags=`echo $CXXFLAGS $OPT_FLAGS $PIC_FLAGS $ARCH_FLAGS | \
980    $SED 's/^ *//;s/  */ /;s/ *$//'`
981defines=`echo $DEFINES $ASM_FLAGS | $SED 's/^ *//;s/  */ /;s/ *$//'`
982echo ""
983echo "        CFLAGS:          $cflags"
984echo "        CXXFLAGS:        $cxxflags"
985echo "        Macros:          $defines"
986
987echo ""
988echo "        Run '${MAKE-make}' to build Mesa"
989echo ""
990