@cryptotaxi247 / kubo / commits / 40b21bfcf

bin: add check_go_version

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

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