#!/bin/bash
check_version_info() {
local mode="" result="" fmt="%-20s %s %-20s\n"
local ver1 expected ver2 mode=${1:-rpm}
local errors=0
while read ver1 expected ver2; do
[ -n "$ver1" ] || continue
result=""
if [ "$mode" = "rpm" ]; then
out=$(rpmdev-vercmp "$ver1" "$ver2")
ret=$?
case "$ret" in
0) result="=";;
11) result="<";;
12) result=">";;
*) result="?";;
esac
else
{
for t in "gt:>" "eq:=" "lt:<"; do
op="${t%:*}"; ret="${t#*:}"
if dpkg --compare-versions "$ver1" "$op" "$ver2"; then
result=$ret
break
fi
done
}
[ -z "$result" ] && result="?"
fi
yikes=""
if [ "$expected" != "$result" ]; then
errors=$(($errors+1));
yikes="!"
fi
printf "$fmt" "${yikes}$ver1" "$result" "$ver2"
done
}
file=${1:-"-"}
mode="$2"
if [ -z "$mode" ]; then
command -v dpkg >/dev/null && mode="dpkg" || mode="rpm"
echo "#mode=$mode"
fi
if [ "$file" = "-" ]; then
check_version_info "$mode"
else
check_version_info <"$file"
fi