xref: /aosp_15_r20/external/tinyalsa_new/scripts/version.sh (revision 02e95f1a335b55495d41ca67eaf42361f13704fa)
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