Update and add some comments to the default and example configuration files.
[umurmur.git] / 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
81 if [ "x$AUTOCONF_VERSION" = "x" ] ; then
82     AUTOCONF_VERSION=2.52
83 fi
84 # set to minimum acceptable version of automake
85 if [ "x$AUTOMAKE_VERSION" = "x" ] ; then
86     AUTOMAKE_VERSION=1.6.0
87 fi
88 # set to minimum acceptable version of libtool
89 if [ "x$LIBTOOL_VERSION" = "x" ] ; then
90     LIBTOOL_VERSION=1.4.2
91 fi
92
93
94 ##################
95 # ident function #
96 ##################
97 ident ( ) {
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 ##################
121 usage ( ) {
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 ##########################
149 version_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 ##########################
172 version_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 ######################################
237 locate_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 ##################
258 ARGS="$*"
259 PATH_TO_AUTOGEN="`dirname $0`"
260 NAME_OF_AUTOGEN="`basename $0`"
261 AUTOGEN_SH="$PATH_TO_AUTOGEN/$NAME_OF_AUTOGEN"
262
263 LIBTOOL_M4="${PATH_TO_AUTOGEN}/misc/libtool.m4"
264
265 if [ "x$HELP" = "x" ] ; then
266     HELP=no
267 fi
268 if [ "x$QUIET" = "x" ] ; then
269     QUIET=no
270 fi
271 if [ "x$VERBOSE" = "x" ] ; then
272     VERBOSE=no
273 fi
274 if [ "x$VERSION_ONLY" = "x" ] ; then
275     VERSION_ONLY=no
276 fi
277 if [ "x$DOWNLOAD" = "x" ] ; then
278     DOWNLOAD=no
279 fi
280 if [ "x$AUTORECONF_OPTIONS" = "x" ] ; then
281     AUTORECONF_OPTIONS="-i -f"
282 fi
283 if [ "x$AUTOCONF_OPTIONS" = "x" ] ; then
284     AUTOCONF_OPTIONS="-f"
285 fi
286 if [ "x$AUTOMAKE_OPTIONS" = "x" ] ; then
287     AUTOMAKE_OPTIONS="-a -c -f"
288 fi
289 ALT_AUTOMAKE_OPTIONS="-a -c"
290 if [ "x$LIBTOOLIZE_OPTIONS" = "x" ] ; then
291     LIBTOOLIZE_OPTIONS="--automake -c -f"
292 fi
293 ALT_LIBTOOLIZE_OPTIONS="--automake --copy --force"
294 if [ "x$ACLOCAL_OPTIONS" = "x" ] ; then
295     ACLOCAL_OPTIONS=""
296 fi
297 if [ "x$AUTOHEADER_OPTIONS" = "x" ] ; then
298     AUTOHEADER_OPTIONS=""
299 fi
300 if [ "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"
302 fi
303 for 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
321 done
322
323
324 #####################
325 # environment check #
326 #####################
327
328 # sanity check before recursions potentially begin
329 if [ ! -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
335 fi
336
337 # force locale setting to C so things like date output as expected
338 LC_ALL=C
339
340 # commands that this script expects
341 for __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
347 done
348 echo "test" | grep "test" > /dev/null 2>&1
349 if test ! x$? = x0 ; then
350     echo "INTERNAL ERROR: grep command is required"
351     exit 1
352 fi
353 echo "test" | sed "s/test/test/" > /dev/null 2>&1
354 if test ! x$? = x0 ; then
355     echo "INTERNAL ERROR: sed command is required"
356     exit 1
357 fi
358
359
360 # determine the behavior of echo
361 case `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= ;;
366 esac
367
368 # determine the behavior of head
369 case "x`echo 'head' | head -n 1 2>&1`" in
370     *xhead*) HEAD_N="n " ;;
371     *) HEAD_N="" ;;
372 esac
373
374 # determine the behavior of tail
375 case "x`echo 'tail' | tail -n 1 2>&1`" in
376     *xtail*) TAIL_N="n " ;;
377     *) TAIL_N="" ;;
378 esac
379
380 VERBOSE_ECHO=:
381 ECHO=:
382 if [ "x$QUIET" = "xyes" ] ; then
383     if [ "x$VERBOSE" = "xyes" ] ; then
384         echo "Verbose output quelled by quiet option.  Further output disabled."
385     fi
386 else
387     ECHO=echo
388     if [ "x$VERBOSE" = "xyes" ] ; then
389         echo "Verbose output enabled"
390         VERBOSE_ECHO=echo
391     fi
392 fi
393
394
395 # allow a recursive run to disable further recursions
396 if [ "x$RUN_RECURSIVE" = "x" ] ; then
397     RUN_RECURSIVE=yes
398 fi
399
400
401 ################################################
402 # check for help arg and bypass version checks #
403 ################################################
404 if [ "x`echo $ARGS | sed 's/.*[hH][eE][lL][pP].*/help/'`" = "xhelp" ] ; then
405     HELP=yes
406 fi
407 if [ "x$HELP" = "xyes" ] ; then
408     usage
409     $ECHO "---"
410     $ECHO "Help was requested.  No preparation or configuration will be performed."
411     exit 0
412 fi
413
414
415 #######################
416 # set up signal traps #
417 #######################
418 untrap_abnormal ( ) {
419     for sig in 1 2 13 15; do
420         trap - $sig
421     done
422 }
423
424 # do this cleanup whenever we exit.
425 trap '
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)
438 for 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
463 done
464
465
466 #############################
467 # look for a configure file #
468 #############################
469 if [ "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
474 else
475     $ECHO "Using CONFIGURE environment variable override: $CONFIGURE"
476 fi
477 if [ "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
489 fi
490
491 ####################
492 # get project name #
493 ####################
494 if [ "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
506 else
507     $ECHO "Using PROJECT environment variable override: $PROJECT"
508 fi
509 $ECHO "Preparing the $PROJECT build system...please wait"
510 $ECHO
511
512
513 ########################
514 # check for autoreconf #
515 ########################
516 HAVE_AUTORECONF=no
517 if [ "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
526 else
527     HAVE_AUTORECONF=yes
528     $ECHO "Using AUTORECONF environment variable override: $AUTORECONF"
529 fi
530
531
532 ##########################
533 # autoconf version check #
534 ##########################
535 _acfound=no
536 if [ "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
545 else
546     _acfound=yes
547     $ECHO "Using AUTOCONF environment variable override: $AUTOCONF"
548 fi
549
550 _report_error=no
551 if [ ! "x$_acfound" = "xyes" ] ; then
552     $ECHO "ERROR:  Unable to locate GNU Autoconf."
553     _report_error=yes
554 else
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
564 fi
565 if [ "x$_report_error" = "xyes" ] ; then
566     version_error "$AUTOCONF_VERSION" "GNU Autoconf"
567     exit 1
568 fi
569
570
571 ##########################
572 # automake version check #
573 ##########################
574 _amfound=no
575 if [ "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
584 else
585     _amfound=yes
586     $ECHO "Using AUTOMAKE environment variable override: $AUTOMAKE"
587 fi
588
589
590 _report_error=no
591 if [ ! "x$_amfound" = "xyes" ] ; then
592     $ECHO
593     $ECHO "ERROR: Unable to locate GNU Automake."
594     _report_error=yes
595 else
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
605 fi
606 if [ "x$_report_error" = "xyes" ] ; then
607     version_error "$AUTOMAKE_VERSION" "GNU Automake"
608     exit 1
609 fi
610
611
612 ########################
613 # check for libtoolize #
614 ########################
615 HAVE_LIBTOOLIZE=yes
616 HAVE_ALT_LIBTOOLIZE=no
617 _ltfound=no
618 if [ "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
683 else
684     _ltfound=yes
685     $ECHO "Using LIBTOOLIZE environment variable override: $LIBTOOLIZE"
686 fi
687
688
689 ############################
690 # libtoolize version check #
691 ############################
692 _report_error=no
693 if [ ! "x$_ltfound" = "xyes" ] ; then
694     $ECHO
695     $ECHO "ERROR: Unable to locate GNU Libtool."
696     _report_error=yes
697 else
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
707 fi
708 if [ "x$_report_error" = "xyes" ] ; then
709     version_error "$LIBTOOL_VERSION" "GNU Libtool"
710     exit 1
711 fi
712
713
714 #####################
715 # check for aclocal #
716 #####################
717 if [ "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
725 else
726     $ECHO "Using ACLOCAL environment variable override: $ACLOCAL"
727 fi
728
729
730 ########################
731 # check for autoheader #
732 ########################
733 if [ "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
741 else
742     $ECHO "Using AUTOHEADER environment variable override: $AUTOHEADER"
743 fi
744
745
746 #########################
747 # check if version only #
748 #########################
749 $VERBOSE_ECHO "Checking whether to only output version information"
750 if [ "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
756 fi
757
758
759 #################################
760 # PROTECT_FROM_CLOBBER FUNCTION #
761 #################################
762 protect_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 ##############################
790 recursive_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 #############################
842 restore_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 ##############################
899 recursive_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 #######################
941 initialize ( ) {
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
1077 START_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.
1083 recursive_protect
1084
1085 # start from where we started
1086 cd "$START_PATH"
1087
1088 # get ready to process
1089 initialize
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
1099 download_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 ##############################
1146 libtoolize_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 ############################################
1164 reconfigure_manually=no
1165 if [ "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
1211 else
1212     reconfigure_manually=yes
1213 fi
1214
1215
1216 ############################
1217 # LIBTOOL_FAILURE FUNCTION #
1218 ############################
1219 libtool_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 ###########################
1264 manual_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
1410 EOF
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
1492 EOF
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 #####################################
1504 recursive_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 ################################
1532 if [ "x$reconfigure_manually" = "xyes" ] ; then
1533     $ECHO
1534     $ECHO $ECHO_N "Preparing build ... $ECHO_C"
1535
1536     recursive_manual_autogen
1537 fi
1538
1539
1540 #########################
1541 # restore and summarize #
1542 #########################
1543 cd "$START_PATH"
1544
1545 # restore COPYING and INSTALL from backup if necessary
1546 recursive_restore
1547
1548 # make sure we end up with a configure script
1549 config_ac="`locate_configure_template`"
1550 config="`echo $config_ac | sed 's/\.ac$//' | sed 's/\.in$//'`"
1551 if [ "x$config" = "x" ] ; then
1552     $VERBOSE_ECHO "Could not locate the configure template (from `pwd`)"
1553 fi
1554
1555 # summarize
1556 $ECHO "done"
1557 $ECHO
1558 if 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."
1564 else
1565     $ECHO "The $PROJECT build system is now prepared.  To build here, run:"
1566     $ECHO "  $config"
1567     $ECHO "  make"
1568 fi
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