#!/bin/sh
# pkgcompare return:
#   0 if $1 is same as $2
#   1 if $1 is newer than $2
#  -1 if $1 is older than $2
# Given various versioning scheme, this may broke.
# The roman numeric is for sure
#

usage() {
cat << _EOF_
pkgcompare - compare two Slackware packages.
Usage: pkgname <full_package_name1> <full_package_name2>

WARNING: This does not work for packages that uses
exotic versioning, like roman numeral. Please persuade
them to use ordinary versionimg, thus make life easier

Example:
pkgname aaa-1.2.3-i486-1.tgz aaa-1.2.1-i486-1.tgz

BROKEN example:
pkgname aaa-IV-i486-1.tgz aaa-V-i486-1.tgz

_EOF_
exit 1
}

compare() {

VER1=$1
VER2=$2
if [ "$VER1" == "$VER2" ]; then
    echo "same"
    return 0
fi

# these testings detect if VER1 is newer that VER2
# if all fails, assume VER2 is newer

# test subset
VVER1=${VER1#$VER2}
if [ "$VER1" != "$VVER1" ]; then
    if echo $VVER1 | grep -qE '(alpha|beta|rc)'; then
	echo older
	return -1
    fi
fi
VVER2=${VER2#$VER1}
if [ "$VER2" != "$VVER2" ]; then
    if echo $VVER2 | grep -qE '(alpha|beta|rc)'; then
	echo newer
	return 1    
    fi
fi
while [ 0 ]; do
    VVER1=${VER1%%.*}
    VVER2=${VER2%%.*}
    #echo -n "[$VVER1 $VVER2]"
    if [ ${#VVER1} -gt ${#VVER2} ]; then
	echo "newer"
	return 1
    fi
    if [ ${#VVER1} -lt ${#VVER2} ]; then
	echo "older"
	return -1
    fi
    if [ "$VVER1" \> "$VVER2" ]; then
	echo "newer"
	return 1
    fi
    if [ "$VVER2" \> "$VVER1" ]; then
	echo "older"
	return -1
    fi
    if [ "$VER1" == "$VVER1" ]; then
	echo "older"
	return -1
    fi
    if [ "$VER2" == "$VVER2" ]; then
	echo "newer"
	return 1
    fi
    VER1=${VER1#*.}
    VER2=${VER2#*.}
done
}

try1()
{
    echo "compare $1 - $2 = `compare $1 $2`"
}

try2()
{
try1 "1.1" "1.1"
try1 "1.2" "1.1"
try1 "1.1" "1.2"
try1 "1.10" "1.2"
try1 "1.2" "1.10"
try1 "1.1.1" "1.1"
try1 "1.1" "1.1.1"
try1 "1.1_gtk1" "1.1"
try1 "1.1" "1.1_gtk1"
try1 "20002020" "20001010"
try1 "20001010" "20002020"
try1 "IIIbeta2" "IIIbeta1"
try1 "IIIbeta1" "IIIbeta2"
try1 "1.0" "1.0_beta1"
try1 "1.0_beta1" "1.0"
try1 "1.0" "1.0-beta1"
try1 "1.0-beta1" "1.0"
try1 "1.0-beta2" "1.0-beta1"
try1 "1.0-beta1" "1.0-beta2"

## these are broken !
try1 "IVbeta1" "IIIbeta2"
try1 "IIIbeta2" "IVbeta1"

}

try2 && exit

if [ -z "$1" ] || [ -z "$2" ]; then
    usage
    exit 3
fi

compare `pkgversion $1` `pkgversion $2`
