diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2007-04-03 15:34:30 -0400 |
---|---|---|
committer | Behdad Esfahbod <behdad@behdad.org> | 2007-04-03 15:34:30 -0400 |
commit | 38c9909e2948f089bbec89e2d43b0e6f930c1ab1 (patch) | |
tree | 9c36853c312ee960ac82bc2adc97a0c9c6a5b16e /autogen.sh | |
parent | 00cc44373705665824d53c8ebde5df397b834e41 (diff) |
[autogen.sh] Borrow version comparison from GNOME autogen.sh (#9566)
Our previous version check code was thinking that 1.10 is older than 1.7
Diffstat (limited to 'autogen.sh')
-rwxr-xr-x | autogen.sh | 186 |
1 files changed, 97 insertions, 89 deletions
@@ -2,11 +2,6 @@ # Run this to generate all the initial makefiles, etc. set -e -# 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 @@ -15,7 +10,6 @@ srcdir=`dirname $ARGV0` test -z "$srcdir" && srcdir=. ORIGDIR=`pwd` - cd $srcdir PACKAGE=cairo @@ -44,22 +38,98 @@ automake_min_vers=`extract_version AM_INIT_AUTOMAKE` libtoolize_min_vers=`extract_version AC_PROG_LIBTOOL` aclocal_min_vers=$automake_min_vers -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" + +# Not all echo versions allow -n, so we check what is possible. This test is +# based on the one in autoconf. +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ;; + *c*,* ) ECHO_N=-n ;; + *) ECHO_N= ;; +esac + + +# some terminal codes ... +boldface="`tput bold 2>/dev/null`" +normal="`tput sgr0 2>/dev/null`" +printbold() { + echo $ECHO_N "$boldface" + echo "$@" + echo $ECHO_N "$normal" +} +printerr() { + echo "$@" >&2 +} + + +# Usage: +# compare_versions MIN_VERSION ACTUAL_VERSION +# returns true if ACTUAL_VERSION >= MIN_VERSION +compare_versions() { + ch_min_version=$1 + ch_actual_version=$2 + ch_status=0 + IFS="${IFS= }"; ch_save_IFS="$IFS"; IFS="." + set $ch_actual_version + for ch_min in $ch_min_version; do + ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; shift # remove letter suffixes + if [ -z "$ch_min" ]; then break; fi + if [ -z "$ch_cur" ]; then ch_status=1; break; fi + if [ $ch_cur -gt $ch_min ]; then break; fi + if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi + done + IFS="$ch_save_IFS" + return $ch_status +} + +# Usage: +# version_check PACKAGE VARIABLE CHECKPROGS MIN_VERSION SOURCE +# checks to see if the package is available +version_check() { + vc_package=$1 + vc_variable=$2 + vc_checkprogs=$3 + vc_min_version=$4 + vc_source=$5 + vc_status=1 + + vc_checkprog=`eval echo "\\$$vc_variable"` + if [ -n "$vc_checkprog" ]; then + printbold "using $vc_checkprog for $vc_package" + return 0 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 + + printbold "checking for $vc_package >= $vc_min_version..." + for vc_checkprog in $vc_checkprogs; do + echo $ECHO_N " testing $vc_checkprog... " + if $vc_checkprog --version < /dev/null > /dev/null 2>&1; then + vc_actual_version=`$vc_checkprog --version | head -n 1 | \ + sed 's/^.*[ ]\([0-9.]*[a-z]*\).*$/\1/'` + if compare_versions $vc_min_version $vc_actual_version; then + echo "found $vc_actual_version" + # set variable + eval "$vc_variable=$vc_checkprog" + vc_status=0 + break + else + echo "too old (found version $vc_actual_version)" + fi + else + echo "not found." + fi + done + if [ "$vc_status" != 0 ]; then + printerr "***Error***: You must have $vc_package >= $vc_min_version installed" + printerr " to build $PROJECT. Download the appropriate package for" + printerr " from your distribution or get the source tarball at" + printerr " $vc_source" + printerr + fi + return $vc_status +} + + +version_check autoconf AUTOCONF $AUTOCONF $autoconf_min_vers \ + "http://ftp.gnu.org/pub/gnu/autoconf/autoconf-${autoconf_min_vers}.tar.gz" || DIE=1 # # Hunt for an appropriate version of automake and aclocal; we can't @@ -67,75 +137,13 @@ fi # # We check automake first to allow it to be a newer version than we know about. # -if test x"$AUTOMAKE" = x || test x"$ACLOCAL" = x ; then - am_ver="" - for ver in "" "-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} -fi +version_check automake AUTOMAKE "$AUTOMAKE automake automake-1.10 automake-1.9 automake-1.8 automake-1.7" $automake_min_vers \ + "http://ftp.gnu.org/pub/gnu/automake/automake-${automake_min_vers}.tar.gz" || DIE=1 +ACLOCAL=`echo $AUTOMAKE | sed s/automake/aclocal/` -# -# 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 - 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" -fi -if ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 ; then - if ($LIBTOOLIZE --version | awk 'NR==1 { if( $4 >= '$libtoolize_min_vers') \ - exit 1; exit 0; }'); - then - echo "$ARGV0: ERROR: \`$LIBTOOLIZE' is too old." - echo " (version $libtoolize_min_vers or newer is required)" - DIE="yes" - fi -else - echo $LIBTOOLIZE: command not found - echo - echo "$ARGV0: ERROR: You must have \`libtoolize' installed to compile $PACKAGE." - echo " (version $libtoolize_min_vers or newer is required)" - DIE="yes" -fi +version_check libtool LIBTOOLIZE $LIBTOOLIZE $libtoolize_min_vers \ + "http://ftp.gnu.org/pub/gnu/libtool/libtool-${libtool_min_vers}.tar.gz" || DIE=1 if test -z "$ACLOCAL_FLAGS"; then acdir=`$ACLOCAL --print-ac-dir` @@ -183,4 +191,4 @@ cd $ORIGDIR || exit 1 rm -f config.cache -do_cmd $srcdir/configure --cache-file=config.cache --disable-static --enable-maintainer-mode --enable-gtk-doc ${1+"$@"} && echo "Now type \`make' to compile" || exit 1 +do_cmd $srcdir/configure --cache-file=config.cache --disable-static --enable-maintainer-mode --enable-gtk-doc ${1+"$@"} && echo "Now type \`make' to compile $PROJECT." || exit 1 |