Initial commit
[fillmore] / minver
1 #! /bin/bash
2 #
3 # Copyright 2009-2010 Yorba Foundation
4 #
5 # This software is licensed under the GNU LGPL (version 2.1 or later).
6 # See the COPYING file in this distribution. 
7
8 # vercmp <major.minor.revision> <minimum major.minor.revision>
9 #
10 # Returns 0 if queried version is greater than or equal to second, 1 otherwise.
11 # Set VERBOSE environment variable for somewhat useful output.
12 #
13 # NOTE:
14 # This is an ultra-naive implementation with just enough error-checking.
15
16 usage() {
17     echo 'usage: vercmp <major.minor.revision> <minimum major.minor.revision>'
18 }
19
20 abort() {
21     usage
22     exit 1
23 }
24
25 verify_cardinal() {
26     while [ $# != 0 ]
27     do
28         if [ $1 ] && [ $1 -eq $1 2> /dev/null ] && [ $1 -ge 0 ]
29         then
30             :
31         else
32             abort
33         fi
34         
35         shift
36     done
37 }
38
39 # check_range name number min-number
40 check_range() {
41     if [ $2 -gt $3 ]
42     then
43         verbose $1 large enough.
44         exit 0
45     elif [ $2 -lt $3 ]
46     then
47         verbose $1 not large enough
48         exit 1
49     fi
50 }
51
52 verbose() {
53     if [ $VERBOSE ]
54     then
55         echo $*
56     fi
57 }
58
59 # Check number of arguments
60 if [ $# -lt 2 ]
61 then
62     abort
63 fi
64
65 # Parse arguments into integers
66 major=`echo $1 | awk -F. '{print $1}'`
67 minor=`echo $1 | awk -F. '{print $2}'`
68 revision=`echo $1 | awk -F. '{print $3}'`
69
70 min_major=`echo $2 | awk -F. '{print $1}'`
71 min_minor=`echo $2 | awk -F. '{print $2}'`
72 min_revision=`echo $2 | awk -F. '{print $3}'`
73
74 # Verify they're all positive integers
75 verify_cardinal "$major" "$minor" "$revision" "$min_major" "$min_minor" "$min_revision"
76
77 verbose Comparing $major.$minor.$revision against $min_major.$min_minor.$min_revision
78
79 # check version numbers in order of importance
80 check_range "Major" $major $min_major
81 check_range "Minor" $minor $min_minor
82 check_range "Revision" $revision $min_revision
83
84 verbose Same version.
85 exit 0
86