#!/bin/sh 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" errcode=0 echo '$#=' $# '$*="' $* '"' while [ $# -gt 0 ] ; do case "$1" in all) cmd="all" ;; checkout) cmdcheckout="checkout" cmd="" ;; test) cmdtest="test" cmd="" ;; release) cmdrel="release" 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" ;; *) echo "Unkown option $1" errcode=1 cmd="help" break ;; esac shift done if [ "$cmd" = help ]; then set - echo "Usage: $0 [all] [checkout] [test] [release] [help] [hdf4 ] [archive ]" echo " all: Run all commands (checkout, test & release)" echo " [Default is all]" echo " checkout: Run cvs checkout" echo " test: Run test" echo " release: Run release" echo " help: Print this message" echo " hdf4 :" echo " Use as the HDF4LIB locations" echo " [Default is $HDF4LIB_default]" echo " archive : " echo " Use as the release ARCHIVE area" echo " [ default as $ARCHIVES_default]" 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" # Execute the requests snapshot=yes COMPARE=${HOME}/hdf5-snapshots #============================= # 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 ${COMPARE} || mkdir -p ${COMPARE} || exit 1 # Check out the current version from CVS cvs -Q co -d ${COMPARE}/current hdf5 || exit 1 fi # Do CVS checkout #============================= # Run Test the HDF5 library #============================= if [ "$cmd" = "all" -o -n "$cmdtest" ]; then # Make sure current version exists and is clean if [ -d ${COMPARE}/current ]; then (cd ${COMPARE}/current && ${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 ${COMPARE}/previous ]; then if (diff -c ${COMPARE}/previous/MANIFEST ${COMPARE}/current/MANIFEST); then snapshot=no for src in `grep '^\.' ${COMPARE}/current/MANIFEST|expand|cut -f1 -d' '`; do diff -I H5_VERS_RELEASE -I " released on " \ -I " currently under development" \ ${COMPARE}/previous/$src ${COMPARE}/current/$src || \ snapshot=yes # Don't break because we want to see all the diffs. done fi fi # Make sure all the serial tests work. if [ "$snapshot" = "yes" ]; then if (cd ${COMPARE}/current; \ ${CONFIGURE}; \ ${MAKE} check); 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 ${COMPARE}/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 ${COMPARE}/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. rm -rf ${COMPARE}/previous mv ${COMPARE}/current ${COMPARE}/previous fi #Release snapshot exit $errcode