Blame MakeTools/format_releasetag.sh

Packit 857059
#!/bin/bash
Packit 857059
# BEGIN_ICS_COPYRIGHT8 ****************************************
Packit 857059
# 
Packit 857059
# Copyright (c) 2015-2019, Intel Corporation
Packit 857059
# 
Packit 857059
# Redistribution and use in source and binary forms, with or without
Packit 857059
# modification, are permitted provided that the following conditions are met:
Packit 857059
# 
Packit 857059
#     * Redistributions of source code must retain the above copyright notice,
Packit 857059
#       this list of conditions and the following disclaimer.
Packit 857059
#     * Redistributions in binary form must reproduce the above copyright
Packit 857059
#       notice, this list of conditions and the following disclaimer in the
Packit 857059
#       documentation and/or other materials provided with the distribution.
Packit 857059
#     * Neither the name of Intel Corporation nor the names of its contributors
Packit 857059
#       may be used to endorse or promote products derived from this software
Packit 857059
#       without specific prior written permission.
Packit 857059
# 
Packit 857059
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Packit 857059
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit 857059
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit 857059
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
Packit 857059
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit 857059
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Packit 857059
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit 857059
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Packit 857059
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit 857059
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit 857059
# 
Packit 857059
# END_ICS_COPYRIGHT8   ****************************************
Packit 857059
Packit 857059
#[ICS VERSION STRING: unknown]
Packit 857059
Packit 857059
Packit 857059
# Parse release tags to create version strings
Packit 857059
# - X.Y.m.p.b  - a build on the way to final
Packit 857059
# - X.Y.mAn.b – Alpha “n” build  (sometimes called release candidate in redhat terminology)
Packit 857059
# - X.Y.mBn.b – Beta “n” build  (sometimes called release candidate in redhat terminology)
Packit 857059
# - X.Y.mRCn.b – final release candidate “n” build
Packit 857059
# - X.Y.m.0.b – a final PV release
Packit 857059
# - X.Y.m.p.b – a patch of a PV release
Packit 857059
#
Packit 857059
# 32-bit hex (UEFI)
Packit 857059
# - X – 4 bits
Packit 857059
# - Y - 8 bits
Packit 857059
# - m – 4 bits
Packit 857059
#   quality – 4 bits (0-2=power on, 3-5 = Alpha, 6-8=Beta, 9-13=release candidates, 14=PRQ/PV, 15=patch)
Packit 857059
#   for quality=0-14: b – 12 bits
Packit 857059
#   when quality==15: p-4 bits, b - 8 bits [unlikely to be used, but covers in case we need it]
Packit 857059
#
Packit 857059
# 64-bit hex (switch firmware)
Packit 857059
# - X – 8 bits
Packit 857059
# - Y - 8 bits
Packit 857059
# - m – 8 bits
Packit 857059
# - quality – 4 bit (0-2=power on, 3-5 = Alpha, 6-8=Beta, 9-13=release candidates, 14=PRQ/PV or  patch)
Packit 857059
# - patch – 4 bits
Packit 857059
# - build – 32 bits
Packit 857059
#
Packit 857059
# Also allow for user-named version of format 0<username>
Packit 857059
Packit 857059
Packit 857059
Packit 857059
checkAlpha()
Packit 857059
{
Packit 857059
	if [ $user_ver -eq 1 ]
Packit 857059
	then
Packit 857059
		return 0
Packit 857059
	fi
Packit 857059
Packit 857059
	pos=$1
Packit 857059
	ver=$2
Packit 857059
Packit 857059
	if [ "$ver" = "" ]
Packit 857059
	then
Packit 857059
		return 0
Packit 857059
	fi
Packit 857059
Packit 857059
	if echo $ver | grep -qe [[:alpha:]]
Packit 857059
	then
Packit 857059
		if echo $ver | grep -qv I
Packit 857059
		then
Packit 857059
			echo Error: invalid alpha character in $pos: $ver
Packit 857059
			return 1
Packit 857059
		fi
Packit 857059
	fi
Packit 857059
	return 0
Packit 857059
}
Packit 857059
Packit 857059
parseOutI()
Packit 857059
{
Packit 857059
	ver=$1
Packit 857059
Packit 857059
	iP=$(echo $ver | grep -bo I | head -n 1 | cut -d: -f1)
Packit 857059
	v1=${ver:0:iP}
Packit 857059
	echo $v1
Packit 857059
}
Packit 857059
Packit 857059
parseBldI()
Packit 857059
{
Packit 857059
	ver=$1
Packit 857059
Packit 857059
	iP=$(echo $ver | grep -bo I | head -n 1 | cut -d: -f1)
Packit 857059
	bld=${ver:$((iP + 1))}
Packit 857059
	echo $bld
Packit 857059
}
Packit 857059
Packit 857059
getQual()
Packit 857059
{
Packit 857059
	qual=$1
Packit 857059
	pat=$2
Packit 857059
	n=$3
Packit 857059
Packit 857059
	if [ $pat -ne 0 ]
Packit 857059
	then
Packit 857059
		echo 15
Packit 857059
	else
Packit 857059
		case $qual in
Packit 857059
			poweron)
