blob: 3630c5a1e9c2ba82e5df11f1376c6087a5a41c11 [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
__version_less_than_dot "$a_release" "$b_release"
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
}
###############################################################################
#
# Return true if the kernel being tested is a RHEL-6 kernel and is at or later
# than the given version.
#
###############################################################################
function rhel6_kernel_at_or_later_than ()
{
case $OSDIST-$OSRELEASE in
RHEL-6.*)
! kernel_older_than $1
;;
*)
false
;;
esac
}
###############################################################################
#
# Return true if the kernel being tested is a RHEL-7 kernel and is at or later
# than the given version.
#
###############################################################################
function rhel7_kernel_at_or_later_than ()
{
case $OSDIST-$OSRELEASE in
RHEL-7.*)
! kernel_older_than $1
;;
*)
false
;;
esac
}