mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
6abb662d70
Improvement Description: The DIFF used to keep running after detecting significant code changes. This was done in order to see all changes but no one seems to look at the diff any more. So, let it end the DIFF cycle once it determines there are enough differences for a new test. Added "install install-doc uninstall uninstall-doc" to the test cycle. Platforms tested: Eirene, gondolin, modi4
326 lines
8.1 KiB
Bash
Executable File
326 lines
8.1 KiB
Bash
Executable File
#!/bin/sh
|
|
echo "====================================="
|
|
echo "$0 $*"
|
|
echo "====================================="
|
|
set -x
|
|
date
|
|
uname -a
|
|
#
|
|
# This script should be run nightly from cron. It checks out hdf5
|
|
# from the CVS source tree and compares it against the previous
|
|
# snapshot. If anything significant changed then a new snapshot is
|
|
# created, the minor version number is incremented, and the change is
|
|
# checked back into the CVS repository.
|
|
#
|
|
|
|
# The path isn't properly initialized on hawkwind -- /usr/local/bin is
|
|
# either missing or is after /usr/bin when it should be before.
|
|
PATH="/usr/local/bin:$PATH"
|
|
|
|
# Where are the snapshots stored?
|
|
ARCHIVES_default=/afs/ncsa/ftp/HDF/pub/outgoing/hdf5/snapshots
|
|
ARCHIVES=$ARCHIVES_default
|
|
|
|
# Where are the HDF4 library?
|
|
# At NCSA, the standard place to find HDF4 software is in /usr/ncsa/.
|
|
HDF4LIB_default="/usr/ncsa/include,/usr/ncsa/lib"
|
|
HDF4LIB=$HDF4LIB_default
|
|
|
|
# What compression methods to use?
|
|
METHODS="gzip bzip2"
|
|
|
|
# Use User's MAKE if set. Else use generic make.
|
|
MAKE=${MAKE:-make}
|
|
|
|
# Make sure cvs would work
|
|
if [ -z "$CVSROOT" ]; then
|
|
echo "Where is the CVS repository?" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Command options
|
|
cmd="all"
|
|
test_opt=""
|
|
errcode=0
|
|
while [ $# -gt 0 ] ; do
|
|
case "$1" in
|
|
all)
|
|
cmd="all"
|
|
;;
|
|
checkout)
|
|
cmdcheckout="checkout"
|
|
cmd=""
|
|
;;
|
|
test)
|
|
cmdtest="test"
|
|
cmd=""
|
|
;;
|
|
srcdir)
|
|
#use srcdir option for test
|
|
srcdir="yes"
|
|
;;
|
|
srcdirname)
|
|
shift
|
|
if [ $# -lt 1 ]; then
|
|
echo "srcdirname <dir> missing"
|
|
errcode=1
|
|
cmd="help"
|
|
break
|
|
fi
|
|
SRCDIRNAME="$1"
|
|
;;
|
|
release)
|
|
cmdrel="release"
|
|
cmd=""
|
|
;;
|
|
clean | distclean)
|
|
cmdclean="$1"
|
|
cmd=""
|
|
;;
|
|
help)
|
|
cmd="help"
|
|
break
|
|
;;
|
|
hdf4)
|
|
shift
|
|
if [ $# -lt 1 ]; then
|
|
echo "HDF4LIB information missing"
|
|
errcode=1
|
|
cmd="help"
|
|
break
|
|
fi
|
|
HDF4LIB="$1"
|
|
;;
|
|
archive)
|
|
shift
|
|
if [ $# -lt 1 ]; then
|
|
echo "Archive pathname missing"
|
|
errcode=1
|
|
cmd="help"
|
|
break
|
|
fi
|
|
ARCHIVES="$1"
|
|
;;
|
|
op-configure)
|
|
shift
|
|
if [ $# -lt 1 ]; then
|
|
echo "op-configure option missing"
|
|
errcode=1
|
|
cmd="help"
|
|
break
|
|
fi
|
|
OP_CONFIGURE="$OP_CONFIGURE $1"
|
|
;;
|
|
*)
|
|
echo "Unkown option $1"
|
|
errcode=1
|
|
cmd="help"
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ "$cmd" = help ]; then
|
|
set -
|
|
cat <<EOF
|
|
Usage: $0 [all] [checkout] [test] [srcdir] [release] [help]
|
|
[hdf4 <hdf4lib_path>] [archive <arch_path>] [dir <dir>]
|
|
[op-configure <option>]
|
|
all: Run all commands (checkout, test & release)
|
|
[Default is all]
|
|
checkout: Run cvs checkout
|
|
test: Run test
|
|
release: Run release
|
|
clean: Run make clean
|
|
distclean:Run make distclean
|
|
srcdir: Use srcdir option (does not imply other commands)
|
|
"snapshot srcdir" is equivalent to "snapshot srcdir all"
|
|
"snapshot srcdir checkout" is equivalent to "snapshot checkout"
|
|
srcdirname <dir>:
|
|
Use <dir> as the srcdir testing directory if srcdir is choosen.
|
|
If <dir> starts with '-', it is append to the default name
|
|
E.g., "snapshot srcdir srcdirname -xx" uses hostname-xx
|
|
[Default is hostname]
|
|
help: Print this message
|
|
hdf4 <hdf4lib_path>:
|
|
Use <hdf4lib_path> as the HDF4LIB locations
|
|
[Default is $HDF4LIB_default]
|
|
archive <arch_path>:
|
|
Use <arch_path> as the release ARCHIVE area
|
|
[Default is $ARCHIVES_default]
|
|
op-configure <option>:
|
|
Pass <option> to the configure command
|
|
E.g., "snapshot op-configure --enable-parallel"
|
|
configures for parallel mode
|
|
EOF
|
|
exit $errcode
|
|
fi
|
|
|
|
# Setup the proper configure option (--with-hdf4) to use hdf4 library
|
|
# provide HDF4LIB is non-empty.
|
|
HDF4LIB=${HDF4LIB:+"--with-hdf4="$HDF4LIB}
|
|
CONFIGURE="./configure $HDF4LIB $OP_CONFIGURE"
|
|
|
|
# Execute the requests
|
|
snapshot=yes
|
|
|
|
H5VERSION=hdf5
|
|
BASEDIR=${HOME}/snapshots-${H5VERSION}
|
|
CURRENT=${BASEDIR}/current
|
|
PREVIOUS=${BASEDIR}/previous
|
|
HOSTNAME=`hostname | cut -f1 -d.` # no domain part
|
|
if [ $H5VERSION != hdf5 ]; then
|
|
CVSVERSION="-r $H5VERSION"
|
|
else
|
|
CVSVERSION= # use the default (main) version
|
|
fi
|
|
|
|
# Try finding a version of diff that supports the -I option too.
|
|
DIFF=diff
|
|
for d in `echo $PATH | sed -e 's/:/ /g'` ; do
|
|
test -x $d/diff && $d/diff -I XYZ /dev/null /dev/null > /dev/null 2>&1 &&
|
|
DIFF=$d/diff && break
|
|
done
|
|
|
|
#=============================
|
|
# Run CVS checkout
|
|
#=============================
|
|
if [ "$cmd" = "all" -o -n "$cmdcheckout" ]; then
|
|
# Create a working directory. Hopefully one is left over from last
|
|
# time that still has the contents of the previous release. But if
|
|
# not, just create one and assume that a snapshot is necessary.
|
|
test -d ${BASEDIR} || mkdir -p ${BASEDIR} || exit 1
|
|
|
|
# Check out the current version from CVS
|
|
cvs -Q co -d ${CURRENT} ${CVSVERSION} hdf5 || exit 1
|
|
fi # Do CVS checkout
|
|
|
|
|
|
#=============================
|
|
# Run Test the HDF5 library
|
|
#=============================
|
|
if [ "$cmd" = "all" -o -n "$cmdtest" ]; then
|
|
# setup if srcdir is used.
|
|
if [ -z "$srcdir" ]; then
|
|
TESTDIR=${CURRENT}
|
|
else
|
|
#create TESTDIR if not exist yet
|
|
case "$SRCDIRNAME" in
|
|
"")
|
|
SRCDIRNAME=$HOSTNAME
|
|
;;
|
|
-*)
|
|
SRCDIRNAME="$HOSTNAME$SRCDIRNAME"
|
|
;;
|
|
esac
|
|
TESTDIR=${BASEDIR}/TestDir/${SRCDIRNAME}
|
|
test -d ${TESTDIR} || mkdir ${TESTDIR}
|
|
fi
|
|
INSTALLDIR=${TESTDIR}/installdir
|
|
test -d $INSTALLDIR || mkdir $INSTALLDIR
|
|
# Make sure current version exists and is clean
|
|
if [ -d ${TESTDIR} ]; then
|
|
(cd ${TESTDIR} && ${MAKE} distclean)
|
|
else
|
|
errcode=$?
|
|
snapshot=no
|
|
exit $errcode
|
|
fi
|
|
|
|
# Compare it with the previous version. Compare only files listed in
|
|
# the MANIFEST plus the MANIFEST itself.
|
|
if [ -d ${PREVIOUS} ]; then
|
|
if (${DIFF} -c ${PREVIOUS}/MANIFEST ${CURRENT}/MANIFEST); then
|
|
snapshot=no
|
|
for src in `grep '^\.' ${CURRENT}/MANIFEST|expand|cut -f1 -d' '`; do
|
|
if ${DIFF} -I H5_VERS_RELEASE -I " released on " \
|
|
-I " currently under development" \
|
|
${PREVIOUS}/$src ${CURRENT}/$src
|
|
then
|
|
: #continue
|
|
else
|
|
snapshot=yes
|
|
# Don't break because we want to see all the diffs.
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
# Make sure all the serial tests work.
|
|
if [ "$snapshot" = "yes" ]; then
|
|
if (cd ${TESTDIR} && \
|
|
${srcdir:+${CURRENT}/}${CONFIGURE} --prefix=$INSTALLDIR && \
|
|
${MAKE} check && \
|
|
${MAKE} install install-doc && \
|
|
${MAKE} uninstall uninstall-doc); then
|
|
:
|
|
else
|
|
errcode=$?
|
|
snapshot=no
|
|
exit $errcode
|
|
fi
|
|
fi
|
|
fi # Test the HDF5 library
|
|
|
|
|
|
#=============================
|
|
# Run Release snapshot, update version, and commit to cvs and tag
|
|
#=============================
|
|
if [ "$cmd" = "all" -o -n "$cmdrel" ]; then
|
|
if [ "$snapshot" = "yes" ]; then
|
|
(cd ${CURRENT} && ${MAKE} distclean)
|
|
(
|
|
# Turn on exit on error in the sub-shell so that it does not
|
|
# cvs commit if errors encounter here.
|
|
set -e
|
|
cd ${CURRENT}
|
|
bin/release -d $ARCHIVES $METHODS
|
|
RELEASE_VERSION="`perl bin/h5vers -v`"
|
|
perl bin/h5vers -i
|
|
cvs -Q commit -m "Snapshot $RELEASE_VERSION"
|
|
)
|
|
errcode=$?
|
|
fi
|
|
|
|
# Replace the previous version with the current version.
|
|
# Should check if the errcode of the release process but there
|
|
# are other failures after release was done (e.g. h5vers or cvs failures)
|
|
# that should allow the replacement to occure.
|
|
rm -rf ${PREVIOUS}
|
|
mv ${CURRENT} ${PREVIOUS}
|
|
fi #Release snapshot
|
|
|
|
|
|
#=============================
|
|
# Clean the test area. Default is no clean.
|
|
#=============================
|
|
if [ -n "$cmdclean" ]; then
|
|
# setup if srcdir is used.
|
|
if [ -z "$srcdir" ]; then
|
|
TESTDIR=${CURRENT}
|
|
else
|
|
case "$SRCDIRNAME" in
|
|
"")
|
|
SRCDIRNAME=$HOSTNAME
|
|
;;
|
|
-*)
|
|
SRCDIRNAME="$HOSTNAME$SRCDIRNAME"
|
|
;;
|
|
esac
|
|
TESTDIR=${BASEDIR}/TestDir/${SRCDIRNAME}
|
|
fi
|
|
# Make sure current version exists and is clean
|
|
if [ -d ${TESTDIR} ]; then
|
|
(cd ${TESTDIR} && ${MAKE} $cmdclean )
|
|
else
|
|
errcode=$?
|
|
snapshot=no
|
|
exit $errcode
|
|
fi
|
|
fi # Clean the Test directory
|
|
|
|
exit $errcode
|