Packit 857059
				if [ $n -gt 2 ]
Packit 857059
				then
Packit 857059
					(>&2 echo "Warning: Encoded Quality out of range: $n Clamping to: 2")
Packit 857059
					n=2
Packit 857059
				fi
Packit 857059
				echo $n
Packit 857059
				;;
Packit 857059
			alpha)
Packit 857059
				n=$((3 + n))
Packit 857059
				if [ $n -gt 5 ]
Packit 857059
				then
Packit 857059
					(>&2 echo "Warning: Encoded Quality out of range: $n Clamping to: 5")
Packit 857059
					n=5
Packit 857059
				fi
Packit 857059
				echo $n
Packit 857059
				;;
Packit 857059
			beta)
Packit 857059
				n=$((6 + n))
Packit 857059
				if [ $n -gt 8 ]
Packit 857059
				then
Packit 857059
					(>&2 echo "Warning: Encoded Quality out of range: $n Clamping to: 8")
Packit 857059
					n=8
Packit 857059
				fi
Packit 857059
				echo $n
Packit 857059
				;;
Packit 857059
			rc)
Packit 857059
				n=$((9 + n))
Packit 857059
				if [ $n -gt 13 ]
Packit 857059
				then
Packit 857059
					(>&2 echo "Warning: Encoded Quality out of range: $n Clamping to: 13")
Packit 857059
					n=13
Packit 857059
				fi
Packit 857059
				echo $n
Packit 857059
				;;
Packit 857059
			pv)
Packit 857059
				echo 14
Packit 857059
				;;
Packit 857059
		esac
Packit 857059
	fi
Packit 857059
	return
Packit 857059
}
Packit 857059
Packit 857059
if [ "$#" -eq 0 ]
Packit 857059
then
Packit 857059
	echo Error: too few arguments
Packit 857059
	echo Usage: format_releasetag.sh [-f format] version-string
Packit 857059
	exit 1
Packit 857059
fi
Packit 857059
Packit 857059
if [ "$1" = "" ]
Packit 857059
then
Packit 857059
	echo Error: invalid version string argument
Packit 857059
	echo Usage: format_releasetag.sh [-f format] version-string
Packit 857059
	exit 1
Packit 857059
fi
Packit 857059
Packit 857059
fmt=
Packit 857059
ver=
Packit 857059
Packit 857059
while getopts "f:" opt
Packit 857059
do
Packit 857059
	case "$opt" in
Packit 857059
	f)
Packit 857059
		fmt=$OPTARG
Packit 857059
		;;
Packit 857059
	?)
Packit 857059
		echo Error: unsupported option $opt
Packit 857059
		echo Usage: format_releasetag.sh [-f format] version-string
