autoconf: Allow static library builds
authorDan Nicholson <dbn.lists@gmail.com>
Thu, 15 Nov 2007 16:59:57 +0000 (08:59 -0800)
committerDan Nicholson <dbn.lists@gmail.com>
Fri, 7 Dec 2007 22:34:27 +0000 (14:34 -0800)
Allow the user to specify that they want static libraries through the
--{enable,disable}-{static,shared} switches like libtool. The mesa build
only allows for one at a time, so static will be chosen if someone has
passed --enable-static or --disable-shared.

This also allows the mklib options to be set at build time. This allows
-static to be set for mklib, but any platform specific settings are
allowed by setting MKLIB_OPTIONS for configure.

Handling of the program libraries through the APP_LIB_DEPS variable is
pretty ugly, but it seems to work.

configs/autoconf.in
configure.ac

index a1896a64400d30d303051d0906a03fdcde281401..a851bf0c57a03ff7ffbf20c12a2bca9be20073b3 100644 (file)
@@ -32,7 +32,7 @@ ASM_API = @ASM_API@
 
 # Misc tools and flags
 MAKE = @MAKE@
-MKLIB_OPTIONS =
+MKLIB_OPTIONS = @MKLIB_OPTIONS@
 MKDEP = @MKDEP@
 MKDEP_OPTIONS = -fdepend
 INSTALL = $(TOP)/bin/minstall
index 32fdf480c5a63dc66863363292235f541dc87e26..814fb2e364fb4b216f20189c9fbc7b067a2449f5 100644 (file)
@@ -72,14 +72,76 @@ AC_ARG_VAR(ARCH_FLAGS, [Additional architecture specific flags for the
 AC_SUBST(OPT_FLAGS)
 AC_SUBST(ARCH_FLAGS)
 
+dnl
+dnl shared/static libraries, mimic libtool options
+dnl
+AC_ARG_ENABLE(static,
+    [AS_HELP_STRING([--enable-static],
+        [build static libraries @<:@default=no@:>@])],
+    enable_static="$enableval",
+    enable_static=no
+)
+case "x$enable_static" in
+xyes|xno ) ;;
+x ) enable_static=no ;;
+* )
+    AC_MSG_ERROR([Static library option '$enable_static' is not a valid])
+    ;;
+esac
+AC_ARG_ENABLE(shared,
+    [AS_HELP_STRING([--disable-shared],
+        [build shared libraries @<:@default=yes@:>@])],
+    enable_shared="$enableval",
+    enable_shared=yes
+)
+case "x$enable_shared" in
+xyes|xno ) ;;
+x ) enable_shared=yes ;;
+* )
+    AC_MSG_ERROR([Shared library option '$enable_shared' is not a valid])
+    ;;
+esac
+
+dnl Can't have static and shared libraries, default to static if user
+dnl explicitly requested. If both disabled, set to static since shared
+dnl was explicitly requirested.
+case "x$enable_static$enable_shared" in
+xyesyes )
+    AC_MSG_WARN([Can't build static and shared libraries, disabling shared])
+    enable_shared=no
+    ;;
+xnono )
+    AC_MSG_WARN([Can't disable both static and shared libraries, enabling static])
+    enable_static=yes
+    ;;
+esac
+
+dnl
+dnl mklib options
+dnl
+AC_ARG_VAR(MKLIB_OPTIONS,[Options for the Mesa library script, mklib])
+if test "$enable_static" = yes; then
+    MKLIB_OPTIONS="$MKLIB_OPTIONS -static"
+fi
+AC_SUBST(MKLIB_OPTIONS)
+
+
 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'
+if test "$enable_static" = yes; then
+    GL_LIB_NAME='lib$(GL_LIB).a'
+    GLU_LIB_NAME='lib$(GLU_LIB).a'
+    GLUT_LIB_NAME='lib$(GLUT_LIB).a'
+    GLW_LIB_NAME='lib$(GLW_LIB).a'
+    OSMESA_LIB_NAME='lib$(OSMESA_LIB).a'
+else
+    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'
+fi
 AC_SUBST(GL_LIB_NAME)
 AC_SUBST(GLU_LIB_NAME)
 AC_SUBST(GLUT_LIB_NAME)
@@ -209,8 +271,20 @@ x11)
         GL_LIB_DEPS="$X_LIBS -lX11 -lXext"
     fi
     GL_LIB_DEPS="$GL_LIB_DEPS -lm -lpthread"
+
+    # if static, move the external libraries to the programs
+    # and empty the libraries for libGL
+    if test "$enable_static" = yes; then
+        APP_LIB_DEPS="$APP_LIB_DEPS $GL_LIB_DEPS"
+        GL_LIB_DEPS=""
+    fi
     ;;
 dri)
+    # DRI must be shared, I think
+    if test "$enable_static" = yes; then
+        AC_MSG_ERROR([Can't use static libraries for DRI drivers])
+    fi
+
     # Check for libdrm
     PKG_CHECK_MODULES(LIBDRM, libdrm)
 
@@ -387,13 +461,23 @@ AC_SUBST(OSMESA_LIB)
 
 case "$mesa_driver" in
 osmesa)
-    OSMESA_LIB_DEPS="-lm -lpthread"
+    # only link librararies with osmesa if shared
+    if test "$enable_static" = no; then
+        OSMESA_LIB_DEPS="-lm -lpthread"
+    else
+        OSMESA_LIB_DEPS=""
+    fi
     OSMESA_MESA_DEPS=""
     ;;
 *)
     # Link OSMesa to libGL otherwise
     OSMESA_LIB_DEPS=""
-    OSMESA_MESA_DEPS='-l$(GL_LIB)'
+    # only link librararies with osmesa if shared
+    if test "$enable_static" = no; then
+        OSMESA_MESA_DEPS='-l$(GL_LIB)'
+    else
+        OSMESA_MESA_DEPS=""
+    fi
     ;;
 esac
 AC_SUBST(OSMESA_LIB_DEPS)
@@ -420,7 +504,11 @@ if test "x$enable_glu" = xyes; then
 
         # Link libGLU to libOSMesa instead of libGL
         GLU_LIB_DEPS=""
-        GLU_MESA_DEPS='-l$(OSMESA_LIB)'
+        if test "$enable_static" = no; then
+            GLU_MESA_DEPS='-l$(OSMESA_LIB)'
+        else
+            GLU_MESA_DEPS=""
+        fi
         ;;
     *)
         # If GLU is available, we can build the xdemos
