A sandbox system to automate the building of the source tree and
reporting differences in compiler output with the output of the previous build.
This commit is contained in:
parent
8ed9644253
commit
4a4923f951
26 changed files with 476 additions and 0 deletions
175
src/scripts/nightly/nightlybuild.sh
Executable file
175
src/scripts/nightly/nightlybuild.sh
Executable file
|
@ -0,0 +1,175 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# $Id$$Source$
|
||||
#
|
||||
#
|
||||
# Blame it on marcolz
|
||||
#
|
||||
|
||||
# For some reason, solaris sh exits as soon as both stderr and stdout
|
||||
# are redirected to file at the exec, so if we run on solaris, use ksh
|
||||
# for this script.
|
||||
#
|
||||
INTERPRETER="$_"
|
||||
|
||||
case "$INTERPRETER"
|
||||
in
|
||||
*/ksh|ksh)
|
||||
;;
|
||||
*)
|
||||
if [ "`uname`" = "SunOS" ]
|
||||
then
|
||||
exec ksh "$0" "$@"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
PROGNAME="$0"
|
||||
CVS_RSH=ssh
|
||||
export CVS_RSH
|
||||
|
||||
usage() {
|
||||
echo "Usage: ${PROGNAME} <configfile>" >&2;
|
||||
exit 1;
|
||||
}
|
||||
|
||||
[ $# -lt 1 ] && usage
|
||||
|
||||
[ -f "$1" ] || usage
|
||||
|
||||
# Source config file
|
||||
case "$1"
|
||||
in
|
||||
*/*)
|
||||
. "$1"
|
||||
;;
|
||||
*)
|
||||
. ./"$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -f "${SCRIPTDIR}/common.sh" ] || { echo "Broken config ?" >&2; exit 1; }
|
||||
. "${SCRIPTDIR}"/common.sh
|
||||
|
||||
|
||||
STAMP="`date +%Y%m%d%H%M%S`"
|
||||
WORKDIR="${EMPTARGET}.${ARCH}"
|
||||
[ -n "${EXTRASUFFIX}" ] && WORKDIR="${WORKDIR}.${EXTRASUFFIX}"
|
||||
LOGFILE="${LOGDIR}/${WORKDIR}.${STAMP}"
|
||||
|
||||
# Log everything
|
||||
exec > "${LOGFILE}"
|
||||
exec 2>&1
|
||||
|
||||
case "${BOXDIR}"
|
||||
in
|
||||
/*)
|
||||
;;
|
||||
*)
|
||||
BOXDIR="${SCRIPTDIR}/${BOXDIR}"
|
||||
;;
|
||||
esac
|
||||
|
||||
cd "${BOXDIR}" || err "Could not chdir to ${BOXDIR}"
|
||||
|
||||
echo "Nightly build starting at `date`"
|
||||
|
||||
|
||||
# Make sandbox
|
||||
|
||||
mkdir "${WORKDIR}" || warn "Could not create ${BOXDIR}/${WORKDIR}"
|
||||
cd "${WORKDIR}" || err "Could not cd to ${BOXDIR}/${WORKDIR}"
|
||||
|
||||
echo "Getting source from CVS:"
|
||||
# Extract source
|
||||
RETR=0
|
||||
while ! cvs -z3 -d:ext:"${SFLOGIN}"@cvs.sourceforge.net:/cvsroot/empserver co empserver >/dev/null
|
||||
do
|
||||
sleep "`expr 5 + ${RETR}`"
|
||||
RETR="`expr 1 + ${RETR}`"
|
||||
[ "${RETR}" -gt 100 ] && err "CVS Timeout after ${RETR} retres."
|
||||
done
|
||||
echo "Done (CVS)."
|
||||
echo ""
|
||||
|
||||
# Run local patches ${LOCALPATCHDIR}/*.patch
|
||||
case "${LOCALPATCHDIR}"
|
||||
in
|
||||
/*)
|
||||
;;
|
||||
*)
|
||||
LOCALPATCHDIR="${SCRIPTDIR}/${LOCALPATCHDIR}"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "${LOCALPATCHDIR}" -a -d "${LOCALPATCHDIR}/." ]
|
||||
then
|
||||
echo "Applying local patches from ${LOCALPATCHDIR}:"
|
||||
for i in "${LOCALPATCHDIR}"/*.patch
|
||||
do
|
||||
if patch -Np0 < "${i}" >/dev/null
|
||||
then
|
||||
echo "${i}: OK"
|
||||
else
|
||||
echo "========== ${i}: NOT OK! ${?} =========="
|
||||
fi
|
||||
done
|
||||
echo "Done (patch)."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
cd empserver || err "Could not cd to ${BOXDIR}/${WORKDIR}/empserver."
|
||||
|
||||
# Prep build.conf
|
||||
echo "Preparing build.conf"
|
||||
sed -e "s,^USERNAME = .*$,USERNAME = ${EMPLOGIN}," \
|
||||
-e "s,^HOSTNAME = .*$,HOSTNAME = localhost," \
|
||||
-e "s,^IPADDR = .*$,IPADDR = 127.0.0.1," \
|
||||
-e "s,^EMPDIR = .*$,EMPDIR = ${BOXDIR}/${WORKDIR}/emp4," \
|
||||
< build.conf > build.conf.new && \
|
||||
mv build.conf.new build.conf || \
|
||||
err "Could not prep build.conf"
|
||||
echo "Done (build.conf)."
|
||||
echo ""
|
||||
|
||||
# TODO: this should be fixed another way...
|
||||
echo "Generating empty Makedepends."
|
||||
touch src/client/Makedepend src/doconfig/Makedepend src/lib/as/Makedepend src/lib/commands/Makedepend src/lib/common/Makedepend src/lib/empthread/Makedepend src/lib/gen/Makedepend src/lib/global/Makedepend src/lib/lwp/Makedepend src/lib/player/Makedepend src/lib/subs/Makedepend src/lib/update/Makedepend src/server/Makedepend src/util/Makedepend || err "Could tot touch Makedepends"
|
||||
echo "Done (touch)."
|
||||
echo ""
|
||||
|
||||
# Start the build
|
||||
echo "Building server"
|
||||
if make "${EMPTARGET}" >/dev/null
|
||||
then
|
||||
warn "make did not return 0."
|
||||
fi
|
||||
echo "Done (make)."
|
||||
echo ""
|
||||
|
||||
# Try to run startup utilities
|
||||
if [ -d ../emp4 -a -d ../emp4/bin -a -d ../emp4/data ]
|
||||
then
|
||||
cd ../emp4/bin || err "Could not cd to ../emp4/bin"
|
||||
echo "Determining type of files in bindir"
|
||||
file *
|
||||
echo "Done (file *)."
|
||||
echo ""
|
||||
echo "Running files and fairland"
|
||||
echo y | ./files || warn "Error running files"
|
||||
./fairland 10 30 >/dev/null || warn "Error running fairland"
|
||||
echo "Done (files & fairland)."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Clean sandbox
|
||||
echo "Cleaning sandbox"
|
||||
cd "${BOXDIR}" || err "Could not cd back to sanbox root !"
|
||||
rm -r "${WORKDIR}" || warn "Directory ${WORKDIR} could not be cleanly removed !"
|
||||
rm -rf "${WORKDIR}" || warn "Directory ${WORKDIR} could not be forcibly removed !"
|
||||
[ -d "${WORKDIR}/." ] && warn "Directory ${WORKDIR} still present"
|
||||
echo "Done (cleaning)."
|
||||
|
||||
echo "Nightly build finished at `date`"
|
||||
|
||||
exit 0
|
Loading…
Add table
Add a link
Reference in a new issue