]> Dogcows Code - chaz/yoink/blob - autogen.sh
constructors should be explicit
[chaz/yoink] / 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
This page took 0.108984 seconds and 4 git commands to generate.