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