1*02e95f1aSMarcin Radomski#!/bin/sh 2*02e95f1aSMarcin Radomski 3*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 4*02e95f1aSMarcin Radomski# 5*02e95f1aSMarcin Radomski# Project configuration variables 6*02e95f1aSMarcin Radomski# 7*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 8*02e95f1aSMarcin RadomskiVERSION_FILE="include/tinyalsa/version.h" 9*02e95f1aSMarcin RadomskiCHANGELOG_FILE="debian/changelog" 10*02e95f1aSMarcin Radomski 11*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 12*02e95f1aSMarcin Radomski# 13*02e95f1aSMarcin Radomski# Scripts internal variables 14*02e95f1aSMarcin Radomski# 15*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 16*02e95f1aSMarcin RadomskiLF="\n" 17*02e95f1aSMarcin RadomskiPARAMS="" 18*02e95f1aSMarcin RadomskiDRYRUN=0 19*02e95f1aSMarcin Radomski 20*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 21*02e95f1aSMarcin Radomski# 22*02e95f1aSMarcin Radomski# Helper functions 23*02e95f1aSMarcin Radomski# 24*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 25*02e95f1aSMarcin Radomskidie() 26*02e95f1aSMarcin Radomski{ 27*02e95f1aSMarcin Radomski echo "Error: $@" 1>&2 28*02e95f1aSMarcin Radomski exit 1 29*02e95f1aSMarcin Radomski} 30*02e95f1aSMarcin Radomski 31*02e95f1aSMarcin Radomskiprint_usage() 32*02e95f1aSMarcin Radomski{ 33*02e95f1aSMarcin Radomski echo 34*02e95f1aSMarcin Radomski echo "Usage: $0 [OPTIONS] ACTION" 35*02e95f1aSMarcin Radomski echo 36*02e95f1aSMarcin Radomski echo "Available options:" 37*02e95f1aSMarcin Radomski echo " -s,--script Format output in \"script\" mode (no trailing newline)." 38*02e95f1aSMarcin Radomski echo " -d,--dry-run Does not commit anything to any file, just prints." 39*02e95f1aSMarcin Radomski echo 40*02e95f1aSMarcin Radomski echo "Available actions:" 41*02e95f1aSMarcin Radomski echo " print [minor|major|patch] Print the current version." 42*02e95f1aSMarcin Radomski echo " release [minor|major|patch] Bump the specified version part" 43*02e95f1aSMarcin Radomski echo " check Check the changelog latest released" 44*02e95f1aSMarcin Radomski echo " version against the version file." 45*02e95f1aSMarcin Radomski echo 46*02e95f1aSMarcin Radomski echo "Please run this script from the project root folder." 47*02e95f1aSMarcin Radomski echo 48*02e95f1aSMarcin Radomski} 49*02e95f1aSMarcin Radomski 50*02e95f1aSMarcin Radomskicheck_files() 51*02e95f1aSMarcin Radomski{ 52*02e95f1aSMarcin Radomski [ -f ${VERSION_FILE} ] || die "No ${VERSION_FILE} found!"; 53*02e95f1aSMarcin Radomski [ -f ${CHANGELOG_FILE} ] || die "No ${CHANGELOG_FILE} found!" 54*02e95f1aSMarcin Radomski} 55*02e95f1aSMarcin Radomski 56*02e95f1aSMarcin Radomski# Gets a part of the version from the project version file (version.h). 57*02e95f1aSMarcin Radomski# Takes one argument: the matching version identifier in the version file, e.g. 58*02e95f1aSMarcin Radomski# TINYALSA_VERSION_MAJOR 59*02e95f1aSMarcin Radomskiget_version_part() 60*02e95f1aSMarcin Radomski{ 61*02e95f1aSMarcin Radomski set -- "$1" "$(grep -m 1 "^#define\([ \t]*\)$1" ${VERSION_FILE} | sed 's/[^0-9]*//g')" 62*02e95f1aSMarcin Radomski 63*02e95f1aSMarcin Radomski if [ -z "$2" ]; then 64*02e95f1aSMarcin Radomski die "Could not get $1 from ${VERSION_FILE}" 65*02e95f1aSMarcin Radomski fi 66*02e95f1aSMarcin Radomski 67*02e95f1aSMarcin Radomski echo "$2" 68*02e95f1aSMarcin Radomski} 69*02e95f1aSMarcin Radomski 70*02e95f1aSMarcin Radomski 71*02e95f1aSMarcin Radomski# Gets the complete version from the version file. 72*02e95f1aSMarcin Radomski# Sets VERSION_MAJOR, VERSION_MINOR and VERSION_PATCH globals 73*02e95f1aSMarcin Radomskiget_version() 74*02e95f1aSMarcin Radomski{ 75*02e95f1aSMarcin Radomski VERSION_MAJOR=$(get_version_part "TINYALSA_VERSION_MAJOR") 76*02e95f1aSMarcin Radomski VERSION_MINOR=$(get_version_part "TINYALSA_VERSION_MINOR") 77*02e95f1aSMarcin Radomski VERSION_PATCH=$(get_version_part "TINYALSA_VERSION_PATCH") 78*02e95f1aSMarcin Radomski} 79*02e95f1aSMarcin Radomski 80*02e95f1aSMarcin Radomski# Commits the new version part to the version file. 81*02e95f1aSMarcin Radomski# Takes two arguments: the version part identifier in the version file and the 82*02e95f1aSMarcin Radomski# new version number. If no arguments, do nothing. 83*02e95f1aSMarcin Radomskicommit_version_part() 84*02e95f1aSMarcin Radomski{ 85*02e95f1aSMarcin Radomski if [ -z $1 ] || [ -z $2 ]; then 86*02e95f1aSMarcin Radomski return 0 87*02e95f1aSMarcin Radomski fi 88*02e95f1aSMarcin Radomski 89*02e95f1aSMarcin Radomski sed -i "s/\(^#define[ \t]*$1\)[ \t]*\([0-9]*\)/\1 $2/g" ${VERSION_FILE} \ 90*02e95f1aSMarcin Radomski || die "Could not commit version for $1"; 91*02e95f1aSMarcin Radomski 92*02e95f1aSMarcin Radomski [ $(get_version_part $1) = "$2" ] || die "Version check after commit failed for $1" 93*02e95f1aSMarcin Radomski 94*02e95f1aSMarcin Radomski return 0; 95*02e95f1aSMarcin Radomski} 96*02e95f1aSMarcin Radomski 97*02e95f1aSMarcin Radomski# Commits the new version to the version file. 98*02e95f1aSMarcin Radomski# Takes three arguments, the new version numbers for major, minor and patch 99*02e95f1aSMarcin Radomskicommit_version() 100*02e95f1aSMarcin Radomski{ 101*02e95f1aSMarcin Radomski commit_version_part "TINYALSA_VERSION_PATCH" $1 102*02e95f1aSMarcin Radomski commit_version_part "TINYALSA_VERSION_MINOR" $2 103*02e95f1aSMarcin Radomski commit_version_part "TINYALSA_VERSION_MAJOR" $3 104*02e95f1aSMarcin Radomski 105*02e95f1aSMarcin Radomski return 0 106*02e95f1aSMarcin Radomski} 107*02e95f1aSMarcin Radomski 108*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 109*02e95f1aSMarcin Radomski# 110*02e95f1aSMarcin Radomski# Actions implementations / functions 111*02e95f1aSMarcin Radomski# 112*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 113*02e95f1aSMarcin Radomskiprint_version() 114*02e95f1aSMarcin Radomski{ 115*02e95f1aSMarcin Radomski if [ -z $1 ]; then 116*02e95f1aSMarcin Radomski printf "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${LF}" 117*02e95f1aSMarcin Radomski else 118*02e95f1aSMarcin Radomski case "$1" in 119*02e95f1aSMarcin Radomski major) 120*02e95f1aSMarcin Radomski printf "${VERSION_MAJOR}${LF}" 121*02e95f1aSMarcin Radomski ;; 122*02e95f1aSMarcin Radomski minor) 123*02e95f1aSMarcin Radomski printf "${VERSION_MINOR}${LF}" 124*02e95f1aSMarcin Radomski ;; 125*02e95f1aSMarcin Radomski patch) 126*02e95f1aSMarcin Radomski printf "${VERSION_PATCH}${LF}" 127*02e95f1aSMarcin Radomski ;; 128*02e95f1aSMarcin Radomski *) 129*02e95f1aSMarcin Radomski die "Unknown part \"$1\" (must be one of minor, major and patch)." 130*02e95f1aSMarcin Radomski ;; 131*02e95f1aSMarcin Radomski esac 132*02e95f1aSMarcin Radomski fi 133*02e95f1aSMarcin Radomski 134*02e95f1aSMarcin Radomski return 0 135*02e95f1aSMarcin Radomski} 136*02e95f1aSMarcin Radomski 137*02e95f1aSMarcin Radomskibump_version() 138*02e95f1aSMarcin Radomski{ 139*02e95f1aSMarcin Radomski case "${1:-patch}" in 140*02e95f1aSMarcin Radomski major) 141*02e95f1aSMarcin Radomski VERSION_MAJOR=$((VERSION_MAJOR+1)) 142*02e95f1aSMarcin Radomski VERSION_MINOR=0 143*02e95f1aSMarcin Radomski VERSION_PATCH=0 144*02e95f1aSMarcin Radomski ;; 145*02e95f1aSMarcin Radomski minor) 146*02e95f1aSMarcin Radomski VERSION_MINOR=$((VERSION_MINOR+1)) 147*02e95f1aSMarcin Radomski VERSION_PATCH=0 148*02e95f1aSMarcin Radomski ;; 149*02e95f1aSMarcin Radomski patch) 150*02e95f1aSMarcin Radomski VERSION_PATCH=$((VERSION_PATCH+1)) 151*02e95f1aSMarcin Radomski ;; 152*02e95f1aSMarcin Radomski *) 153*02e95f1aSMarcin Radomski die "Unknown part \"$1\" (must be one of minor, major and patch)." 154*02e95f1aSMarcin Radomski ;; 155*02e95f1aSMarcin Radomski esac 156*02e95f1aSMarcin Radomski 157*02e95f1aSMarcin Radomski if [ ${DRYRUN} -ne 1 ]; then 158*02e95f1aSMarcin Radomski commit_version ${VERSION_PATCH} ${VERSION_MINOR} ${VERSION_MAJOR} 159*02e95f1aSMarcin Radomski fi 160*02e95f1aSMarcin Radomski 161*02e95f1aSMarcin Radomski print_version 162*02e95f1aSMarcin Radomski return 0 163*02e95f1aSMarcin Radomski} 164*02e95f1aSMarcin Radomski 165*02e95f1aSMarcin Radomskicheck_version() 166*02e95f1aSMarcin Radomski{ 167*02e95f1aSMarcin Radomski # set $1 to log version, and $2 to ref version 168*02e95f1aSMarcin Radomski set -- \ 169*02e95f1aSMarcin Radomski "$(grep -m 1 "^tinyalsa (" ${CHANGELOG_FILE}| sed "s/[^0-9.]*//g")" \ 170*02e95f1aSMarcin Radomski "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" 171*02e95f1aSMarcin Radomski 172*02e95f1aSMarcin Radomski if [ "$1" != "$2" ]; then 173*02e95f1aSMarcin Radomski die "Changelog version ($1) does not match package version ($2)." 174*02e95f1aSMarcin Radomski fi 175*02e95f1aSMarcin Radomski 176*02e95f1aSMarcin Radomski printf "Changelog version ($1) OK!${LF}" 177*02e95f1aSMarcin Radomski return 0 178*02e95f1aSMarcin Radomski} 179*02e95f1aSMarcin Radomski 180*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 181*02e95f1aSMarcin Radomski# 182*02e95f1aSMarcin Radomski# Command Line parsing 183*02e95f1aSMarcin Radomski# 184*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 185*02e95f1aSMarcin Radomskiparse_command() 186*02e95f1aSMarcin Radomski{ 187*02e95f1aSMarcin Radomski if [ "$#" -eq "0" ]; then 188*02e95f1aSMarcin Radomski print_usage 189*02e95f1aSMarcin Radomski exit 1 190*02e95f1aSMarcin Radomski fi 191*02e95f1aSMarcin Radomski 192*02e95f1aSMarcin Radomski case "$1" in 193*02e95f1aSMarcin Radomski print) 194*02e95f1aSMarcin Radomski get_version 195*02e95f1aSMarcin Radomski print_version "$2" 196*02e95f1aSMarcin Radomski exit $? 197*02e95f1aSMarcin Radomski ;; 198*02e95f1aSMarcin Radomski release) 199*02e95f1aSMarcin Radomski get_version 200*02e95f1aSMarcin Radomski bump_version "$2" 201*02e95f1aSMarcin Radomski exit $? 202*02e95f1aSMarcin Radomski ;; 203*02e95f1aSMarcin Radomski check) 204*02e95f1aSMarcin Radomski get_version 205*02e95f1aSMarcin Radomski check_version 206*02e95f1aSMarcin Radomski exit $? 207*02e95f1aSMarcin Radomski ;; 208*02e95f1aSMarcin Radomski *) 209*02e95f1aSMarcin Radomski die "Unsupported action \"$1\"." 210*02e95f1aSMarcin Radomski ;; 211*02e95f1aSMarcin Radomski esac 212*02e95f1aSMarcin Radomski} 213*02e95f1aSMarcin Radomski 214*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 215*02e95f1aSMarcin Radomski# 216*02e95f1aSMarcin Radomski# Main 217*02e95f1aSMarcin Radomski# 218*02e95f1aSMarcin Radomski# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 219*02e95f1aSMarcin Radomski 220*02e95f1aSMarcin Radomskiset -e 221*02e95f1aSMarcin Radomskitrap "set +e" 0 222*02e95f1aSMarcin Radomski 223*02e95f1aSMarcin Radomski# Checking parameters 224*02e95f1aSMarcin Radomskiif [ "$#" -eq "0" ]; then 225*02e95f1aSMarcin Radomski print_usage 226*02e95f1aSMarcin Radomski exit 0 227*02e95f1aSMarcin Radomskifi 228*02e95f1aSMarcin Radomski 229*02e95f1aSMarcin Radomskiwhile [ "$#" -ne "0" ]; do 230*02e95f1aSMarcin Radomski case "$1" in 231*02e95f1aSMarcin Radomski -s|--script) 232*02e95f1aSMarcin Radomski unset LF 233*02e95f1aSMarcin Radomski shift 234*02e95f1aSMarcin Radomski ;; 235*02e95f1aSMarcin Radomski -d|--dry-run) 236*02e95f1aSMarcin Radomski DRYRUN=1 237*02e95f1aSMarcin Radomski shift 238*02e95f1aSMarcin Radomski ;; 239*02e95f1aSMarcin Radomski --) 240*02e95f1aSMarcin Radomski shift 241*02e95f1aSMarcin Radomski break 242*02e95f1aSMarcin Radomski ;; 243*02e95f1aSMarcin Radomski -*|--*=) 244*02e95f1aSMarcin Radomski die "Unsupported flag \"$1\"." 245*02e95f1aSMarcin Radomski ;; 246*02e95f1aSMarcin Radomski *) 247*02e95f1aSMarcin Radomski PARAMS="$PARAMS ${1}" 248*02e95f1aSMarcin Radomski shift 249*02e95f1aSMarcin Radomski ;; 250*02e95f1aSMarcin Radomski esac 251*02e95f1aSMarcin Radomskidone 252*02e95f1aSMarcin Radomski 253*02e95f1aSMarcin Radomski# set positional arguments in their proper place 254*02e95f1aSMarcin Radomskiset -- "${PARAMS}" 255*02e95f1aSMarcin Radomski 256*02e95f1aSMarcin Radomskicheck_files 257*02e95f1aSMarcin Radomskiparse_command ${PARAMS} 258*02e95f1aSMarcin Radomski 259*02e95f1aSMarcin Radomski# The script should never reach this place. 260*02e95f1aSMarcin Radomskidie "Internal error. Please report this." 261