File:
[local] /
rpl /
autogen.sh
Revision
1.5:
download - view:
text,
annotated -
select for diffs -
revision graph
Sat Mar 23 17:57:55 2013 UTC (12 years, 1 month ago) by
bertrand
Branches:
MAIN
CVS tags:
rpl-4_1_30,
rpl-4_1_29,
rpl-4_1_28,
rpl-4_1_27,
rpl-4_1_26,
rpl-4_1_25,
rpl-4_1_24,
rpl-4_1_23,
rpl-4_1_22,
rpl-4_1_21,
rpl-4_1_20,
rpl-4_1_19,
rpl-4_1_18,
rpl-4_1_17,
rpl-4_1_16,
rpl-4_1_15,
rpl-4_1_14,
rpl-4_1_13,
HEAD
Cohérence.
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,v 1.5 2013/03/23 17:57:55 bertrand Exp $"
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
CVSweb interface <joel.bertrand@systella.fr>