mirror of
https://github.com/AdaCore/PolyORB.git
synced 2026-02-12 13:01:15 -08:00
[Imported from Perforce change 6580 at 2006-12-01 19:56:02] Subversion-branch: /trunk/polyorb Subversion-revision: 34543
178 lines
3.2 KiB
Bash
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
|