Files
PolyORB/utils/cobuild
Thomas Quinot 12fe110a98 $CHANGE -> $CHANGELIST
[Imported from Perforce change 6580 at 2006-12-01 19:56:02]

Subversion-branch: /trunk/polyorb
Subversion-revision: 34543
2003-03-29 13:13:15 +00:00

178 lines
3.2 KiB
Bash

#! /bin/sh
# cobuild: Build something from a checked-out wavefront.
# $Id: //droopi/main/utils/cobuild#20 $
PROJECT=DROOPI
GNUMAKE=gmake
export GNUMAKE
usage () {
echo "Usage: $0 -m EMAIL_ADDRESS -C CLIENT_WORKSPACE_TOP -o OUTPUT_DIR [ -c CHANGELIST ]"
echo " Build is done in OUTPUT_DIR/build"
echo " Install is done in OUTPUT_DIR/install"
exit 1
}
while getopts C:c:o:m: opt
do
case $opt in
C)
CLIENT_TOP=$OPTARG
;;
c)
CHANGELIST="$OPTARG"
;;
o)
OUTDIR=$OPTARG
;;
m)
MAILTO=$OPTARG
;;
*)
usage
;;
esac
done
if [ "x$OUTDIR" = "x" ]
then
usage
fi
if [ "x$CLIENT_TOP" = "x" ]
then
usage
fi
: ${MAILTO:=root}
P4CONFIG=.p4
TMPDIR=/var/tmp
export P4CONFIG MAILTO OUTDIR CLIENT_TOP TMPDIR
set -e
umask 022
PIDFILE=$OUTDIR/build.pid
CHGFILE=$OUTDIR/build.change
LOGFILE=$OUTDIR/build.log
# Take mutex
lockfile $PIDFILE.lock
trap 'rm -f $PIDFILE.lock' 0
# Determine change level to be built.
cd $CLIENT_TOP
if [ "x$CHANGELIST" = x ]
then
CHANGELIST=`p4 changes -m 1 ... | awk '{print \$2}'`
fi
export CHANGELIST
# Kill any previous build.
if [ -f $PIDFILE ]
then
OLDPID=`cat $PIDFILE`
if [ "x$OLDPID" != x ] && ps -p $OLDPID > /dev/null
then
# Build in progress.
[ -f "$CHGFILE" ] && OLDCHG=`cat "$CHGFILE"`
if [ "$OLDCHG" -ge "$CHANGELIST" ]
then
# Already building this changelist or a more recent one.
exit 0
fi
kill $OLDPID > /dev/null 2>&1 || true
fi
fi
# Here comes the hot builder.
exec > $LOGFILE 2>&1
# Prepare execution.
echo "---------- Starting build of ${PROJECT} ch. ${CHANGELIST}: `date`"
echo "---------- Syncing"
#p4 sync "#none"
#rm -fr $CLIENT_TOP/*
p4 sync @$CHANGELIST
/usr/local/bin/rungroup /bin/sh -c '(
set -e
sleep 10
echo "---------- Building"
[ -x ./support/reconfig ] && ./support/reconfig
cd $OUTDIR
mkdir build > /dev/null 2>&1 || true
mkdir install > /dev/null 2>&1 || true
cd build
if [ -x $CLIENT_TOP/configure ]
then
$CLIENT_TOP/configure --disable-shared --enable-debug \
--with-proto-perso="giop soap srp" --with-appli-perso="corba moma" \
--with-services="naming ir event time" --prefix=$OUTDIR/install
fi && ${GNUMAKE} && ${GNUMAKE} install
RC=$?
exit $RC
)' &
# The build is now running in background. Save PID and changelist #,
# and release mutex.
THISPID=$!
echo $THISPID > $PIDFILE
echo $CHANGELIST > $CHGFILE
trap '' 0
rm -f $PIDFILE.lock
set +e
wait $THISPID
RC=$?
set -e
if [ $RC = 0 ]
then
echo "---------- Build completed successfully: `date`"
STATUS="completed"
OUTPATH=`echo $OUTDIR | sed 's,/usr/home,/infres,'`
MSG="Build completed successfully.\\nSee details at $OUTPATH/build.log"
SUCCESS=true
elif [ $RC -ge 128 ]
then
echo "---------- Build aborted by a signal: `date`"
STATUS="aborted"
MSG="The build process was interrupted by a signal."
SUCCESS=true
else
echo "---------- BUILD FAILED: `date`"
SUCCESS=false
fi
if $SUCCESS
then
echo -e "$MSG" | Mail -s "${PROJECT} build $CHANGELIST $STATUS" $MAILTO
else
cat $OUTDIR/build.log | Mail -s "${PROJECT} BUILD $CHANGELIST FAILED" $MAILTO
fi
lockfile $PIDFILE.lock
THATPID=`cat $PIDFILE`
if [ "$THATPID" = "$THISPID" ]
then
rm -f $PIDFILE
fi
rm -f $PIDFILE.lock