#!/bin/sh
#
# Copyright by The HDF Group.
# Copyright by the Board of Trustees of the University of Illinois.
# All rights reserved.
#
# This file is part of HDF5.  The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the files COPYING and Copyright.html.  COPYING can be found at the root
# of the source code distribution tree; Copyright.html can be found at the
# root level of an installed copy of the electronic HDF5 document set and
# is linked from the top-level documents page.  It can also be found at
# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
#

# Make a release of HL_REGION.
#
# Programmer: Robb Matzke
# Creation date: on or before 1998-01-29.
#
# Modifications
# M. Scot Breitenfeld
# 09-09-09

# Function definitions
#
# Print Usage page
USAGE()
{
cat << EOF
Usage: $0 [--nocheck] [-d <dir>] [-h] <methods> ...
   -d DIR	The name of the directory where the releas(es) should be
                placed.  By default, the directory is ./releases

   --nocheck	Ignore errors in MANIFEST file.
         
   --private	Make a private release with today's date in version information.
         
The other command-line options are the names of the programs to use
for compressing the resulting tar archive (if none are given then
"tar md5" is assumed):

    tar		-- use tar and don't do any compressing.
    compress	-- use compress and append ".Z" to the output name.
    gzip	-- use gzip with "-9" and append ".gz" to the output name.
    bzip2       -- use bzip2 with "-9" and append ".bz2" to the output name.
    md5         -- produce a md5 checksum in addition to the archive.

Examples:

    $ release
    releases/hdf5-1.0.38.tar
    releases/hdf5-1.0.38.tar.md5

    $ release gzip
    releases/hdf5-1.0.38.tar.gz

    $ release -d /tmp tar compress gzip bzip2 md5
    /tmp/hdf5-1.0.38.tar
    /tmp/hdf5-1.0.38.tar.Z
    /tmp/hdf5-1.0.38.tar.gz
    /tmp/hdf5-1.0.38.tar.bz2
    /tmp/hdf5-1.0.38.tar.md5

EOF

}

# This command must be run at the top level of the HL_REGION source directory.
# Verify this requirement.
if [ ! \( -f bin/release \) ]; then
    echo "$0 must be run at the top level of the HL_REGION source directory"
    exit 1
fi
# Defaults
DEST=releases
VERS=`perl bin/vers`
VERS_OLD=
test "$VERS" || exit 1
verbose=yes
check=yes
today=`date +%Y%m%d`
pmode='no'
tmpdir="../#release_tmp.$$"	# tmp work directory

# Restore previous Version information
#RESTORE_VERSION()
#{
#    if [ X-${VERS_OLD} != X- ]; then
#	echo restoring version information back to $VERS_OLD
#	rm -f config/lt_vers.am
#	cp $tmpdir/lt_vers.am config/lt_vers.am
#	bin/vers -s $VERS_OLD
#	VERS_OLD=
#    fi
#}


# Command-line arguments
while [ -n "$1" ]; do
    arg=$1
    shift
    case "$arg" in
	-d)
	    DEST=$1
	    shift
	    ;;
	--nocheck)
	    check=no
	    ;;
	-h)
	    USAGE
	    exit 0
	    ;;
	--private)
	    pmode=yes
	    ;;
	-*)
	    echo "Unknown switch: $arg" 1>&2
	    USAGE
	    exit 1
	    ;;
	*)
	    methods="$methods $arg"
	    ;;
    esac
done

# Default methods are tar and md5
if [ "X$methods" = "X" ]; then
    methods="tar md5"
fi

# Create the temporay work directory.
if mkdir $tmpdir; then
    echo "temporary work directory for release.  "\
         "Can be deleted after release completes." > $tmpdir/README
else
    echo "Failed to mkdir tmpdir($tmpdir)"
    exit 1
fi


# Store hdf5_HL_REGION-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos
HDF5_VERS=hdf5_HL_REGION-$VERS

test "$verbose" && echo "Releasing $HDF5_VERS to $DEST" 1>&2
if [ ! -d $DEST ]; then
    echo "   Destination directory $DEST does not exist" 1>&2
    exit 1
fi
# Check the validity of the MANIFEST file.
bin/chkmanifest || fail=yes
if [ "X$fail" = "Xyes" ]; then
    if [ $check = yes ]; then
        exit 1
    else
	echo "Continuing anyway..."
    fi
fi

# Create a manifest that contains only files for distribution.
MANIFEST=$tmpdir/H5_MANIFEST
grep '^\.' MANIFEST | grep -v _DO_NOT_DISTRIBUTE_ >$MANIFEST

# Prepare the source tree for a release.
ln -s `pwd` $tmpdir/$HDF5_VERS || exit 1
##mv Makefile $tmpdir/Makefile.x 2>/dev/null #might fail
#####cp -p Makefile.dist Makefile

# Update README.txt and release_doc/RELEASE.txt with release information in
# line 1.
for f in README.txt doc/RELEASE.txt; do
    echo "HDF5 HL_REGION version $VERS released on `date`" >$f.x
    sed -e 1d $f >>$f.x
    mv $f.x $f
    # Make sure new files are of the right access mode
    chmod 644 $f
done

# Create the tar file
test "$verbose" && echo "   Running tar..." 1>&2
( \
    cd $tmpdir; \
    tar cf $HDF5_VERS.tar  \
        `sed 's/^\.\//hdf5_HL_REGION-'$VERS'\//' $MANIFEST` || exit 1 \x
)
# Compress
for comp in $methods; do
    case $comp in
	tar)
	    cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
	    ;;
	compress)
	    test "$verbose" && echo "   Running compress..." 1>&2
	    compress -c <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.Z
	    ;;
	gzip)
	    test "$verbose" && echo "   Running gzip..." 1>&2
	    gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
	    ;;
	bzip2)
	    test "$verbose" && echo "   Running bzip2..." 1>&2
	    bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
	    ;;
	md5)
	    test "$verbose" && echo "   Creating checksum..." 1>&2
	    (cd $tmpdir; md5sum $HDF5_VERS.tar ) > $DEST/$HDF5_VERS.tar.md5
	    ;;
    esac
done

# Copy the RELEASE.txt to the release area.
cp doc/RELEASE.txt $DEST/$HDF5_VERS-RELEASE.txt

# Remove temporary things
rm -rf $tmpdir

exit 0
