From 724ce53657e7ce7e0ae6122ddbb8b6475463f02d Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Wed, 23 Jun 2021 17:10:48 +0200
Subject: Backport release scripts and script changes

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 mksrcrelease.sh | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 mkwinbins.sh    |   4 ++
 2 files changed, 144 insertions(+)
 create mode 100755 mksrcrelease.sh

diff --git a/mksrcrelease.sh b/mksrcrelease.sh
new file mode 100755
index 0000000..e81e32e
--- /dev/null
+++ b/mksrcrelease.sh
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+set -e
+
+usage() {
+        cat <<EOF
+
+Usage: ${0##*/} <new_version>
+
+<new_version>    - release version to create in X.Y.Z format
+EOF
+        exit 0
+}
+
+fatal() {
+        printf "Error: %s\n" "$1" >&2
+        exit 1
+}
+
+askyesno() {
+	local question="$1"
+	local choice=""
+
+	read -p "$question [y/N]? " choice
+
+	case "$choice" in
+	y|Y)
+		echo "yes"
+		;;
+	*)
+		;;
+	esac
+
+	return 0
+}
+
+##### get the command line arguments
+[ $# -eq 0 ] && usage
+[ $# -eq 1 ] || fatal "Insufficient or too many argumetns"
+
+new_ver="$1"; shift
+
+VER_REGEX="\([0-9]\+.[0-9]\+.[0-9]\+\)"
+echo "$new_ver" | grep -q -x "$VER_REGEX" ||
+        fatal "please, provide new version in X.Y.Z format"
+
+##### parse the old version information
+old_ver="$(grep AC_INIT configure.ac | grep -o \\[[0-9.]*\\] | tr -d [])"
+old_so_ver="$(grep LIBSQUASHFS_SO_VERSION configure.ac | \
+	      grep -o \\[[0-9:]*\\] | tr -d [])"
+
+current=$(echo "${old_so_ver}" | cut -d: -f1)
+revision=$(echo "${old_so_ver}" | cut -d: -f2)
+age=$(echo "${old_so_ver}" | cut -d: -f3)
+
+echo "$old_ver" | grep -q -x "$VER_REGEX" ||
+        fatal "error reading old version number"
+
+VER_REGEX="\([0-9]\+:[0-9]\+:[0-9]\+\)"
+echo "$old_so_ver" | grep -q -x "$VER_REGEX" ||
+        fatal "error reading old so version"
+
+[ "x$current:$revision:$age" = "x$old_so_ver" ] || \
+	fatal "Error parsing old so version"
+
+##### generate new library SO version
+libchanges=$(git diff --numstat v${old_ver}..HEAD lib/sqfs/ | wc -l)
+
+if [ $libchanges -gt 0 ]; then
+	echo "Detected changes to library code, updating so version"
+	added=$(askyesno "Have any public interfaces been changed")
+	changed=$(askyesno "Have any public interfaces been added")
+	removed=$(askyesno "Have any public interfaces been removed")
+
+	revision=$((revision+1))
+
+	if [ -n "$added" -o -n "$removed" -o -n "$changed" ]; then
+		current=$((current+1))
+		revision=0
+	fi
+
+	if [ -n "$added" ]; then
+		age=$((age+1))
+	fi
+
+	if [ -n "$removed" -o -n "$changed" ]; then
+		age=0
+	fi
+else
+	echo "No changes to library code detected, keeping old so version"
+fi
+
+new_so_ver="${current}:${revision}:${age}"
+
+echo ""
+echo "current package version:      $old_ver"
+echo "current library so-version:   $old_so_ver"
+echo ""
+echo "creating package version:     $new_ver"
+echo "With library so-version:      $new_so_ver"
+echo ""
+
+if [ "x$(askyesno "Is this ok")" != "xyes" ]; then
+	echo "Aborting"
+	exit
+fi
+
+tag_name="v$new_ver"
+release_name="squashfs-tools-ng-${new_ver}"
+
+# Make sure the git index is up-to-date
+[ -z "$(git status --porcelain)" ] || fatal "Git index is not up-to-date"
+
+# Make sure the tag does not exist
+[ -z "$(git tag -l "$tag_name")" ] || fatal "Tag $tag_name already exists"
+
+# Change the version in the configure.ac
+sed -i -e "s/$old_ver/$new_ver/g" configure.ac
+sed -i -e "s/$old_so_ver/$new_so_ver/g" configure.ac
+
+# Commit the change, create new signed tag
+echo "Generating signed release commit tag $tag_name"
+
+git commit -s -m "Release version $new_ver" configure.ac
+git tag -m "Release $new_ver" -s "$tag_name"
+
+# Prepare signed tarball
+./autogen.sh
+./configure
+make -j distcheck
+
+echo "Signing the tarball"
+gpg -o "$release_name.tar.gz.asc" --detach-sign \
+    -a "$release_name.tar.gz"
+gpg -o "$release_name.tar.xz.asc" --detach-sign \
+    -a "$release_name.tar.xz"
+
+echo "Generating doxygen documentation"
+make doxygen-doc
+tar czf "doxydoc-$new_ver.tar.gz" -C doxygen-doc/html .
diff --git a/mkwinbins.sh b/mkwinbins.sh
index 0567660..b05bafc 100755
--- a/mkwinbins.sh
+++ b/mkwinbins.sh
@@ -190,3 +190,7 @@ zip -g -r -l "${W32_ZIP_NAME}.zip" "$W32_ZIP_NAME/licenses" $W32_ZIP_NAME/*.md
 zip -r "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/bin" "$W64_ZIP_NAME/lib"
 zip -g -r -l "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/include"
 zip -g -r -l "${W64_ZIP_NAME}.zip" "$W64_ZIP_NAME/licenses" $W64_ZIP_NAME/*.md
+
+############################# sign the packages ##############################
+gpg -o "${W64_ZIP_NAME}.zip.asc" --detach-sign -a "${W64_ZIP_NAME}.zip"
+gpg -o "${W32_ZIP_NAME}.zip.asc" --detach-sign -a "${W32_ZIP_NAME}.zip"
-- 
cgit v1.2.3