summaryrefslogtreecommitdiffstats
path: root/bin/bbrelease
diff options
context:
space:
mode:
Diffstat (limited to 'bin/bbrelease')
-rwxr-xr-xbin/bbrelease394
1 files changed, 394 insertions, 0 deletions
diff --git a/bin/bbrelease b/bin/bbrelease
new file mode 100755
index 0000000..fea498a
--- /dev/null
+++ b/bin/bbrelease
@@ -0,0 +1,394 @@
+#!/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 hdf5.
+#
+# Programmer: Robb Matzke
+# Creation date: on or before 1998-01-29.
+#
+# Modifications
+# Robb Matzke, 1999-07-16
+# The SunOS 5.6 sed *must* have slashes as delimiters. I changed things like
+# `sed s+/CVS++' to `sed 's/\/CVS//'
+#
+# Albert Cheng, 1999-10-26
+# Moved the MANIFEST checking to a separate command file so that
+# it can be invoked individually.
+#
+# Albert Cheng, 2004-08-14
+# Added the --private option.
+#
+# James Laird, 2005-09-07
+# Added the md5 method.
+
+# Function definitions
+#
+# Print Usage page
+USAGE()
+{
+cat << EOF
+Usage: $0 -d <dir> [--docver BRANCHNAME] [-h] [--nocheck] [--private] <methods> ...
+ -d DIR The name of the directory where the releas(es) should be
+ placed.
+ --docver BRANCHNAME This is added for 1.8 and beyond to get the correct
+ version of documentation files from the hdf5docs
+ repository. BRANCHNAME for v1.8 should be hdf5_1_8.
+ -h print the help page.
+ --nocheck Ignore errors in MANIFEST file.
+ --private Make a private release with today's date in version information.
+ --revision Make a private release with the code revision number in version information.
+
+This must be run at the top level of the source directory.
+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" is assumed):
+
+ tar -- use tar and don't do any compressing.
+ gzip -- use gzip with "-9" and append ".gz" to the output name.
+ bzip2 -- use bzip2 with "-9" and append ".bz2" to the output name.
+ zip -- convert all text files to DOS style and form a zip file for Windows use.
+ doc -- produce the latest doc tree in addition to the archive.
+
+An md5 checksum is produced for each archive created and stored in the md5 file.
+
+Examples:
+
+ $ bin/release -d /tmp
+ /tmp/hdf5-1.8.13-RELEASE.txt
+ /tmp/hdf5-1.8.13.md5
+ /tmp/hdf5-1.8.13.tar
+
+ $ bin/release -d /tmp gzip
+ /tmp/hdf5-1.8.13-RELEASE.txt
+ /tmp/hdf5-1.8.13.md5
+ /tmp/hdf5-1.8.13.tar.gz
+
+ $ bin/release -d /tmp tar gzip zip
+ /tmp/hdf5-1.8.13-RELEASE.txt
+ /tmp/hdf5-1.8.13.md5
+ /tmp/hdf5-1.8.13.tar
+ /tmp/hdf5-1.8.13.tar.gz
+ /tmp/hdf5-1.8.13.tar.zip
+
+EOF
+
+}
+
+# Function name: tar2zip
+# Convert the release tarball to a Windows zipball.
+#
+# Programmer: Albert Cheng
+# Creation date: 2014-04-23
+#
+# Modifications
+#
+# Steps:
+# 1. untar the tarball in a temporay directory;
+# Note: do this in a temporary directory to avoid changing
+# the original source directory which maybe around.
+# 2. convert all its text files to DOS (LF-CR) style;
+# 3. form a zip file which is usable by Windows users.
+#
+# Parameters:
+# $1 version
+# $2 release tarball
+# $3 output zipball file name
+#
+# Returns 0 if successful; 1 otherwise
+#
+tar2zip()
+{
+ if [ $# -ne 3 ]; then
+ echo "usage: tar2zip <tarfilename> <zipfilename>"
+ return 1
+ fi
+ ztmpdir=/tmp/tmpdir$$
+ mkdir -p $ztmpdir
+ version=$1
+ tarfile=$2
+ zipfile=$3
+
+ # step 1: untar tarball in ztmpdir
+ (cd $ztmpdir; tar xf -) < $tarfile
+ # sanity check
+ if [ ! -d $ztmpdir/$version ]; then
+ echo "untar did not create $ztmpdir/$version source dir"
+ # cleanup
+ rm -rf $ztmpdir
+ return 1
+ fi
+ # step 2: convert text files
+ # There maybe a simpler way to do this.
+ # options used in unix2dos:
+ # -k Keep the date stamp
+ # -q quiet mode
+ # grep redirect output to /dev/null because -q or -s are not portable.
+ find $ztmpdir/$version | \
+ while read inf; do \
+ if file $inf | grep "$inf\: .*text" > /dev/null 2>&1 ; then \
+ unix2dos -q -k $inf; \
+ fi\
+ done
+ # step 3: make zipball
+ # -9 maximum compression
+ # -y Store symbolic links as such in the zip archive
+ # -r recursive
+ # -q quiet
+ (cd $ztmpdir; zip -9 -y -r -q $version.zip $version)
+ mv $ztmpdir/$version.zip $zipfile
+
+ # cleanup
+ rm -rf $ztmpdir
+}
+
+# This command must be run at the top level of the hdf5 source directory.
+# Verify this requirement.
+if [ ! \( -f configure -a -f bin/release \) ]; then
+ echo "$0 must be run at the top level of the hdf5 source directory"
+ exit 1
+fi
+
+# Defaults
+DEST=releases
+VERS=`perl bin/h5vers`
+VERS_OLD=
+test "$VERS" || exit 1
+verbose=yes
+check=yes
+release_date=`date +%F`
+today=`date +%Y%m%d`
+pmode='no'
+revmode='no'
+tmpdir="../#release_tmp.$$" # tmp work directory
+DOC_URL=http://svn.hdfgroup.uiuc.edu/hdf5doc/trunk
+CPPLUS_RM_NAME=cpplus_RM
+
+# 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/h5vers -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
+ ;;
+ --revision)
+ revmode=yes
+ ;;
+ --docver)
+ DOCVERSION=$1
+ shift
+ ;;
+ -*)
+ echo "Unknown switch: $arg" 1>&2
+ USAGE
+ exit 1
+ ;;
+ *)
+ methods="$methods $arg"
+ ;;
+ esac
+done
+
+# Default method is tar
+if [ "X$methods" = "X" ]; then
+ methods="tar"
+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
+
+# setup restoration in case of abort.
+trap RESTORE_VERSION 0
+
+if [ X$pmode = Xyes ]; then
+ VERS_OLD=$VERS
+ # Copy old version of config/lt_vers.am, since it's hard to
+ # "undo" changes to it.
+ cp config/lt_vers.am $tmpdir
+ # Set version information to m.n.r-of$today.
+ # (h5vers does not correctly handle just m.n.r-$today.)
+ VERS=`echo $VERS | sed -e s/-.*//`-of$today
+ echo Private release of $VERS
+ bin/h5vers -s $VERS
+fi
+
+if [ X$revmode = Xyes ]; then
+ VERS_OLD=$VERS
+ # Copy old version of config/lt_vers.am, since it's hard to
+ # "undo" changes to it.
+ cp config/lt_vers.am $tmpdir
+ branch=`svn info | grep URL: | awk -F/ '{print $NF}'`
+ revision=`svn info | grep "Last Changed Rev:" | awk '{print $4}'`
+ # Set version information to m.n.r-r$revision.
+ # (h5vers does not correctly handle just m.n.r-$today.)
+ VERS=`echo $VERS | sed -e s/-.*//`-r$revision
+ echo Private release of $VERS
+ bin/h5vers -s $VERS
+ HDF5_VERS=hdf5-$branch-r$revision
+ # use a generic directory name for revision releases
+ HDF5_IN_VERS=hdfsrc
+else
+ # Store hdf5-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos
+ HDF5_VERS=hdf5-$VERS
+ # directory name matches tar file name for non-revision releases
+ HDF5_IN_VERS=$HDF5_VERS
+fi
+
+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
+ln -s `pwd` $tmpdir/$HDF5_IN_VERS || exit 1
+# Save a backup copy of Makefile if exists.
+test -f Makefile && mv Makefile $tmpdir/Makefile.x
+cp -p Makefile.dist Makefile
+
+# Update README.txt and release_docs/RELEASE.txt with release information in
+# line 1.
+for f in README.txt release_docs/RELEASE.txt; do
+ echo "HDF5 version $VERS released on $release_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
+
+# trunk is different than branches.
+if [ "${DOCVERSION}" ]; then
+ DOC_URL=http://svn.hdfgroup.uiuc.edu/hdf5doc/branches/${DOCVERSION}
+fi
+
+# Create the tar file
+test "$verbose" && echo " Running tar..." 1>&2
+( \
+ cd $tmpdir; \
+ tar cf $HDF5_VERS.tar $HDF5_IN_VERS/Makefile \
+ `sed 's/^\.\//'$HDF5_IN_VERS'\//' $MANIFEST` || exit 1 \
+)
+
+# Compress
+MD5file=$HDF5_VERS.md5
+cp /dev/null $DEST/$MD5file
+for comp in $methods; do
+ case $comp in
+ tar)
+ cp -p $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.tar
+ (cd $DEST; md5sum $HDF5_VERS.tar >> $MD5file)
+ ;;
+ gzip)
+ test "$verbose" && echo " Running gzip..." 1>&2
+ gzip -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz
+ (cd $DEST; md5sum $HDF5_VERS.tar.gz >> $MD5file)
+ ;;
+ bzip2)
+ test "$verbose" && echo " Running bzip2..." 1>&2
+ bzip2 -9 <$tmpdir/$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2
+ (cd $DEST; md5sum $HDF5_VERS.tar.bz2 >> $MD5file)
+ ;;
+ zip)
+ test "$verbose" && echo " Creating zip ball..." 1>&2
+ tar2zip $HDF5_IN_VERS $tmpdir/$HDF5_VERS.tar $DEST/$HDF5_VERS.zip 1>&2
+ (cd $DEST; md5sum $HDF5_VERS.zip >> $MD5file)
+ ;;
+ doc)
+ if [ "${DOCVERSION}" = "" ]; then
+ DOCVERSION=trunk
+ fi
+ test "$verbose" && echo " Creating docs..." 1>&2
+ # Check out docs from svn repo
+ (cd $tmpdir; svn co $DOC_URL > /dev/null) || exit 1
+ # Create doxygen C++ RM
+ (cd c++/src && doxygen cpp_doc_config > /dev/null ) || exit 1
+ # Replace version of C++ RM with just-created version
+ rm -rf $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME
+ mv c++/src/$CPPLUS_RM_NAME $tmpdir/${DOCVERSION}/html/$CPPLUS_RM_NAME
+ # Compress the docs and move them to the release area
+ mv $tmpdir/$DOCVERSION $tmpdir/${HDF5_VERS}_docs
+ (cd $tmpdir && tar cf ${HDF5_VERS}_docs.tar ${HDF5_VERS}_docs)
+ mv $tmpdir/${HDF5_VERS}_docs.tar $DEST
+ ;;
+ *)
+ echo "***Error*** Unknown method $comp"
+ exit 1
+ ;;
+ esac
+done
+
+# Copy the RELEASE.txt to the release area.
+cp release_docs/RELEASE.txt $DEST/$HDF5_VERS-RELEASE.txt
+
+# Remove distributed Makefile and restore previous Makefile if existed.
+rm -f Makefile
+test -f $tmpdir/Makefile.x && mv $tmpdir/Makefile.x Makefile
+
+# Restore OLD version information, then no need for trap.
+if [ X$pmode = Xyes ] || [ X$revmode = Xyes ]; then
+ RESTORE_VERSION
+ trap 0
+fi
+
+# Remove temporary things
+rm -rf $tmpdir
+
+exit 0