#!/bin/sh

kernel_list="
2.2.16-22:i386:NVIDIA_kernel-1.0-4191.rh70up.i386.rpm;
2.2.16-22smp:i386:NVIDIA_kernel-1.0-4191.rh70smp.i386.rpm;
2.4.2-2:i386:NVIDIA_kernel-1.0-4191.rh71up.i386.rpm;
2.4.2-2smp:i386:NVIDIA_kernel-1.0-4191.rh71smp.i386.rpm;
2.4.7-10:i386:NVIDIA_kernel-1.0-4191.rh72up.i386.rpm;
2.4.18-3:i386:NVIDIA_kernel-1.0-4191.rh73up.i386.rpm;
2.4.18-18.7.x:i386:NVIDIA_kernel-1.0-4191.rh7xup_2.4.18_18.7.x.i386.rpm;
2.4.18-18.8.0:i386:NVIDIA_kernel-1.0-4191.rh80up_2.4.18_18.8.0.i386.rpm;
2.4.3-20mdk:i386:NVIDIA_kernel-1.0-4191.mdk80up.i386.rpm;
2.4.3-20mdksmp:i386:NVIDIA_kernel-1.0-4191.mdk80smp.i386.rpm;
2.4.8-26mdk:i386:NVIDIA_kernel-1.0-4191.mdk81up.i386.rpm;
2.4.8-26mdksmp:i386:NVIDIA_kernel-1.0-4191.mdk81smp.i386.rpm;
2.2.16-22:i686:NVIDIA_kernel-1.0-4191.rh70up.i686.rpm;
2.2.16-22smp:i686:NVIDIA_kernel-1.0-4191.rh70smp.i686.rpm;
2.2.16-22enterprise:i686:NVIDIA_kernel-1.0-4191.rh70enterprise.i686.rpm;
2.4.2-2:i686:NVIDIA_kernel-1.0-4191.rh71up.i686.rpm;
2.4.2-2smp:i686:NVIDIA_kernel-1.0-4191.rh71smp.i686.rpm;
2.4.2-2enterprise:i686:NVIDIA_kernel-1.0-4191.rh71enterprise.i686.rpm;
2.4.7-10:i686:NVIDIA_kernel-1.0-4191.rh72up.i686.rpm;
2.4.7-10smp:i686:NVIDIA_kernel-1.0-4191.rh72smp.i686.rpm;
2.4.7-10enterprise:i686:NVIDIA_kernel-1.0-4191.rh72enterprise.i686.rpm;
2.4.18-3:i686:NVIDIA_kernel-1.0-4191.rh73up.i686.rpm;
2.4.18-3smp:i686:NVIDIA_kernel-1.0-4191.rh73smp.i686.rpm;
2.4.18-3bigmem:i686:NVIDIA_kernel-1.0-4191.rh73bigmem.i686.rpm;
2.4.18-18.7.x:i686:NVIDIA_kernel-1.0-4191.rh7xup_2.4.18_18.7.x.i686.rpm;
2.4.18-18.7.xsmp:i686:NVIDIA_kernel-1.0-4191.rh7xsmp_2.4.18_18.7.x.i686.rpm;
2.4.18-18.7.xbigmem:i686:NVIDIA_kernel-1.0-4191.rh7xbigmem_2.4.18_18.7.x.i686.rpm;
2.4.18-14:i686:NVIDIA_kernel-1.0-4191.rh80up.i686.rpm;
2.4.18-14smp:i686:NVIDIA_kernel-1.0-4191.rh80smp.i686.rpm;
2.4.18-14bigmem:i686:NVIDIA_kernel-1.0-4191.rh80bigmem.i686.rpm;
2.4.18-18.8.0:i686:NVIDIA_kernel-1.0-4191.rh80up_2.4.18_18.8.0.i686.rpm;
2.4.18-18.8.0smp:i686:NVIDIA_kernel-1.0-4191.rh80smp_2.4.18_18.8.0.i686.rpm;
2.4.18-18.8.0bigmem:i686:NVIDIA_kernel-1.0-4191.rh80bigmem_2.4.18_18.8.0.i686.rpm;
2.4.3-20mdk:i686:NVIDIA_kernel-1.0-4191.mdk80up.i686.rpm;
2.4.3-20mdksmp:i686:NVIDIA_kernel-1.0-4191.mdk80smp.i686.rpm;
2.4.3-20mdkenterprise:i686:NVIDIA_kernel-1.0-4191.mdk80enterprise.i686.rpm;
2.4.8-26mdk:i686:NVIDIA_kernel-1.0-4191.mdk81up.i686.rpm;
2.4.8-26mdksmp:i686:NVIDIA_kernel-1.0-4191.mdk81smp.i686.rpm;
2.4.8-26mdkenterprise:i686:NVIDIA_kernel-1.0-4191.mdk81enterprise.i686.rpm;
2.4.7-10:athlon:NVIDIA_kernel-1.0-4191.rh72up.athlon.rpm;
2.4.7-10smp:athlon:NVIDIA_kernel-1.0-4191.rh72smp.athlon.rpm;
2.4.18-3:athlon:NVIDIA_kernel-1.0-4191.rh73up.athlon.rpm;
2.4.18-3smp:athlon:NVIDIA_kernel-1.0-4191.rh73smp.athlon.rpm;
2.4.18-18.7.x:athlon:NVIDIA_kernel-1.0-4191.rh7xup_2.4.18_18.7.x.athlon.rpm;
2.4.18-18.7.xsmp:athlon:NVIDIA_kernel-1.0-4191.rh7xsmp_2.4.18_18.7.x.athlon.rpm;
2.4.18-14:athlon:NVIDIA_kernel-1.0-4191.rh80up.athlon.rpm;
2.4.18-14smp:athlon:NVIDIA_kernel-1.0-4191.rh80smp.athlon.rpm;
2.4.18-18.8.0:athlon:NVIDIA_kernel-1.0-4191.rh80up_2.4.18_18.8.0.athlon.rpm;
2.4.18-18.8.0smp:athlon:NVIDIA_kernel-1.0-4191.rh80smp_2.4.18_18.8.0.athlon.rpm;
2.4.18-3smp:i586:NVIDIA_kernel-1.0-4191.rh73smp.i586.rpm;
2.4.18-18.7.x:i586:NVIDIA_kernel-1.0-4191.rh7xup_2.4.18_18.7.x.i586.rpm;
2.4.18-18.7.xsmp:i586:NVIDIA_kernel-1.0-4191.rh7xsmp_2.4.18_18.7.x.i586.rpm;
2.4.18-14:i586:NVIDIA_kernel-1.0-4191.rh80up.i586.rpm;
2.4.18-18.8.0:i586:NVIDIA_kernel-1.0-4191.rh80up_2.4.18_18.8.0.i586.rpm;
2.4.18-18.8.0smp:i586:NVIDIA_kernel-1.0-4191.rh80smp_2.4.18_18.8.0.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk82up.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk82smp.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk82enterprise.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk82secure.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk90up.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk90smp.i586.rpm;
:i586:NVIDIA_kernel-1.0-4191.mdk90enterprise.i586.rpm;
2.2.16-22:i586:NVIDIA_kernel-1.0-4191.rh70up.i686.rpm;
2.2.16-22smp:i586:NVIDIA_kernel-1.0-4191.rh70smp.i686.rpm;
2.4.2-2:i586:NVIDIA_kernel-1.0-4191.rh71up.i686.rpm;
2.4.2-2smp:i586:NVIDIA_kernel-1.0-4191.rh71smp.i686.rpm;
2.4.7-10:i586:NVIDIA_kernel-1.0-4191.rh72up.i686.rpm;
2.4.7-10smp:i586:NVIDIA_kernel-1.0-4191.rh72smp.i686.rpm;
2.4.18-3:i586:NVIDIA_kernel-1.0-4191.rh73up.i686.rpm;
2.4.18-14smp:i586:NVIDIA_kernel-1.0-4191.rh80smp.i686.rpm;
2.4.3-20mdk:i586:NVIDIA_kernel-1.0-4191.mdk80up.i686.rpm;
2.4.3-20mdksmp:i586:NVIDIA_kernel-1.0-4191.mdk80smp.i686.rpm;
2.4.8-26mdk:i586:NVIDIA_kernel-1.0-4191.mdk81up.i686.rpm;
2.4.8-26mdksmp:i586:NVIDIA_kernel-1.0-4191.mdk81smp.i686.rpm;
"

