autoconf: Initial support for an autoconf configuration
authorDan Nicholson <dbn.lists@gmail.com>
Tue, 23 Oct 2007 16:25:58 +0000 (09:25 -0700)
committerDan Nicholson <dbn.lists@gmail.com>
Fri, 7 Dec 2007 22:34:27 +0000 (14:34 -0800)
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.

.gitignore
Makefile
configs/.gitignore
configs/autoconf.in [new file with mode: 0644]
configure.ac [new file with mode: 0644]

index c128ba86092652e5ba4ac00fcfef6a56301df8c4..5d351af62c0131b91a85b424e2a75ea4c622df5a 100644 (file)
@@ -8,3 +8,8 @@ depend
 depend.bak
 lib
 lib64
+configure
+autom4te.cache
+aclocal.m4
+config.log
+config.status
index ac1e94ee8629219cc08bf5c36550aebfab851d57..97575efe02daeecb67f824fdf5b9caacc1580810 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -29,6 +29,8 @@ realclean:
        $(MAKE) clean
        -rm -rf lib*
        -rm -f $(TOP)/configs/current
+       -rm -f $(TOP)/configs/autoconf
+       -rm -rf autom4te.cache
        -rm -f `find . -name \*.o`
        -rm -f `find . -name \*.a`
        -rm -f `find . -name \*.so`
@@ -66,6 +68,7 @@ aix-64 \
 aix-64-static \
 aix-gcc \
 aix-static \
+autoconf \
 bluegene-osmesa \
 bluegene-xlc-osmesa \
 beos \
index 5b9023a315ae79fd8cbe9e8c3a6f8053f0ed3ddb..97ac5b7326f5159d0af99eac255212e3b5c1fe06 100644 (file)
@@ -1 +1,2 @@
 current
+autoconf
diff --git a/configs/autoconf.in b/configs/autoconf.in
new file mode 100644 (file)
index 0000000..99f7b89
--- /dev/null
@@ -0,0 +1,87 @@
+# Autoconf configuration
+
+# Pull in the defaults
+include $(TOP)/configs/default
+
+# This is generated by configure
+CONFIG_NAME = autoconf
+
+# Version info
+MESA_MAJOR = @MESA_MAJOR@
+MESA_MINOR = @MESA_MINOR@
+MESA_TINY = @MESA_TINY@
+
+# Compiler and flags
+CC = @CC@
+CXX = @CXX@
+OPT_FLAGS = @OPT_FLAGS@
+ARCH_FLAGS = @ARCH_FLAGS@
+ASM_FLAGS = @ASM_FLAGS@
+PIC_FLAGS = @PIC_FLAGS@
+DEFINES = @DEFINES@
+CFLAGS = @CPPFLAGS@ @CFLAGS@ \
+       $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(ASM_FLAGS) $(DEFINES)
+CXXFLAGS = @CPPFLAGS@ @CXXFLAGS@ \
+       $(OPT_FLAGS) $(PIC_FLAGS) $(ARCH_FLAGS) $(DEFINES)
+LDFLAGS = @LDFLAGS@
+EXTRA_LIB_PATH = @EXTRA_LIB_PATH@
+
+# Assembler
+ASM_SOURCES = @ASM_SOURCES@
+ASM_API = @ASM_API@
+
+# Misc tools and flags
+MAKE = @MAKE@
+MKLIB_OPTIONS =
+MKDEP = @MKDEP@
+MKDEP_OPTIONS = -fdepend
+INSTALL = $(TOP)/bin/minstall
+
+# Python and flags (generally only needed by the developers)
+PYTHON2 = python
+PYTHON_FLAGS = -t -O -O
+
+# Library names (base name)
+GL_LIB = GL
+GLU_LIB = GLU
+GLUT_LIB = glut
+GLW_LIB = GLw
+OSMESA_LIB = OSMesa
+
+# Library names (actual file names)
+GL_LIB_NAME = @GL_LIB_NAME@
+GLU_LIB_NAME = @GLU_LIB_NAME@
+GLUT_LIB_NAME = @GLUT_LIB_NAME@
+GLW_LIB_NAME = @GLW_LIB_NAME@
+OSMESA_LIB_NAME = @OSMESA_LIB_NAME@
+
+# Directories to build
+LIB_DIR = @LIB_DIR@
+SRC_DIRS = @SRC_DIRS@
+GLU_DIRS = @GLU_DIRS@
+DRIVER_DIRS = @DRIVER_DIRS@
+# Which subdirs under $(TOP)/progs/ to enter:
+PROGRAM_DIRS = @PROGRAM_DIRS@
+
+# Dependencies
+X11_INCLUDES = @X11_INCLUDES@
+
+# Library/program dependencies
+GL_LIB_DEPS = $(EXTRA_LIB_PATH) @GL_LIB_DEPS@
+OSMESA_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @OSMESA_MESA_DEPS@ \
+       $(EXTRA_LIB_PATH) @OSMESA_LIB_DEPS@
+GLU_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLU_MESA_DEPS@ \
+       $(EXTRA_LIB_PATH) @GLU_LIB_DEPS@
+GLUT_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLUT_MESA_DEPS@ \
+       $(EXTRA_LIB_PATH) @GLUT_LIB_DEPS@
+GLW_LIB_DEPS = -L$(TOP)/$(LIB_DIR) @GLW_MESA_DEPS@ \
+       $(EXTRA_LIB_PATH) @GLW_LIB_DEPS@
+APP_LIB_DEPS = $(EXTRA_LIB_PATH) @APP_LIB_DEPS@
+
+# Autoconf directories
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+
+# Installation directories (for make install)
+INSTALL_DIR = $(prefix)
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..5563fa2
--- /dev/null
@@ -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(), mesa3d@sourceforge.net)
+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 ""