From: Dan Nicholson Date: Tue, 23 Oct 2007 16:25:58 +0000 (-0700) Subject: autoconf: Initial support for an autoconf configuration X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=dca1b796b74b13602c87e2628cea747aa2a985be;p=mesa.git 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. --- diff --git a/.gitignore b/.gitignore index c128ba86092..5d351af62c0 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 ac1e94ee862..97575efe02d 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 5b9023a315a..97ac5b7326f 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 00000000000..99f7b89a91c --- /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 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(), 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 ""