@cryptotaxi247 / kubo / commits / 694f22a4c

bin: add check-gx-program

License: MIT Signed-off-by: Christian Couder <chriscool@tuxfamily.org>

Christian Couder committed Feb 14, 2016 at 22:30 UTC 694f22a4c8b7c9cbcb9f853f8857e4f3ceffaf93
1 file changed +91
bin/check_gx_program new
+91
@@ -0,0 +1,91 @@
1 +#!/bin/sh
2 +#
3 +# Check if a gx program is installed and if its version is at least
4 +# equal to a minimum version number.
5 +#
6 +# Call it for example like this:
7 +#
8 +# $ check_gx_program "gx-go" "0.2.0" "Use 'make gx_upgrade' to install or upgrade gx-go."
9 +#
10 +# or:
11 +#
12 +# $ check_gx_program "gx" "0.3" "Use 'make gx_upgrade' to install or upgrade gx."
13 +#
14 +
15 +USAGE="$0 GX_PROGRAM_NAME GX_MIN_VERSION UPGRADE_MSG"
16 +
17 +die() {
18 + printf >&2 "fatal: %s\n" "$@"
19 + exit 1
20 +}
21 +
22 +# Get arguments
23 +
24 +test "$#" -eq "3" || die "This program must be passed exactly 3 arguments" "Usage: $USAGE"
25 +
26 +GX_PROGRAM_NAME="$1"
27 +GX_MIN_VERSION="$2"
28 +UPGRADE_MSG="$3"
29 +
30 +die_upgrade() {
31 + printf >&2 "fatal: %s\n" "$@"
32 + printf >&2 "=> %s\n" "$UPGRADE_MSG"
33 + exit 1
34 +}
35 +
36 +major_number() {
37 + vers="$1"
38 +
39 + # Hack around 'expr' exiting with code 1 when it outputs 0
40 + case "$vers" in
41 + 0) echo "0" ;;
42 + 0.*) echo "0" ;;
43 + *) expr "$vers" : "\([^.]*\).*" || return 1
44 + esac
45 +}
46 +
47 +check_at_least_version() {
48 + MIN_VERS="$1"
49 + CUR_VERS="$2"
50 + PROG_NAME="$3"
51 +
52 + # Get major, minor and fix numbers for each version
53 + MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'"
54 + CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'"
55 + if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*")
56 + then
57 + MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0"
58 + else
59 + MIN_MIN="0"
60 + MIN_FIX="0"
61 + fi
62 + if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*")
63 + then
64 + CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0"
65 + else
66 + CUR_MIN="0"
67 + CUR_FIX="0"
68 + fi
69 +
70 + # Compare versions
71 + VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'"
72 + test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST"
73 + test "$CUR_MAJ" -gt "$MIN_MAJ" || {
74 + test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST"
75 + test "$CUR_MIN" -gt "$MIN_MIN" || {
76 + test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST"
77 + }
78 + }
79 +}
80 +
81 +# Check that the gx program exists
82 +
83 +type "$GX_PROGRAM_NAME" >/dev/null || die_upgrade "Program $GX_PROGRAM_NAME is not installed!"
84 +
85 +# Check the gx program version
86 +
87 +VERS_STR=$($GX_PROGRAM_NAME -v 2>&1) || die "'$GX_PROGRAM_NAME -v' failed with output: $VERS_STR"
88 +
89 +GX_CUR_VERSION=$(expr "$VERS_STR" : "$GX_PROGRAM_NAME version \(.*\)") || die "Invalid '$GX_PROGRAM_NAME -v' output: $VERS_STR"
90 +
91 +check_at_least_version "$GX_MIN_VERSION" "$GX_CUR_VERSION" "$GX_PROGRAM_NAME"