| #!/bin/sh |
| # a u t o g e n . s h |
| # |
| # Copyright (c) 2005-2009 United States Government as represented by |
| # the U.S. Army Research Laboratory. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # |
| # 2. Redistributions in binary form must reproduce the above |
| # copyright notice, this list of conditions and the following |
| # disclaimer in the documentation and/or other materials provided |
| # with the distribution. |
| # |
| # 3. The name of the author may not be used to endorse or promote |
| # products derived from this software without specific prior written |
| # permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
| # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
| # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
| # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # |
| ### |
| # |
| # Script for automatically preparing the sources for compilation by |
| # performing the myriad of necessary steps. The script attempts to |
| # detect proper version support, and outputs warnings about particular |
| # systems that have autotool peculiarities. |
| # |
| # Basically, if everything is set up and installed correctly, the |
| # script will validate that minimum versions of the GNU Build System |
| # tools are installed, account for several common configuration |
| # issues, and then simply run autoreconf for you. |
| # |
| # If autoreconf fails, which can happen for many valid configurations, |
| # this script proceeds to run manual preparation steps effectively |
| # providing a POSIX shell script (mostly complete) reimplementation of |
| # autoreconf. |
| # |
| # The AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER |
| # environment variables and corresponding _OPTIONS variables (e.g. |
| # AUTORECONF_OPTIONS) may be used to override the default automatic |
| # detection behaviors. Similarly the _VERSION variables will override |
| # the minimum required version numbers. |
| # |
| # Examples: |
| # |
| # To obtain help on usage: |
| # ./autogen.sh --help |
| # |
| # To obtain verbose output: |
| # ./autogen.sh --verbose |
| # |
| # To skip autoreconf and prepare manually: |
| # AUTORECONF=false ./autogen.sh |
| # |
| # To verbosely try running with an older (unsupported) autoconf: |
| # AUTOCONF_VERSION=2.50 ./autogen.sh --verbose |
| # |
| # Author: |
| # Christopher Sean Morrison <morrison@brlcad.org> |
| # |
| # Patches: |
| # Sebastian Pipping <sebastian@pipping.org> |
| # |
| ###################################################################### |
| |
| # set to minimum acceptable version of autoconf |
| if [ "x$AUTOCONF_VERSION" = "x" ] ; then |
| AUTOCONF_VERSION=2.52 |
| fi |
| # set to minimum acceptable version of automake |
| if [ "x$AUTOMAKE_VERSION" = "x" ] ; then |
| AUTOMAKE_VERSION=1.6.0 |
| fi |
| # set to minimum acceptable version of libtool |
| if [ "x$LIBTOOL_VERSION" = "x" ] ; then |
| LIBTOOL_VERSION=1.4.2 |
| fi |
| |
| |
| ################## |
| # ident function # |
| ################## |
| ident ( ) { |
| # extract copyright from header |
| __copyright="`grep Copyright $AUTOGEN_SH | head -${HEAD_N}1 | awk '{print $4}'`" |
| if [ "x$__copyright" = "x" ] ; then |
| __copyright="`date +%Y`" |
| fi |
| |
| # extract version from CVS Id string |
| __id="$Id: autogen.sh 33925 2009-03-01 23:27:06Z brlcad $" |
| __version="`echo $__id | sed 's/.*\([0-9][0-9][0-9][0-9]\)[-\/]\([0-9][0-9]\)[-\/]\([0-9][0-9]\).*/\1\2\3/'`" |
| if [ "x$__version" = "x" ] ; then |
| __version="" |
| fi |
| |
| echo "autogen.sh build preparation script by Christopher Sean Morrison" |
| echo " + config.guess download patch by Sebastian Pipping (2008-12-03)" |
| echo "revised 3-clause BSD-style license, copyright (c) $__copyright" |
| echo "script version $__version, ISO/IEC 9945 POSIX shell script" |
| } |
| |
| |
| ################## |
| # USAGE FUNCTION # |
| ################## |
| usage ( ) { |
| echo "Usage: $AUTOGEN_SH [-h|--help] [-v|--verbose] [-q|--quiet] [-d|--download] [--version]" |
| echo " --help Help on $NAME_OF_AUTOGEN usage" |
| echo " --verbose Verbose progress output" |
| echo " --quiet Quiet suppressed progress output" |
| echo " --download Download the latest config.guess from gnulib" |
| echo " --version Only perform GNU Build System version checks" |
| echo |
| echo "Description: This script will validate that minimum versions of the" |
| echo "GNU Build System tools are installed and then run autoreconf for you." |
| echo "Should autoreconf fail, manual preparation steps will be run" |
| echo "potentially accounting for several common preparation issues. The" |
| |
| echo "AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER," |
| echo "PROJECT, & CONFIGURE environment variables and corresponding _OPTIONS" |
| echo "variables (e.g. AUTORECONF_OPTIONS) may be used to override the" |
| echo "default automatic detection behavior." |
| echo |
| |
| ident |
| |
| return 0 |
| } |
| |
| |
| ########################## |
| # VERSION_ERROR FUNCTION # |
| ########################## |
| version_error ( ) { |
| if [ "x$1" = "x" ] ; then |
| echo "INTERNAL ERROR: version_error was not provided a version" |
| exit 1 |
| fi |
| if [ "x$2" = "x" ] ; then |
| echo "INTERNAL ERROR: version_error was not provided an application name" |
| exit 1 |
| fi |
| $ECHO |
| $ECHO "ERROR: To prepare the ${PROJECT} build system from scratch," |
| $ECHO " at least version $1 of $2 must be installed." |
| $ECHO |
| $ECHO "$NAME_OF_AUTOGEN does not need to be run on the same machine that will" |
| $ECHO "run configure or make. Either the GNU Autotools will need to be installed" |
| $ECHO "or upgraded on this system, or $NAME_OF_AUTOGEN must be run on the source" |
| $ECHO "code on another system and then transferred to here. -- Cheers!" |
| $ECHO |
| } |
| |
| ########################## |
| # VERSION_CHECK FUNCTION # |
| ########################## |
| version_check ( ) { |
| if [ "x$1" = "x" ] ; then |
| echo "INTERNAL ERROR: version_check was not provided a minimum version" |
| exit 1 |
| fi |
| _min="$1" |
| if [ "x$2" = "x" ] ; then |
| echo "INTERNAL ERROR: version check was not provided a comparison version" |
| exit 1 |
| fi |
| _cur="$2" |
| |
| # needed to handle versions like 1.10 and 1.4-p6 |
| _min="`echo ${_min}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" |
| _cur="`echo ${_cur}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`" |
| |
| _min_major="`echo $_min | cut -d. -f1`" |
| _min_minor="`echo $_min | cut -d. -f2`" |
| _min_patch="`echo $_min | cut -d. -f3`" |
| |
| _cur_major="`echo $_cur | cut -d. -f1`" |
| _cur_minor="`echo $_cur | cut -d. -f2`" |
| _cur_patch="`echo $_cur | cut -d. -f3`" |
| |
| if [ "x$_min_major" = "x" ] ; then |
| _min_major=0 |
| fi |
| if [ "x$_min_minor" = "x" ] ; then |
| _min_minor=0 |
| fi |
| if [ "x$_min_patch" = "x" ] ; then |
| _min_patch=0 |
| fi |
| if [ "x$_cur_minor" = "x" ] ; then |
| _cur_major=0 |
| fi |
| if [ "x$_cur_minor" = "x" ] ; then |
| _cur_minor=0 |
| fi |
| if [ "x$_cur_patch" = "x" ] ; then |
| _cur_patch=0 |
| fi |
| |
| $VERBOSE_ECHO "Checking if ${_cur_major}.${_cur_minor}.${_cur_patch} is greater than ${_min_major}.${_min_minor}.${_min_patch}" |
| |
| if [ $_min_major -lt $_cur_major ] ; then |
| return 0 |
| elif [ $_min_major -eq $_cur_major ] ; then |
| if [ $_min_minor -lt $_cur_minor ] ; then |
| return 0 |
| elif [ $_min_minor -eq $_cur_minor ] ; then |
| if [ $_min_patch -lt $_cur_patch ] ; then |
| return 0 |
| elif [ $_min_patch -eq $_cur_patch ] ; then |
| return 0 |
| fi |
| fi |
| fi |
| return 1 |
| } |
| |
| |
| ###################################### |
| # LOCATE_CONFIGURE_TEMPLATE FUNCTION # |
| ###################################### |
| locate_configure_template ( ) { |
| _pwd="`pwd`" |
| if test -f "./configure.ac" ; then |
| echo "./configure.ac" |
| elif test -f "./configure.in" ; then |
| echo "./configure.in" |
| elif test -f "$_pwd/configure.ac" ; then |
| echo "$_pwd/configure.ac" |
| elif test -f "$_pwd/configure.in" ; then |
| echo "$_pwd/configure.in" |
| elif test -f "$PATH_TO_AUTOGEN/configure.ac" ; then |
| echo "$PATH_TO_AUTOGEN/configure.ac" |
| elif test -f "$PATH_TO_AUTOGEN/configure.in" ; then |
| echo "$PATH_TO_AUTOGEN/configure.in" |
| fi |
| } |
| |
| |
| ################## |
| # argument check # |
| ################## |
| ARGS="$*" |
| PATH_TO_AUTOGEN="`dirname $0`" |
| NAME_OF_AUTOGEN="`basename $0`" |
| AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN" |
| |
| LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4" |
| |
| if [ "x$HELP" = "x" ] ; then |
| HELP=no |
| fi |
| if [ "x$QUIET" = "x" ] ; then |
| QUIET=no |
| fi |
| if [ "x$VERBOSE" = "x" ] ; then |
| VERBOSE=no |
| fi |
| if [ "x$VERSION_ONLY" = "x" ] ; then |
| VERSION_ONLY=no |
| fi |
| if [ "x$DOWNLOAD" = "x" ] ; then |
| DOWNLOAD=no |
| fi |
| if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then |
| AUTORECONF_OPTIONS="-i -f" |
| fi |
| if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then |
| AUTOCONF_OPTIONS="-f" |
| fi |
| if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then |
| AUTOMAKE_OPTIONS="-a -c -f" |
| fi |
| ALT_AUTOMAKE_OPTIONS="-a -c" |
| if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then |
| LIBTOOLIZE_OPTIONS="--automake -c -f" |
| fi |
| ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force" |
| if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then |
| ACLOCAL_OPTIONS="" |
| fi |
| if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then |
| AUTOHEADER_OPTIONS="" |
| fi |
| if [ "x$CONFIG_GUESS_URL" = "x" ] ; then |
| CONFIG_GUESS_URL="http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/config.guess;hb=HEAD" |
| fi |
| for arg in $ARGS ; do |
| case "x$arg" in |
| x--help) HELP=yes ;; |
| x-[hH]) HELP=yes ;; |
| x--quiet) QUIET=yes ;; |
| x-[qQ]) QUIET=yes ;; |
| x--verbose) VERBOSE=yes ;; |
| x-[dD]) DOWNLOAD=yes ;; |
| x--download) DOWNLOAD=yes ;; |
| x-[vV]) VERBOSE=yes ;; |
| x--version) VERSION_ONLY=yes ;; |
| *) |
| echo "Unknown option: $arg" |
| echo |
| usage |
| exit 1 |
| ;; |
| esac |
| done |
| |
| |
| ##################### |
| # environment check # |
| ##################### |
| |
| # sanity check before recursions potentially begin |
| if [ ! -f "$AUTOGEN_SH" ] ; then |
| echo "INTERNAL ERROR: $AUTOGEN_SH does not exist" |
| if [ ! "x$0" = "x$AUTOGEN_SH" ] ; then |
| echo "INTERNAL ERROR: dirname/basename inconsistency: $0 != $AUTOGEN_SH" |
| fi |
| exit 1 |
| fi |
| |
| # force locale setting to C so things like date output as expected |
| LC_ALL=C |
| |
| # commands that this script expects |
| for __cmd in echo head tail pwd ; do |
| echo "test" | $__cmd > /dev/null 2>&1 |
| if [ $? != 0 ] ; then |
| echo "INTERNAL ERROR: '${__cmd}' command is required" |
| exit 2 |
| fi |
| done |
| echo "test" | grep "test" > /dev/null 2>&1 |
| if test ! x$? = x0 ; then |
| echo "INTERNAL ERROR: grep command is required" |
| exit 1 |
| fi |
| echo "test" | sed "s/test/test/" > /dev/null 2>&1 |
| if test ! x$? = x0 ; then |
| echo "INTERNAL ERROR: sed command is required" |
| exit 1 |
| fi |
| |
| |
| # determine the behavior of echo |
| case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in |
| *c*,-n*) ECHO_N= ECHO_C=' |
| ' ECHO_T=' ' ;; |
| *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; |
| *) ECHO_N= ECHO_C='\c' ECHO_T= ;; |
| esac |
| |
| # determine the behavior of head |
| case "x`echo 'head' | head -n 1 2>&1`" in |
| *xhead*) HEAD_N="n " ;; |
| *) HEAD_N="" ;; |
| esac |
| |
| # determine the behavior of tail |
| case "x`echo 'tail' | tail -n 1 2>&1`" in |
| *xtail*) TAIL_N="n " ;; |
| *) TAIL_N="" ;; |
| esac |
| |
| VERBOSE_ECHO=: |
| ECHO=: |
| if [ "x$QUIET" = "xyes" ] ; then |
| if [ "x$VERBOSE" = "xyes" ] ; then |
| echo "Verbose output quelled by quiet option. Further output disabled." |
| fi |
| else |
| ECHO=echo |
| if [ "x$VERBOSE" = "xyes" ] ; then |
| echo "Verbose output enabled" |
| VERBOSE_ECHO=echo |
| fi |
| fi |
| |
| |
| # allow a recursive run to disable further recursions |
| if [ "x$RUN_RECURSIVE" = "x" ] ; then |
| RUN_RECURSIVE=yes |
| fi |
| |
| |
| ################################################ |
| # check for help arg and bypass version checks # |
| ################################################ |
| if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then |
| HELP=yes |
| fi |
| if [ "x$HELP" = "xyes" ] ; then |
| usage |
| $ECHO "---" |
| $ECHO "Help was requested. No preparation or configuration will be performed." |
| exit 0 |
| fi |
| |
| |
| ####################### |
| # set up signal traps # |
| ####################### |
| untrap_abnormal ( ) { |
| for sig in 1 2 13 15; do |
| trap - $sig |
| done |
| } |
| |
| # do this cleanup whenever we exit. |
| trap ' |
| # start from the root |
| if test -d "$START_PATH" ; then |
| cd "$START_PATH" |
| fi |
| |
| # restore/delete backup files |
| if test "x$PFC_INIT" = "x1" ; then |
| recursive_restore |
| fi |
| ' 0 |
| |
| # trap SIGHUP (1), SIGINT (2), SIGPIPE (13), SIGTERM (15) |
| for sig in 1 2 13 15; do |
| trap ' |
| $ECHO "" |
| $ECHO "Aborting $NAME_OF_AUTOGEN: caught signal '$sig'" |
| |
| # start from the root |
| if test -d "$START_PATH" ; then |
| cd "$START_PATH" |
| fi |
| |
| # clean up on abnormal exit |
| $VERBOSE_ECHO "rm -rf autom4te.cache" |
| rm -rf autom4te.cache |
| |
| if test -f "acinclude.m4.$$.backup" ; then |
| $VERBOSE_ECHO "cat acinclude.m4.$$.backup > acinclude.m4" |
| chmod u+w acinclude.m4 |
| cat acinclude.m4.$$.backup > acinclude.m4 |
| |
| $VERBOSE_ECHO "rm -f acinclude.m4.$$.backup" |
| rm -f acinclude.m4.$$.backup |
| fi |
| |
| { (exit 1); exit 1; } |
| ' $sig |
| done |
| |
| |
| ############################# |
| # look for a configure file # |
| ############################# |
| if [ "x$CONFIGURE" = "x" ] ; then |
| CONFIGURE="`locate_configure_template`" |
| if [ ! "x$CONFIGURE" = "x" ] ; then |
| $VERBOSE_ECHO "Found a configure template: $CONFIGURE" |
| fi |
| else |
| $ECHO "Using CONFIGURE environment variable override: $CONFIGURE" |
| fi |
| if [ "x$CONFIGURE" = "x" ] ; then |
| if [ "x$VERSION_ONLY" = "xyes" ] ; then |
| CONFIGURE=/dev/null |
| else |
| $ECHO |
| $ECHO "A configure.ac or configure.in file could not be located implying" |
| $ECHO "that the GNU Build System is at least not used in this directory. In" |
| $ECHO "any case, there is nothing to do here without one of those files." |
| $ECHO |
| $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" |
| exit 1 |
| fi |
| fi |
| |
| #################### |
| # get project name # |
| #################### |
| if [ "x$PROJECT" = "x" ] ; then |
| PROJECT="`grep AC_INIT $CONFIGURE | grep -v '.*#.*AC_INIT' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_INIT(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| if [ "x$PROJECT" = "xAC_INIT" ] ; then |
| # projects might be using the older/deprecated arg-less AC_INIT .. look for AM_INIT_AUTOMAKE instead |
| PROJECT="`grep AM_INIT_AUTOMAKE $CONFIGURE | grep -v '.*#.*AM_INIT_AUTOMAKE' | tail -${TAIL_N}1 | sed 's/^[ ]*AM_INIT_AUTOMAKE(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| fi |
| if [ "x$PROJECT" = "xAM_INIT_AUTOMAKE" ] ; then |
| PROJECT="project" |
| fi |
| if [ "x$PROJECT" = "x" ] ; then |
| PROJECT="project" |
| fi |
| else |
| $ECHO "Using PROJECT environment variable override: $PROJECT" |
| fi |
| $ECHO "Preparing the $PROJECT build system...please wait" |
| $ECHO |
| |
| |
| ######################## |
| # check for autoreconf # |
| ######################## |
| HAVE_AUTORECONF=no |
| if [ "x$AUTORECONF" = "x" ] ; then |
| for AUTORECONF in autoreconf ; do |
| $VERBOSE_ECHO "Checking autoreconf version: $AUTORECONF --version" |
| $AUTORECONF --version > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| HAVE_AUTORECONF=yes |
| break |
| fi |
| done |
| else |
| HAVE_AUTORECONF=yes |
| $ECHO "Using AUTORECONF environment variable override: $AUTORECONF" |
| fi |
| |
| |
| ########################## |
| # autoconf version check # |
| ########################## |
| _acfound=no |
| if [ "x$AUTOCONF" = "x" ] ; then |
| for AUTOCONF in autoconf ; do |
| $VERBOSE_ECHO "Checking autoconf version: $AUTOCONF --version" |
| $AUTOCONF --version > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| _acfound=yes |
| break |
| fi |
| done |
| else |
| _acfound=yes |
| $ECHO "Using AUTOCONF environment variable override: $AUTOCONF" |
| fi |
| |
| _report_error=no |
| if [ ! "x$_acfound" = "xyes" ] ; then |
| $ECHO "ERROR: Unable to locate GNU Autoconf." |
| _report_error=yes |
| else |
| _version="`$AUTOCONF --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
| if [ "x$_version" = "x" ] ; then |
| _version="0.0.0" |
| fi |
| $ECHO "Found GNU Autoconf version $_version" |
| version_check "$AUTOCONF_VERSION" "$_version" |
| if [ $? -ne 0 ] ; then |
| _report_error=yes |
| fi |
| fi |
| if [ "x$_report_error" = "xyes" ] ; then |
| version_error "$AUTOCONF_VERSION" "GNU Autoconf" |
| exit 1 |
| fi |
| |
| |
| ########################## |
| # automake version check # |
| ########################## |
| _amfound=no |
| if [ "x$AUTOMAKE" = "x" ] ; then |
| for AUTOMAKE in automake ; do |
| $VERBOSE_ECHO "Checking automake version: $AUTOMAKE --version" |
| $AUTOMAKE --version > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| _amfound=yes |
| break |
| fi |
| done |
| else |
| _amfound=yes |
| $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE" |
| fi |
| |
| |
| _report_error=no |
| if [ ! "x$_amfound" = "xyes" ] ; then |
| $ECHO |
| $ECHO "ERROR: Unable to locate GNU Automake." |
| _report_error=yes |
| else |
| _version="`$AUTOMAKE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
| if [ "x$_version" = "x" ] ; then |
| _version="0.0.0" |
| fi |
| $ECHO "Found GNU Automake version $_version" |
| version_check "$AUTOMAKE_VERSION" "$_version" |
| if [ $? -ne 0 ] ; then |
| _report_error=yes |
| fi |
| fi |
| if [ "x$_report_error" = "xyes" ] ; then |
| version_error "$AUTOMAKE_VERSION" "GNU Automake" |
| exit 1 |
| fi |
| |
| |
| ######################## |
| # check for libtoolize # |
| ######################## |
| HAVE_LIBTOOLIZE=yes |
| HAVE_ALT_LIBTOOLIZE=no |
| _ltfound=no |
| if [ "x$LIBTOOLIZE" = "x" ] ; then |
| LIBTOOLIZE=libtoolize |
| $VERBOSE_ECHO "Checking libtoolize version: $LIBTOOLIZE --version" |
| $LIBTOOLIZE --version > /dev/null 2>&1 |
| if [ ! $? = 0 ] ; then |
| HAVE_LIBTOOLIZE=no |
| $ECHO |
| if [ "x$HAVE_AUTORECONF" = "xno" ] ; then |
| $ECHO "Warning: libtoolize does not appear to be available." |
| else |
| $ECHO "Warning: libtoolize does not appear to be available. This means that" |
| $ECHO "the automatic build preparation via autoreconf will probably not work." |
| $ECHO "Preparing the build by running each step individually, however, should" |
| $ECHO "work and will be done automatically for you if autoreconf fails." |
| fi |
| |
| # look for some alternates |
| for tool in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do |
| $VERBOSE_ECHO "Checking libtoolize alternate: $tool --version" |
| _glibtoolize="`$tool --version > /dev/null 2>&1`" |
| if [ $? = 0 ] ; then |
| $VERBOSE_ECHO "Found $tool --version" |
| _glti="`which $tool`" |
| if [ "x$_glti" = "x" ] ; then |
| $VERBOSE_ECHO "Cannot find $tool with which" |
| continue; |
| fi |
| if test ! -f "$_glti" ; then |
| $VERBOSE_ECHO "Cannot use $tool, $_glti is not a file" |
| continue; |
| fi |
| _gltidir="`dirname $_glti`" |
| if [ "x$_gltidir" = "x" ] ; then |
| $VERBOSE_ECHO "Cannot find $tool path with dirname of $_glti" |
| continue; |
| fi |
| if test ! -d "$_gltidir" ; then |
| $VERBOSE_ECHO "Cannot use $tool, $_gltidir is not a directory" |
| continue; |
| fi |
| HAVE_ALT_LIBTOOLIZE=yes |
| LIBTOOLIZE="$tool" |
| $ECHO |
| $ECHO "Fortunately, $tool was found which means that your system may simply" |
| $ECHO "have a non-standard or incomplete GNU Autotools install. If you have" |
| $ECHO "sufficient system access, it may be possible to quell this warning by" |
| $ECHO "running:" |
| $ECHO |
| sudo -V > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| $ECHO " sudo ln -s $_glti $_gltidir/libtoolize" |
| $ECHO |
| else |
| $ECHO " ln -s $_glti $_gltidir/libtoolize" |
| $ECHO |
| $ECHO "Run that as root or with proper permissions to the $_gltidir directory" |
| $ECHO |
| fi |
| _ltfound=yes |
| break |
| fi |
| done |
| else |
| _ltfound=yes |
| fi |
| else |
| _ltfound=yes |
| $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE" |
| fi |
| |
| |
| ############################ |
| # libtoolize version check # |
| ############################ |
| _report_error=no |
| if [ ! "x$_ltfound" = "xyes" ] ; then |
| $ECHO |
| $ECHO "ERROR: Unable to locate GNU Libtool." |
| _report_error=yes |
| else |
| _version="`$LIBTOOLIZE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`" |
| if [ "x$_version" = "x" ] ; then |
| _version="0.0.0" |
| fi |
| $ECHO "Found GNU Libtool version $_version" |
| version_check "$LIBTOOL_VERSION" "$_version" |
| if [ $? -ne 0 ] ; then |
| _report_error=yes |
| fi |
| fi |
| if [ "x$_report_error" = "xyes" ] ; then |
| version_error "$LIBTOOL_VERSION" "GNU Libtool" |
| exit 1 |
| fi |
| |
| |
| ##################### |
| # check for aclocal # |
| ##################### |
| if [ "x$ACLOCAL" = "x" ] ; then |
| for ACLOCAL in aclocal ; do |
| $VERBOSE_ECHO "Checking aclocal version: $ACLOCAL --version" |
| $ACLOCAL --version > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| break |
| fi |
| done |
| else |
| $ECHO "Using ACLOCAL environment variable override: $ACLOCAL" |
| fi |
| |
| |
| ######################## |
| # check for autoheader # |
| ######################## |
| if [ "x$AUTOHEADER" = "x" ] ; then |
| for AUTOHEADER in autoheader ; do |
| $VERBOSE_ECHO "Checking autoheader version: $AUTOHEADER --version" |
| $AUTOHEADER --version > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| break |
| fi |
| done |
| else |
| $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER" |
| fi |
| |
| |
| ######################### |
| # check if version only # |
| ######################### |
| $VERBOSE_ECHO "Checking whether to only output version information" |
| if [ "x$VERSION_ONLY" = "xyes" ] ; then |
| $ECHO |
| ident |
| $ECHO "---" |
| $ECHO "Version requested. No preparation or configuration will be performed." |
| exit 0 |
| fi |
| |
| |
| ################################# |
| # PROTECT_FROM_CLOBBER FUNCTION # |
| ################################# |
| protect_from_clobber ( ) { |
| PFC_INIT=1 |
| |
| # protect COPYING & INSTALL from overwrite by automake. the |
| # automake force option will (inappropriately) ignore the existing |
| # contents of a COPYING and/or INSTALL files (depending on the |
| # version) instead of just forcing *missing* files like it does |
| # for AUTHORS, NEWS, and README. this is broken but extremely |
| # prevalent behavior, so we protect against it by keeping a backup |
| # of the file that can later be restored. |
| |
| for file in COPYING INSTALL ; do |
| if test -f ${file} ; then |
| if test -f ${file}.$$.protect_from_automake.backup ; then |
| $VERBOSE_ECHO "Already backed up ${file} in `pwd`" |
| else |
| $VERBOSE_ECHO "Backing up ${file} in `pwd`" |
| $VERBOSE_ECHO "cp -p ${file} ${file}.$$.protect_from_automake.backup" |
| cp -p ${file} ${file}.$$.protect_from_automake.backup |
| fi |
| fi |
| done |
| } |
| |
| |
| ############################## |
| # RECURSIVE_PROTECT FUNCTION # |
| ############################## |
| recursive_protect ( ) { |
| |
| # for projects using recursive configure, run the build |
| # preparation steps for the subdirectories. this function assumes |
| # START_PATH was set to pwd before recursion begins so that |
| # relative paths work. |
| |
| # git 'r done, protect COPYING and INSTALL from being clobbered |
| protect_from_clobber |
| |
| if test -d autom4te.cache ; then |
| $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" |
| $VERBOSE_ECHO "rm -rf autom4te.cache" |
| rm -rf autom4te.cache |
| fi |
| |
| # find configure template |
| _configure="`locate_configure_template`" |
| if [ "x$_configure" = "x" ] ; then |
| return |
| fi |
| # $VERBOSE_ECHO "Looking for configure template found `pwd`/$_configure" |
| |
| # look for subdirs |
| # $VERBOSE_ECHO "Looking for subdirs in `pwd`" |
| _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| CHECK_DIRS="" |
| for dir in $_det_config_subdirs ; do |
| if test -d "`pwd`/$dir" ; then |
| CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" |
| fi |
| done |
| |
| # process subdirs |
| if [ ! "x$CHECK_DIRS" = "x" ] ; then |
| $VERBOSE_ECHO "Recursively scanning the following directories:" |
| $VERBOSE_ECHO " $CHECK_DIRS" |
| for dir in $CHECK_DIRS ; do |
| $VERBOSE_ECHO "Protecting files from automake in $dir" |
| cd "$START_PATH" |
| eval "cd $dir" |
| |
| # recursively git 'r done |
| recursive_protect |
| done |
| fi |
| } # end of recursive_protect |
| |
| |
| ############################# |
| # RESTORE_CLOBBERED FUNCION # |
| ############################# |
| restore_clobbered ( ) { |
| |
| # The automake (and autoreconf by extension) -f/--force-missing |
| # option may overwrite COPYING and INSTALL even if they do exist. |
| # Here we restore the files if necessary. |
| |
| spacer=no |
| |
| for file in COPYING INSTALL ; do |
| if test -f ${file}.$$.protect_from_automake.backup ; then |
| if test -f ${file} ; then |
| # compare entire content, restore if needed |
| if test "x`cat ${file}`" != "x`cat ${file}.$$.protect_from_automake.backup`" ; then |
| if test "x$spacer" = "xno" ; then |
| $VERBOSE_ECHO |
| spacer=yes |
| fi |
| # restore the backup |
| $VERBOSE_ECHO "Restoring ${file} from backup (automake -f likely clobbered it)" |
| $VERBOSE_ECHO "rm -f ${file}" |
| rm -f ${file} |
| $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}" |
| mv ${file}.$$.protect_from_automake.backup ${file} |
| fi # check contents |
| elif test -f ${file}.$$.protect_from_automake.backup ; then |
| $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}" |
| mv ${file}.$$.protect_from_automake.backup ${file} |
| fi # -f ${file} |
| |
| # just in case |
| $VERBOSE_ECHO "rm -f ${file}.$$.protect_from_automake.backup" |
| rm -f ${file}.$$.protect_from_automake.backup |
| fi # -f ${file}.$$.protect_from_automake.backup |
| done |
| |
| CONFIGURE="`locate_configure_template`" |
| if [ "x$CONFIGURE" = "x" ] ; then |
| return |
| fi |
| |
| _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| if test ! -d "$_aux_dir" ; then |
| _aux_dir=. |
| fi |
| |
| for file in config.guess config.sub ltmain.sh ; do |
| if test -f "${_aux_dir}/${file}" ; then |
| $VERBOSE_ECHO "rm -f \"${_aux_dir}/${file}.backup\"" |
| rm -f "${_aux_dir}/${file}.backup" |
| fi |
| done |
| } # end of restore_clobbered |
| |
| |
| ############################## |
| # RECURSIVE_RESTORE FUNCTION # |
| ############################## |
| recursive_restore ( ) { |
| |
| # restore COPYING and INSTALL from backup if they were clobbered |
| # for each directory recursively. |
| |
| # git 'r undone |
| restore_clobbered |
| |
| # find configure template |
| _configure="`locate_configure_template`" |
| if [ "x$_configure" = "x" ] ; then |
| return |
| fi |
| |
| # look for subdirs |
| _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| CHECK_DIRS="" |
| for dir in $_det_config_subdirs ; do |
| if test -d "`pwd`/$dir" ; then |
| CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\"" |
| fi |
| done |
| |
| # process subdirs |
| if [ ! "x$CHECK_DIRS" = "x" ] ; then |
| $VERBOSE_ECHO "Recursively scanning the following directories:" |
| $VERBOSE_ECHO " $CHECK_DIRS" |
| for dir in $CHECK_DIRS ; do |
| $VERBOSE_ECHO "Checking files for automake damage in $dir" |
| cd "$START_PATH" |
| eval "cd $dir" |
| |
| # recursively git 'r undone |
| recursive_restore |
| done |
| fi |
| } # end of recursive_restore |
| |
| |
| ####################### |
| # INITIALIZE FUNCTION # |
| ####################### |
| initialize ( ) { |
| |
| # this routine performs a variety of directory-specific |
| # initializations. some are sanity checks, some are preventive, |
| # and some are necessary setup detection. |
| # |
| # this function sets: |
| # CONFIGURE |
| # SEARCH_DIRS |
| # CONFIG_SUBDIRS |
| |
| ################################## |
| # check for a configure template # |
| ################################## |
| CONFIGURE="`locate_configure_template`" |
| if [ "x$CONFIGURE" = "x" ] ; then |
| $ECHO |
| $ECHO "A configure.ac or configure.in file could not be located implying" |
| $ECHO "that the GNU Build System is at least not used in this directory. In" |
| $ECHO "any case, there is nothing to do here without one of those files." |
| $ECHO |
| $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`" |
| exit 1 |
| fi |
| |
| ##################### |
| # detect an aux dir # |
| ##################### |
| _aux_dir="`grep AC_CONFIG_AUX_DIR $CONFIGURE | grep -v '.*#.*AC_CONFIG_AUX_DIR' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_CONFIG_AUX_DIR(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| if test ! -d "$_aux_dir" ; then |
| _aux_dir=. |
| else |
| $VERBOSE_ECHO "Detected auxillary directory: $_aux_dir" |
| fi |
| |
| ################################ |
| # detect a recursive configure # |
| ################################ |
| CONFIG_SUBDIRS="" |
| _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $CONFIGURE | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`" |
| for dir in $_det_config_subdirs ; do |
| if test -d "`pwd`/$dir" ; then |
| $VERBOSE_ECHO "Detected recursive configure directory: `pwd`/$dir" |
| CONFIG_SUBDIRS="$CONFIG_SUBDIRS `pwd`/$dir" |
| fi |
| done |
| |
| ########################################################### |
| # make sure certain required files exist for GNU projects # |
| ########################################################### |
| _marker_found="" |
| _marker_found_message_intro='Detected non-GNU marker "' |
| _marker_found_message_mid='" in ' |
| for marker in foreign cygnus ; do |
| _marker_found_message=${_marker_found_message_intro}${marker}${_marker_found_message_mid} |
| _marker_found="`grep 'AM_INIT_AUTOMAKE.*'${marker} $CONFIGURE`" |
| if [ ! "x$_marker_found" = "x" ] ; then |
| $VERBOSE_ECHO "${_marker_found_message}`basename \"$CONFIGURE\"`" |
| break |
| fi |
| if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then |
| _marker_found="`grep 'AUTOMAKE_OPTIONS.*'${marker} Makefile.am`" |
| if [ ! "x$_marker_found" = "x" ] ; then |
| $VERBOSE_ECHO "${_marker_found_message}Makefile.am" |
| break |
| fi |
| fi |
| done |
| if [ "x${_marker_found}" = "x" ] ; then |
| _suggest_foreign=no |
| for file in AUTHORS COPYING ChangeLog INSTALL NEWS README ; do |
| if [ ! -f $file ] ; then |
| $VERBOSE_ECHO "Touching ${file} since it does not exist" |
| _suggest_foreign=yes |
| touch $file |
| fi |
| done |
| |
| if [ "x${_suggest_foreign}" = "xyes" ] ; then |
| $ECHO |
| $ECHO "Warning: Several files expected of projects that conform to the GNU" |
| $ECHO "coding standards were not found. The files were automatically added" |
| $ECHO "for you since you do not have a 'foreign' declaration specified." |
| $ECHO |
| $ECHO "Considered adding 'foreign' to AM_INIT_AUTOMAKE in `basename \"$CONFIGURE\"`" |
| if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then |
| $ECHO "or to AUTOMAKE_OPTIONS in your top-level Makefile.am file." |
| fi |
| $ECHO |
| fi |
| fi |
| |
| ################################################## |
| # make sure certain generated files do not exist # |
| ################################################## |
| for file in config.guess config.sub ltmain.sh ; do |
| if test -f "${_aux_dir}/${file}" ; then |
| $VERBOSE_ECHO "mv -f \"${_aux_dir}/${file}\" \"${_aux_dir}/${file}.backup\"" |
| mv -f "${_aux_dir}/${file}" "${_aux_dir}/${file}.backup" |
| fi |
| done |
| |
| ############################ |
| # search alternate m4 dirs # |
| ############################ |
| SEARCH_DIRS="" |
| for dir in m4 ; do |
| if [ -d $dir ] ; then |
| $VERBOSE_ECHO "Found extra aclocal search directory: $dir" |
| SEARCH_DIRS="$SEARCH_DIRS -I $dir" |
| fi |
| done |
| |
| ###################################### |
| # remove any previous build products # |
| ###################################### |
| if test -d autom4te.cache ; then |
| $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it" |
| $VERBOSE_ECHO "rm -rf autom4te.cache" |
| rm -rf autom4te.cache |
| fi |
| # tcl/tk (and probably others) have a customized aclocal.m4, so can't delete it |
| # if test -f aclocal.m4 ; then |
| # $VERBOSE_ECHO "Found an aclocal.m4 file, deleting it" |
| # $VERBOSE_ECHO "rm -f aclocal.m4" |
| # rm -f aclocal.m4 |
| # fi |
| |
| } # end of initialize() |
| |
| |
| ############## |
| # initialize # |
| ############## |
| |
| # stash path |
| START_PATH="`pwd`" |
| |
| # Before running autoreconf or manual steps, some prep detection work |
| # is necessary or useful. Only needs to occur once per directory, but |
| # does need to traverse the entire subconfigure hierarchy to protect |
| # files from being clobbered even by autoreconf. |
| recursive_protect |
| |
| # start from where we started |
| cd "$START_PATH" |
| |
| # get ready to process |
| initialize |
| |
| |
| ######################################### |
| # DOWNLOAD_GNULIB_CONFIG_GUESS FUNCTION # |
| ######################################### |
| |
| # TODO - should make sure wget/curl exist and/or work before trying to |
| # use them. |
| |
| download_gnulib_config_guess () { |
| # abuse gitweb to download gnulib's latest config.guess via HTTP |
| config_guess_temp="config.guess.$$.download" |
| ret=1 |
| for __cmd in wget curl fetch ; do |
| $VERBOSE_ECHO "Checking for command ${__cmd}" |
| ${__cmd} --version > /dev/null 2>&1 |
| ret=$? |
| if [ ! $ret = 0 ] ; then |
| continue |
| fi |
| |
| __cmd_version=`${__cmd} --version | head -n 1 | sed -e 's/^[^0-9]\+//' -e 's/ .*//'` |
| $VERBOSE_ECHO "Found ${__cmd} ${__cmd_version}" |
| |
| opts="" |
| case ${__cmd} in |
| wget) |
| opts="-O" |
| ;; |
| curl) |
| opts="-o" |
| ;; |
| fetch) |
| opts="-t 5 -f" |
| ;; |
| esac |
| |
| $VERBOSE_ECHO "Running $__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" |
| eval "$__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" > /dev/null 2>&1 |
| if [ $? = 0 ] ; then |
| mv -f "${config_guess_temp}" ${_aux_dir}/config.guess |
| ret=0 |
| break |
| fi |
| done |
| |
| if [ ! $ret = 0 ] ; then |
| $ECHO "Warning: config.guess download failed from: $CONFIG_GUESS_URL" |
| rm -f "${config_guess_temp}" |
| fi |
| } |
| |
| |
| ############################## |
| # LIBTOOLIZE_NEEDED FUNCTION # |
| ############################## |
| libtoolize_needed () { |
| ret=1 # means no, don't need libtoolize |
| for feature in AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT ; do |
| $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
| found="`grep \"^$feature.*\" $CONFIGURE`" |
| if [ ! "x$found" = "x" ] ; then |
| ret=0 # means yes, need to run libtoolize |
| break |
| fi |
| done |
| return ${ret} |
| } |
| |
| |
| |
| ############################################ |
| # prepare build via autoreconf or manually # |
| ############################################ |
| reconfigure_manually=no |
| if [ "x$HAVE_AUTORECONF" = "xyes" ] ; then |
| $ECHO |
| $ECHO $ECHO_N "Automatically preparing build ... $ECHO_C" |
| |
| $VERBOSE_ECHO "$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS" |
| autoreconf_output="`$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$autoreconf_output" |
| |
| if [ ! $ret = 0 ] ; then |
| if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then |
| if [ ! "x`echo \"$autoreconf_output\" | grep libtoolize | grep \"No such file or directory\"`" = "x" ] ; then |
| $ECHO |
| $ECHO "Warning: autoreconf failed but due to what is usually a common libtool" |
| $ECHO "misconfiguration issue. This problem is encountered on systems that" |
| $ECHO "have installed libtoolize under a different name without providing a" |
| $ECHO "symbolic link or without setting the LIBTOOLIZE environment variable." |
| $ECHO |
| $ECHO "Restarting the preparation steps with LIBTOOLIZE set to $LIBTOOLIZE" |
| |
| export LIBTOOLIZE |
| RUN_RECURSIVE=no |
| export RUN_RECURSIVE |
| untrap_abnormal |
| |
| $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
| sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
| exit $? |
| fi |
| fi |
| |
| $ECHO "Warning: $AUTORECONF failed" |
| |
| if test -f ltmain.sh ; then |
| $ECHO "libtoolize being run by autoreconf is not creating ltmain.sh in the auxillary directory like it should" |
| fi |
| |
| $ECHO "Attempting to run the preparation steps individually" |
| reconfigure_manually=yes |
| else |
| if [ "x$DOWNLOAD" = "xyes" ] ; then |
| if libtoolize_needed ; then |
| download_gnulib_config_guess |
| fi |
| fi |
| fi |
| else |
| reconfigure_manually=yes |
| fi |
| |
| |
| ############################ |
| # LIBTOOL_FAILURE FUNCTION # |
| ############################ |
| libtool_failure ( ) { |
| |
| # libtool is rather error-prone in comparison to the other |
| # autotools and this routine attempts to compensate for some |
| # common failures. the output after a libtoolize failure is |
| # parsed for an error related to AC_PROG_LIBTOOL and if found, we |
| # attempt to inject a project-provided libtool.m4 file. |
| |
| _autoconf_output="$1" |
| |
| if [ "x$RUN_RECURSIVE" = "xno" ] ; then |
| # we already tried the libtool.m4, don't try again |
| return 1 |
| fi |
| |
| if test -f "$LIBTOOL_M4" ; then |
| found_libtool="`$ECHO $_autoconf_output | grep AC_PROG_LIBTOOL`" |
| if test ! "x$found_libtool" = "x" ; then |
| if test -f acinclude.m4 ; then |
| rm -f acinclude.m4.$$.backup |
| $VERBOSE_ECHO "cat acinclude.m4 > acinclude.m4.$$.backup" |
| cat acinclude.m4 > acinclude.m4.$$.backup |
| fi |
| $VERBOSE_ECHO "cat \"$LIBTOOL_M4\" >> acinclude.m4" |
| chmod u+w acinclude.m4 |
| cat "$LIBTOOL_M4" >> acinclude.m4 |
| |
| # don't keep doing this |
| RUN_RECURSIVE=no |
| export RUN_RECURSIVE |
| untrap_abnormal |
| |
| $ECHO |
| $ECHO "Restarting the preparation steps with libtool macros in acinclude.m4" |
| $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
| sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9" |
| exit $? |
| fi |
| fi |
| } |
| |
| |
| ########################### |
| # MANUAL_AUTOGEN FUNCTION # |
| ########################### |
| manual_autogen ( ) { |
| |
| ################################################## |
| # Manual preparation steps taken are as follows: # |
| # aclocal [-I m4] # |
| # libtoolize --automake -c -f # |
| # aclocal [-I m4] # |
| # autoconf -f # |
| # autoheader # |
| # automake -a -c -f # |
| ################################################## |
| |
| ########### |
| # aclocal # |
| ########### |
| $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" |
| aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$aclocal_output" |
| if [ ! $ret = 0 ] ; then $ECHO "ERROR: $ACLOCAL failed" && exit 2 ; fi |
| |
| ############## |
| # libtoolize # |
| ############## |
| if libtoolize_needed ; then |
| if [ "x$HAVE_LIBTOOLIZE" = "xyes" ] ; then |
| $VERBOSE_ECHO "$LIBTOOLIZE $LIBTOOLIZE_OPTIONS" |
| libtoolize_output="`$LIBTOOLIZE $LIBTOOLIZE_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$libtoolize_output" |
| |
| if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi |
| else |
| if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then |
| $VERBOSE_ECHO "$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS" |
| libtoolize_output="`$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$libtoolize_output" |
| |
| if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi |
| fi |
| fi |
| |
| ########### |
| # aclocal # |
| ########### |
| # re-run again as instructed by libtoolize |
| $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS" |
| aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$aclocal_output" |
| |
| # libtoolize might put ltmain.sh in the wrong place |
| if test -f ltmain.sh ; then |
| if test ! -f "${_aux_dir}/ltmain.sh" ; then |
| $ECHO |
| $ECHO "Warning: $LIBTOOLIZE is creating ltmain.sh in the wrong directory" |
| $ECHO |
| $ECHO "Fortunately, the problem can be worked around by simply copying the" |
| $ECHO "file to the appropriate location (${_aux_dir}/). This has been done for you." |
| $ECHO |
| $VERBOSE_ECHO "cp -p ltmain.sh \"${_aux_dir}/ltmain.sh\"" |
| cp -p ltmain.sh "${_aux_dir}/ltmain.sh" |
| $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C" |
| fi |
| fi # ltmain.sh |
| |
| if [ "x$DOWNLOAD" = "xyes" ] ; then |
| download_gnulib_config_guess |
| fi |
| fi # libtoolize_needed |
| |
| ############ |
| # autoconf # |
| ############ |
| $VERBOSE_ECHO |
| $VERBOSE_ECHO "$AUTOCONF $AUTOCONF_OPTIONS" |
| autoconf_output="`$AUTOCONF $AUTOCONF_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$autoconf_output" |
| |
| if [ ! $ret = 0 ] ; then |
| # retry without the -f and check for usage of macros that are too new |
| ac2_59_macros="AC_C_RESTRICT AC_INCLUDES_DEFAULT AC_LANG_ASSERT AC_LANG_WERROR AS_SET_CATFILE" |
| ac2_55_macros="AC_COMPILER_IFELSE AC_FUNC_MBRTOWC AC_HEADER_STDBOOL AC_LANG_CONFTEST AC_LANG_SOURCE AC_LANG_PROGRAM AC_LANG_CALL AC_LANG_FUNC_TRY_LINK AC_MSG_FAILURE AC_PREPROC_IFELSE" |
| ac2_54_macros="AC_C_BACKSLASH_A AC_CONFIG_LIBOBJ_DIR AC_GNU_SOURCE AC_PROG_EGREP AC_PROG_FGREP AC_REPLACE_FNMATCH AC_FUNC_FNMATCH_GNU AC_FUNC_REALLOC AC_TYPE_MBSTATE_T" |
| |
| macros_to_search="" |
| ac_major="`echo ${AUTOCONF_VERSION}. | cut -d. -f1 | sed 's/[^0-9]//g'`" |
| ac_minor="`echo ${AUTOCONF_VERSION}. | cut -d. -f2 | sed 's/[^0-9]//g'`" |
| |
| if [ $ac_major -lt 2 ] ; then |
| macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" |
| else |
| if [ $ac_minor -lt 54 ] ; then |
| macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros" |
| elif [ $ac_minor -lt 55 ] ; then |
| macros_to_search="$ac2_59_macros $ac2_55_macros" |
| elif [ $ac_minor -lt 59 ] ; then |
| macros_to_search="$ac2_59_macros" |
| fi |
| fi |
| |
| configure_ac_macros=__none__ |
| for feature in $macros_to_search ; do |
| $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
| found="`grep \"^$feature.*\" $CONFIGURE`" |
| if [ ! "x$found" = "x" ] ; then |
| if [ "x$configure_ac_macros" = "x__none__" ] ; then |
| configure_ac_macros="$feature" |
| else |
| configure_ac_macros="$feature $configure_ac_macros" |
| fi |
| fi |
| done |
| if [ ! "x$configure_ac_macros" = "x__none__" ] ; then |
| $ECHO |
| $ECHO "Warning: Unsupported macros were found in $CONFIGURE" |
| $ECHO |
| $ECHO "The `basename \"$CONFIGURE\"` file was scanned in order to determine if any" |
| $ECHO "unsupported macros are used that exceed the minimum version" |
| $ECHO "settings specified within this file. As such, the following macros" |
| $ECHO "should be removed from configure.ac or the version numbers in this" |
| $ECHO "file should be increased:" |
| $ECHO |
| $ECHO "$configure_ac_macros" |
| $ECHO |
| $ECHO $ECHO_N "Ignorantly continuing build preparation ... $ECHO_C" |
| fi |
| |
| ################### |
| # autoconf, retry # |
| ################### |
| $VERBOSE_ECHO |
| $VERBOSE_ECHO "$AUTOCONF" |
| autoconf_output="`$AUTOCONF 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$autoconf_output" |
| |
| if [ ! $ret = 0 ] ; then |
| # test if libtool is busted |
| libtool_failure "$autoconf_output" |
| |
| # let the user know what went wrong |
| cat <<EOF |
| $autoconf_output |
| EOF |
| $ECHO "ERROR: $AUTOCONF failed" |
| exit 2 |
| else |
| # autoconf sans -f and possibly sans unsupported options succeed so warn verbosely |
| $ECHO |
| $ECHO "Warning: autoconf seems to have succeeded by removing the following options:" |
| $ECHO " AUTOCONF_OPTIONS=\"$AUTOCONF_OPTIONS\"" |
| $ECHO |
| $ECHO "Removing those options should not be necessary and indicate some other" |
| $ECHO "problem with the build system. The build preparation is highly suspect" |
| $ECHO "and may result in configuration or compilation errors. Consider" |
| if [ "x$VERBOSE_ECHO" = "x:" ] ; then |
| $ECHO "rerunning the build preparation with verbose output enabled." |
| $ECHO " $AUTOGEN_SH --verbose" |
| else |
| $ECHO "reviewing the minimum GNU Autotools version settings contained in" |
| $ECHO "this script along with the macros being used in your `basename \"$CONFIGURE\"` file." |
| fi |
| $ECHO |
| $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C" |
| fi # autoconf ret = 0 |
| fi # autoconf ret = 0 |
| |
| ############## |
| # autoheader # |
| ############## |
| need_autoheader=no |
| for feature in AM_CONFIG_HEADER AC_CONFIG_HEADER ; do |
| $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
| found="`grep \"^$feature.*\" $CONFIGURE`" |
| if [ ! "x$found" = "x" ] ; then |
| need_autoheader=yes |
| break |
| fi |
| done |
| if [ "x$need_autoheader" = "xyes" ] ; then |
| $VERBOSE_ECHO "$AUTOHEADER $AUTOHEADER_OPTIONS" |
| autoheader_output="`$AUTOHEADER $AUTOHEADER_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$autoheader_output" |
| if [ ! $ret = 0 ] ; then $ECHO "ERROR: $AUTOHEADER failed" && exit 2 ; fi |
| fi # need_autoheader |
| |
| ############ |
| # automake # |
| ############ |
| need_automake=no |
| for feature in AM_INIT_AUTOMAKE ; do |
| $VERBOSE_ECHO "Searching for $feature in $CONFIGURE" |
| found="`grep \"^$feature.*\" $CONFIGURE`" |
| if [ ! "x$found" = "x" ] ; then |
| need_automake=yes |
| break |
| fi |
| done |
| |
| if [ "x$need_automake" = "xyes" ] ; then |
| $VERBOSE_ECHO "$AUTOMAKE $AUTOMAKE_OPTIONS" |
| automake_output="`$AUTOMAKE $AUTOMAKE_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$automake_output" |
| |
| if [ ! $ret = 0 ] ; then |
| |
| ################### |
| # automake, retry # |
| ################### |
| $VERBOSE_ECHO |
| $VERBOSE_ECHO "$AUTOMAKE $ALT_AUTOMAKE_OPTIONS" |
| # retry without the -f |
| automake_output="`$AUTOMAKE $ALT_AUTOMAKE_OPTIONS 2>&1`" |
| ret=$? |
| $VERBOSE_ECHO "$automake_output" |
| |
| if [ ! $ret = 0 ] ; then |
| # test if libtool is busted |
| libtool_failure "$automake_output" |
| |
| # let the user know what went wrong |
| cat <<EOF |
| $automake_output |
| EOF |
| $ECHO "ERROR: $AUTOMAKE failed" |
| exit 2 |
| fi # automake retry |
| fi # automake ret = 0 |
| fi # need_automake |
| } # end of manual_autogen |
| |
| |
| ##################################### |
| # RECURSIVE_MANUAL_AUTOGEN FUNCTION # |
| ##################################### |
| recursive_manual_autogen ( ) { |
| |
| # run the build preparation steps manually for this directory |
| manual_autogen |
| |
| # for projects using recursive configure, run the build |
| # preparation steps for the subdirectories. |
| if [ ! "x$CONFIG_SUBDIRS" = "x" ] ; then |
| $VERBOSE_ECHO "Recursively configuring the following directories:" |
| $VERBOSE_ECHO " $CONFIG_SUBDIRS" |
| for dir in $CONFIG_SUBDIRS ; do |
| $VERBOSE_ECHO "Processing recursive configure in $dir" |
| cd "$START_PATH" |
| cd "$dir" |
| |
| # new directory, prepare |
| initialize |
| |
| # run manual steps for the subdir and any others below |
| recursive_manual_autogen |
| done |
| fi |
| } |
| |
| |
| ################################ |
| # run manual preparation steps # |
| ################################ |
| if [ "x$reconfigure_manually" = "xyes" ] ; then |
| $ECHO |
| $ECHO $ECHO_N "Preparing build ... $ECHO_C" |
| |
| recursive_manual_autogen |
| fi |
| |
| |
| ######################### |
| # restore and summarize # |
| ######################### |
| cd "$START_PATH" |
| |
| # restore COPYING and INSTALL from backup if necessary |
| recursive_restore |
| |
| # make sure we end up with a configure script |
| config_ac="`locate_configure_template`" |
| config="`echo $config_ac | sed 's/\.ac$//' | sed 's/\.in$//'`" |
| if [ "x$config" = "x" ] ; then |
| $VERBOSE_ECHO "Could not locate the configure template (from `pwd`)" |
| fi |
| |
| # summarize |
| $ECHO "done" |
| $ECHO |
| if test "x$config" = "x" -o ! -f "$config" ; then |
| $ECHO "WARNING: The $PROJECT build system should now be prepared but there" |
| $ECHO "does not seem to be a resulting configure file. This is unexpected" |
| $ECHO "and likely the result of an error. You should run $NAME_OF_AUTOGEN" |
| $ECHO "with the --verbose option to get more details on a potential" |
| $ECHO "misconfiguration." |
| else |
| $ECHO "The $PROJECT build system is now prepared. To build here, run:" |
| $ECHO " $config" |
| $ECHO " make" |
| fi |
| |
| |
| # Local Variables: |
| # mode: sh |
| # tab-width: 8 |
| # sh-basic-offset: 4 |
| # sh-indentation: 4 |
| # indent-tabs-mode: t |
| # End: |
| # ex: shiftwidth=4 tabstop=8 |