Packit 857059
		exit 1
Packit 857059
		;;
Packit 857059
	esac
Packit 857059
done
Packit 857059
Packit 857059
shift $((OPTIND-1))
Packit 857059
Packit 857059
ver=$1
Packit 857059
Packit 857059
# check for user-named release tag - leading 0 followed by alpha
Packit 857059
Packit 857059
user_ver=0
Packit 857059
if echo ${ver:0:1} | grep -q 0
Packit 857059
then
Packit 857059
	if echo ${ver:1:1} | grep -q '[[:alpha:]]'
Packit 857059
	then
Packit 857059
		user_ver=1
Packit 857059
	fi
Packit 857059
fi
Packit 857059
Packit 857059
if [ "$2" != "" ]
Packit 857059
then
Packit 857059
	echo Error: extra arguments
Packit 857059
	echo Usage: format_releasetag.sh [-f format] version-string
Packit 857059
	exit 1
Packit 857059
fi
Packit 857059
Packit 857059
if [ "$fmt" = "" ]
Packit 857059
then
Packit 857059
	fmt=text
Packit 857059
fi
Packit 857059
Packit 857059
if echo $ver | grep -q '[^ A-Za-z0-9_.]'
Packit 857059
then
Packit 857059
	echo Error: bad format of version $ver
Packit 857059
	exit 1
Packit 857059
fi
Packit 857059
Packit 857059
# strip off leading 'R'
Packit 857059
Packit 857059
if echo ${ver:0:1} | grep -q R
Packit 857059
then
Packit 857059
	ver=${ver:1}
Packit 857059
fi
Packit 857059
Packit 857059
# get to all underscores and parse
Packit 857059
Packit 857059
newver=$(echo $ver | sed 's/\./_/g')
Packit 857059
numseparators=$(echo $newver | grep -bo '_'|wc -l)
Packit 857059
maj=$(echo $newver | cut -d_ -f1)
Packit 857059
if [ $numseparators -gt 0 ]
Packit 857059
then
Packit 857059
	min=$(echo $newver | cut -d_ -f2)
Packit 857059
else
Packit 857059
	min=0
Packit 857059
fi
Packit 857059
if [ $numseparators -gt 1 ]
Packit 857059
then
Packit 857059
	mai=$(echo $newver | cut -d_ -f3)
Packit 857059
else
Packit 857059
	mai=0
Packit 857059
fi
Packit 857059
if [ $numseparators -gt 2 ]
Packit 857059
then
Packit 857059
	pat=$(echo $newver | cut -d_ -f4)
Packit 857059
else
Packit 857059
	pat=0
Packit 857059
fi
Packit 857059
if [ $numseparators -gt 3 ]
Packit 857059
then
Packit 857059
	bld=$(echo $newver | cut -d_ -f5)
Packit 857059
else
Packit 857059
	bld=0
Packit 857059
fi
Packit 857059
Packit 857059
# alpha only allowed in $mai
Packit 857059
checkAlpha major "$maj" || exit 1
Packit 857059
checkAlpha minor "$min" || exit 1
Packit 857059
checkAlpha patch "$pat" || exit 1
Packit 857059
checkAlpha build "$bld" || exit 1
Packit 857059
Packit 857059
# Handle no mai/pat/bld
Packit 857059
Packit 857059
if [ "$mai" = "" ]
Packit 857059
then
Packit 857059
	mai=0
Packit 857059
fi
Packit 857059
if [ "$pat" = "" ]
Packit 857059
then
Packit 857059
	pat=0
Packit 857059
fi
Packit 857059
if [ "$bld" = "" ]
Packit 857059
then
Packit 857059
	bld=0
Packit 857059
fi
Packit 857059
Packit 857059
# handle I format
Packit 857059
Packit 857059
if echo $maj | grep -q I
Packit 857059
then
Packit 857059
	bld=$(parseBldI $maj)
