summaryrefslogtreecommitdiffstats
path: root/chvers.sh
blob: 8818d7d6c2032d225c69cf1d7f7ff460e20d52eb (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/sh
#
#   Copyright (c)  2000, 2001		Dmitry Butskoy
#					<dmitry@butskoy.name>
#   License:  GPL v2 or any later
#
#   See COPYING for the status of this software.
#

#
#   Change version script.
#   Normally invoked by a Makefile.
#
#   Changes version info in directory name, in VERSION file
#   and rpm spec file (if some of these are used).
#
#   `release3' changes:		0.2.7 --> 0.2.8
#   `release2' changes:		0.2.7 --> 0.3.0
#   `release1' changes:		0.2.7 --> 1.0.0
#   etc.
#   `release' without a digit increment the last number used.
#
#


[ $# -lt 1 ] && {
	echo "Usage: $0 release[123...0]" >&2
	exit 2
}

level=`expr $1 : '.*\([0-9]\)$'`
[ -z "$level" ] && level=0

main_dir=`basename \`pwd\``


#  Find current version info.

dir_v=""
file_v=""

dir_v=`expr $main_dir : '.*-\([0-9.]*\)$'`
[ -r VERSION ] && file_v=`awk '/^ *#/ { print $3 ; exit; }
			/^ *VERSION *=/ {split ($0, a, "="); print a[2]; exit; }
			{ print $0; exit; }' < VERSION `
[ -n "$file_v" ] && file_v=`echo $file_v `	#  to strip possible spaces

[ -z "$file_v" -a -z "$dir_v" ] && {
	echo "$0: Cannot determine version (use dirname postfix or VERSION file)" >&2
	exit 2
}

[ -n "$file_v" -a -n "$dir_v" -a "$dir_v" != "$file_v" ] && {
	echo "$0: Different version from dirname postfix and VERSION file" >&2
	exit 2
}

version="$dir_v"
[ -z "$version" ] && version="$file_v"


#  Increment current version, as specified by level.

new_version=`echo $version | awk '{ 
	level = '"$level"';
	n = split ($0, a, ".");
	if (level == 0)  level = n;
	for (i = 1; i <= n; i++) {
	    if (i == level)  a[i] = a[i] + 1 ;
	    else if (i > level)  a[i] = 0 ;
	}
	str = a[1]
	for (i = 2; i <= n; i++)  str = str "." a[i]
	print str
}' 2>/dev/null `


#  Adjust VERSION file, if any.

#  it is ugly, because $version contains dots...
[ -n "$file_v" ] && {
	sed "s/$version/$new_version/" < VERSION > VERSION.new && mv -f VERSION.new VERSION
}

#  Adjust rpm .spec file, if any.
for spec in *.spec
do
    [ -f $spec ] || continue

    grep '^Version:[ 	]*'"$version" $spec >/dev/null 2>&1 || continue
    sed '/^Version:[ 	]*'"$version/ s/$version/$new_version/" < $spec > ${spec}.new && mv -f ${spec}.new $spec
done
 

#  Adjust dirname postfix, if any.

[ -n "$dir_v" ] && {
    base=`expr \`pwd\` : '^\(.*\)-'"$version"'$' `
    mv -f ${base}-$version ${base}-$new_version
}

exit 0