#!/bin/bash
+# use svn propset svn:keywords Revision to enable this
+REVISION=$(echo '$Revision$' | sed -e 's,\$,,g' -e 's,^\w*:\s,,' )
+
COMMAND=$(basename $0)
ROOT=/build
CVSROOT=":pserver:anon@cvs.planet-lab.org:/cvs"
DISTRO=onelab
-MAILTO="thierry.parmentelat@sophia.inria.fr"
+MAILTO="onelab-build@one-lab.org"
TAG=HEAD
-CHROOTDIR=/root/bin
+CHROOTBINDIR=/root/bin
# plc chroot runs in UTC
-date=$(date -u +'%Y.%m.%d')
-
-function usage () {
- echo "$COMMAND [option]"
- echo " -d CVSROOT"
- echo " -r TAG"
- echo " -m MAILTO"
- echo " -f DISTRO"
- echo " -b BASE"
- exit 1
-}
+DATE=$(date -u +'%Y.%m.%d')
### in the root context
function do_chroot () {
chroot /plc/devel/root su - build <<EOF
-$CHROOTDIR/$COMMAND $@
+$CHROOTBINDIR/$COMMAND $@
EOF
}
}
function success () {
+ touch ${BUILD}/log-success.stamp
if [ -n "$MAILTO" ] ; then
date | mail -s "Successfull build in ${BUILD}" $MAILTO
fi
- exit 1
+ exit 0
}
function create_base () {
- BASE=${TAG/HEAD/`date +%Y.%m.%d`}
i=
while ! mkdir ${BASE}${i} 2>/dev/null ; do
[ -z ${i} ] && BASE=${BASE}.
fi
}
-function manage_distro () {
-
- echo manage_distro disabled
-
-# both .mk and .xml inserted into princeton's cvs
-
-# DISTROFILE=$BUILD/$DISTRO.mk
-#
-# if [ -f $DISTROFILE ] ; then
-# echo Using $DISTROFILE
-# elif [ -f $ROOT/$DISTRO.mk ] ; then
-# echo Using $ROOT/$DISTRO.mk
-# ln -s $ROOT/$DISTRO.mk $DISTROFILE
-# else
-# echo Could not locate $DISTRO.mk
-# exit 1
-# fi
-#
-# if [ "$DISTRO" != planetlab ] ; then
-# DISTROFILE=$BUILD/$DISTRO.xml
-#
-# if [ -f $DISTROFILE ] ; then
-# echo Using $DISTROFILE
-# elif [ -f $ROOT/$DISTRO.xml ] ; then
-# echo Using $ROOT/$DISTRO.xml
-# ln -s $ROOT/$DISTRO.xml $DISTROFILE
-# else
-# echo Could not locate $DISTRO.xml
-# exit 1
-# fi
-# fi
-
-}
-
function build () {
trap failure ERR INT
set -x
cd $ROOT
cvs -d $CVSROOT co -d $BASE build
- manage_distro
-
echo "Running make IN build $(pwd)"
- make TAG=${TAG} PLDISTRO=${DISTRO} -C $BASE
+ make ${MAKEOPTS[@]} TAG=${TAG} PLDISTRO=${DISTRO} ${MAKEVARS[@]} -C $BASE $MAKETARGETS
# only if successful
rm -f latest
echo BASE=$BASE
echo TAG=$TAG
echo DISTRO=$DISTRO
+ echo MAKEVARS="${MAKEVARS[@]}"
+ echo MAKEOPTS="${MAKEOPTS[@]}"
+}
+
+function usage () {
+ echo "Usage: $COMMAND [option] make-targets"
+ echo "This is revision $REVISION"
+ echo "Supported options"
+ echo " -v verbose"
+ echo " -b BASE"
+ echo " -u : uses directory given as BASE as is, even if already exists"
+ echo " -e : exits (does nothing) if BASE already exists"
+ echo " -f DISTRO"
+ echo " -d CVSROOT"
+ echo " -r TAG"
+ echo " -m MAILTO"
+ echo " -s MAKEVAR=value - spaces in value are not supported"
+ echo " -n passed to make"
+ exit 1
}
function main () {
if [ -d /plc/devel/data ] ; then
do_chroot "$@"
else
- while getopts "d:r:m:f:b:h" opt ; do
+ while getopts "vd:r:m:f:b:s:uenh" opt ; do
+ MAKEVARS=()
+ MAKEOPTS=()
case $opt in
+ v) set -x ;;
d) CVSROOT=$OPTARG ;;
r) TAG=$OPTARG ;;
m) MAILTO=$OPTARG ;;
f) DISTRO=$OPTARG ;;
b) BASE=$OPTARG ;;
- h) usage ;;
+ u) USEOLD=true ;;
+ e) EXITIFOLD=true ;;
+ s) MAKEVARS=(${MAKEVARS[@]} $OPTARG) ;;
+ n) MAILTO="" ; MAKEOPTS=(${MAKEOPTS[@]} -n) ;;
+ h|*) usage ;;
esac
done
+
+ ROOT=$ROOT/$DISTRO
+
shift $(($OPTIND - 1))
+
+ MAKETARGETS="$@"
cd $ROOT
- ### determine BASE
- # if specified, use it, otherwise create from date
- if [ -z "$BASE" ] ; then
- create_base
- else
+ ### set BASE from TAG, if unspecified
+ [ -z "$BASE" ] && BASE=${TAG}
+
+ if [ -n "$EXITIFOLD" -a -d "$BASE" ] ; then
+ echo "$COMMAND: -e : exits on existing base directory $BASE"
+ BUILD=$ROOT/$BASE
+ failure
+ exit 1
+ fi
+
+ if [ -n "$USEOLD" ] ; then
use_base $BASE
+ else
+ BASE=${BASE}--${DATE}
+ create_base
fi
BUILD=$ROOT/$BASE