Root/autogen.sh

1#!/bin/sh
2# a u t o g e n . s h
3#
4# Copyright (c) 2005-2009 United States Government as represented by
5# the U.S. Army Research Laboratory.
6#
7# Redistribution and use in source and binary forms, with or without
8# modification, are permitted provided that the following conditions
9# are met:
10#
11# 1. Redistributions of source code must retain the above copyright
12# notice, this list of conditions and the following disclaimer.
13#
14# 2. Redistributions in binary form must reproduce the above
15# copyright notice, this list of conditions and the following
16# disclaimer in the documentation and/or other materials provided
17# with the distribution.
18#
19# 3. The name of the author may not be used to endorse or promote
20# products derived from this software without specific prior written
21# permission.
22#
23# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
24# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
27# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
29# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
31# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34#
35###
36#
37# Script for automatically preparing the sources for compilation by
38# performing the myriad of necessary steps. The script attempts to
39# detect proper version support, and outputs warnings about particular
40# systems that have autotool peculiarities.
41#
42# Basically, if everything is set up and installed correctly, the
43# script will validate that minimum versions of the GNU Build System
44# tools are installed, account for several common configuration
45# issues, and then simply run autoreconf for you.
46#
47# If autoreconf fails, which can happen for many valid configurations,
48# this script proceeds to run manual preparation steps effectively
49# providing a POSIX shell script (mostly complete) reimplementation of
50# autoreconf.
51#
52# The AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER
53# environment variables and corresponding _OPTIONS variables (e.g.
54# AUTORECONF_OPTIONS) may be used to override the default automatic
55# detection behaviors. Similarly the _VERSION variables will override
56# the minimum required version numbers.
57#
58# Examples:
59#
60# To obtain help on usage:
61# ./autogen.sh --help
62#
63# To obtain verbose output:
64# ./autogen.sh --verbose
65#
66# To skip autoreconf and prepare manually:
67# AUTORECONF=false ./autogen.sh
68#
69# To verbosely try running with an older (unsupported) autoconf:
70# AUTOCONF_VERSION=2.50 ./autogen.sh --verbose
71#
72# Author:
73# Christopher Sean Morrison <morrison@brlcad.org>
74#
75# Patches:
76# Sebastian Pipping <sebastian@pipping.org>
77#
78######################################################################
79
80# set to minimum acceptable version of autoconf
81if [ "x$AUTOCONF_VERSION" = "x" ] ; then
82    AUTOCONF_VERSION=2.52
83fi
84# set to minimum acceptable version of automake
85if [ "x$AUTOMAKE_VERSION" = "x" ] ; then
86    AUTOMAKE_VERSION=1.6.0
87fi
88# set to minimum acceptable version of libtool
89if [ "x$LIBTOOL_VERSION" = "x" ] ; then
90    LIBTOOL_VERSION=1.4.2
91fi
92
93
94##################
95# ident function #
96##################
97ident ( ) {
98    # extract copyright from header
99    __copyright="`grep Copyright $AUTOGEN_SH | head -${HEAD_N}1 | awk '{print $4}'`"
100    if [ "x$__copyright" = "x" ] ; then
101    __copyright="`date +%Y`"
102    fi
103
104    # extract version from CVS Id string
105    __id="$Id: autogen.sh 33925 2009-03-01 23:27:06Z brlcad $"
106    __version="`echo $__id | sed 's/.*\([0-9][0-9][0-9][0-9]\)[-\/]\([0-9][0-9]\)[-\/]\([0-9][0-9]\).*/\1\2\3/'`"
107    if [ "x$__version" = "x" ] ; then
108    __version=""
109    fi
110
111    echo "autogen.sh build preparation script by Christopher Sean Morrison"
112    echo " + config.guess download patch by Sebastian Pipping (2008-12-03)"
113    echo "revised 3-clause BSD-style license, copyright (c) $__copyright"
114    echo "script version $__version, ISO/IEC 9945 POSIX shell script"
115}
116
117
118##################
119# USAGE FUNCTION #
120##################
121usage ( ) {
122    echo "Usage: $AUTOGEN_SH [-h|--help] [-v|--verbose] [-q|--quiet] [-d|--download] [--version]"
123    echo " --help Help on $NAME_OF_AUTOGEN usage"
124    echo " --verbose Verbose progress output"
125    echo " --quiet Quiet suppressed progress output"
126    echo " --download Download the latest config.guess from gnulib"
127    echo " --version Only perform GNU Build System version checks"
128    echo
129    echo "Description: This script will validate that minimum versions of the"
130    echo "GNU Build System tools are installed and then run autoreconf for you."
131    echo "Should autoreconf fail, manual preparation steps will be run"
132    echo "potentially accounting for several common preparation issues. The"
133
134    echo "AUTORECONF, AUTOCONF, AUTOMAKE, LIBTOOLIZE, ACLOCAL, AUTOHEADER,"
135    echo "PROJECT, & CONFIGURE environment variables and corresponding _OPTIONS"
136    echo "variables (e.g. AUTORECONF_OPTIONS) may be used to override the"
137    echo "default automatic detection behavior."
138    echo
139
140    ident
141
142    return 0
143}
144
145
146##########################
147# VERSION_ERROR FUNCTION #
148##########################
149version_error ( ) {
150    if [ "x$1" = "x" ] ; then
151    echo "INTERNAL ERROR: version_error was not provided a version"
152    exit 1
153    fi
154    if [ "x$2" = "x" ] ; then
155    echo "INTERNAL ERROR: version_error was not provided an application name"
156    exit 1
157    fi
158    $ECHO
159    $ECHO "ERROR: To prepare the ${PROJECT} build system from scratch,"
160    $ECHO " at least version $1 of $2 must be installed."
161    $ECHO
162    $ECHO "$NAME_OF_AUTOGEN does not need to be run on the same machine that will"
163    $ECHO "run configure or make. Either the GNU Autotools will need to be installed"
164    $ECHO "or upgraded on this system, or $NAME_OF_AUTOGEN must be run on the source"
165    $ECHO "code on another system and then transferred to here. -- Cheers!"
166    $ECHO
167}
168
169##########################
170# VERSION_CHECK FUNCTION #
171##########################
172version_check ( ) {
173    if [ "x$1" = "x" ] ; then
174    echo "INTERNAL ERROR: version_check was not provided a minimum version"
175    exit 1
176    fi
177    _min="$1"
178    if [ "x$2" = "x" ] ; then
179    echo "INTERNAL ERROR: version check was not provided a comparison version"
180    exit 1
181    fi
182    _cur="$2"
183
184    # needed to handle versions like 1.10 and 1.4-p6
185    _min="`echo ${_min}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`"
186    _cur="`echo ${_cur}. | sed 's/[^0-9]/./g' | sed 's/\.\././g'`"
187
188    _min_major="`echo $_min | cut -d. -f1`"
189    _min_minor="`echo $_min | cut -d. -f2`"
190    _min_patch="`echo $_min | cut -d. -f3`"
191
192    _cur_major="`echo $_cur | cut -d. -f1`"
193    _cur_minor="`echo $_cur | cut -d. -f2`"
194    _cur_patch="`echo $_cur | cut -d. -f3`"
195
196    if [ "x$_min_major" = "x" ] ; then
197    _min_major=0
198    fi
199    if [ "x$_min_minor" = "x" ] ; then
200    _min_minor=0
201    fi
202    if [ "x$_min_patch" = "x" ] ; then
203    _min_patch=0
204    fi
205    if [ "x$_cur_minor" = "x" ] ; then
206    _cur_major=0
207    fi
208    if [ "x$_cur_minor" = "x" ] ; then
209    _cur_minor=0
210    fi
211    if [ "x$_cur_patch" = "x" ] ; then
212    _cur_patch=0
213    fi
214
215    $VERBOSE_ECHO "Checking if ${_cur_major}.${_cur_minor}.${_cur_patch} is greater than ${_min_major}.${_min_minor}.${_min_patch}"
216
217    if [ $_min_major -lt $_cur_major ] ; then
218    return 0
219    elif [ $_min_major -eq $_cur_major ] ; then
220    if [ $_min_minor -lt $_cur_minor ] ; then
221        return 0
222    elif [ $_min_minor -eq $_cur_minor ] ; then
223        if [ $_min_patch -lt $_cur_patch ] ; then
224        return 0
225        elif [ $_min_patch -eq $_cur_patch ] ; then
226        return 0
227        fi
228    fi
229    fi
230    return 1
231}
232
233
234######################################
235# LOCATE_CONFIGURE_TEMPLATE FUNCTION #
236######################################
237locate_configure_template ( ) {
238    _pwd="`pwd`"
239    if test -f "./configure.ac" ; then
240    echo "./configure.ac"
241    elif test -f "./configure.in" ; then
242    echo "./configure.in"
243    elif test -f "$_pwd/configure.ac" ; then
244    echo "$_pwd/configure.ac"
245    elif test -f "$_pwd/configure.in" ; then
246    echo "$_pwd/configure.in"
247    elif test -f "$PATH_TO_AUTOGEN/configure.ac" ; then
248    echo "$PATH_TO_AUTOGEN/configure.ac"
249    elif test -f "$PATH_TO_AUTOGEN/configure.in" ; then
250    echo "$PATH_TO_AUTOGEN/configure.in"
251    fi
252}
253
254
255##################
256# argument check #
257##################
258ARGS="$*"
259PATH_TO_AUTOGEN="`dirname $0`"
260NAME_OF_AUTOGEN="`basename $0`"
261AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN"
262
263LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4"
264
265if [ "x$HELP" = "x" ] ; then
266    HELP=no
267fi
268if [ "x$QUIET" = "x" ] ; then
269    QUIET=no
270fi
271if [ "x$VERBOSE" = "x" ] ; then
272    VERBOSE=no
273fi
274if [ "x$VERSION_ONLY" = "x" ] ; then
275    VERSION_ONLY=no
276fi
277if [ "x$DOWNLOAD" = "x" ] ; then
278    DOWNLOAD=no
279fi
280if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then
281    AUTORECONF_OPTIONS="-i -f"
282fi
283if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then
284    AUTOCONF_OPTIONS="-f"
285fi
286if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then
287    AUTOMAKE_OPTIONS="-a -c -f"
288fi
289ALT_AUTOMAKE_OPTIONS="-a -c"
290if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then
291    LIBTOOLIZE_OPTIONS="--automake -c -f"
292fi
293ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force"
294if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then
295    ACLOCAL_OPTIONS=""
296fi
297if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then
298    AUTOHEADER_OPTIONS=""
299fi
300if [ "x$CONFIG_GUESS_URL" = "x" ] ; then
301    CONFIG_GUESS_URL="http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=build-aux/config.guess;hb=HEAD"
302fi
303for arg in $ARGS ; do
304    case "x$arg" in
305    x--help) HELP=yes ;;
306    x-[hH]) HELP=yes ;;
307    x--quiet) QUIET=yes ;;
308    x-[qQ]) QUIET=yes ;;
309    x--verbose) VERBOSE=yes ;;
310    x-[dD]) DOWNLOAD=yes ;;
311    x--download) DOWNLOAD=yes ;;
312    x-[vV]) VERBOSE=yes ;;
313    x--version) VERSION_ONLY=yes ;;
314    *)
315        echo "Unknown option: $arg"
316        echo
317        usage
318        exit 1
319        ;;
320    esac
321done
322
323
324#####################
325# environment check #
326#####################
327
328# sanity check before recursions potentially begin
329if [ ! -f "$AUTOGEN_SH" ] ; then
330    echo "INTERNAL ERROR: $AUTOGEN_SH does not exist"
331    if [ ! "x$0" = "x$AUTOGEN_SH" ] ; then
332    echo "INTERNAL ERROR: dirname/basename inconsistency: $0 != $AUTOGEN_SH"
333    fi
334    exit 1
335fi
336
337# force locale setting to C so things like date output as expected
338LC_ALL=C
339
340# commands that this script expects
341for __cmd in echo head tail pwd ; do
342    echo "test" | $__cmd > /dev/null 2>&1
343    if [ $? != 0 ] ; then
344    echo "INTERNAL ERROR: '${__cmd}' command is required"
345    exit 2
346    fi
347done
348echo "test" | grep "test" > /dev/null 2>&1
349if test ! x$? = x0 ; then
350    echo "INTERNAL ERROR: grep command is required"
351    exit 1
352fi
353echo "test" | sed "s/test/test/" > /dev/null 2>&1
354if test ! x$? = x0 ; then
355    echo "INTERNAL ERROR: sed command is required"
356    exit 1
357fi
358
359
360# determine the behavior of echo
361case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
362    *c*,-n*) ECHO_N= ECHO_C='
363' ECHO_T=' ' ;;
364    *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
365    *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
366esac
367
368# determine the behavior of head
369case "x`echo 'head' | head -n 1 2>&1`" in
370    *xhead*) HEAD_N="n " ;;
371    *) HEAD_N="" ;;
372esac
373
374# determine the behavior of tail
375case "x`echo 'tail' | tail -n 1 2>&1`" in
376    *xtail*) TAIL_N="n " ;;
377    *) TAIL_N="" ;;
378esac
379
380VERBOSE_ECHO=:
381ECHO=:
382if [ "x$QUIET" = "xyes" ] ; then
383    if [ "x$VERBOSE" = "xyes" ] ; then
384    echo "Verbose output quelled by quiet option. Further output disabled."
385    fi
386else
387    ECHO=echo
388    if [ "x$VERBOSE" = "xyes" ] ; then
389    echo "Verbose output enabled"
390    VERBOSE_ECHO=echo
391    fi
392fi
393
394
395# allow a recursive run to disable further recursions
396if [ "x$RUN_RECURSIVE" = "x" ] ; then
397    RUN_RECURSIVE=yes
398fi
399
400
401################################################
402# check for help arg and bypass version checks #
403################################################
404if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then
405    HELP=yes
406fi
407if [ "x$HELP" = "xyes" ] ; then
408    usage
409    $ECHO "---"
410    $ECHO "Help was requested. No preparation or configuration will be performed."
411    exit 0
412fi
413
414
415#######################
416# set up signal traps #
417#######################
418untrap_abnormal ( ) {
419    for sig in 1 2 13 15; do
420    trap - $sig
421    done
422}
423
424# do this cleanup whenever we exit.
425trap '
426    # start from the root
427    if test -d "$START_PATH" ; then
428    cd "$START_PATH"
429    fi
430
431    # restore/delete backup files
432    if test "x$PFC_INIT" = "x1" ; then
433    recursive_restore
434    fi
435' 0
436
437# trap SIGHUP (1), SIGINT (2), SIGPIPE (13), SIGTERM (15)
438for sig in 1 2 13 15; do
439    trap '
440    $ECHO ""
441    $ECHO "Aborting $NAME_OF_AUTOGEN: caught signal '$sig'"
442
443    # start from the root
444    if test -d "$START_PATH" ; then
445        cd "$START_PATH"
446    fi
447
448    # clean up on abnormal exit
449    $VERBOSE_ECHO "rm -rf autom4te.cache"
450    rm -rf autom4te.cache
451
452    if test -f "acinclude.m4.$$.backup" ; then
453        $VERBOSE_ECHO "cat acinclude.m4.$$.backup > acinclude.m4"
454        chmod u+w acinclude.m4
455        cat acinclude.m4.$$.backup > acinclude.m4
456
457        $VERBOSE_ECHO "rm -f acinclude.m4.$$.backup"
458        rm -f acinclude.m4.$$.backup
459        fi
460
461    { (exit 1); exit 1; }
462' $sig
463done
464
465
466#############################
467# look for a configure file #
468#############################
469if [ "x$CONFIGURE" = "x" ] ; then
470    CONFIGURE="`locate_configure_template`"
471    if [ ! "x$CONFIGURE" = "x" ] ; then
472    $VERBOSE_ECHO "Found a configure template: $CONFIGURE"
473    fi
474else
475    $ECHO "Using CONFIGURE environment variable override: $CONFIGURE"
476fi
477if [ "x$CONFIGURE" = "x" ] ; then
478    if [ "x$VERSION_ONLY" = "xyes" ] ; then
479    CONFIGURE=/dev/null
480    else
481    $ECHO
482    $ECHO "A configure.ac or configure.in file could not be located implying"
483    $ECHO "that the GNU Build System is at least not used in this directory. In"
484    $ECHO "any case, there is nothing to do here without one of those files."
485    $ECHO
486    $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`"
487    exit 1
488    fi
489fi
490
491####################
492# get project name #
493####################
494if [ "x$PROJECT" = "x" ] ; then
495    PROJECT="`grep AC_INIT $CONFIGURE | grep -v '.*#.*AC_INIT' | tail -${TAIL_N}1 | sed 's/^[ ]*AC_INIT(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
496    if [ "x$PROJECT" = "xAC_INIT" ] ; then
497    # projects might be using the older/deprecated arg-less AC_INIT .. look for AM_INIT_AUTOMAKE instead
498    PROJECT="`grep AM_INIT_AUTOMAKE $CONFIGURE | grep -v '.*#.*AM_INIT_AUTOMAKE' | tail -${TAIL_N}1 | sed 's/^[ ]*AM_INIT_AUTOMAKE(\([^,)]*\).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
499    fi
500    if [ "x$PROJECT" = "xAM_INIT_AUTOMAKE" ] ; then
501    PROJECT="project"
502    fi
503    if [ "x$PROJECT" = "x" ] ; then
504    PROJECT="project"
505    fi
506else
507    $ECHO "Using PROJECT environment variable override: $PROJECT"
508fi
509$ECHO "Preparing the $PROJECT build system...please wait"
510$ECHO
511
512
513########################
514# check for autoreconf #
515########################
516HAVE_AUTORECONF=no
517if [ "x$AUTORECONF" = "x" ] ; then
518    for AUTORECONF in autoreconf ; do
519    $VERBOSE_ECHO "Checking autoreconf version: $AUTORECONF --version"
520    $AUTORECONF --version > /dev/null 2>&1
521    if [ $? = 0 ] ; then
522        HAVE_AUTORECONF=yes
523        break
524    fi
525    done
526else
527    HAVE_AUTORECONF=yes
528    $ECHO "Using AUTORECONF environment variable override: $AUTORECONF"
529fi
530
531
532##########################
533# autoconf version check #
534##########################
535_acfound=no
536if [ "x$AUTOCONF" = "x" ] ; then
537    for AUTOCONF in autoconf ; do
538    $VERBOSE_ECHO "Checking autoconf version: $AUTOCONF --version"
539    $AUTOCONF --version > /dev/null 2>&1
540    if [ $? = 0 ] ; then
541        _acfound=yes
542        break
543    fi
544    done
545else
546    _acfound=yes
547    $ECHO "Using AUTOCONF environment variable override: $AUTOCONF"
548fi
549
550_report_error=no
551if [ ! "x$_acfound" = "xyes" ] ; then
552    $ECHO "ERROR: Unable to locate GNU Autoconf."
553    _report_error=yes
554else
555    _version="`$AUTOCONF --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
556    if [ "x$_version" = "x" ] ; then
557    _version="0.0.0"
558    fi
559    $ECHO "Found GNU Autoconf version $_version"
560    version_check "$AUTOCONF_VERSION" "$_version"
561    if [ $? -ne 0 ] ; then
562    _report_error=yes
563    fi
564fi
565if [ "x$_report_error" = "xyes" ] ; then
566    version_error "$AUTOCONF_VERSION" "GNU Autoconf"
567    exit 1
568fi
569
570
571##########################
572# automake version check #
573##########################
574_amfound=no
575if [ "x$AUTOMAKE" = "x" ] ; then
576    for AUTOMAKE in automake ; do
577    $VERBOSE_ECHO "Checking automake version: $AUTOMAKE --version"
578    $AUTOMAKE --version > /dev/null 2>&1
579    if [ $? = 0 ] ; then
580        _amfound=yes
581        break
582    fi
583    done
584else
585    _amfound=yes
586    $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE"
587fi
588
589
590_report_error=no
591if [ ! "x$_amfound" = "xyes" ] ; then
592    $ECHO
593    $ECHO "ERROR: Unable to locate GNU Automake."
594    _report_error=yes
595else
596    _version="`$AUTOMAKE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
597    if [ "x$_version" = "x" ] ; then
598    _version="0.0.0"
599    fi
600    $ECHO "Found GNU Automake version $_version"
601    version_check "$AUTOMAKE_VERSION" "$_version"
602    if [ $? -ne 0 ] ; then
603    _report_error=yes
604    fi
605fi
606if [ "x$_report_error" = "xyes" ] ; then
607    version_error "$AUTOMAKE_VERSION" "GNU Automake"
608    exit 1
609fi
610
611
612########################
613# check for libtoolize #
614########################
615HAVE_LIBTOOLIZE=yes
616HAVE_ALT_LIBTOOLIZE=no
617_ltfound=no
618if [ "x$LIBTOOLIZE" = "x" ] ; then
619    LIBTOOLIZE=libtoolize
620    $VERBOSE_ECHO "Checking libtoolize version: $LIBTOOLIZE --version"
621    $LIBTOOLIZE --version > /dev/null 2>&1
622    if [ ! $? = 0 ] ; then
623    HAVE_LIBTOOLIZE=no
624    $ECHO
625    if [ "x$HAVE_AUTORECONF" = "xno" ] ; then
626        $ECHO "Warning: libtoolize does not appear to be available."
627    else
628        $ECHO "Warning: libtoolize does not appear to be available. This means that"
629        $ECHO "the automatic build preparation via autoreconf will probably not work."
630        $ECHO "Preparing the build by running each step individually, however, should"
631        $ECHO "work and will be done automatically for you if autoreconf fails."
632    fi
633
634    # look for some alternates
635    for tool in glibtoolize libtoolize15 libtoolize14 libtoolize13 ; do
636        $VERBOSE_ECHO "Checking libtoolize alternate: $tool --version"
637        _glibtoolize="`$tool --version > /dev/null 2>&1`"
638        if [ $? = 0 ] ; then
639        $VERBOSE_ECHO "Found $tool --version"
640        _glti="`which $tool`"
641        if [ "x$_glti" = "x" ] ; then
642            $VERBOSE_ECHO "Cannot find $tool with which"
643            continue;
644        fi
645        if test ! -f "$_glti" ; then
646            $VERBOSE_ECHO "Cannot use $tool, $_glti is not a file"
647            continue;
648        fi
649        _gltidir="`dirname $_glti`"
650        if [ "x$_gltidir" = "x" ] ; then
651            $VERBOSE_ECHO "Cannot find $tool path with dirname of $_glti"
652            continue;
653        fi
654        if test ! -d "$_gltidir" ; then
655            $VERBOSE_ECHO "Cannot use $tool, $_gltidir is not a directory"
656            continue;
657        fi
658        HAVE_ALT_LIBTOOLIZE=yes
659        LIBTOOLIZE="$tool"
660        $ECHO
661        $ECHO "Fortunately, $tool was found which means that your system may simply"
662        $ECHO "have a non-standard or incomplete GNU Autotools install. If you have"
663        $ECHO "sufficient system access, it may be possible to quell this warning by"
664        $ECHO "running:"
665        $ECHO
666        sudo -V > /dev/null 2>&1
667        if [ $? = 0 ] ; then
668            $ECHO " sudo ln -s $_glti $_gltidir/libtoolize"
669            $ECHO
670        else
671            $ECHO " ln -s $_glti $_gltidir/libtoolize"
672            $ECHO
673            $ECHO "Run that as root or with proper permissions to the $_gltidir directory"
674            $ECHO
675        fi
676        _ltfound=yes
677        break
678        fi
679    done
680    else
681    _ltfound=yes
682    fi
683else
684    _ltfound=yes
685    $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE"
686fi
687
688
689############################
690# libtoolize version check #
691############################
692_report_error=no
693if [ ! "x$_ltfound" = "xyes" ] ; then
694    $ECHO
695    $ECHO "ERROR: Unable to locate GNU Libtool."
696    _report_error=yes
697else
698    _version="`$LIBTOOLIZE --version | head -${HEAD_N}1 | sed 's/[^0-9]*\([0-9\.][0-9\.]*\)/\1/'`"
699    if [ "x$_version" = "x" ] ; then
700    _version="0.0.0"
701    fi
702    $ECHO "Found GNU Libtool version $_version"
703    version_check "$LIBTOOL_VERSION" "$_version"
704    if [ $? -ne 0 ] ; then
705    _report_error=yes
706    fi
707fi
708if [ "x$_report_error" = "xyes" ] ; then
709    version_error "$LIBTOOL_VERSION" "GNU Libtool"
710    exit 1
711fi
712
713
714#####################
715# check for aclocal #
716#####################
717if [ "x$ACLOCAL" = "x" ] ; then
718    for ACLOCAL in aclocal ; do
719    $VERBOSE_ECHO "Checking aclocal version: $ACLOCAL --version"
720    $ACLOCAL --version > /dev/null 2>&1
721    if [ $? = 0 ] ; then
722        break
723    fi
724    done
725else
726    $ECHO "Using ACLOCAL environment variable override: $ACLOCAL"
727fi
728
729
730########################
731# check for autoheader #
732########################
733if [ "x$AUTOHEADER" = "x" ] ; then
734    for AUTOHEADER in autoheader ; do
735    $VERBOSE_ECHO "Checking autoheader version: $AUTOHEADER --version"
736    $AUTOHEADER --version > /dev/null 2>&1
737    if [ $? = 0 ] ; then
738        break
739    fi
740    done
741else
742    $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER"
743fi
744
745
746#########################
747# check if version only #
748#########################
749$VERBOSE_ECHO "Checking whether to only output version information"
750if [ "x$VERSION_ONLY" = "xyes" ] ; then
751    $ECHO
752    ident
753    $ECHO "---"
754    $ECHO "Version requested. No preparation or configuration will be performed."
755    exit 0
756fi
757
758
759#################################
760# PROTECT_FROM_CLOBBER FUNCTION #
761#################################
762protect_from_clobber ( ) {
763    PFC_INIT=1
764
765    # protect COPYING & INSTALL from overwrite by automake. the
766    # automake force option will (inappropriately) ignore the existing
767    # contents of a COPYING and/or INSTALL files (depending on the
768    # version) instead of just forcing *missing* files like it does
769    # for AUTHORS, NEWS, and README. this is broken but extremely
770    # prevalent behavior, so we protect against it by keeping a backup
771    # of the file that can later be restored.
772
773    for file in COPYING INSTALL ; do
774    if test -f ${file} ; then
775        if test -f ${file}.$$.protect_from_automake.backup ; then
776        $VERBOSE_ECHO "Already backed up ${file} in `pwd`"
777        else
778        $VERBOSE_ECHO "Backing up ${file} in `pwd`"
779        $VERBOSE_ECHO "cp -p ${file} ${file}.$$.protect_from_automake.backup"
780        cp -p ${file} ${file}.$$.protect_from_automake.backup
781        fi
782    fi
783    done
784}
785
786
787##############################
788# RECURSIVE_PROTECT FUNCTION #
789##############################
790recursive_protect ( ) {
791
792    # for projects using recursive configure, run the build
793    # preparation steps for the subdirectories. this function assumes
794    # START_PATH was set to pwd before recursion begins so that
795    # relative paths work.
796
797    # git 'r done, protect COPYING and INSTALL from being clobbered
798    protect_from_clobber
799
800    if test -d autom4te.cache ; then
801    $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it"
802    $VERBOSE_ECHO "rm -rf autom4te.cache"
803    rm -rf autom4te.cache
804    fi
805
806    # find configure template
807    _configure="`locate_configure_template`"
808    if [ "x$_configure" = "x" ] ; then
809    return
810    fi
811    # $VERBOSE_ECHO "Looking for configure template found `pwd`/$_configure"
812
813    # look for subdirs
814    # $VERBOSE_ECHO "Looking for subdirs in `pwd`"
815    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
816    CHECK_DIRS=""
817    for dir in $_det_config_subdirs ; do
818    if test -d "`pwd`/$dir" ; then
819        CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\""
820    fi
821    done
822
823    # process subdirs
824    if [ ! "x$CHECK_DIRS" = "x" ] ; then
825    $VERBOSE_ECHO "Recursively scanning the following directories:"
826    $VERBOSE_ECHO " $CHECK_DIRS"
827    for dir in $CHECK_DIRS ; do
828        $VERBOSE_ECHO "Protecting files from automake in $dir"
829        cd "$START_PATH"
830        eval "cd $dir"
831
832        # recursively git 'r done
833        recursive_protect
834    done
835    fi
836} # end of recursive_protect
837
838
839#############################
840# RESTORE_CLOBBERED FUNCION #
841#############################
842restore_clobbered ( ) {
843
844    # The automake (and autoreconf by extension) -f/--force-missing
845    # option may overwrite COPYING and INSTALL even if they do exist.
846    # Here we restore the files if necessary.
847
848    spacer=no
849
850    for file in COPYING INSTALL ; do
851    if test -f ${file}.$$.protect_from_automake.backup ; then
852        if test -f ${file} ; then
853        # compare entire content, restore if needed
854        if test "x`cat ${file}`" != "x`cat ${file}.$$.protect_from_automake.backup`" ; then
855        if test "x$spacer" = "xno" ; then
856            $VERBOSE_ECHO
857            spacer=yes
858        fi
859        # restore the backup
860        $VERBOSE_ECHO "Restoring ${file} from backup (automake -f likely clobbered it)"
861        $VERBOSE_ECHO "rm -f ${file}"
862        rm -f ${file}
863        $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}"
864        mv ${file}.$$.protect_from_automake.backup ${file}
865        fi # check contents
866        elif test -f ${file}.$$.protect_from_automake.backup ; then
867        $VERBOSE_ECHO "mv ${file}.$$.protect_from_automake.backup ${file}"
868        mv ${file}.$$.protect_from_automake.backup ${file}
869        fi # -f ${file}
870    
871        # just in case
872        $VERBOSE_ECHO "rm -f ${file}.$$.protect_from_automake.backup"
873        rm -f ${file}.$$.protect_from_automake.backup
874    fi # -f ${file}.$$.protect_from_automake.backup
875    done
876
877    CONFIGURE="`locate_configure_template`"
878    if [ "x$CONFIGURE" = "x" ] ; then
879    return
880    fi
881
882    _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/'`"
883    if test ! -d "$_aux_dir" ; then
884    _aux_dir=.
885    fi
886
887    for file in config.guess config.sub ltmain.sh ; do
888    if test -f "${_aux_dir}/${file}" ; then
889        $VERBOSE_ECHO "rm -f \"${_aux_dir}/${file}.backup\""
890        rm -f "${_aux_dir}/${file}.backup"
891    fi
892    done
893} # end of restore_clobbered
894
895
896##############################
897# RECURSIVE_RESTORE FUNCTION #
898##############################
899recursive_restore ( ) {
900
901    # restore COPYING and INSTALL from backup if they were clobbered
902    # for each directory recursively.
903
904    # git 'r undone
905    restore_clobbered
906
907    # find configure template
908    _configure="`locate_configure_template`"
909    if [ "x$_configure" = "x" ] ; then
910    return
911    fi
912
913    # look for subdirs
914    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $_configure | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
915    CHECK_DIRS=""
916    for dir in $_det_config_subdirs ; do
917    if test -d "`pwd`/$dir" ; then
918        CHECK_DIRS="$CHECK_DIRS \"`pwd`/$dir\""
919    fi
920    done
921
922    # process subdirs
923    if [ ! "x$CHECK_DIRS" = "x" ] ; then
924    $VERBOSE_ECHO "Recursively scanning the following directories:"
925    $VERBOSE_ECHO " $CHECK_DIRS"
926    for dir in $CHECK_DIRS ; do
927        $VERBOSE_ECHO "Checking files for automake damage in $dir"
928        cd "$START_PATH"
929        eval "cd $dir"
930
931        # recursively git 'r undone
932        recursive_restore
933    done
934    fi
935} # end of recursive_restore
936
937
938#######################
939# INITIALIZE FUNCTION #
940#######################
941initialize ( ) {
942
943    # this routine performs a variety of directory-specific
944    # initializations. some are sanity checks, some are preventive,
945    # and some are necessary setup detection.
946    #
947    # this function sets:
948    # CONFIGURE
949    # SEARCH_DIRS
950    # CONFIG_SUBDIRS
951
952    ##################################
953    # check for a configure template #
954    ##################################
955    CONFIGURE="`locate_configure_template`"
956    if [ "x$CONFIGURE" = "x" ] ; then
957    $ECHO
958    $ECHO "A configure.ac or configure.in file could not be located implying"
959    $ECHO "that the GNU Build System is at least not used in this directory. In"
960    $ECHO "any case, there is nothing to do here without one of those files."
961    $ECHO
962    $ECHO "ERROR: No configure.in or configure.ac file found in `pwd`"
963    exit 1
964    fi
965
966    #####################
967    # detect an aux dir #
968    #####################
969    _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/'`"
970    if test ! -d "$_aux_dir" ; then
971    _aux_dir=.
972    else
973    $VERBOSE_ECHO "Detected auxillary directory: $_aux_dir"
974    fi
975
976    ################################
977    # detect a recursive configure #
978    ################################
979    CONFIG_SUBDIRS=""
980    _det_config_subdirs="`grep AC_CONFIG_SUBDIRS $CONFIGURE | grep -v '.*#.*AC_CONFIG_SUBDIRS' | sed 's/^[ ]*AC_CONFIG_SUBDIRS(\(.*\)).*/\1/' | sed 's/.*\[\(.*\)\].*/\1/'`"
981    for dir in $_det_config_subdirs ; do
982    if test -d "`pwd`/$dir" ; then
983        $VERBOSE_ECHO "Detected recursive configure directory: `pwd`/$dir"
984        CONFIG_SUBDIRS="$CONFIG_SUBDIRS `pwd`/$dir"
985    fi
986    done
987
988    ###########################################################
989    # make sure certain required files exist for GNU projects #
990    ###########################################################
991    _marker_found=""
992    _marker_found_message_intro='Detected non-GNU marker "'
993    _marker_found_message_mid='" in '
994    for marker in foreign cygnus ; do
995    _marker_found_message=${_marker_found_message_intro}${marker}${_marker_found_message_mid}
996    _marker_found="`grep 'AM_INIT_AUTOMAKE.*'${marker} $CONFIGURE`"
997    if [ ! "x$_marker_found" = "x" ] ; then
998        $VERBOSE_ECHO "${_marker_found_message}`basename \"$CONFIGURE\"`"
999        break
1000    fi
1001    if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then
1002        _marker_found="`grep 'AUTOMAKE_OPTIONS.*'${marker} Makefile.am`"
1003        if [ ! "x$_marker_found" = "x" ] ; then
1004        $VERBOSE_ECHO "${_marker_found_message}Makefile.am"
1005        break
1006        fi
1007    fi
1008    done
1009    if [ "x${_marker_found}" = "x" ] ; then
1010    _suggest_foreign=no
1011    for file in AUTHORS COPYING ChangeLog INSTALL NEWS README ; do
1012        if [ ! -f $file ] ; then
1013        $VERBOSE_ECHO "Touching ${file} since it does not exist"
1014        _suggest_foreign=yes
1015        touch $file
1016        fi
1017    done
1018
1019    if [ "x${_suggest_foreign}" = "xyes" ] ; then
1020        $ECHO
1021        $ECHO "Warning: Several files expected of projects that conform to the GNU"
1022        $ECHO "coding standards were not found. The files were automatically added"
1023        $ECHO "for you since you do not have a 'foreign' declaration specified."
1024        $ECHO
1025        $ECHO "Considered adding 'foreign' to AM_INIT_AUTOMAKE in `basename \"$CONFIGURE\"`"
1026        if test -f "`dirname \"$CONFIGURE\"/Makefile.am`" ; then
1027        $ECHO "or to AUTOMAKE_OPTIONS in your top-level Makefile.am file."
1028        fi
1029        $ECHO
1030    fi
1031    fi
1032
1033    ##################################################
1034    # make sure certain generated files do not exist #
1035    ##################################################
1036    for file in config.guess config.sub ltmain.sh ; do
1037    if test -f "${_aux_dir}/${file}" ; then
1038        $VERBOSE_ECHO "mv -f \"${_aux_dir}/${file}\" \"${_aux_dir}/${file}.backup\""
1039        mv -f "${_aux_dir}/${file}" "${_aux_dir}/${file}.backup"
1040    fi
1041    done
1042
1043    ############################
1044    # search alternate m4 dirs #
1045    ############################
1046    SEARCH_DIRS=""
1047    for dir in m4 ; do
1048    if [ -d $dir ] ; then
1049        $VERBOSE_ECHO "Found extra aclocal search directory: $dir"
1050        SEARCH_DIRS="$SEARCH_DIRS -I $dir"
1051    fi
1052    done
1053
1054    ######################################
1055    # remove any previous build products #
1056    ######################################
1057    if test -d autom4te.cache ; then
1058    $VERBOSE_ECHO "Found an autom4te.cache directory, deleting it"
1059    $VERBOSE_ECHO "rm -rf autom4te.cache"
1060    rm -rf autom4te.cache
1061    fi
1062# tcl/tk (and probably others) have a customized aclocal.m4, so can't delete it
1063# if test -f aclocal.m4 ; then
1064# $VERBOSE_ECHO "Found an aclocal.m4 file, deleting it"
1065# $VERBOSE_ECHO "rm -f aclocal.m4"
1066# rm -f aclocal.m4
1067# fi
1068
1069} # end of initialize()
1070
1071
1072##############
1073# initialize #
1074##############
1075
1076# stash path
1077START_PATH="`pwd`"
1078
1079# Before running autoreconf or manual steps, some prep detection work
1080# is necessary or useful. Only needs to occur once per directory, but
1081# does need to traverse the entire subconfigure hierarchy to protect
1082# files from being clobbered even by autoreconf.
1083recursive_protect
1084
1085# start from where we started
1086cd "$START_PATH"
1087
1088# get ready to process
1089initialize
1090
1091
1092#########################################
1093# DOWNLOAD_GNULIB_CONFIG_GUESS FUNCTION #
1094#########################################
1095
1096# TODO - should make sure wget/curl exist and/or work before trying to
1097# use them.
1098
1099download_gnulib_config_guess () {
1100    # abuse gitweb to download gnulib's latest config.guess via HTTP
1101    config_guess_temp="config.guess.$$.download"
1102    ret=1
1103    for __cmd in wget curl fetch ; do
1104    $VERBOSE_ECHO "Checking for command ${__cmd}"
1105    ${__cmd} --version > /dev/null 2>&1
1106    ret=$?
1107    if [ ! $ret = 0 ] ; then
1108        continue
1109        fi
1110
1111    __cmd_version=`${__cmd} --version | head -n 1 | sed -e 's/^[^0-9]\+//' -e 's/ .*//'`
1112    $VERBOSE_ECHO "Found ${__cmd} ${__cmd_version}"
1113
1114    opts=""
1115    case ${__cmd} in
1116        wget)
1117        opts="-O"
1118        ;;
1119        curl)
1120        opts="-o"
1121        ;;
1122        fetch)
1123        opts="-t 5 -f"
1124        ;;
1125    esac
1126
1127    $VERBOSE_ECHO "Running $__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\""
1128    eval "$__cmd \"${CONFIG_GUESS_URL}\" $opts \"${config_guess_temp}\"" > /dev/null 2>&1
1129    if [ $? = 0 ] ; then
1130        mv -f "${config_guess_temp}" ${_aux_dir}/config.guess
1131        ret=0
1132        break
1133    fi
1134    done
1135
1136    if [ ! $ret = 0 ] ; then
1137    $ECHO "Warning: config.guess download failed from: $CONFIG_GUESS_URL"
1138    rm -f "${config_guess_temp}"
1139    fi
1140}
1141
1142
1143##############################
1144# LIBTOOLIZE_NEEDED FUNCTION #
1145##############################
1146libtoolize_needed () {
1147    ret=1 # means no, don't need libtoolize
1148    for feature in AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT ; do
1149    $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
1150    found="`grep \"^$feature.*\" $CONFIGURE`"
1151    if [ ! "x$found" = "x" ] ; then
1152        ret=0 # means yes, need to run libtoolize
1153        break
1154    fi
1155    done
1156    return ${ret}
1157}
1158
1159
1160
1161############################################
1162# prepare build via autoreconf or manually #
1163############################################
1164reconfigure_manually=no
1165if [ "x$HAVE_AUTORECONF" = "xyes" ] ; then
1166    $ECHO
1167    $ECHO $ECHO_N "Automatically preparing build ... $ECHO_C"
1168
1169    $VERBOSE_ECHO "$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS"
1170    autoreconf_output="`$AUTORECONF $SEARCH_DIRS $AUTORECONF_OPTIONS 2>&1`"
1171    ret=$?
1172    $VERBOSE_ECHO "$autoreconf_output"
1173
1174    if [ ! $ret = 0 ] ; then
1175    if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then
1176        if [ ! "x`echo \"$autoreconf_output\" | grep libtoolize | grep \"No such file or directory\"`" = "x" ] ; then
1177        $ECHO
1178        $ECHO "Warning: autoreconf failed but due to what is usually a common libtool"
1179        $ECHO "misconfiguration issue. This problem is encountered on systems that"
1180        $ECHO "have installed libtoolize under a different name without providing a"
1181        $ECHO "symbolic link or without setting the LIBTOOLIZE environment variable."
1182        $ECHO
1183        $ECHO "Restarting the preparation steps with LIBTOOLIZE set to $LIBTOOLIZE"
1184
1185        export LIBTOOLIZE
1186        RUN_RECURSIVE=no
1187        export RUN_RECURSIVE
1188        untrap_abnormal
1189
1190        $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
1191        sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
1192        exit $?
1193        fi
1194    fi
1195
1196    $ECHO "Warning: $AUTORECONF failed"
1197
1198    if test -f ltmain.sh ; then
1199        $ECHO "libtoolize being run by autoreconf is not creating ltmain.sh in the auxillary directory like it should"
1200    fi
1201
1202    $ECHO "Attempting to run the preparation steps individually"
1203    reconfigure_manually=yes
1204    else
1205    if [ "x$DOWNLOAD" = "xyes" ] ; then
1206        if libtoolize_needed ; then
1207        download_gnulib_config_guess
1208        fi
1209    fi
1210    fi
1211else
1212    reconfigure_manually=yes
1213fi
1214
1215
1216############################
1217# LIBTOOL_FAILURE FUNCTION #
1218############################
1219libtool_failure ( ) {
1220
1221    # libtool is rather error-prone in comparison to the other
1222    # autotools and this routine attempts to compensate for some
1223    # common failures. the output after a libtoolize failure is
1224    # parsed for an error related to AC_PROG_LIBTOOL and if found, we
1225    # attempt to inject a project-provided libtool.m4 file.
1226
1227    _autoconf_output="$1"
1228
1229    if [ "x$RUN_RECURSIVE" = "xno" ] ; then
1230    # we already tried the libtool.m4, don't try again
1231    return 1
1232    fi
1233
1234    if test -f "$LIBTOOL_M4" ; then
1235    found_libtool="`$ECHO $_autoconf_output | grep AC_PROG_LIBTOOL`"
1236    if test ! "x$found_libtool" = "x" ; then
1237        if test -f acinclude.m4 ; then
1238        rm -f acinclude.m4.$$.backup
1239        $VERBOSE_ECHO "cat acinclude.m4 > acinclude.m4.$$.backup"
1240        cat acinclude.m4 > acinclude.m4.$$.backup
1241        fi
1242        $VERBOSE_ECHO "cat \"$LIBTOOL_M4\" >> acinclude.m4"
1243        chmod u+w acinclude.m4
1244        cat "$LIBTOOL_M4" >> acinclude.m4
1245
1246        # don't keep doing this
1247        RUN_RECURSIVE=no
1248        export RUN_RECURSIVE
1249        untrap_abnormal
1250
1251        $ECHO
1252        $ECHO "Restarting the preparation steps with libtool macros in acinclude.m4"
1253        $VERBOSE_ECHO sh $AUTOGEN_SH "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
1254        sh "$AUTOGEN_SH" "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"
1255        exit $?
1256    fi
1257    fi
1258}
1259
1260
1261###########################
1262# MANUAL_AUTOGEN FUNCTION #
1263###########################
1264manual_autogen ( ) {
1265
1266    ##################################################
1267    # Manual preparation steps taken are as follows: #
1268    # aclocal [-I m4] #
1269    # libtoolize --automake -c -f #
1270    # aclocal [-I m4] #
1271    # autoconf -f #
1272    # autoheader #
1273    # automake -a -c -f #
1274    ##################################################
1275
1276    ###########
1277    # aclocal #
1278    ###########
1279    $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS"
1280    aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`"
1281    ret=$?
1282    $VERBOSE_ECHO "$aclocal_output"
1283    if [ ! $ret = 0 ] ; then $ECHO "ERROR: $ACLOCAL failed" && exit 2 ; fi
1284
1285    ##############
1286    # libtoolize #
1287    ##############
1288    if libtoolize_needed ; then
1289    if [ "x$HAVE_LIBTOOLIZE" = "xyes" ] ; then
1290        $VERBOSE_ECHO "$LIBTOOLIZE $LIBTOOLIZE_OPTIONS"
1291        libtoolize_output="`$LIBTOOLIZE $LIBTOOLIZE_OPTIONS 2>&1`"
1292        ret=$?
1293        $VERBOSE_ECHO "$libtoolize_output"
1294
1295        if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi
1296    else
1297        if [ "x$HAVE_ALT_LIBTOOLIZE" = "xyes" ] ; then
1298        $VERBOSE_ECHO "$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS"
1299        libtoolize_output="`$LIBTOOLIZE $ALT_LIBTOOLIZE_OPTIONS 2>&1`"
1300        ret=$?
1301        $VERBOSE_ECHO "$libtoolize_output"
1302
1303        if [ ! $ret = 0 ] ; then $ECHO "ERROR: $LIBTOOLIZE failed" && exit 2 ; fi
1304        fi
1305    fi
1306
1307    ###########
1308    # aclocal #
1309    ###########
1310    # re-run again as instructed by libtoolize
1311    $VERBOSE_ECHO "$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS"
1312    aclocal_output="`$ACLOCAL $SEARCH_DIRS $ACLOCAL_OPTIONS 2>&1`"
1313    ret=$?
1314    $VERBOSE_ECHO "$aclocal_output"
1315
1316    # libtoolize might put ltmain.sh in the wrong place
1317    if test -f ltmain.sh ; then
1318        if test ! -f "${_aux_dir}/ltmain.sh" ; then
1319        $ECHO
1320        $ECHO "Warning: $LIBTOOLIZE is creating ltmain.sh in the wrong directory"
1321        $ECHO
1322        $ECHO "Fortunately, the problem can be worked around by simply copying the"
1323        $ECHO "file to the appropriate location (${_aux_dir}/). This has been done for you."
1324        $ECHO
1325        $VERBOSE_ECHO "cp -p ltmain.sh \"${_aux_dir}/ltmain.sh\""
1326        cp -p ltmain.sh "${_aux_dir}/ltmain.sh"
1327        $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C"
1328        fi
1329    fi # ltmain.sh
1330
1331    if [ "x$DOWNLOAD" = "xyes" ] ; then
1332        download_gnulib_config_guess
1333    fi
1334    fi # libtoolize_needed
1335
1336    ############
1337    # autoconf #
1338    ############
1339    $VERBOSE_ECHO
1340    $VERBOSE_ECHO "$AUTOCONF $AUTOCONF_OPTIONS"
1341    autoconf_output="`$AUTOCONF $AUTOCONF_OPTIONS 2>&1`"
1342    ret=$?
1343    $VERBOSE_ECHO "$autoconf_output"
1344
1345    if [ ! $ret = 0 ] ; then
1346    # retry without the -f and check for usage of macros that are too new
1347    ac2_59_macros="AC_C_RESTRICT AC_INCLUDES_DEFAULT AC_LANG_ASSERT AC_LANG_WERROR AS_SET_CATFILE"
1348    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"
1349    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"
1350
1351    macros_to_search=""
1352    ac_major="`echo ${AUTOCONF_VERSION}. | cut -d. -f1 | sed 's/[^0-9]//g'`"
1353    ac_minor="`echo ${AUTOCONF_VERSION}. | cut -d. -f2 | sed 's/[^0-9]//g'`"
1354
1355    if [ $ac_major -lt 2 ] ; then
1356        macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros"
1357    else
1358        if [ $ac_minor -lt 54 ] ; then
1359        macros_to_search="$ac2_59_macros $ac2_55_macros $ac2_54_macros"
1360        elif [ $ac_minor -lt 55 ] ; then
1361        macros_to_search="$ac2_59_macros $ac2_55_macros"
1362        elif [ $ac_minor -lt 59 ] ; then
1363        macros_to_search="$ac2_59_macros"
1364        fi
1365    fi
1366
1367    configure_ac_macros=__none__
1368    for feature in $macros_to_search ; do
1369        $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
1370        found="`grep \"^$feature.*\" $CONFIGURE`"
1371        if [ ! "x$found" = "x" ] ; then
1372        if [ "x$configure_ac_macros" = "x__none__" ] ; then
1373            configure_ac_macros="$feature"
1374        else
1375            configure_ac_macros="$feature $configure_ac_macros"
1376        fi
1377        fi
1378    done
1379    if [ ! "x$configure_ac_macros" = "x__none__" ] ; then
1380        $ECHO
1381        $ECHO "Warning: Unsupported macros were found in $CONFIGURE"
1382        $ECHO
1383        $ECHO "The `basename \"$CONFIGURE\"` file was scanned in order to determine if any"
1384        $ECHO "unsupported macros are used that exceed the minimum version"
1385        $ECHO "settings specified within this file. As such, the following macros"
1386        $ECHO "should be removed from configure.ac or the version numbers in this"
1387        $ECHO "file should be increased:"
1388        $ECHO
1389        $ECHO "$configure_ac_macros"
1390        $ECHO
1391        $ECHO $ECHO_N "Ignorantly continuing build preparation ... $ECHO_C"
1392    fi
1393
1394    ###################
1395    # autoconf, retry #
1396    ###################
1397    $VERBOSE_ECHO
1398    $VERBOSE_ECHO "$AUTOCONF"
1399    autoconf_output="`$AUTOCONF 2>&1`"
1400    ret=$?
1401    $VERBOSE_ECHO "$autoconf_output"
1402
1403    if [ ! $ret = 0 ] ; then
1404        # test if libtool is busted
1405        libtool_failure "$autoconf_output"
1406
1407        # let the user know what went wrong
1408        cat <<EOF
1409$autoconf_output
1410EOF
1411        $ECHO "ERROR: $AUTOCONF failed"
1412        exit 2
1413    else
1414        # autoconf sans -f and possibly sans unsupported options succeed so warn verbosely
1415        $ECHO
1416        $ECHO "Warning: autoconf seems to have succeeded by removing the following options:"
1417        $ECHO " AUTOCONF_OPTIONS=\"$AUTOCONF_OPTIONS\""
1418        $ECHO
1419        $ECHO "Removing those options should not be necessary and indicate some other"
1420        $ECHO "problem with the build system. The build preparation is highly suspect"
1421        $ECHO "and may result in configuration or compilation errors. Consider"
1422        if [ "x$VERBOSE_ECHO" = "x:" ] ; then
1423        $ECHO "rerunning the build preparation with verbose output enabled."
1424        $ECHO " $AUTOGEN_SH --verbose"
1425        else
1426        $ECHO "reviewing the minimum GNU Autotools version settings contained in"
1427        $ECHO "this script along with the macros being used in your `basename \"$CONFIGURE\"` file."
1428        fi
1429        $ECHO
1430        $ECHO $ECHO_N "Continuing build preparation ... $ECHO_C"
1431    fi # autoconf ret = 0
1432    fi # autoconf ret = 0
1433
1434    ##############
1435    # autoheader #
1436    ##############
1437    need_autoheader=no
1438    for feature in AM_CONFIG_HEADER AC_CONFIG_HEADER ; do
1439    $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
1440    found="`grep \"^$feature.*\" $CONFIGURE`"
1441    if [ ! "x$found" = "x" ] ; then
1442        need_autoheader=yes
1443        break
1444    fi
1445    done
1446    if [ "x$need_autoheader" = "xyes" ] ; then
1447    $VERBOSE_ECHO "$AUTOHEADER $AUTOHEADER_OPTIONS"
1448    autoheader_output="`$AUTOHEADER $AUTOHEADER_OPTIONS 2>&1`"
1449    ret=$?
1450    $VERBOSE_ECHO "$autoheader_output"
1451    if [ ! $ret = 0 ] ; then $ECHO "ERROR: $AUTOHEADER failed" && exit 2 ; fi
1452    fi # need_autoheader
1453
1454    ############
1455    # automake #
1456    ############
1457    need_automake=no
1458    for feature in AM_INIT_AUTOMAKE ; do
1459    $VERBOSE_ECHO "Searching for $feature in $CONFIGURE"
1460    found="`grep \"^$feature.*\" $CONFIGURE`"
1461    if [ ! "x$found" = "x" ] ; then
1462        need_automake=yes
1463        break
1464    fi
1465    done
1466
1467    if [ "x$need_automake" = "xyes" ] ; then
1468    $VERBOSE_ECHO "$AUTOMAKE $AUTOMAKE_OPTIONS"
1469    automake_output="`$AUTOMAKE $AUTOMAKE_OPTIONS 2>&1`"
1470    ret=$?
1471    $VERBOSE_ECHO "$automake_output"
1472
1473    if [ ! $ret = 0 ] ; then
1474
1475        ###################
1476        # automake, retry #
1477        ###################
1478        $VERBOSE_ECHO
1479        $VERBOSE_ECHO "$AUTOMAKE $ALT_AUTOMAKE_OPTIONS"
1480        # retry without the -f
1481        automake_output="`$AUTOMAKE $ALT_AUTOMAKE_OPTIONS 2>&1`"
1482        ret=$?
1483        $VERBOSE_ECHO "$automake_output"
1484
1485        if [ ! $ret = 0 ] ; then
1486         # test if libtool is busted
1487        libtool_failure "$automake_output"
1488
1489        # let the user know what went wrong
1490        cat <<EOF
1491$automake_output
1492EOF
1493        $ECHO "ERROR: $AUTOMAKE failed"
1494        exit 2
1495        fi # automake retry
1496    fi # automake ret = 0
1497    fi # need_automake
1498} # end of manual_autogen
1499
1500
1501#####################################
1502# RECURSIVE_MANUAL_AUTOGEN FUNCTION #
1503#####################################
1504recursive_manual_autogen ( ) {
1505
1506    # run the build preparation steps manually for this directory
1507    manual_autogen
1508
1509    # for projects using recursive configure, run the build
1510    # preparation steps for the subdirectories.
1511    if [ ! "x$CONFIG_SUBDIRS" = "x" ] ; then
1512    $VERBOSE_ECHO "Recursively configuring the following directories:"
1513    $VERBOSE_ECHO " $CONFIG_SUBDIRS"
1514    for dir in $CONFIG_SUBDIRS ; do
1515        $VERBOSE_ECHO "Processing recursive configure in $dir"
1516        cd "$START_PATH"
1517        cd "$dir"
1518
1519        # new directory, prepare
1520        initialize
1521
1522        # run manual steps for the subdir and any others below
1523        recursive_manual_autogen
1524    done
1525    fi
1526}
1527
1528
1529################################
1530# run manual preparation steps #
1531################################
1532if [ "x$reconfigure_manually" = "xyes" ] ; then
1533    $ECHO
1534    $ECHO $ECHO_N "Preparing build ... $ECHO_C"
1535
1536    recursive_manual_autogen
1537fi
1538
1539
1540#########################
1541# restore and summarize #
1542#########################
1543cd "$START_PATH"
1544
1545# restore COPYING and INSTALL from backup if necessary
1546recursive_restore
1547
1548# make sure we end up with a configure script
1549config_ac="`locate_configure_template`"
1550config="`echo $config_ac | sed 's/\.ac$//' | sed 's/\.in$//'`"
1551if [ "x$config" = "x" ] ; then
1552    $VERBOSE_ECHO "Could not locate the configure template (from `pwd`)"
1553fi
1554
1555# summarize
1556$ECHO "done"
1557$ECHO
1558if test "x$config" = "x" -o ! -f "$config" ; then
1559    $ECHO "WARNING: The $PROJECT build system should now be prepared but there"
1560    $ECHO "does not seem to be a resulting configure file. This is unexpected"
1561    $ECHO "and likely the result of an error. You should run $NAME_OF_AUTOGEN"
1562    $ECHO "with the --verbose option to get more details on a potential"
1563    $ECHO "misconfiguration."
1564else
1565    $ECHO "The $PROJECT build system is now prepared. To build here, run:"
1566    $ECHO " $config"
1567    $ECHO " make"
1568fi
1569
1570
1571# Local Variables:
1572# mode: sh
1573# tab-width: 8
1574# sh-basic-offset: 4
1575# sh-indentation: 4
1576# indent-tabs-mode: t
1577# End:
1578# ex: shiftwidth=4 tabstop=8
1579

Archive Download this file



interactive