Ronald Aigner wrote on 07.03.2007 15:22 this:
The actual problem, I think, is the awk line to compare the versions. awk compares two strings here: 1.10 and 1.9 (which is $automake_min_vers; this makes me wonder, why 1.7 and 1.8 are tried at all). Unfortunately, 1.10 is lexically before 1.9, so the string compare fails. This is true, I'll have a look into this. I found some inspiration for a more accurate version check at the curl project (http://curl.haxx.se/). Applied is a patch that integrates these ideas into bootstrap. I removed the check for different versions of automake (-1.10, -1.9, etc.). Different versions of the auto* tools can be set using the environment variables AUTOMAKE, ACLOCAL, AUTOHEADER, and AUTOCONF.
HTH, Ron. -- Mit freundlichen Gruessen / with regards ra3 @ inf.tu-dresden.de http://os.inf.tu-dresden.de/~ra3/ Index: bootstrap =================================================================== --- bootstrap (revision 27921) +++ bootstrap (working copy) @@ -1,25 +1,26 @@ #!/bin/sh # Run this to generate all the initial makefiles, etc. # -# This script is from the cairo project (http://cairographics.org/) and has -# been slightly modified. +# This script is merged from: +# * the cairo project (http://cairographics.org/) and +# * the curl project (http://curl.haxx.se/) and +# has been modified. +# set -e PACKAGE=dice -AUTOHEADER=${AUTOHEADER-autoheader} AUTOMAKE_FLAGS="--add-missing --foreign" -AUTOCONF=${AUTOCONF-autoconf} -automake_min_vers=1.9 -aclocal_min_vers=$automake_min_vers -autoconf_min_vers=2.50 +automake_min_vers_maj=1 +automake_min_vers_min=9 +aclocal_min_vers_maj=$automake_min_vers_maj +aclocal_min_vers_min=$automake_min_vers_min +autoconf_min_vers_maj=2 +autoconf_min_vers_min=50 +autoheader_min_vers_maj=$autoconf_min_vers_maj +autoheader_min_vers_min=$autoconf_min_vers_min -# The awk-based string->number conversion we use needs a C locale to work -# as expected. Setting LC_ALL overrides whether the user set LC_ALL, -# LC_NUMERIC, or LANG. -LC_ALL=C - ARGV0=$0 # Allow invocation from a separate build directory; in that case, we change @@ -31,100 +32,102 @@ cd $srcdir -if ($AUTOCONF --version) < /dev/null > /dev/null 2>&1 ; then - if ($AUTOCONF --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$autoconf_min_vers') \ - exit 1; exit 0; }'); - then - echo "$ARGV0: ERROR: \`$AUTOCONF' is too old." - $AUTOCONF --version - echo " (version $autoconf_min_vers or newer is required)" - DIE="yes" - fi -else - echo $AUTOCONF: command not found - echo - echo "$ARGV0: ERROR: You must have \`autoconf' installed to compile $PACKAGE." - echo " (version $autoconf_min_vers or newer is required)" - DIE="yes" -fi - # -# Hunt for an appropriate version of automake and aclocal; we can't -# assume that 'automake' is necessarily the most recent installed version -# -# We check automake first to allow it to be a newer version than we know about. +# Test for autoconf version. Usually autoheader is distributed in the autoconf +# package, but we test for both of them -- you never know. # -if test x"$AUTOMAKE" = x || test x"$ACLOCAL" = x ; then - am_ver="" - for ver in "" "-1.10" "-1.9" "-1.8" "-1.7" ; do - am="automake$ver" - if ($am --version) < /dev/null > /dev/null 2>&1 ; then - if ($am --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$automake_min_vers') \ - exit 1; exit 0; }'); then : ; else - am_ver=$ver - break; - fi - fi - done - - AUTOMAKE=${AUTOMAKE-automake$am_ver} - ACLOCAL=${ACLOCAL-aclocal$am_ver} +ac=${AUTOCONF:-autoconf} +ac_version=`$ac --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` +if test -z "$ac_version"; then + echo $ac: command not found + echo + echo "$ARGV0: ERROR: You must have \`autoconf' installed to compile $PACKAGE." + echo " (version $autoconf_min_vers_maj.$autoconf_min_vers_min or newer is required)" + exit 1; fi +IFS=.; set $ac_version; IFS=' ' +if test "$1" = "$autoconf_min_vers_maj" -a "$2" -lt "$autoconf_min_vers_min" || test "$1" -lt "$autoconf_min_vers_maj"; then + echo "$ARGV0: ERROR: \`$ac' is too old." + $ac --version + echo " (version $autoconf_min_vers_maj.$autoconf_min_vers_min or newer is required)" + exit 1; +fi +echo "$ARGV0: autoconf version $ac_version (ok)" + +ah=${AUTOHEADER:-autoheader} +ah_version=`$ah --version 2>/dev/null|head -1|sed -e 's/^[^0-9]*//' -e 's/[a-z]* *$//'` +if test -z "$ah_version"; then + echo $ah: command not found + echo + echo "$ARGV0: ERROR: You must have \`autoheader' installed to compile $PACKAGE." + echo " (version $autoheader_min_vers_maj.$autoheader_min_vers_min or newer is required)" + exit 1; +fi +IFS=.; set $ah_version; IFS=' ' +if test "$1" = "$autoheader_min_vers_maj" -a "$2" -lt "$autoheader_min_vers_min" || test "$1" -lt "$autoheader_min_vers_maj"; then + echo "$ARGV0: ERROR: \`$ah' is too old." + $ah --version + echo " (version $autoheader_min_vers_maj.$autoheader_min_vers_min or newer is required)" + exit 1; +fi + +echo "$ARGV0: autoheader version $ah_version (ok)" + # -# Now repeat the tests with the copies we decided upon and error out if they -# aren't sufficiently new. -# -if ($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 ; then - if ($AUTOMAKE --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$automake_min_vers') \ - exit 1; exit 0; }'); - then - echo "$ARGV0: ERROR: \`$AUTOMAKE' is too old." - $AUTOMAKE --version - echo " (version $automake_min_vers or newer is required)" - DIE="yes" - fi - if ($ACLOCAL --version) < /dev/null > /dev/null 2>&1; then - if ($ACLOCAL --version | head -n 1 | awk 'NR==1 { if( $(NF) >= '$aclocal_min_vers' ) \ - exit 1; exit 0; }' ); - then - echo "$ARGV0: ERROR: \`$ACLOCAL' is too old." - $ACLOCAL --version - echo " (version $aclocal_min_vers or newer is required)" - DIE="yes" - fi - else - echo $ACLOCAL: command not found +# Test for automake. Usually aclocal is distributed in the same package, but +# we test for both of them -- you never know +# +am=${AUTOMAKE:-automake} +am_version=`$am --version 2>/dev/null|head -1|sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'` +if test -z "$am_version"; then + echo $am: command not found echo - echo "$ARGV0: ERROR: Missing \`$ACLOCAL'" - echo " The version of $AUTOMAKE installed doesn't appear recent enough." - DIE="yes" - fi -else - echo $AUTOMAKE: command not found - echo echo "$ARGV0: ERROR: You must have \`automake' installed to compile $PACKAGE." - echo " (version $automake_min_vers or newer is required)" - DIE="yes" + echo " (version $automake_min_vers_maj.$automake_min_vers_min or newer is required)" + exit 1; fi +IFS=.; set $am_version; IFS=' ' +if test "$1" = "$automake_min_vers_maj" -a "$2" -lt "$automake_min_vers_min" || test "$1" -lt "$automake_min_vers_maj"; then + echo "$ARGV0: ERROR: \`$am' is too old." + $am --version + echo " (version $automake_min_vers_maj.$automake_min_vers_min or newer is required)" + exit 1; +fi -if test "X$DIE" != X; then - exit 1 +echo "$ARGV0: automake version $am_version (ok)" + +acl=${ACLOCAL:-aclocal} +acl_version=`$acl --version 2>/dev/null|head -1|sed -e 's/^.* \([0-9]\)/\1/' -e 's/[a-z]* *$//' -e 's/\(.*\)\(-p.*\)/\1/'` +if test -z "$acl_version"; then + echo $acl: command not found + echo + echo "$ARGV0: ERROR: You must have \`aclocal' installed to compile $PACKAGE." + echo " (version $aclocal_min_vers_maj.$aclocal_min_vers_min or newer is required)" + exit 1; fi +IFS=.; set $acl_version; IFS=' ' +if test "$1" = "$aclocal_min_vers_maj" -a "$2" -lt "$aclocal_min_vers_min" || test "$1" -lt "$aclocal_min_vers_maj"; then + echo "$ARGV0: ERROR: \`$acl' is too old." + $acl --version + echo " (version $aclocal_min_vers_maj.$aclocal_min_vers_min or newer is required)" + exit 1; +fi +echo "$ARGV0: aclocal version $acl_version (ok)" do_cmd() { echo "$ARGV0: running \`$@'" $@ } -do_cmd $ACLOCAL $ACLOCAL_FLAGS +do_cmd $ac $ACLOCAL_FLAGS -do_cmd $AUTOHEADER +do_cmd $ah -do_cmd $AUTOMAKE $AUTOMAKE_FLAGS +do_cmd $am $AUTOMAKE_FLAGS -do_cmd $AUTOCONF +do_cmd $acl cd $ORIGDIR || exit 1