aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/version-bump.sh160
1 files changed, 160 insertions, 0 deletions
diff --git a/scripts/version-bump.sh b/scripts/version-bump.sh
new file mode 100755
index 0000000..6378801
--- /dev/null
+++ b/scripts/version-bump.sh
@@ -0,0 +1,160 @@
+#!/bin/bash
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Project configuration variables
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+VERSION_FILE="include/tinyalsa/version.h"
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Scripts internal variables
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+LF="\n"
+PARAMS=""
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Helper functions
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+die()
+{
+ echo "Error: $@" 1>&2
+ exit 1
+}
+
+print_usage()
+{
+ echo "Usage: $0 [OPTIONS] ACTION"
+ echo
+ echo "Available options:"
+ echo " -s,--script Format output in \"script\" mode (no trailing newline)."
+ echo
+ echo "Available actions:"
+ echo " print [minor|major|patch] Print the current version."
+ echo
+ echo "Please run this script from the project root folder."
+}
+
+
+# Gets a part of the version from the project version file (version.h).
+# Takes one argument: the matching version identifier in the version file.
+get_version_part()
+{
+ local V=$(grep -m 1 "^#define\([ \t]*\)${1}" ${VERSION_FILE} | sed 's/[^0-9]*//g')
+
+ [ ! -z ${V} ] || die "Could not get ${1} from ${VERSION_FILE}"
+
+ echo ${V}
+}
+
+
+# Gets the complete version from the version file.
+get_version()
+{
+ [ -f ${VERSION_FILE} ] || die "No ${VERSION_FILE} found! Is this the project root?";
+
+ VERSION_MAJOR=$(get_version_part "TINYALSA_VERSION_MAJOR")
+ VERSION_MINOR=$(get_version_part "TINYALSA_VERSION_MINOR")
+ VERSION_PATCH=$(get_version_part "TINYALSA_VERSION_PATCH")
+}
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Actions implementations / functions
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+print_version()
+{
+ get_version
+
+ if [ -z $1 ]; then
+ printf "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${LF}"
+ else
+ case "$1" in
+ major)
+ printf "${VERSION_MAJOR}${LF}"
+ ;;
+ minor)
+ printf "${VERSION_MINOR}${LF}"
+ ;;
+ patch)
+ printf "${VERSION_PATCH}${LF}"
+ ;;
+ *)
+ die "Unknown part \"$1\" (must be one of minor, major and patch)."
+ ;;
+ esac
+ fi
+
+ return 0
+}
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Command Line parsing
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+parse_command()
+{
+ if [ "$#" -eq "0" ]; then
+ print_usage
+ exit 1
+ fi
+
+ case "$1" in
+ print)
+ print_version "$2"
+ exit $?
+ ;;
+ *)
+ die "Unsupported action \"$1\"."
+ ;;
+ esac
+}
+
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+#
+# Main
+#
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+
+set -e
+trap "set +e" 0
+
+# Checking parameters
+if [ "$#" -eq "0" ]; then
+ print_usage
+ exit 0
+fi
+
+while [ "$#" -ne "0" ]; do
+ case "$1" in
+ -s|--script)
+ unset LF
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*|--*=)
+ die "Unsupported flag \"$1\"."
+ ;;
+ *)
+ PARAMS="$PARAMS ${1}"
+ shift
+ ;;
+ esac
+done
+
+# set positional arguments in their proper place
+set -- "${PARAMS}"
+
+parse_command ${PARAMS}
+
+# The script should never reach this place.
+die "Internal error. Please report this."