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