# Driver Version
NVVERSION=1.0-4191

# Determine which distribution and version is running
if [ -f "/etc/issue" ]; then
    # Is it Red Hat? 
    # Red Hat's issue looks like "Red Hat Linux release X.Y (codename)
    if ( grep "Red Hat" /etc/issue > /dev/null ); then
	distro="rh"
	version=`grep "Red Hat" /etc/issue  | tr -d "a-zA-Z(). "`
    fi
	
    # Is it Mandrake?
    # Mandrake's issue has a big logo in it and then
    # "Mandrake Linux release X.Y (codename) for some_arch
    if ( grep "Mandrake" /etc/issue > /dev/null ); then
	distro="mdk"
	version=`grep "Mandrake" /etc/issue | sed -e "s/.*release \([0-9]\+\)\.\([0-9]\+\).*/\1\2/"`
    fi
fi

# Is it SuSE?
# 
if [ -f /etc/SuSE-release ]; then
    version=`grep VERSION /etc/SuSE-release|tr -d "a-zA-Z =."`
    [ "$version" = "70" ] && version="70+xfree86-4.0.2"
    KERNEL_PACKAGE=NVIDIA_kernel-${NVVERSION}.suse${version}.i386.rpm
    GLX_PACKAGE=NVIDIA_GLX-${NVVERSION}.suse${version}.i386.rpm
    echo "Please download and install the following files:"
    echo $GLX_PACKAGE
    echo $KERNEL_PACKAGE
    exit 0
