summaryrefslogtreecommitdiffstats
path: root/bin/bbrelease
diff options
context:
space:
mode:
Diffstat (limited to 'bin/bbrelease')
-rwxr-xr-xbin/bbrelease339
1 files changed, 339 insertions, 0 deletions
diff --git a/bin/bbrelease b/bin/bbrelease
new file mode 100755
index 0000000..c59e2e5
--- /dev/null
+++ b/bin/bbrelease
@@ -0,0 +1,339 @@
+#!/bin/sh
+#
+# Copyright by The HDF Group.
+# 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 COPYING file, which can be found at the root of the source code
+# distribution tree, or in https://www.hdfgroup.org/licenses.
+# If you do not have access to either file, you may request a copy from
+# help@hdfgroup.org.
+#
+
+# Make a release of hdf5.
+#
+# NOTE:
+# This script differs from bin/release in that this has an added
+# --revision option to create private releases with the code revision
+# hash in the version strings.
+#
+# This script can probably be merged into the original release script in
+# the future.
+
+# Function definitions
+#
+# Print Usage page
+USAGE()
+{
+cat << EOF
+Usage: $0 -d <dir> [-h] [--private] [--revision [--branch BRANCHNAME]] <methods> ...
+ -d DIR The name of the directory where the release(s) should be
+ placed.
+ --branch BRANCHNAME This is to get the correct version of the branch name from the
+ repository. BRANCHNAME for v1.8 should be hdf5_1_8.
+ -h print the help page.
+ --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 allows --branch to be used for the file name.
+ --branch BRANCHNAME This is to get the correct version of the branch name from the
+ repository. BRANCHNAME for v1.8 should be hdf5_1_8.
+
+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.
+
+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.
+#
+# Steps:
+# 1. untar the tarball in a temporary directory;
+# Note: do this in a temporary directory to avoid changing
+# the original source directory which may be 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.ac -a -f bin/bbrelease \) ]; 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
+release_date=`date +%F`
+today=`date +%Y%m%d`
+pmode='no'
+revmode='no'
+tmpdir="../#release_tmp.$$" # tmp work directory
+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
+ ;;
+ -h)
+ USAGE
+ exit 0
+ ;;
+ --private)
+ pmode=yes
+ ;;
+ --revision)
+ revmode=yes
+ ;;
+ --branch)
+ BRANCHNAME=$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 temporary 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
+ echo "Save old version $VERS_OLD for restoration later."
+ # Copy old version of config/lt_vers.am, since it's hard to
+ # "undo" changes to it.
+ cp config/lt_vers.am $tmpdir
+ if [ "${BRANCHNAME}" = "" ]; then
+ BRANCHNAME=`git symbolic-ref -q --short HEAD`
+ fi
+ revision=`git rev-parse --short HEAD`
+ # 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/-.*//`-$revision
+ echo Private release of $VERS
+ HDF5_VERS=hdf5-$BRANCHNAME-$revision
+ echo file base of $HDF5_VERS
+ bin/h5vers -s $VERS
+ # 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
+
+# Create a symlink to the source so files in the tarball have the prefix
+# we want (gnu's --transform isn't portable)
+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.md and release_docs/RELEASE.txt with release information in
+# line 1.
+for f in README.md 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
+
+# Create the tar file
+test "$verbose" && echo " Running tar..." 1>&2
+(cd "$tmpdir" && exec tar -ch --exclude-vcs -f "$HDF5_VERS.tar" "./$HDF5_IN_VERS" || 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)
+ ;;
+ *)
+ 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
+ echo "Restore the original version $VERS_OLD"
+ RESTORE_VERSION
+ trap 0
+fi
+
+# Remove temporary things
+rm -rf $tmpdir
+
+echo "DONE"
+
+exit 0