summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
authorDan Nicholson <[email protected]>2007-10-23 09:25:58 -0700
committerDan Nicholson <[email protected]>2007-12-07 14:34:27 -0800
commitdca1b796b74b13602c87e2628cea747aa2a985be (patch)
tree3f9730401ed249f5522a89bb9fc5da09880a2110 /configure.ac
parentd5cee90cf5c6a9eeec32ccfd85103dc1c02d135a (diff)
autoconf: Initial support for an autoconf configuration
This adds the initial support for using autoconf configuration. Support is available for shared Xlib driver builds. Later this will be extended to dri and osmesa-only builds and possibly targetting non-X backends. Support for static library builds will also be added. The configure script fills in the autoconf config. This is then used by running `make autoconf' after ./configure. Testing has been done on Linux/GNU. The configure script tries to faithfully reproduce the current configs/linux* and configs/freebsd*. Other platforms can be handled later by adding similar statements and feature tests. Pkg-config is used to search for packages when possible. This makes the build much more flexible and robust to the user's configuration. This requires that the pkg-config autoconf macros pkg.m4 are included in aclocal.m4. This requires autoconf and aclocal from autoconf and automake, respectively.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac309
1 files changed, 309 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 00000000000..5563fa21809
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,309 @@
+dnl Process this file with autoconf to create configure.
+
+AC_PREREQ(2.59)
+
+dnl Versioning
+dnl Make version number available to autoconf and configure
+m4_define(mesa_major, 7)
+m4_define(mesa_minor, 1)
+m4_define(mesa_tiny, 0)
+m4_define(mesa_version, [mesa_major().mesa_minor().mesa_tiny()])
+
+AC_INIT(Mesa, mesa_version(), [email protected])
+AC_CONFIG_AUX_DIR(bin)
+AC_CANONICAL_HOST
+
+dnl Substitute the version number into shell variables
+MESA_MAJOR=mesa_major()
+MESA_MINOR=mesa_minor()
+MESA_TINY=mesa_tiny()
+AC_SUBST(MESA_MAJOR)
+AC_SUBST(MESA_MINOR)
+AC_SUBST(MESA_TINY)
+
+dnl Check for progs
+AC_PROG_CPP
+AC_PROG_CC
+AC_PROG_CXX
+AC_PATH_PROG(MAKE, make)
+AC_PATH_PROG(MKDEP, makedepend)
+AC_PATH_PROG(SED, sed)
+PKG_PROG_PKG_CONFIG()
+
+dnl LIB_DIR - library basename
+LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
+AC_SUBST(LIB_DIR)
+
+dnl Cache LDFLAGS so we can add EXTRA_LIB_PATH and restore it later
+_SAVE_LDFLAGS="$LDFLAGS"
+AC_ARG_VAR(EXTRA_LIB_PATH,[Extra -L paths for the linker])
+AC_SUBST(EXTRA_LIB_PATH)
+
+dnl Cache CPPFLAGS so we can add *_INCLUDES and restore it later
+_SAVE_CPPFLAGS="$CPPFLAGS"
+AC_ARG_VAR(X11_INCLUDES,[Extra -I paths for X11 headers])
+AC_SUBST(X11_INCLUDES)
+
+dnl Compiler macros
+DEFINES=""
+AC_SUBST(DEFINES)
+if test "x$GCC" = xyes; then
+ DEFINES="-D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE"
+fi
+case "$host_os" in
+linux*)
+ DEFINES="$DEFINES -D_SVID_SOURCE -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN"
+ ;;
+esac
+
+dnl Add flags for gcc and g++
+if test "x$GCC" = xyes; then
+ CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -std=c99 -ffast-math"
+fi
+if test "x$GXX" = xyes; then
+ CXXFLAGS="$CXXFLAGS -Wall"
+fi
+
+dnl These should be unnecessary, but let the user set them if they want
+AC_ARG_VAR(OPT_FLAGS, [Additional optimization flags for the compiler.
+ Default is to use CFLAGS.])
+AC_ARG_VAR(ARCH_FLAGS, [Additional architecture specific flags for the
+ compiler. Default is to use CFLAGS.])
+AC_SUBST(OPT_FLAGS)
+AC_SUBST(ARCH_FLAGS)
+
+dnl
+dnl library names
+dnl
+GL_LIB_NAME='lib$(GL_LIB).so'
+GLU_LIB_NAME='lib$(GLU_LIB).so'
+GLUT_LIB_NAME='lib$(GLUT_LIB).so'
+GLW_LIB_NAME='lib$(GLW_LIB).so'
+OSMESA_LIB_NAME='lib$(OSMESA_LIB).so'
+AC_SUBST(GL_LIB_NAME)
+AC_SUBST(GLU_LIB_NAME)
+AC_SUBST(GLUT_LIB_NAME)
+AC_SUBST(GLW_LIB_NAME)
+AC_SUBST(OSMESA_LIB_NAME)
+
+dnl
+dnl Build directories for xlib driver
+dnl
+SRC_DIRS="mesa"
+DRIVER_DIRS="x11 osmesa"
+GLU_DIRS="sgi"
+AC_SUBST(SRC_DIRS)
+AC_SUBST(GLU_DIRS)
+AC_SUBST(DRIVER_DIRS)
+
+dnl
+dnl Find out if X is available. The variables have_x or no_x will be
+dnl set and used later in the driver setups
+dnl
+if test -n "$PKG_CONFIG"; then
+ AC_MSG_CHECKING([pkg-config files for X11 are available])
+ if $PKG_CONFIG --exists x11; then
+ x11_pkgconfig=yes
+ have_x=yes
+ AC_MSG_RESULT(yes)
+ else
+ x11_pkgconfig=no
+ no_x=yes
+ AC_MSG_RESULT(no)
+ fi
+else
+ x11_pkgconfig=no
+fi
+dnl Use the autoconf macro if no pkg-config files
+if test "$x11_pkgconfig" = no; then
+ AC_PATH_XTRA
+fi
+
+dnl
+dnl libGL for xlib driver
+dnl
+if test "$no_x" = yes; then
+ AC_MSG_ERROR([X11 development libraries needed for Xlib driver])
+fi
+
+if test "$x11_pkgconfig" = yes; then
+PKG_CHECK_MODULES(X11GL, x11 xext)
+ X11_INCLUDES="$X11_INCLUDES $X11GL_CFLAGS"
+ GL_LIB_DEPS="$X11GL_LIBS"
+else
+ # should check these...
+ X11_INCLUDES="$X11_INCLUDES $X_CFLAGS"
+ GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
+fi
+GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
+AC_SUBST(GL_LIB_DEPS)
+
+dnl
+dnl More X11 setup
+dnl
+if test "$mesa_driver" = x11; then
+ DEFINES="$DEFINES -DUSE_XSHM"
+fi
+
+dnl
+dnl OSMesa configuration
+dnl
+OSMESA_LIB_DEPS=""
+OSMESA_MESA_DEPS='-l$(GL_LIB)'
+AC_SUBST(OSMESA_LIB_DEPS)
+AC_SUBST(OSMESA_MESA_DEPS)
+
+dnl
+dnl GLU configuration
+dnl
+AC_ARG_ENABLE(glu,
+ [AS_HELP_STRING([--enable-glu],
+ [enable OpenGL Utility library @<:@default=yes@:>@])],
+ enable_glu="$enableval",
+ enable_glu=yes)
+if test "x$enable_glu" = xyes; then
+ SRC_DIRS="$SRC_DIRS glu"
+
+ # If GLU is available, we can build some programs
+ PROGRAM_DIRS="$PROGRAM_DIRS xdemos"
+
+ GLU_LIB_DEPS="-lm"
+ GLU_MESA_DEPS='-l$(GL_LIB)'
+fi
+AC_SUBST(GLU_LIB_DEPS)
+AC_SUBST(GLU_MESA_DEPS)
+
+dnl
+dnl GLw configuration
+dnl
+AC_ARG_ENABLE(glw,
+ [AS_HELP_STRING([--enable-glw],
+ [enable Xt/Motif widget library @<:@default=yes@:>@])],
+ enable_glw="$enableval",
+ enable_glw=yes)
+if test "x$enable_glw" = xyes; then
+ SRC_DIRS="$SRC_DIRS glw"
+ if test "$x11_pkgconfig" = yes; then
+ PKG_CHECK_MODULES(GLW, x11 xt)
+ GLW_LIB_DEPS="$GLW_LIBS"
+ else
+ # should check these...
+ GLW_LIB_DEPS="$X_LIBS -lX11 -lXt"
+ fi
+
+ GLW_MESA_DEPS='-l$(GL_LIB)'
+fi
+AC_SUBST(GLW_LIB_DEPS)
+AC_SUBST(GLW_MESA_DEPS)
+
+dnl
+dnl GLUT configuration
+dnl
+if test -f "$srcdir/include/GL/glut.h"; then
+ default_glut=yes
+else
+ default_glut=no
+fi
+AC_ARG_ENABLE(glut,
+ [AS_HELP_STRING([--enable-glut],
+ [enable GLUT library @<:@default=yes if source available@:>@])],
+ enable_glut="$enableval",
+ enable_glut="$default_glut")
+
+dnl Can't build glut if GLU not available
+if test "x$enable_glu$enable_glut" = xnoyes; then
+ AC_MSG_WARN([Disabling glut since GLU is disabled])
+ enable_glut=no
+fi
+if test "x$enable_glut" = xyes; then
+ SRC_DIRS="$SRC_DIRS glut/glx"
+ GLUT_CFLAGS=""
+ if test "x$GCC" = xyes; then
+ GLUT_CFLAGS="-fexceptions"
+ fi
+ if test "$x11_pkgconfig" = yes; then
+ PKG_CHECK_MODULES(GLUT, x11 xmu xt xi)
+ GLUT_LIB_DEPS="$GLUT_LIBS"
+ else
+ # should check these...
+ GLUT_LIB_DEPS="$X_LIBS -lX11 -lXmu -lXt -lXi"
+ fi
+ GLUT_LIB_DEPS="$GLUT_LIB_DEPS -lm"
+
+ # If glut is available, we can build most programs
+ PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
+
+ GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
+fi
+AC_SUBST(GLUT_LIB_DEPS)
+AC_SUBST(GLUT_MESA_DEPS)
+AC_SUBST(GLUT_CFLAGS)
+
+dnl
+dnl Program library dependencies
+dnl Only libm is added here if necessary as the libraries should
+dnl be pulled in by the linker
+dnl
+if test "x$APP_LIB_DEPS" = x; then
+ APP_LIB_DEPS="-lm"
+fi
+AC_SUBST(APP_LIB_DEPS)
+AC_SUBST(PROGRAM_DIRS)
+
+dnl Arch/platform-specific settings
+PIC_FLAGS=""
+ASM_FLAGS=""
+ASM_SOURCES=""
+ASM_API=""
+AC_SUBST(PIC_FLAGS)
+AC_SUBST(ASM_FLAGS)
+AC_SUBST(ASM_SOURCES)
+AC_SUBST(ASM_API)
+case "$host_os" in
+linux*)
+ PIC_FLAGS="-fPIC"
+ case "$host_cpu" in
+ i*86)
+ ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
+ ASM_SOURCES='$(X86_SOURCES)'
+ ASM_API='$(X86_API)'
+ ;;
+ x86_64)
+ ASM_FLAGS="-DUSE_X86_64_ASM"
+ ASM_SOURCES='$(X86-64_SOURCES)'
+ ASM_API='$(X86-64_API)'
+ ;;
+ powerpc)
+ ASM_FLAGS="-DUSE_PPC_ASM -DUSE_VMX_ASM"
+ ASM_SOURCES='$(PPC_SOURCES)'
+ ;;
+ esac
+ ;;
+freebsd*)
+ PIC_FLAGS="-fPIC"
+ case "$host_os" in
+ i*86)
+ PIC_FLAGS=""
+ ASM_FLAGS="-DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
+ ASM_SOURCES='$(X86_SOURCES)'
+ ASM_API='$(X86_API)'
+ ;;
+ x86_64)
+ ASM_FLAGS="-DUSE_X86_64_ASM"
+ ASM_SOURCES='$(X86-64_SOURCES)'
+ ASM_API='$(X86-64_API)'
+ ;;
+ esac
+ ;;
+esac
+
+dnl Restore LDFLAGS and CPPFLAGS
+LDFLAGS="$_SAVE_LDFLAGS"
+CPPFLAGS="$_SAVE_CPPFLAGS"
+
+dnl Substitute the config
+AC_OUTPUT([configs/autoconf])
+
+echo ""
+echo " Run 'make autoconf' to build Mesa"
+echo ""