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