aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/get-version
blob: 27f02f6406908ff80bff7d3cdc39ef9cae1951a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh

# $1 - os name {linux|darwin|win}
# $2 - [optional] raw version string "vX.Y-patchN-sha1". as from `git describe'
#      (see below)

set -eu
#set -x

croak() {
	echo "$0: $*" >&2
	exit 1
}

[ $# -ge 1 ] || croak "missing OS argument"
os=$1

if [ $# -eq 2 ] && [ "$2" ]; then
	v0=$2
else
	cmd="git describe --tags --abbrev=12"
	v0=$($cmd) || v0=$(cat .gitversion) || croak "odd; command '$cmd' failed"
fi

# strip off the 'v' prefix, if any
v0=${v0#v}

case $os in
	linux)
		v=$v0
		;;
	darwin)
		# just the dots in the version string - this way we can
		# count them
		IFS=.
		set -- $v0		# split $v0 using $IFS separator
		dots=$(($# - 1))	# use positional argument count
		# split version string using a '-' separator
		IFS=-
		set -- $v0
		v=$1
		# do we need to add another digit?
		# We know there are 1 or 2 dots in $v, so if it's just one
		# or we are trying to get to 4, add one digit
		if [ $dots -eq 1 ]; then
			if [ $# -gt 1 ]; then
				v=$v.$2
			else
				v=$v.0
			fi
		fi
		;;
	full|win)
		# just the dots in the version string - this way we can
		# count them
		IFS=.
		set -- $v0		# split $v0 using $IFS separator
		dots=$(($# - 1))	# use positional argument count
		# split version string using a '-' separator
		IFS=-
		set -- $v0
		v=$1
		if [ $dots -eq 1 ]; then
			v=$v.0
		fi
		if [ $# -gt 1 ]; then
			v=$v.$2
		else
			v=$v.0
		fi
		;;
	*)
		v=git.missing.please.hardcode.version
		;;
esac
printf '%s' $v