Initial commit
[fillmore] / minver
diff --git a/minver b/minver
new file mode 100755 (executable)
index 0000000..dac8545
--- /dev/null
+++ b/minver
@@ -0,0 +1,86 @@
+#! /bin/bash
+#
+# Copyright 2009-2010 Yorba Foundation
+#
+# This software is licensed under the GNU LGPL (version 2.1 or later).
+# See the COPYING file in this distribution. 
+
+# vercmp <major.minor.revision> <minimum major.minor.revision>
+#
+# Returns 0 if queried version is greater than or equal to second, 1 otherwise.
+# Set VERBOSE environment variable for somewhat useful output.
+#
+# NOTE:
+# This is an ultra-naive implementation with just enough error-checking.
+
+usage() {
+    echo 'usage: vercmp <major.minor.revision> <minimum major.minor.revision>'
+}
+
+abort() {
+    usage
+    exit 1
+}
+
+verify_cardinal() {
+    while [ $# != 0 ]
+    do
+        if [ $1 ] && [ $1 -eq $1 2> /dev/null ] && [ $1 -ge 0 ]
+        then
+            :
+        else
+            abort
+        fi
+        
+        shift
+    done
+}
+
+# check_range name number min-number
+check_range() {
+    if [ $2 -gt $3 ]
+    then
+        verbose $1 large enough.
+        exit 0
+    elif [ $2 -lt $3 ]
+    then
+        verbose $1 not large enough
+        exit 1
+    fi
+}
+
+verbose() {
+    if [ $VERBOSE ]
+    then
+        echo $*
+    fi
+}
+
+# Check number of arguments
+if [ $# -lt 2 ]
+then
+    abort
+fi
+
+# Parse arguments into integers
+major=`echo $1 | awk -F. '{print $1}'`
+minor=`echo $1 | awk -F. '{print $2}'`
+revision=`echo $1 | awk -F. '{print $3}'`
+
+min_major=`echo $2 | awk -F. '{print $1}'`
+min_minor=`echo $2 | awk -F. '{print $2}'`
+min_revision=`echo $2 | awk -F. '{print $3}'`
+
+# Verify they're all positive integers
+verify_cardinal "$major" "$minor" "$revision" "$min_major" "$min_minor" "$min_revision"
+
+verbose Comparing $major.$minor.$revision against $min_major.$min_minor.$min_revision
+
+# check version numbers in order of importance
+check_range "Major" $major $min_major
+check_range "Minor" $minor $min_minor
+check_range "Revision" $revision $min_revision
+
+verbose Same version.
+exit 0
+