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