1178825Sdfr#!/bin/sh
2178825Sdfr# Fetches, builds and store the result of a heimdal build
3178825Sdfr# Version: $Id: heimdal-build.sh 21653 2007-07-18 20:15:59Z lha $
4178825Sdfr
5178825Sdfrfetchmethod=wget	   #options are: wget, curl, ftp, afs
6178825Sdfrresultdir=
7178825Sdfremail=heimdal-build-log@it.su.se
8178825Sdfrbaseurl=ftp://ftp.pdc.kth.se/pub/heimdal/src
9178825Sdfrafsdir=/afs/pdc.kth.se/public/ftp/pub/heimdal/src
10178825Sdfrkeeptree=no
11178825Sdfrpasshrase=
12178825Sdfrbuilddir=
13178825Sdfrnoemail=
14178825Sdfrcputimelimit=3600
15178825Sdfrconfflags=
16178825Sdfr
17178825Sdfr# Add some bonus paths, to find sendmail and other tools
18178825Sdfr# on interesting platforms.
19178825SdfrPATH="${PATH}:/usr/sbin:/usr/bin:/usr/libexec:/usr/lib"
20178825SdfrPATH="${PATH}:/usr/local/bin:/usr/local/sbin"
21178825Sdfr
22178825Sdfr# no more user configurabled part below (hopefully)
23178825Sdfr
24178825Sdfrusage="[--current] [--svn SourceRepository] [--cvs-flags] [--result-directory dir] [--fetch-method wget|ftp|curl|cvs|fetch|afs] --keep-tree] [--autotools] [--passhrase string] [--no-email] [--build-dir dir] [--cputime] [--distcheck] [--test-environment env] [--configure-flags flags]"
25178825Sdfr
26178825Sdfrdate=`date +%Y%m%d`
27178825Sdfrif [ "$?" != 0 ]; then
28178825Sdfr    echo "have no sane date, punting"
29178825Sdfr    exit 1
30178825Sdfrfi
31178825Sdfr
32178825Sdfrhostname=`hostname`
33178825Sdfrif [ "$?" != 0 ]; then
34178825Sdfr    echo "have no sane hostname, punting"
35178825Sdfr    exit 1
36178825Sdfrfi
37178825Sdfr
38178825Sdfrversion=`grep "^# Version: " "$0" | cut -f2- -d:`
39178825Sdfrif [ "X${version}" = X ]; then
40178825Sdfr    echo "Can not figure out what version I am"
41178825Sdfr    exit 1
42178825Sdfrfi
43178825Sdfr
44178825Sdfrdir=
45178825Sdfrhversion=
46178825Sdfrcvsroot=
47178825Sdfrcvsflags=
48178825Sdfrcvsbranch=
49178825Sdfrbranch=
50178825Sdfrautotools=no
51178825Sdfrdistcheck=no
52178825Sdfr
53178825Sdfrwhile true
54178825Sdfrdo
55178825Sdfr	case $1 in
56178825Sdfr	--autotools)
57178825Sdfr		autotools=yes
58178825Sdfr		shift
59178825Sdfr		;;
60178825Sdfr	--build-dir)
61178825Sdfr		builddir="$2"
62178825Sdfr		shift 2
63178825Sdfr		;;
64178825Sdfr	--current)
65178825Sdfr		dir="snapshots/"
66178825Sdfr		hversion="heimdal-${date}"
67178825Sdfr		shift
68178825Sdfr		;;
69178825Sdfr	--release)
70178825Sdfr		hversion="heimdal-$2"
71178825Sdfr		shift 2
72178825Sdfr		;;
73178825Sdfr	--cputime)
74178825Sdfr		cputimelimit="$2"
75178825Sdfr		shift 2
76178825Sdfr		;;
77178825Sdfr	--ccache-dir)
78178825Sdfr		ccachedir="$2"
79178825Sdfr		shift 2
80178825Sdfr		;;
81178825Sdfr	--svn)
82178825Sdfr		hversion="heimdal-svn-${date}"
83178825Sdfr		svnroot=$2
84178825Sdfr		fetchmethod=svn
85178825Sdfr		shift 2
86178825Sdfr		;;
87178825Sdfr	--distcheck)
88178825Sdfr		distcheck=yes
89178825Sdfr		shift
90178825Sdfr		;;
91178825Sdfr	--result-directory)
92178825Sdfr		resultdir="$2"
93178825Sdfr		if [ ! -d "$resultdir" ]; then
94178825Sdfr		    echo "$resultdir doesn't exists"
95178825Sdfr		    exit 1
96178825Sdfr		fi
97178825Sdfr		resultdir="`pwd`/${resultdir}"
98178825Sdfr		shift 2
99178825Sdfr		;;
100178825Sdfr	--fetch-method)
101178825Sdfr		fetchmethod="$2"
102178825Sdfr		shift 2
103178825Sdfr		;;
104178825Sdfr	--keep-tree)
105178825Sdfr		keeptree=yes
106178825Sdfr		shift
107178825Sdfr		;;
108178825Sdfr	--passphrase)
109178825Sdfr		passhrase="$2"
110178825Sdfr		shift 2
111178825Sdfr		;;
112178825Sdfr	--prepend-path)
113178825Sdfr		prependpath="$2"
114178825Sdfr		shift 2
115178825Sdfr		;;
116178825Sdfr	--test-environment)
117178825Sdfr		testenvironment="$2"
118178825Sdfr		shift 2
119178825Sdfr		;;
120178825Sdfr	--no-email)
121178825Sdfr		noemail="yes"
122178825Sdfr		shift
123178825Sdfr		;;
124178825Sdfr	--configure-flags)
125178825Sdfr		confflags="${confflags} $2"
126178825Sdfr		shift 2
127178825Sdfr		;;
128178825Sdfr	--version)
129178825Sdfr		echo "Version: $version"
130178825Sdfr		exit 0
131178825Sdfr		;;
132178825Sdfr	-*)
133178825Sdfr		echo "unknown option: $1"
134178825Sdfr		break
135178825Sdfr		;;
136178825Sdfr	*)
137178825Sdfr		break
138178825Sdfr		;;
139178825Sdfr	esac
140178825Sdfrdone
141178825Sdfrif test $# -gt 0; then
142178825Sdfr	echo $usage
143178825Sdfr	exit 1
144178825Sdfrfi
145178825Sdfr
146178825Sdfrif [ "X${hversion}" = X ]; then
147178825Sdfr	echo "no version given"
148178825Sdfr	exit 0
149178825Sdfrfi
150178825Sdfr
151178825Sdfrhfile="${hversion}.tar.gz"
152178825Sdfrurl="${baseurl}/${dir}${hfile}"
153178825Sdfrafsfile="${afsdir}/${dir}${hfile}"
154178825Sdfrunpack=yes
155178825Sdfr
156178825Sdfr# extra paths for the user
157178825Sdfrif [ "X${prependpath}" != X ]; then
158178825Sdfr	PATH="${prependpath}:${PATH}"
159178825Sdfrfi
160178825Sdfr
161178825Sdfr# Limit cpu seconds this all can take
162178825Sdfrulimit -t "$cputimelimit" > /dev/null 2>&1
163178825Sdfr
164178825Sdfrif [ "X${builddir}" != X ]; then
165178825Sdfr	echo "Changing build dir to ${builddir}"
166178825Sdfr	cd "${builddir}"
167178825Sdfrfi
168178825Sdfr
169178825Sdfrecho "Removing old source" 
170178825Sdfrrm -rf ${hversion}
171178825Sdfr
172178825Sdfrecho "Fetching ${hversion} using $fetchmethod"
173178825Sdfrcase "$fetchmethod" in
174178825Sdfrwget|ftp|fetch)
175178825Sdfr	${fetchmethod} $url > /dev/null
176178825Sdfr	res=$?
177178825Sdfr	;;
178178825Sdfrcurl)
179178825Sdfr	${fetchmethod} -o ${hfile} ${url} > /dev/null
180178825Sdfr	res=$?
181178825Sdfr	;;
182178825Sdfrafs)
183178825Sdfr	cp ${afsfile} ${hfile}
184178825Sdfr	res=$?
185178825Sdfr	;;
186178825Sdfrsvn)
187178825Sdfr	svn co $svnroot ${hversion}
188178825Sdfr	res=$?
189178825Sdfr	unpack=no
190178825Sdfr	autotools=yes
191178825Sdfr	;;
192178825Sdfr*)
193178825Sdfr	echo "unknown fetch method"
194178825Sdfr	;;
195178825Sdfresac
196178825Sdfr
197178825Sdfrif [ "X$res" != X0 ]; then
198178825Sdfr	echo "Failed to download the tar-ball"
199178825Sdfr	exit 1
200178825Sdfrfi
201178825Sdfr
202178825Sdfrif [ X"$unpack" = Xyes ]; then
203178825Sdfr	echo Unpacking source
204178825Sdfr	(gzip -dc ${hfile} | tar xf -) || exit 1
205178825Sdfrfi
206178825Sdfr
207178825Sdfrif [ X"$autotools" = Xyes ]; then
208178825Sdfr	echo "Autotooling"
209178825Sdfr	(cd ${hversion} && sh ./autogen.sh) || exit 1
210178825Sdfrfi
211178825Sdfr
212178825Sdfrif [ X"$ccachedir" != X ]; then
213178825Sdfr	CCACHE_DIR="${ccachedir}"
214178825Sdfr	export CCACHE_DIR
215178825Sdfrfi
216178825Sdfr
217178825Sdfrcd ${hversion} || exit 1
218178825Sdfr
219178825Sdfrmakecheckenv=
220178825Sdfrif [ X"${testenvironment}" != X ] ; then
221178825Sdfr    makecheckenv="${makecheckenv} TESTS_ENVIRONMENT=\"${testenvironment}\""
222178825Sdfrfi
223178825Sdfr
224178825Sdfrmkdir socket_wrapper_dir
225178825SdfrSOCKET_WRAPPER_DIR=`pwd`/socket_wrapper_dir
226178825Sdfrexport SOCKET_WRAPPER_DIR
227178825Sdfr
228178825Sdfrecho "Configuring and building ($hversion)"
229178825Sdfrecho "./configure --enable-socket-wrapper ${confflags}" > ab.txt
230178825Sdfr./configure --enable-socket-wrapper ${confflags} >> ab.txt 2>&1
231178825Sdfrif [ $? != 0 ] ; then
232178825Sdfr    echo Configure failed
233178825Sdfr    status=${status:-configure}
234178825Sdfrfi
235178825Sdfrecho make all >> ab.txt
236178825Sdfrmake all >> ab.txt 2>&1
237178825Sdfrif [ $? != 0 ] ; then
238178825Sdfr    echo Make all failed
239178825Sdfr    status=${status:-make all}
240178825Sdfrfi
241178825Sdfrecho make check >> ab.txt
242178825Sdfreval env $makecheckenv make check >> ab.txt 2>&1
243178825Sdfrif [ $? != 0 ] ; then
244178825Sdfr    echo Make check failed
245178825Sdfr    status=${status:-make check}
246178825Sdfrfi
247178825Sdfr
248178825Sdfrif [ "$distcheck" = yes ] ; then
249178825Sdfr    echo make distcheck >> ab.txt
250178825Sdfr    if [ $? != 0 ] ; then
251178825Sdfr        echo Make check failed
252178825Sdfr        status=${status:-make distcheck}
253178825Sdfr    fi
254178825Sdfrfi
255178825Sdfr
256178825Sdfrstatus=${status:-ok}
257178825Sdfr
258178825Sdfrecho "done: ${status}"
259178825Sdfr
260178825Sdfrif [ "X${resultdir}" != X ] ; then
261178825Sdfr	cp ab.txt "${resultdir}/ab-${hversion}-${hostname}-${date}.txt"
262178825Sdfrfi
263178825Sdfr
264178825Sdfrif [ "X${noemail}" = X ] ; then
265178825Sdfr	cat > email-header <<EOF
266178825SdfrFrom: ${USER:-unknown-user}@${hostname}
267178825SdfrTo: <heimdal-build-log@it.su.se>
268178825SdfrSubject: heimdal-build-log SPAM COOKIE
269178825SdfrX-heimdal-build: kaka-till-love
270178825Sdfr
271178825SdfrScript-version: ${version}
272178825SdfrHeimdal-version: ${hversion}
273178825SdfrMachine: `uname -a`
274178825SdfrStatus: $status
275178825SdfrEOF
276178825Sdfr
277178825Sdfr	if [ "X$passhrase" != X ] ; then
278178825Sdfr		cat >> email-header <<EOF
279178825Sdfrautobuild-passphrase: ${passhrase}
280178825SdfrEOF
281178825Sdfr	fi
282178825Sdfr		cat >> email-header <<EOF
283178825Sdfr------L-O-G------------------------------------
284178825SdfrEOF
285178825Sdfr
286178825Sdfr	cat email-header ab.txt | sendmail "${email}"
287178825Sdfrfi
288178825Sdfr
289178825Sdfrcd ..
290178825Sdfrif [ X"$keeptree" != Xyes ] ; then
291178825Sdfr    rm -rf ${hversion}
292178825Sdfrfi
293178825Sdfrrm -f ${hfile}
294178825Sdfr
295178825Sdfrexit 0
296