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