From: Gary V. Vaughan Date: Mon, 28 Oct 2013 07:14:22 +0000 (+1300) Subject: funclib.sh: simplify version comparison functions. X-Git-Tag: v2.4.2.427~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fec7d8718047269d2b4e1346aa46ef38b0828845;p=thirdparty%2Flibtool.git funclib.sh: simplify version comparison functions. * gl/build-aux/funclib.sh (func_sort_ver): Much simplified. (func_lt_ver): New function, return true if arguments are in ascending order. * gl/build-aux/bootstrap.in: Simplify with func_lt_ver. * gl/build-aux/do-release-commit-and-tag.diff: Likewise. * bootstrap: Regenerate. Co-Authored-by: Paul Eggert Signed-off-by: Gary V. Vaughan --- diff --git a/bootstrap b/bootstrap index 4b91a4ad1..f238ca622 100755 --- a/bootstrap +++ b/bootstrap @@ -1322,37 +1322,21 @@ func_sort_ver () { $debug_cmd - ver1=$1 - ver2=$2 + printf '%s\n%s\n' "$1" "$2" | + sort -t. -k1n -k1 -k2n -k2 -k3n -k3 -k4n -k4 -k5n -k5 -k6n -k6 -k7n -k7 -k8n -k8 -k9n -k9 +} - # Split on '.' and compare each component. - i=1 - while :; do - p1=`echo "$ver1" |cut -d. -f$i` - p2=`echo "$ver2" |cut -d. -f$i` - if test ! "$p1"; then - echo "$1 $2" - break - elif test ! "$p2"; then - echo "$2 $1" - break - elif test ! "$p1" = "$p2"; then - if test "$p1" -gt "$p2" 2>/dev/null; then # numeric comparison - echo "$2 $1" - elif test "$p2" -gt "$p1" 2>/dev/null; then # numeric comparison - echo "$1 $2" - else # numeric, then lexicographic comparison - lp=`printf "$p1\n$p2\n" |sort -n |tail -n1` - if test "$lp" = "$p2"; then - echo "$1 $2" - else - echo "$2 $1" - fi - fi - break - fi - i=`expr $i + 1` - done +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | sed 1q` } @@ -4801,8 +4785,7 @@ delimited list of triples; 'program min-version url'." # Fail if a newer version than what we have is required. else - _G_newer=`func_sort_ver $_G_reqver $_G_instver |cut -d' ' -f2` - test "$_G_newer" != "$_G_instver" && { + func_lt_ver "$_G_reqver" "$_G_instver" || { func_error "\ '$_G_app' version == $_G_instver is too old '$_G_app' version >= $_G_reqver is required" diff --git a/gl/build-aux/bootstrap.in b/gl/build-aux/bootstrap.in index d91880d2f..649899ad2 100755 --- a/gl/build-aux/bootstrap.in +++ b/gl/build-aux/bootstrap.in @@ -2421,8 +2421,7 @@ delimited list of triples; 'program min-version url'." # Fail if a newer version than what we have is required. else - _G_newer=`func_sort_ver $_G_reqver $_G_instver |cut -d' ' -f2` - test "$_G_newer" != "$_G_instver" && { + func_lt_ver "$_G_reqver" "$_G_instver" || { func_error "\ '$_G_app' version == $_G_instver is too old '$_G_app' version >= $_G_reqver is required" diff --git a/gl/build-aux/do-release-commit-and-tag.diff b/gl/build-aux/do-release-commit-and-tag.diff index ad1b40934..1a8b29d1d 100644 --- a/gl/build-aux/do-release-commit-and-tag.diff +++ b/gl/build-aux/do-release-commit-and-tag.diff @@ -1,5 +1,5 @@ ---- gnulib/build-aux/do-release-commit-and-tag 2013-01-26 16:46:26.000000000 +1300 -+++ gl/build-aux/do-release-commit-and-tag 2013-10-26 15:42:36.000000000 +1300 +--- ./gnulib/build-aux/do-release-commit-and-tag 2013-01-26 16:46:26.000000000 +1300 ++++ gl/build-aux/do-release-commit-and-tag 2013-10-28 20:21:38.000000000 +1300 @@ -5,6 +5,9 @@ # will serve to identify the release, so apply a signed tag to it as well. VERSION=2012-08-01.09 # UTC @@ -10,7 +10,7 @@ # Note: this is a bash script (could be zsh or dash) # Copyright (C) 2009-2013 Free Software Foundation, Inc. -@@ -125,10 +128,9 @@ +@@ -125,10 +128,8 @@ || die 'failed to determine previous version number from .prev-version' # Verify that $ver is sensible (> .prev-version). @@ -18,9 +18,8 @@ - "$prev_ver:$ver:") ;; - *) die "invalid version: $ver (<= $prev_ver)";; -esac -+newer_ver=$(func_sort_ver $prev_ver $ver |cut -d' ' -f2) -+test "$newer_ver" != "$ver" && \ -+ die "invalid version: $ver (<= $prev_ver)" ++func_lt_ver "$prev_ver" "$ver" \ ++ || die "invalid version: $ver (<= $prev_ver)" case $type in alpha|beta|stable) ;; diff --git a/gl/build-aux/funclib.sh b/gl/build-aux/funclib.sh index beb2aa47e..aedc85ccc 100644 --- a/gl/build-aux/funclib.sh +++ b/gl/build-aux/funclib.sh @@ -1312,37 +1312,21 @@ func_sort_ver () { $debug_cmd - ver1=$1 - ver2=$2 + printf '%s\n%s\n' "$1" "$2" | + sort -t. -k1n -k1 -k2n -k2 -k3n -k3 -k4n -k4 -k5n -k5 -k6n -k6 -k7n -k7 -k8n -k8 -k9n -k9 +} - # Split on '.' and compare each component. - i=1 - while :; do - p1=`echo "$ver1" |cut -d. -f$i` - p2=`echo "$ver2" |cut -d. -f$i` - if test ! "$p1"; then - echo "$1 $2" - break - elif test ! "$p2"; then - echo "$2 $1" - break - elif test ! "$p1" = "$p2"; then - if test "$p1" -gt "$p2" 2>/dev/null; then # numeric comparison - echo "$2 $1" - elif test "$p2" -gt "$p1" 2>/dev/null; then # numeric comparison - echo "$1 $2" - else # numeric, then lexicographic comparison - lp=`printf "$p1\n$p2\n" |sort -n |tail -n1` - if test "$lp" = "$p2"; then - echo "$1 $2" - else - echo "$2 $1" - fi - fi - break - fi - i=`expr $i + 1` - done +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | sed 1q` }