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.
This commit is contained in:
Dan Nicholson 2007-10-23 09:25:58 -07:00
parent d5cee90cf5
commit dca1b796b7
5 changed files with 405 additions and 0 deletions

5
.gitignore vendored
View File

@ -8,3 +8,8 @@ depend
depend.bak
lib
lib64
configure
autom4te.cache
aclocal.m4
config.log
config.status

View File

@ -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 \

1
configs/.gitignore vendored
View File

@ -1 +1,2 @@
current
autoconf

87
configs/autoconf.in Normal file
View File

@ -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)

309
configure.ac Normal file
View File

@ -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 ""