mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-12 15:04:59 +08:00
5372b04bab
* commit '5aee5213190f145b5a734f5dc76a67c82f7d6b82': emoved .gitattributes and .gitignore, as the manual migration did not create them. Corrected bbrelease script to create new release version with revision hash. Translate svn commands to git commands for chkmanifest and bbrelease scripts with source in git repository. Removed the -p option from the command to run autogen.sh. It interfered with running chkmanifest on a machine with the correct autotools versions but without access to /usr/hdf/bin/AUTOTOOLS. The autogen.sh script says the option is for HDF group use only and is likely to be removed. The same effect can be achieved by adding /usr/hdf/bin/AUTOTOOLS to the beginning of PATH. Removed the -p option from the command to run autogen.sh. It interfered with running chkmanifest on a machine with the correct autotools versions but without access to /usr/hdf/bin/AUTOTOOLS. The autogen.sh script says the option is for HDF group use only and is likely to be removed. The same effect can be achieved by adding /usr/hdf/bin/AUTOTOOLS to the beginning of PATH.
414 lines
12 KiB
Bash
Executable File
414 lines
12 KiB
Bash
Executable File
#!/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.
|
|
#
|
|
# Larry Knox, 2016-08-30
|
|
# Added the --revision option to create private releases with the
|
|
# code revision hash in the version strings. Currently the version
|
|
# of this script with the --revision option is named bbrelease. It
|
|
# can probably be merged into the original release script in the
|
|
# future.
|
|
# Commands to get the revision hash have now been converted to git
|
|
# to match the source repository change.
|
|
|
|
# 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.
|
|
# Since we are running bbrelease to create an HDF5 source tarfile for buildbot
|
|
# testing with source that is not for release, there is not a file named
|
|
# "configure" but there will be one named "configure.ac". The "configure"
|
|
# file will be created when autogen.sh runs. There probably will always
|
|
# be a bin/release file, but just in case it is removed, we can check for
|
|
# this script, bbrelease, in the bin directory. The bin/release script should
|
|
# continue to check for "configure" because it should be present in release
|
|
# source.
|
|
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
|
|
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
|
|
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
|
|
branch=`git branch | grep '*' | awk '{print $NF}'`
|
|
revision=`git rev-parse 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
|
|
bin/h5vers -s $VERS
|
|
HDF5_VERS=hdf5-$branch-$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
|
|
echo "Restore the original version $VERS_OLD"
|
|
RESTORE_VERSION
|
|
trap 0
|
|
fi
|
|
|
|
# Remove temporary things
|
|
rm -rf $tmpdir
|
|
|
|
exit 0
|