#!/bin/bash

package="nvidia"
driver_rev="4496"
gfx_base_dir="/usr/hp/graphics"
package_dir="${gfx_base_dir}/${package}"
flag="${package_dir}/config_run"

function usage {
    echo "config -i|-e"
    echo "  -i  configure ${package} package"
    echo "  -e  unconfigure ${package} package"
}

if [ $# -lt 1 ]; then
    usage
    exit 1
fi

case "$1" in

    "-i")
        if [ -f "${flag}" ]; then
            exit 0
        fi

        # Make sure no other packages are configured

        for other in ${gfx_base_dir}/*
        do
            if [ "${other}" == "${package}" ]; then
                continue
            fi
            if [ -f ${other}/config_run ]; then
                ${other}/config -e
                if [ $? -ne 0 ]; then
                    echo "Failed to unconfigure "`basename "${other}"`"."
                    exit 1
                fi
            fi
        done

        # Save the existing X and OpenGL stuff.
        for file in /etc/X11/XF86Config-4 \
                    /etc/X11/X \
                    /etc/X11/X.hpsetup \
                    /usr/lib/libGL.* \
                    /usr/X11R6/lib/libGL.*  \
                    /usr/X11R6/lib/modules/extensions/libglx.*
        do
            if [ -e "${file}" ]; then
                mkdir -m755 -p "${package_dir}/save/"`dirname "${file}"`
                mv -f "${file}" "${package_dir}/save/${file}"
            fi
        done

        # Install XFree86 link and config files
        cp -d ${package_dir}/X \
              ${package_dir}/X.hpsetup \
              ${package_dir}/XF86Config-4 \
              /etc/X11/

        # Install nVidia libraries & driver
        ln -s ${package_dir}/components/libGL.so.1.0.${driver_rev} /usr/lib/libGL.so
        ln -s ${package_dir}/components/libGL.so.1.0.${driver_rev} /usr/lib/libGL.so.1
        ln -s ${package_dir}/components/libGLcore.so.1.0.${driver_rev} /usr/lib/libGLcore.so.1
        ln -s ${package_dir}/components/libglx.so.1.0.${driver_rev} /usr/X11R6/lib/modules/extensions/libglx.so


        sed '/^alias.*char-major-.*nvidia/d' < /etc/modules.conf > /etc/modules.conf.tmp
        echo "alias char-major-195 nvidia" >> /etc/modules.conf.tmp
        mv -f /etc/modules.conf.tmp /etc/modules.conf

        ldconfig
        depmod -a
        
        touch "${flag}"
        ;;

    "-e")

        if [ ! -f "${flag}" ]; then
            exit 0
        fi

        # Remove all the files we installed 
        rm -f /etc/X11/X \
	      /etc/X11/X.hpsetup \
              /etc/X11/XF86Config-4 \
              /usr/lib/libGL.so \
	      /usr/lib/libGL.so.1 \
              /usr/lib/libGLcore.so.1 \
              /usr/X11R6/lib/modules/extensions/libglx.so
     
        # Restore whatever we saved.
        for file in `cd "${package_dir}/save"; find . ! -type d -print`
        do
            rm -f "/${file}"
            mkdir -m755 -p "/"`dirname "${file}"`
            if [ -e "${package_dir}/save/${file}" ]; then
                mv "${package_dir}/save/${file}" "/${file}"
            fi
        done

        sed '/^alias.*char-major-.*nvidia/d' < /etc/modules.conf > /etc/modules.conf.tmp
        mv -f /etc/modules.conf.tmp /etc/modules.conf

        modprobe -r nvidia
        depmod -a
        ldconfig

        rm -f "${flag}"
        ;;

    *)
        usage
        exit 1
        ;;

esac
exit 0