Packit 857059
	maj=$(parseOutI $maj)
Packit 857059
fi
Packit 857059
if echo $min | grep -q I
Packit 857059
then
Packit 857059
	bld=$(parseBldI $min)
Packit 857059
	min=$(parseOutI $min)
Packit 857059
fi
Packit 857059
if echo $mai | grep -q I
Packit 857059
then
Packit 857059
	bld=$(parseBldI $mai)
Packit 857059
	mai=$(parseOutI $mai)
Packit 857059
fi
Packit 857059
if echo $pat | grep -q I
Packit 857059
then
Packit 857059
	bld=$(parseBldI $pat)
Packit 857059
	pat=$(parseOutI $pat)
Packit 857059
fi
Packit 857059
Packit 857059
# parse maintenance in the form m<alpha>n
Packit 857059
Packit 857059
mai_alpha=0
Packit 857059
Packit 857059
m=
Packit 857059
n=
Packit 857059
alpha=PV
Packit 857059
if echo $mai | grep -q [[:alpha:]]
Packit 857059
then
Packit 857059
	mai_alpha=1
Packit 857059
	pat=0
Packit 857059
	alphaP=$(echo $mai | grep -bo '[[:alpha:]]'|head -n 1|cut -d: -f1)
Packit 857059
	nP1=$(echo ${mai:$alphaP} | grep -bo '[[:digit:]]'|head -n 1|cut -d: -f1)
Packit 857059
	nP=$((alphaP + nP1))
Packit 857059
	m=${mai:0:alphaP}
Packit 857059
	alpha=${mai:alphaP:$((dP-alphaP))}
Packit 857059
	n=${mai:$nP}
Packit 857059
	bld=$(echo $newver | cut -d_ -f4)
Packit 857059
	if echo $alpha | grep -q I
Packit 857059
	then
Packit 857059
		iformat=1
Packit 857059
	else
Packit 857059
		iformat=0
Packit 857059
	fi
Packit 857059
	if echo $alpha | grep -q P
Packit 857059
	then
Packit 857059
		qual=poweron
Packit 857059
	elif echo $alpha | grep -q A
Packit 857059
	then
Packit 857059
		qual=alpha
Packit 857059
		alpha=$(echo $alpha | tr '[:upper:]' '[:lower:]')
Packit 857059
	elif echo $alpha | grep -q B
Packit 857059
	then
Packit 857059
		qual=beta
Packit 857059
		alpha=$(echo $alpha | tr '[:upper:]' '[:lower:]')
Packit 857059
	elif echo $alpha | grep -q RC
Packit 857059
	then
Packit 857059
		qual=rc
Packit 857059
		alpha=$(echo $alpha | tr '[:upper:]' '[:lower:]')
Packit 857059
	elif echo $alpha | grep -q PV
Packit 857059
	then
Packit 857059
		qual=pv
Packit 857059
	elif [ $user_ver -eq 1 ]
Packit 857059
	then
Packit 857059
		qual=pv
Packit 857059
	elif [ $iformat -eq 0 ]
Packit 857059
	then
Packit 857059
		echo Error: Unknown release tag quality: $alpha
Packit 857059
		exit 1
Packit 857059
	fi
Packit 857059
	if [ $iformat -eq 1 ]
Packit 857059
	then
Packit 857059
		iP=$(echo $mai | grep -bo I |head -n 1|cut -d: -f1)
Packit 857059
		bld=${mai:$((iP+1))}
Packit 857059
	else
Packit 857059
		bld=$(echo $newver | cut -d_ -f4)
Packit 857059
	fi
Packit 857059
else
Packit 857059
	qual=pv
Packit 857059
fi
Packit 857059
Packit 857059
Packit 857059
case $fmt in
Packit 857059
	text)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo $ver
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		q=$(getQual $qual $pat $n)
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			echo ${maj}.${min}.${mai}.${bld}
Packit 857059
		else
Packit 857059
			echo ${maj}.${min}.${mai}.${pat}.${bld}
