You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
261 lines
5.8 KiB
261 lines
5.8 KiB
#!/bin/sh
|
|
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
#
|
|
# Project configuration variables
|
|
#
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
VERSION_FILE="include/tinyalsa/version.h"
|
|
CHANGELOG_FILE="debian/changelog"
|
|
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
#
|
|
# Scripts internal variables
|
|
#
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
LF="\n"
|
|
PARAMS=""
|
|
DRYRUN=0
|
|
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
#
|
|
# Helper functions
|
|
#
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
die()
|
|
{
|
|
echo "Error: $@" 1>&2
|
|
exit 1
|
|
}
|
|
|
|
print_usage()
|
|
{
|
|
echo
|
|
echo "Usage: $0 [OPTIONS] ACTION"
|
|
echo
|
|
echo "Available options:"
|
|
echo " -s,--script Format output in \"script\" mode (no trailing newline)."
|
|
echo " -d,--dry-run Does not commit anything to any file, just prints."
|
|
echo
|
|
echo "Available actions:"
|
|
echo " print [minor|major|patch] Print the current version."
|
|
echo " release [minor|major|patch] Bump the specified version part"
|
|
echo " check Check the changelog latest released"
|
|
echo " version against the version file."
|
|
echo
|
|
echo "Please run this script from the project root folder."
|
|
echo
|
|
}
|
|
|
|
check_files()
|
|
{
|
|
[ -f ${VERSION_FILE} ] || die "No ${VERSION_FILE} found!";
|
|
[ -f ${CHANGELOG_FILE} ] || die "No ${CHANGELOG_FILE} found!"
|
|
}
|
|
|
|
# Gets a part of the version from the project version file (version.h).
|
|
# Takes one argument: the matching version identifier in the version file, e.g.
|
|
# TINYALSA_VERSION_MAJOR
|
|
get_version_part()
|
|
{
|
|
set -- "$1" "$(grep -m 1 "^#define\([ \t]*\)$1" ${VERSION_FILE} | sed 's/[^0-9]*//g')"
|
|
|
|
if [ -z "$2" ]; then
|
|
die "Could not get $1 from ${VERSION_FILE}"
|
|
fi
|
|
|
|
echo "$2"
|
|
}
|
|
|
|
|
|
# Gets the complete version from the version file.
|
|
# Sets VERSION_MAJOR, VERSION_MINOR and VERSION_PATCH globals
|
|
get_version()
|
|
{
|
|
VERSION_MAJOR=$(get_version_part "TINYALSA_VERSION_MAJOR")
|
|
VERSION_MINOR=$(get_version_part "TINYALSA_VERSION_MINOR")
|
|
VERSION_PATCH=$(get_version_part "TINYALSA_VERSION_PATCH")
|
|
}
|
|
|
|
# Commits the new version part to the version file.
|
|
# Takes two arguments: the version part identifier in the version file and the
|
|
# new version number. If no arguments, do nothing.
|
|
commit_version_part()
|
|
{
|
|
if [ -z $1 ] || [ -z $2 ]; then
|
|
return 0
|
|
fi
|
|
|
|
sed -i "s/\(^#define[ \t]*$1\)[ \t]*\([0-9]*\)/\1 $2/g" ${VERSION_FILE} \
|
|
|| die "Could not commit version for $1";
|
|
|
|
[ $(get_version_part $1) = "$2" ] || die "Version check after commit failed for $1"
|
|
|
|
return 0;
|
|
}
|
|
|
|
# Commits the new version to the version file.
|
|
# Takes three arguments, the new version numbers for major, minor and patch
|
|
commit_version()
|
|
{
|
|
commit_version_part "TINYALSA_VERSION_PATCH" $1
|
|
commit_version_part "TINYALSA_VERSION_MINOR" $2
|
|
commit_version_part "TINYALSA_VERSION_MAJOR" $3
|
|
|
|
return 0
|
|
}
|
|
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
#
|
|
# Actions implementations / functions
|
|
#
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
print_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
|
|
}
|
|
|
|
bump_version()
|
|
{
|
|
case "${1:-patch}" in
|
|
major)
|
|
VERSION_MAJOR=$((VERSION_MAJOR+1))
|
|
VERSION_MINOR=0
|
|
VERSION_PATCH=0
|
|
;;
|
|
minor)
|
|
VERSION_MINOR=$((VERSION_MINOR+1))
|
|
VERSION_PATCH=0
|
|
;;
|
|
patch)
|
|
VERSION_PATCH=$((VERSION_PATCH+1))
|
|
;;
|
|
*)
|
|
die "Unknown part \"$1\" (must be one of minor, major and patch)."
|
|
;;
|
|
esac
|
|
|
|
if [ ${DRYRUN} -ne 1 ]; then
|
|
commit_version ${VERSION_PATCH} ${VERSION_MINOR} ${VERSION_MAJOR}
|
|
fi
|
|
|
|
print_version
|
|
return 0
|
|
}
|
|
|
|
check_version()
|
|
{
|
|
# set $1 to log version, and $2 to ref version
|
|
set -- \
|
|
"$(grep -m 1 "^tinyalsa (" ${CHANGELOG_FILE}| sed "s/[^0-9.]*//g")" \
|
|
"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"
|
|
|
|
if [ "$1" != "$2" ]; then
|
|
die "Changelog version ($1) does not match package version ($2)."
|
|
fi
|
|
|
|
printf "Changelog version ($1) OK!${LF}"
|
|
return 0
|
|
}
|
|
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
#
|
|
# Command Line parsing
|
|
#
|
|
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
parse_command()
|
|
{
|
|
if [ "$#" -eq "0" ]; then
|
|
print_usage
|
|
exit 1
|
|
fi
|
|
|
|
case "$1" in
|
|
print)
|
|
get_version
|
|
print_version "$2"
|
|
exit $?
|
|
;;
|
|
release)
|
|
get_version
|
|
bump_version "$2"
|
|
exit $?
|
|
;;
|
|
check)
|
|
get_version
|
|
check_version
|
|
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
|
|
;;
|
|
-d|--dry-run)
|
|
DRYRUN=1
|
|
shift
|
|
;;
|
|
--)
|
|
shift
|
|
break
|
|
;;
|
|
-*|--*=)
|
|
die "Unsupported flag \"$1\"."
|
|
;;
|
|
*)
|
|
PARAMS="$PARAMS ${1}"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# set positional arguments in their proper place
|
|
set -- "${PARAMS}"
|
|
|
|
check_files
|
|
parse_command ${PARAMS}
|
|
|
|
# The script should never reach this place.
|
|
die "Internal error. Please report this."
|