blob: 4155296941c858658a7136c63cbd79a7a30e71ac [file] [log] [blame]
# Version comparison shell functions
#
###############################################################################
#
# Copyright (C) 2005, 2013 Red Hat, Inc. All Rights Reserved.
# Written by David Howells (dhowells@redhat.com)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version
# 2 of the License, or (at your option) any later version.
#
###############################################################################
###############################################################################
#
# compare version numbers to see if the first is less (older) than the second
#
###############################################################################
function version_less_than ()
{
a=$1
b=$2
if [ "$a" = "$b" ]
then
return 1
fi
# grab the leaders
a_version=${a%%-*} a_release=${a#*-}
b_version=${b%%-*} b_release=${b#*-}
if [ "$a_version" = "$b_version" ]
then
case "$a_release" in
rc[0-9]*)
case "$b_release" in
rc[0-9]*)
__version_less_than_dot "${a_release#rc}" "${b_release#rc}"
return $?
;;
*)
return 0;
;;
esac
;;
esac
case "$b_release" in
rc[0-9]*)
return 1;
;;
esac
if [ "$a_version" = "$a" -o "$b_version" = "$b" ]
then
if [ "$a_version" = "$b_version" ]
then
[ "$a_version" = "$a" ]
else
__version_less_than_dot "$a_version" "$b_version"
fi
fi
else
__version_less_than_dot "$a_version" "$b_version"
fi
}
function __version_less_than_dot ()
{
a=$1
b=$2
if [ "$a" = "$b" ]
then
return 1
fi
# grab the leaders
x=${a%%.*}
y=${b%%.*}
if [ "$x" = "$a" -o "$y" = "$b" ]
then
if [ "$x" = "$y" ]
then
[ "$x" = "$a" ]
else
expr "$x" \< "$y" >/dev/null
fi
elif [ "$x" = "$y" ]
then
__version_less_than_dot "${a#*.}" "${b#*.}"
else
expr "$x" \< "$y" >/dev/null
fi
}
###############################################################################
#
# Return true if the keyutils package being tested is older than the given
# version.
#
###############################################################################
function keyutils_older_than ()
{
version_less_than $KEYUTILSVER $1
}
###############################################################################
#
# Return true if the keyutils package being tested is at or later than the
# given version.
#
###############################################################################
function keyutils_at_or_later_than ()
{
! keyutils_older_than $1
}
###############################################################################
#
# Return true if the keyutils package being tested is newer than the given
# version.
#
###############################################################################
function keyutils_newer_than ()
{
version_less_than $1 $KEYUTILSVER
}
###############################################################################
#
# Return true if the keyutils package being tested is at or older than the
# given version.
#
###############################################################################
function keyutils_at_or_older_than ()
{
! keyutils_newer_than $1
}
###############################################################################
#
# Return true if the kernel being tested is older than the given version.
#
###############################################################################
function kernel_older_than ()
{
version_less_than $KERNELVER $1
}
###############################################################################
#
# Return true if the kernel being tested is at or later than the given version.
#
###############################################################################
function kernel_at_or_later_than ()
{
! kernel_older_than $1
}