#!/sbin/installer/sh

get_version() {
    local old_name=`cat /var/log/packages/$1 | grep "^PACKAGE NAME" | cut -f2 -d':' `
    local old_vers=`echo $old_name | cut -f2 -d'-'`
    echo  $old_vers
}
get_build() {
    local old_name=`cat /var/log/packages/$1 | grep "^PACKAGE NAME" | cut -f2 -d':' `
    local old_build=`echo $old_name | cut -f4 -d'-' `
    echo  $old_build
}
    

check_vers() {
    local old=$1
    local new=$2

    for i in 1 2 3 4 5; do
	t1=`echo $old | cut -f$i -d'.'`
	t2=`echo $new | cut -f$i -d'.'`
 	if [ $t2 -gt $t1 ]; then
	    return $t2
	fi
    done
    return 0
}

check_build() {
    local old=`echo $1 | sed "s/P//" `
    local new=`echo $2 | sed "s/P//" `
    echo "old:$old, new:$new"
    if [ $new -gt $old ]; then
	return 1
    else
	return 0
    fi
}

usage() {
    echo "usage: $0 [-f] [-v] [-h] package(s)"
    echo "    -f force install mode(without version check)"
    echo "    -h help(this message)"
    exit
}

for opt in  $*
do
    case $opt in
	-f)
	    force_flag=1 ; shift ;;
	-h)
	    usage ;;
    esac
done

if [ $# = 0 ]; then
    usage
fi

for tmppkg in $* ; do
    pkg=`basename $tmppkg`
    base=`echo $pkg | cut -f1 -d'-'`
    vers=`echo $pkg | cut -f2 -d'-'`
    build=`echo $pkg | cut -f4 -d'-' | sed 's/.tgz//' `
    chk=`ls /var/log/packages | grep "^$base$" `
    if [ "$chk.x" != ".x" ]; then
	if [ "$force_flag.x" != ".x" ]; then
	    /sbin/removepkg $base
	else
	    old_vers=`get_version $base`
	    check_vers $old_vers $vers
	    ver_test=$?
	    if [ $ver_test != "0" ]; then
		echo "removing $base-$old_vers"
		/sbin/removepkg $base
	    else
		old_build=`get_build $base`
		check_build $old_build $build
		build_test=$?
		if [ $build_test != "0" ]; then
		    echo "removing $base-$old_vers build $old_build"
		    /sbin/removepkg $base
		else
		    echo "same or newer vesion($chk-$old_vers,$build) has been installed."
		    echo "installation stopped for $tmppkg"	    
		    continue
	        fi
	    fi
        fi
    fi
    /sbin/installpkg $tmppkg
done