Packit 857059
		fi
Packit 857059
		;;
Packit 857059
	rpm)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo $ver
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		q=$(getQual $qual $pat $n)
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			echo ${maj}.${min}.${m}.0-${alpha}${n}.${bld}
Packit 857059
		else
Packit 857059
			echo ${maj}.${min}.${mai}.${pat}-${bld}
Packit 857059
		fi
Packit 857059
		;;
Packit 857059
	briefrpm)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo $ver
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			m1=$m
Packit 857059
		else
Packit 857059
			m1=$mai
Packit 857059
		fi
Packit 857059
		if [ $pat -gt 0 ]
Packit 857059
		then
Packit 857059
			maint=".${m1}.${pat}"
Packit 857059
		elif [ $m1 -gt 0 ]
Packit 857059
		then
Packit 857059
			maint=".${m1}"
Packit 857059
		else
Packit 857059
			maint=
Packit 857059
		fi
Packit 857059
		q=$(getQual $qual $pat $n)
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			echo ${maj}.${min}${maint}-${alpha}${n}.${bld}
Packit 857059
		else
Packit 857059
			echo ${maj}.${min}${maint}-${bld}
Packit 857059
		fi
Packit 857059
		;;
Packit 857059
	debian)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo $ver
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		q=$(getQual $qual $pat $n)
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			echo ${maj}.${min}.${m}.0${alpha}${n}.${bld}
Packit 857059
		else
Packit 857059
			echo ${maj}.${min}.${mai}.${pat}.${bld}
Packit 857059
		fi
Packit 857059
		;;
Packit 857059
	32bit)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo 0x00000000
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			m1=$m
Packit 857059
		else
Packit 857059
			m1=$mai
Packit 857059
		fi
Packit 857059
		byte1=$((maj<<4 | min&0xf0))
Packit 857059
		byte2=$(((min & 0x0f)<<4 | (m1 & 0x0f)))
Packit 857059
		q=$(getQual $qual $pat $n)
Packit 857059
		if [ $pat -gt 0 ]
Packit 857059
		then
Packit 857059
			byte3=$((q<<4 | (pat & 0xff)))
Packit 857059
		else
Packit 857059
			bldHiBits=$(((bld & 0xf00) >> 8))
Packit 857059
			byte3=$((q<<4 | bldHiBits))
Packit 857059
		fi
Packit 857059
		byte4=$((bld & 0xff))
Packit 857059
		printf "0x%02X%02X%02X%02X\n" $byte1 $byte2 $byte3 $byte4
Packit 857059
		;;
Packit 857059
	64bit)
Packit 857059
		if [ $user_ver -eq 1 ]
Packit 857059
		then
Packit 857059
			echo 0x0000000000000000
Packit 857059
			exit 0
Packit 857059
		fi
Packit 857059
		byte1=${maj}
Packit 857059
		byte2=${min}
Packit 857059
		if [ $mai_alpha -eq 1 ]
Packit 857059
		then
Packit 857059
			m1=$m
Packit 857059
		else
Packit 857059
			m1=$mai
Packit 857059
		fi
Packit 857059
		byte3=${m1}
Packit 857059
		if [ $pat -gt 0 ]
Packit 857059
		then
Packit 857059
			q=14
Packit 857059
		else
Packit 857059
			q=$(getQual $qual $pat $n)
Packit 857059
		fi
Packit 857059
		byte4=$((q<<4 | (pat & 0xff)))
Packit 857059
		bytes5to8=$bld
Packit 857059
		printf "0x%02X%02X%02X%02X%08X\n" $byte1 $byte2 $byte3 $byte4 $bytes5to8
Packit 857059
		;;
Packit 857059
	?)
Packit 857059
		echo Error: bad format: $fmt
Packit 857059
		exit 1
Packit 857059
		;;
Packit 857059
esac
Packit 857059
Packit 857059
Packit 857059
exit 0