2
0
mirror of https://github.com/rehlds/metamod-r.git synced 2024-12-27 07:05:34 +03:00
metamod-r/metamod/version/glibc_test.sh
Dmitry Novikov b838abda59
Migrate the CI/CD to GitHub Actions (#57)
* Implemented CI/CD migration to GitHub
* Remove gradle build
2022-07-03 04:15:27 +07:00

84 lines
1.7 KiB
Bash
Executable File

#!/bin/bash
main()
{
files=($@)
declare -A threshold_version
threshold_version[CXXABI]="1.3.5"
threshold_version[GLIBCXX]="3.4.15"
threshold_version[GLIBC]="2.11"
for k in "${!threshold_version[@]}"; do
for f in "${files[@]}"
do
:
version=$(readelf -sV $f | sed -n 's/.*@'$k'_//p' | sort -u -V | tail -1 | cut -d ' ' -f 1)
# version no present - skipped
if [[ -z "$version" ]]; then
version="UND"
# version is private - skipped
elif [ "$version" = "PRIVATE" ]; then
version="PRV"
# ensure numeric
elif [[ $version =~ ^([0-9]+\.){0,2}(\*|[0-9]+)$ ]]; then
check_version_greater $version ${threshold_version[$k]}
if [[ $? -eq 1 ]]; then
echo -e "\033[0;31mAssertion failed:\033[0m Binary \033[0;32m${f}\033[0m has ${k}_\033[0;33m$version\033[0m greater than max version ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
exit -1
fi
fi
done
if [[ "$version" = "PRV" || "$version" = "UND" ]]; then
echo -e "[\033[0;90mSKIP\033[0m] \033[0;33m${version}\033[0m < ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
else
echo -e "[\033[0;32mOK\033[0m] \033[0;33m${version}\033[0m < ${k}_\033[0;33m${threshold_version[$k]}\033[0m"
fi
done
}
check_version_greater()
{
if [[ -z "$1" || $1 == $2 ]]; then
return 0
fi
local IFS=.
local i ver1=($1) ver2=($2)
# fill empty fields in ver1 with zeros
for ((i = ${#ver1[@]}; i < ${#ver2[@]}; i++))
do
ver1[i]=0
done
for ((i = 0; i < ${#ver1[@]}; i++))
do
if [[ -z ${ver2[i]} ]]
then
# fill empty fields in ver2 with zeros
ver2[i]=0
fi
if ((10#${ver1[i]} > 10#${ver2[i]}))
then
return 1
fi
if ((10#${ver1[i]} < 10#${ver2[i]}))
then
break
fi
done
return 0
}
# Initialize
main $*
# Exit normally
exit 0