1275970Scy#! /bin/sh
2275970Scy
3275970Scy# showusage is set to 1 on any command-line syntax error
4275970Scyshowusage=0
5275970Scy# are we playing by stable or dev rules?
6275970Scyrepo=
7275970Scy# test is set to 1 if -t/--test is given to prevent modifications
8275970Scytest=0
9275970Scy
10275970Scycase "$#" in
11275970Scy 1) repo=$1
12275970Scy    ;;
13275970Scy 2) repo=$2
14275970Scy    case $1 in
15275970Scy     -t|--test)
16275970Scy	test=1
17275970Scy	;;
18275970Scy     *)
19275970Scy	showusage=1
20275970Scy	;;
21275970Scy    esac
22275970Scy    ;;
23275970Scy *) showusage=1
24275970Scy    ;;
25275970Scyesac
26275970Scy
27275970Scycase "$repo" in
28275970Scy dev|stable)
29275970Scy    ;;
30275970Scy '')
31275970Scy    showusage=1
32275970Scy    ;;
33275970Scy *) echo "Unexpected repo type: <$repo>!"
34275970Scy    showusage=1
35275970Scy    ;;
36275970Scyesac
37275970Scy
38275970Scycase "$showusage" in
39275970Scy 1) echo "Usage: $0 [-t] <stable|dev>"
40275970Scy    echo "No changes are made to packageinfo.sh if -t is given."
41275970Scy    exit 1
42275970Scy    ;;
43275970Scyesac
44275970Scy
45275970Scy
46275970Scyset -e
47275970Scy 
48275970Scy. ./packageinfo.sh
49275970Scy
50275970Scycase "$repotype" in
51275970Scy $repo)
52275970Scy    ;;
53275970Scy *) echo "You indicated repo type <$repo> but packageinfo.sh"
54275970Scy    echo "indicates <$repotype>."
55275970Scy    exit 1
56275970Scy    ;;
57275970Scyesac
58275970Scy
59275970Scyver_repo_mismatch=1
60275970Scy
61275970Scycase "$minor" in
62275970Scy 1|3|5|7|9)
63275970Scy    case "$repo" in
64275970Scy     dev)
65275970Scy	ver_repo_mismatch=0
66275970Scy	;;
67275970Scy     stable)
68275970Scy	;;
69275970Scy    esac
70275970Scy    ;;
71275970Scy 0|2|4|6|8)
72275970Scy    case "$repo" in
73275970Scy     dev)
74275970Scy	;;
75275970Scy     stable)
76275970Scy	ver_repo_mismatch=0
77275970Scy	;;
78275970Scy    esac
79275970Scy    ;;
80275970Scyesac
81275970Scy
82275970Scycase "$ver_repo_mismatch" in
83275970Scy 1) echo "Minor version <$minor> mismatches repotype <$repo>."
84275970Scy    exit 1
85275970Scy    ;;
86275970Scyesac
87275970Scy
88275970Scy# Do we want to bump the point?
89275970Scybp=1
90275970Scy# Do we want to bump the beta point?
91275970Scybbp=0
92275970Scy# Do we want to change the RC point? (n=no, z=empty rcpoint and zero
93275970Scy# betapoint, i=incr)
94275970Scycrcp=n
95275970Scy# Do we want to change the prerelease value?
96275970Scysetpr=0
97275970Scy
98275970Scy# for stable:
99275970Scy# if we are not in a beta or RC state, enter beta unless point is NEW.
100275970Scy# if we are in a beta state:
101275970Scy# - bump the beta point
102275970Scy# else if we are in an RC state:
103275970Scy# - if rcpoint is GO:
104275970Scy# - - set rcpoint= (empty)
105275970Scy# - - set prerelease= (empty)
106275970Scy# - - set betapoint=0
107275970Scy# - else
108275970Scy# - - if rcpoint==(empty)
109275970Scy# - - - (bump-point) and set rcpoint to 0 (and fall thru, so -RC1 is first)
110275970Scy# - - bump the RC point
111275970Scy
112275970Scy# for dev, we only want to bump-point and possibly clear prerelease, 
113275970Scy# but we do not modify rcpoint nor betapoint.
114275970Scy
115275970Scycase "$repo" in
116275970Scy dev)
117275970Scy    case "$point" in
118275970Scy     [Nn][Ee][Ww])
119275970Scy	crcp=z
120275970Scy	;;
121275970Scy     *)
122275970Scy	# crcp=n
123275970Scy	;;
124275970Scy    esac
125275970Scy    # bp=1
126275970Scy    ;;
127275970Scy stable)
128275970Scy    case "$prerelease" in
129275970Scy     '')
130275970Scy	case "$betapoint::$rcpoint::$point" in
131275970Scy	 *::*::NEW)
132275970Scy	    # new minor release (no p)
133275970Scy	    crcp=z
134275970Scy	    # bp=1
135275970Scy	    ;;
136275970Scy	 0::::*)
137275970Scy	    # start of first beta cycle for the next point release
138275970Scy	    setpr=1
139275970Scy	    newpr=beta
140275970Scy	    # bp=1
141275970Scy	    bbp=1
142275970Scy	    ;;
143275970Scy	 0::[Gg][Oo]::*)
144275970Scy	    # skip all -beta and -RC prereleases to the next point.
145275970Scy	    crcp=z
146275970Scy	    setpr=1
147275970Scy	    newpr=
148275970Scy	    # bp=1
149275970Scy	    # bbp=0
150275970Scy	    ;;
151275970Scy	 *) echo "betapoint is <$betapoint>, rcpoint is <$rcpoint>"
152275970Scy	    echo "betapoint must be 0 and rcpoint must be empty to start the"
153275970Scy	    echo "beta cycle."
154275970Scy	    exit 1
155275970Scy	    ;;
156275970Scy	esac
157275970Scy	;;
158275970Scy     beta)
159275970Scy	case "$betapoint::$rcpoint" in
160275970Scy	 [1-9]*::*)
161275970Scy	    bp=0
162275970Scy	    bbp=1
163275970Scy	    ;;
164275970Scy	 0::) echo "betapoint is 0, rcpoint emtpy, and prerelease is beta."
165275970Scy	    echo "You probably intended prerelease=  (that is, empty).  It"
166275970Scy	    echo "will then be changed to beta by this script, starting the"
167275970Scy	    echo "first beta for the next point release."
168275970Scy	    exit 1
169275970Scy	    ;;
170275970Scy	 *)
171275970Scy	    bp=0
172275970Scy	    bbp=1
173275970Scy	    ;;
174275970Scy	esac
175275970Scy	case "$rcpoint" in
176275970Scy	 [Gg][Oo])
177275970Scy	    echo "prerelease is beta, rcpoint is GO, disallowed."
178275970Scy	    echo "rcpoint GO is allowed only when prerelease is RC or empty."
179275970Scy	    exit 1
180275970Scy	    ;;
181275970Scy	esac
182275970Scy	;;
183275970Scy     rc|RC)
184275970Scy	case "$rcpoint" in
185275970Scy	 '')
186275970Scy	    case "$betapoint" in
187275970Scy	     0) # bp=1
188275970Scy		;;
189275970Scy	     *) bp=0
190275970Scy		;;
191275970Scy	    esac
192275970Scy	    crcp=i
193275970Scy	    ;;
194275970Scy	 [1-9]*)
195275970Scy	    bp=0
196275970Scy	    crcp=i
197275970Scy	    ;;
198275970Scy	 [Gg][Oo])
199275970Scy	    bp=0
200275970Scy	    crcp=z
201275970Scy	    setpr=1
202275970Scy	    newpr=
203275970Scy	    ;;
204275970Scy	 *) echo "Unexpected value for 'rcpoint' <$rcpoint>!"
205275970Scy	    exit 1
206275970Scy	    ;;
207275970Scy	esac
208275970Scy	;;
209275970Scy     *)
210275970Scy	echo "prerelease <$prerelease> unexpected"
211275970Scy	exit 1
212275970Scy	;;
213275970Scy    esac
214275970Scy    ;;
215275970Scy *) echo "impossible: repo <$repo>!"
216275970Scy    exit 1
217275970Scy    ;;
218275970Scyesac
219275970Scy
220280849Scycase "$repo::$bp::$point" in
221280849Scy *::0::*)
222275970Scy    newpoint=$point
223275970Scy    ;;
224280849Scy dev::1::0)
225275970Scy    newpoint=`expr $point + 1`
226275970Scy    ;;
227280849Scy *::1::[1-9]*)
228280849Scy    newpoint=`expr $point + 1`
229280849Scy    ;;
230280849Scy dev::1::)
231280849Scy    newpoint=0
232280849Scy    ;;
233280849Scy stable::1::)
234275970Scy    newpoint=1
235275970Scy    ;;
236280849Scy *::1::[Nn][Ee][Ww])
237275970Scy    newpoint=
238275970Scy    ;;
239280849Scy *) echo "Unexpected value for 'point' <$point>! (repo::bp::point is $repo::$bp::$point)"
240275970Scy    exit 1
241275970Scy    ;;
242275970Scyesac
243275970Scy
244275970Scycase "$bbp::$betapoint" in
245275970Scy 0::*)
246275970Scy    newbetapoint=$betapoint
247275970Scy    ;;
248275970Scy 1::[0-9]*)
249275970Scy    newbetapoint=`expr $betapoint + 1`
250275970Scy    ;;
251275970Scy *) echo "Unexpected value for 'betapoint' <$betapoint>!"
252275970Scy    exit 1
253275970Scy    ;;
254275970Scyesac
255275970Scy
256275970Scycase "$crcp::$rcpoint" in
257275970Scy n::*)
258275970Scy    newrcpoint=$rcpoint
259275970Scy    ;;
260275970Scy i::)
261275970Scy    newrcpoint=1
262275970Scy    ;;
263275970Scy i::[0-9]*)
264275970Scy    newrcpoint=`expr $rcpoint + 1`
265275970Scy    ;;
266275970Scy z::*)
267275970Scy    newrcpoint=
268275970Scy    newbetapoint=0
269275970Scy    ;;
270275970Scy *) echo "Unexpected value for 'crcp::rcpoint' <$crcp::$rcpoint>!"
271275970Scy    exit 1
272275970Scy    ;;
273275970Scyesac
274275970Scy
275275970Scycase "$setpr" in
276275970Scy 0)
277275970Scy    newpr=$prerelease
278275970Scyesac
279275970Scy
280275970Scy# display results
281275970Scyprintf "prerelease		$prerelease"
282275970Scycase "$newpr" in
283275970Scy $prerelease)
284275970Scy    printf "\n"
285275970Scy    ;;
286275970Scy *) printf " -> $newpr\n"
287275970Scy    ;;
288275970Scyesac
289275970Scyprintf "point			$point"
290275970Scycase "$newpoint" in
291275970Scy $point)
292275970Scy    printf "\n"
293275970Scy    ;;
294275970Scy *) printf " -> $newpoint\n"
295275970Scy    ;;
296275970Scyesac
297275970Scyprintf "betapoint		$betapoint"
298275970Scycase "$newbetapoint" in
299275970Scy $betapoint)
300275970Scy    printf "\n"
301275970Scy    ;;
302275970Scy *) printf " -> $newbetapoint\n"
303275970Scy    ;;
304275970Scyesac
305275970Scyprintf "rcpoint			$rcpoint"
306275970Scycase "$newrcpoint" in
307275970Scy $rcpoint)
308275970Scy    printf "\n"
309275970Scy    ;;
310275970Scy *) printf " -> $newrcpoint\n"
311275970Scy    ;;
312275970Scyesac
313275970Scy
314275970Scyprintf "Previous version: "
315275970Scyscripts/build/VersionName
316275970Scy
317275970Scy# apply packageinfo.sh changes
318275970Scy
319275970Scysed -e "s/^point=.*/point=$newpoint/"			\
320275970Scy    -e "s/^betapoint=.*/betapoint=$newbetapoint/"	\
321275970Scy    -e "s/^rcpoint=.*/rcpoint=$newrcpoint/"		\
322275970Scy    -e "s/^prerelease=.*/prerelease=$newpr/"		\
323275970Scy	< packageinfo.sh					\
324275970Scy	> packageinfo.sh+
325275970Scy
326275970Scycase "$test" in
327275970Scy 0)
328275970Scy    mv packageinfo.sh+ packageinfo.sh
329275970Scy    printf "Updated version: "
330275970Scy    scripts/build/VersionName
331275970Scy    ;;
332275970Scy *)
333275970Scy    printf "Next version would be: "
334275970Scy    scripts/build/VersionName -p ./packageinfo.sh+
335275970Scy    rm packageinfo.sh+
336275970Scy    ;;
337275970Scyesac
338