#!/bin/bash
#
# do a smartmontools release
-# (C) 2003-9 Bruce Allen <ballen4705@users.sourceforge.net>,
-# Guido Guenther <agx@sigxcpu.org>
-# Christian Franke <smartmontools-support@lists.sourceforge.net>
-# $Id: do_release 2970 2009-10-26 18:36:22Z chrfranke $
+# (C) 2003-11 Bruce Allen <ballen4705@users.sourceforge.net>,
+# Guido Guenther <agx@sigxcpu.org>
+# (C) 2006-13 Christian Franke <smartmontools-support@lists.sourceforge.net>
+# $Id: do_release 3765 2013-02-05 17:17:13Z chrfranke $
# Notes on generating releases:
# (1) update NEWS
-# (2) update CHANGELOG -- put in release number
-# (3) update release number in configure.in
+# (2) update ChangeLog -- put in release number
+# (3) update release number in configure.ac
# (4) to test, run without '--commit'
# (5) when satisfied, add option '--commit'
set -e
+# Smartmontools Signing Key (through 2014)
+KEYID=0x8F6ED8AA
+
inc_release()
{
MINOR=`echo $VERSION | cut -d. -f2`
MAJOR=`echo $VERSION | cut -d. -f1`
PERL_OLD=$MAJOR\\.$MINOR
- ((MINOR++))
+ ((++MINOR))
NEW_VERSION=$MAJOR.$MINOR
PERL_NEW=$MAJOR\\.$MINOR
NEW_RELEASE="RELEASE_${NEW_VERSION//\./_}"
# Check workdir
case "`/bin/pwd`" in
- */trunk/smartmontools) ;;
- *) echo "not run from trunk checkout"; exit 1 ;;
+ */trunk/smartmontools) WDROOT="../.."; DIRPAT="trunk" ;;
+ */branches/*/smartmontools) WDROOT="../../.."; DIRPAT="branches/*" ;;
+ *) echo "`/bin/pwd`: no trunk or branch working dir"; exit 1 ;;
esac
-if [ ! -d ../../tags ]; then
+if [ ! -d "$WDROOT/tags" ]; then
echo "tags directory missing"; exit 1
fi
-REV=`(cd ../.. && svnversion)` || exit 1
-if [ -z "`echo "$REV" | sed -n '/^[0-9][0-9]*$/p'`" ]; then
- echo "Working directory not clean: $REV"; exit 1
+REVX="`(cd $WDROOT && svnversion)`" || exit 1
+REV="${REVX/%[PM]/}"; REV="${REV/%[PM]/}"
+if [ -n "${REV//[0-9]/}" ]; then
+ echo "Working directory not clean: $REVX"; exit 1
+fi
+
+(cd $WDROOT && svn status) | while read s; do
+ case "`echo $s | tr -s ' '`" in
+ "M "$DIRPAT/smartmontools/ChangeLog) echo "$s: OK";;
+ "M "$DIRPAT/smartmontools/NEWS) echo "$s: OK";;
+ "M "$DIRPAT/smartmontools/configure.ac) echo "$s: OK";;
+ *) echo "$s: not allowed"; exit 1;;
+ esac
+done
+if [ $? -ne 0 ]; then
+ exit 1
fi
# Get release number
-VERSION=`sed -n 's|^AC_INIT[^,]*, *\([0-9.]*\) *,.*$|\1|p' configure.in`
+VERSION=`sed -n 's|^AC_INIT[^,]*, *\([0-9.]*\) *,.*$|\1|p' configure.ac`
if [ -z "$VERSION" ]; then
- echo "AC_INIT not found in configure.in"; exit 1
+ echo "AC_INIT not found in configure.ac"; exit 1
fi
VERSIONRC="$VERSION"
RELEASE="RELEASE_${VERSION//\./_}"
RELEASE="${RELEASE}_${RC}"
fi
-if [ -e "../../tags/$RELEASE" ]; then
+if [ -e "$WDROOT/tags/$RELEASE" ]; then
echo "tags/$RELEASE exists"; exit 1
fi
echo "r$REV: Release $VERSIONRC $RELEASE"
-set -v
# Update timestamp
smartmontools_release_date=`date -u +"%Y-%m-%d"`
smartmontools_release_time=`date -u +"%T %Z"`
-cat configure.in | sed "s|smartmontools_release_date=.*|smartmontools_release_date=${smartmontools_release_date}|" > configure.tmp
-cat configure.tmp | sed "s|smartmontools_release_time=.*|smartmontools_release_time=\"${smartmontools_release_time}\"|" > configure.in
+cat configure.ac | sed "s|smartmontools_release_date=.*|smartmontools_release_date=${smartmontools_release_date}|" > configure.tmp
+cat configure.tmp | sed "s|smartmontools_release_time=.*|smartmontools_release_time=\"${smartmontools_release_time}\"|" > configure.ac
rm -f configure.tmp
+# Review changes
+svn diff
+echo "==================================================================="
+echo ">>> Continuing in 20 seconds ..."
+sleep 20
+set -v
+
# Create tag and commit
-cd ../..
if [ "$COMMIT" = "yes" ]; then
- svn mkdir tags/$RELEASE
- svn copy trunk/smartmontools tags/$RELEASE/smartmontools
- svn commit -m "Release $VERSIONRC $RELEASE"
+ svn mkdir $WDROOT/tags/$RELEASE
+ svn copy ../smartmontools $WDROOT/tags/$RELEASE/smartmontools
+ svn commit -m "Release $VERSIONRC $RELEASE" $WDROOT
fi
-cd trunk/smartmontools
# Build
./autogen.sh
rm -rvf build
md5sum $TARFILE > $TARFILE.md5
-sha1sum $TARFILE > $TARFILE.sha1
# Increase release number
-if [ -z "$RC" ]; then
+if [ -z "$RC" -a "$DIRPAT" = "trunk" ]; then
inc_release
if [ "$COMMIT" = "yes" ]; then
- perl -p -i.bak -e "s/$PERL_OLD/$PERL_NEW/" configure.in
- # svn commit -m "Bump release number to $NEW_VERSION" configure.in
+ perl -p -i.bak -e "s/$PERL_OLD/$PERL_NEW/" configure.ac
+ # svn commit -m "Bump release number to $NEW_VERSION" configure.ac
fi
fi
+# Sign tarball
+if [ -n "$KEYID" ] && gpg --list-secret-keys $KEYID >/dev/null 2>/dev/null; then
+ gpg --default-key $KEYID --armor --detach-sign ./smartmontools-$VERSIONRC.tar.gz
+fi
+