Commit 14672c80f8ac032a3e4a978086be44f72345c901

Frank Heckenbach 2019-02-23T16:42:09

ftgl-release: new script

diff --git a/ChangeLog b/ChangeLog
index ee06b8a..10db810 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
-2019-02-08 00:44 Manuel A. Fernandez Montecelo
+2019-02-23 16:41  Frank Heckenbach <f.heckenbach@fh-soft.de>
+
+  * ftgl-release: new script
+
+2019-02-08 00:44  Manuel A. Fernandez Montecelo
 
   * docs/projects_using_ftgl.txt: fix duplicated entry in doc
 
diff --git a/ftgl-release b/ftgl-release
new file mode 100755
index 0000000..0ca4d09
--- /dev/null
+++ b/ftgl-release
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# Set release number
+#
+# Copyright 2019 Frank Heckenbach <f.heckenbach@fh-soft.de>
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+die ()
+{
+  echo "$*" >&2
+  exit 1
+}
+
+[ "$#" = 2 ] || die "Usage: $(basename "$0") version description"
+egrep -q "^[0-9]+.[0-9]+.[0-9]+$" <<< "$1" || die "invalid version format (x.y.z)"
+
+[ "$CHANGELOG_NAME" ] || die "Please set CHANGELOG_NAME"
+
+[ -e src/FTLibrary.cpp ] || die "This script must be invoked in the main FTGL source directory."
+
+description="$2"
+new="$1"
+major="${new%%.*}"
+minor="${new#*.}"
+micro="${minor#*.}"
+minor="${minor%%.*}"
+
+prev="$(sed -En '/.* Release ([0-9]+.[0-9]+.[0-9]+)[ -]*$/{s//\1/p;q;}' NEWS)"
+pmajor="${prev%%.*}"
+pminor="${prev#*.}"
+pmicro="${pminor#*.}"
+pminor="${pminor%%.*}"
+
+[[ "$((major != pmajor ? major > pmajor :
+       minor != pminor ? minor > pminor :
+                         micro > pmicro))" -eq 1 ]] || die "new version must be greater than old version ($prev)"
+
+! fgrep "version $new." ChangeLog || die "new version already mentioned in ChangeLog"
+
+[ -z "$(git status --porcelain)" ] || die "Please commit previous changes first."
+
+sed -Ei "s/(AC_INIT\(FTGL, )[0-9]+.[0-9]+.[0-9]+(, )/\1$new\2/;
+         s/(LT_MAJOR=\")[0-9]+(\")/\1$major\2/;
+         s/(LT_MINOR=\")[0-9]+(\")/\1$minor\2/;
+         s/(LT_MICRO=\")[0-9]+(\")/\1$micro\2/" configure.ac
+
+sed -Ei "s/(SET\(VERSION_SERIES )[0-9]+(\))/\1$major\2/;
+         s/(SET\(VERSION_MAJOR )[0-9]+(\))/\1$minor\2/;
+         s/(SET\(VERSION_MINOR )[0-9]+(\))/\1$micro\2/" CMakeLists.txt
+
+sed -Ei "s/(VERSIONNBR=)[0-9]+.[0-9]+.[0-9]+/\1$new/" ppa_upload.sh
+
+sed -Ei "s/(#define PACKAGE_VERSION \")[0-9]+.[0-9]+.[0-9]+(\")/\1$new\2/" msvc/config.h
+
+sed -Ei "s/(SHLIBVER := ).*$/\1$new/" debian/rules
+
+sed -i "1i\\
+$(date +"%F %H:%M")  $CHANGELOG_NAME\\
+\\
+  * NEWS, configure.ac, CMakeLists.txt, ppa_upload.sh, msvc/config.h, debian/rules:\\
+    * Mark package as being version $new.\\
+
+" ChangeLog
+
+sed -i "0,/--- .* Release /{/--- .* Release /i\\
+--- $(date +"%F")  Release $new                                      ---\\
+----------------------------------------------------------------------\\
+\\
+    * ${description//\n/\n    * }\\
+\\
+----------------------------------------------------------------------
+;}" NEWS
+
+PAGER= git diff
+git add -A
+git commit -m "$description"
+
+echo
+echo "*** New release number set; now push and create release tag."