summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Nicholson <dbn.lists@gmail.com>2007-10-23 09:25:58 -0700
committerDan Nicholson <dbn.lists@gmail.com>2007-12-07 14:34:27 -0800
commitdca1b796b74b13602c87e2628cea747aa2a985be (patch)
tree3f9730401ed249f5522a89bb9fc5da09880a2110
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.
-rw-r--r--.gitignore5
-rw-r--r--Makefile3
-rw-r--r--configs/.gitignore1
-rw-r--r--configs/autoconf.in87
-rw-r--r--configure.ac309
5 files changed, 405 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index c128ba8609..5d351af62c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,8 @@ depend
depend.bak
lib
lib64
+configure
+autom4te.cache
+aclocal.m4
+config.log
+config.status
diff --git a/Makefile b/Makefile
index ac1e94ee86..97575efe02 100644
--- 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 \
diff --git a/configs/.gitignore b/configs/.gitignore
index 5b9023a315..97ac5b7326 100644
--- a/configs/.gitignore
+++ b/configs/.gitignore
@@ -1 +1,2 @@
current
+autoconf
diff --git a/configs/autoconf.in b/configs/autoconf.in
new file mode 100644
index 0000000000..99f7b89a91
--- /dev/null
+++ b/configs/autoconf.in
@@ -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
index 0000000000..5563fa2180
--- /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(), 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 ""