@@ -428,8 +516,15 @@ if test "x$enable_glu" = xyes; then
             PROGRAM_DIRS="$PROGRAM_DIRS xdemos"
         fi
 
-        GLU_LIB_DEPS="-lm"
-        GLU_MESA_DEPS='-l$(GL_LIB)'
+        # If static, empty GLU_LIB_DEPS and add libs for programs to link
+        if test "$enable_static" = no; then
+            GLU_LIB_DEPS="-lm"
+            GLU_MESA_DEPS='-l$(GL_LIB)'
+        else
+            GLU_LIB_DEPS=""
+            GLU_MESA_DEPS=""
+            APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++"
+        fi
         ;;
     esac
 fi
@@ -459,7 +554,14 @@ if test "x$enable_glw" = xyes; then
         GLW_LIB_DEPS="$X_LIBS -lX11 -lXt"
     fi
 
-    GLW_MESA_DEPS='-l$(GL_LIB)'
+    # If static, empty GLW_LIB_DEPS and add libs for programs to link
+    if test "$enable_static" = no; then
+        GLW_MESA_DEPS='-l$(GL_LIB)'
+    else
+        APP_LIB_DEPS="$APP_LIB_DEPS $GLW_LIB_DEPS"
+        GLW_LIB_DEPS=""
+        GLW_MESA_DEPS=""
+    fi
 fi
 AC_SUBST(GLW_LIB_DEPS)
 AC_SUBST(GLW_MESA_DEPS)
@@ -509,7 +611,14 @@ if test "x$enable_glut" = xyes; then
         PROGRAM_DIRS="$PROGRAM_DIRS demos redbook samples glsl"
     fi
 
-    GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
+    # If static, empty GLUT_LIB_DEPS and add libs for programs to link
+    if test "$enable_static" = no; then
+        GLUT_MESA_DEPS='-l$(GLU_LIB) -l$(GL_LIB)'
+    else
+        APP_LIB_DEPS="$APP_LIB_DEPS $GLUT_LIB_DEPS"
+        GLUT_LIB_DEPS=""
+        GLUT_MESA_DEPS=""
+    fi
 fi
 AC_SUBST(GLUT_LIB_DEPS)
 AC_SUBST(GLUT_MESA_DEPS)