fi

# XXX Detect Debian and recommend either the tarball or link to the
# Debian contrib package.

# XXX Other distros, recommend the tarball packages
if [ -z "$distro" ]; then
    echo "NVIDIA does not provide a prebuilt binary driver for your"
    echo "distribution at this time.  Please download:"
    echo "NVIDIA_kernel-${NVVERSION}.tar.gz"
    echo "NVIDIA_GLX-${NVVERSION}.tar.gz" 
    exit
fi

# Determine kernel version 
KERNEL_TYPE=`uname -r | tr -d "0-9.-" | sed -e "s/mdk//"`
KERNEL_VERSION=`uname -r | tr -d "a-zA-Z"`

# Build an appropriate string to represent the installed RPM kernel package
KERNEL_PACKAGE=kernel
if [ -n "$KERNEL_TYPE" ]; then
    KERNEL_PACKAGE=$KERNEL_PACKAGE-$KERNEL_TYPE
fi
if [ -n "$KERNEL_VERSION" ]; then
    KERNEL_PACKAGE=$KERNEL_PACKAGE-$KERNEL_VERSION
    if ( `uname -r | grep "mdk" > /dev/null` ) ; then
	# add "mdk" back to the end of the kernel package name if it isn't there
	if ( ! `echo $KERNEL_PACKAGE | grep "mdk" > /dev/null` ) ; then
	    KERNEL_PACKAGE=${KERNEL_PACKAGE}mdk
            KERNEL_VERSION=${KERNEL_VERSION}mdk
	fi
    fi
fi

# Determine kernel architecture, based on $KERNEL_VERSION
# Default to something that can't match
KERNEL_ARCH="unknown"

# rpm will emit error text to stdout if it doesn't find what I asked for, 
# so  we have to check the return value.
rpm -q --qf '%{ARCH}' $KERNEL_PACKAGE > /dev/null && KERNEL_ARCH=`rpm -q --qf '%{ARCH}' $KERNEL_PACKAGE`
if [ "$KERNEL_ARCH" = "unknown" ]; then
    # Try some other variations, as some distributions name their packages
    # in different ways
    TMP_KERNEL_VERSION=`echo $KERNEL_VERSION | tr "-" "."`
    KERNEL_PACKAGE="kernel-$TMP_KERNEL_VERSION"
    if [ "$distro" = "mdk" ]; then
	KERNEL_PACKAGE=${KERNEL_PACKAGE}mdk
        KERNEL_VERSION=${KERNEL_VERSION}mdk
    fi
    rpm -q --qf '%{ARCH}' $KERNEL_PACKAGE > /dev/null && KERNEL_ARCH=`rpm -q --qf '%{ARCH}' $KERNEL_PACKAGE`
fi

# Set the GLX package name
GLX_PACKAGE=NVIDIA_GLX-${NVVERSION}.i386.rpm

# Print out the appropriate filenames
echo "Please download and install the following files:"

# Mandrake 8.2 needs a special case because of the kernel rpm name
if ( echo $KERNEL_VERSION | grep 2.4.18-6 > /dev/null ) ; then
    if [ -z "$KERNEL_TYPE" ]; then
	echo $kernel_list | tr ";" "\n" | grep "mdk82up" | cut -f 3 -d ":"
    else
	echo $kernel_list | tr ";" "\n" | grep "mdk82${KERNEL_TYPE}" | \
	     cut -f 3 -d ":"
    fi
    echo $GLX_PACKAGE
    exit
fi

# Mandrake 9.0 needs a special case because of the kernel rpm name
if ( echo $KERNEL_VERSION | grep 2.4.19-16 > /dev/null ) ; then
    if [ -z "$KERNEL_TYPE" ]; then
	echo $kernel_list | tr ";" "\n" | grep "mdk90up" | cut -f 3 -d ":"
    else
	echo $kernel_list | tr ";" "\n" | grep "mdk90${KERNEL_TYPE}" | \
	     cut -f 3 -d ":"
    fi
    echo $GLX_PACKAGE
    exit
fi

CURRENT_KERNEL=`echo ${KERNEL_VERSION}${KERNEL_TYPE}`
LIST=`echo $kernel_list | tr ";" "\n" | grep "${CURRENT_KERNEL}:$KERNEL_ARCH"`

if [ -n "$LIST" ] ; then
    echo $LIST | cut -f 3 -d ":"
else
    # Recommend the source RPM
    echo "NVIDIA_kernel-${NVVERSION}.src.rpm"
fi
echo $GLX_PACKAGE
echo
echo "For further installation directions, please see the README."
