#!/bin/sh
# set -x
# check_patches
#

ECHO=/usr/bin/echo
GREP=/usr/bin/grep
SORT=/usr/bin/sort
TAIL=/usr/bin/tail
SCRATCH_FILE=/tmp/SunPC_patch_scratch_file
INFO_FILE=/tmp/SunPC_patch_info_file

#
# function to check if patch already installed, or obsoleted
#

need_patch() {
SHOWPATCHES="/usr/bin/showrev -p "
PATCH=$1
VER_REQUIRED=$2
BLURB=$3
DO_PATCH=0

PATCH_INFO=`$GREP $PATCH $SCRATCH_FILE 2>/dev/null`
if [ "$PATCH_INFO" != "" ]        	# patch installed or obsolete
then
    PATCH_INSTALLED=`$GREP "Patch:[     ]$PATCH" $SCRATCH_FILE 2>/dev/null| $SORT | $TAIL -1`
    if [ "$PATCH_INSTALLED" = "" ]
    then
        return 0  # patch obsolete
    else
        VER_INSTALLED=`/usr/bin/echo $PATCH_INSTALLED | /bin/awk -F" " '{print $2}'`
    	VER_NUM=`/usr/bin/expr $VER_INSTALLED : '.*\-\(.*\)' \| $VER_INSTALLED`
    	if [ "$VER_NUM" -ge "$VER_REQUIRED" ]
    	then
	    return 0 # high enough version installed
	fi
    fi
fi
if [ $OVERRIDE = 1 ]
then
    $ECHO "Patch required:"
    $ECHO "  $BLURB"
    $ECHO ""
    $ECHO "Override and install anyway? (y/n)[n]"
    read ANSWER
    $ECHO " "
    if [ "$ANSWER" != "Y" -a "$ANSWER" != "y" ]
    then
        return 1
    else
        $ECHO "Overriding requirement for $PATCH-$VER_REQUIRED."
        $ECHO " "
	return 0
    fi
fi
return 1
}


OSREVINFO=`/usr/bin/uname -r`
OSREVLEVEL=`/usr/bin/echo "$OSREVINFO"| sed 's/\.//'`
CHECK_DEV=$SUNPCHOME/bin/check_device
KARCH=`/bin/uname -m`

HAS_GT=0
HAS_GS=0
NUMPATCHES=0
MUST_PATCH=0

#
# uncomment for debug
#
#CHECK_DEV=check_device
#OSREVLEVEL=54
#HAS_GT=1
#HAS_GS=1
#KARCH=sun4m

#----------------------------------------------------
# START HERE
#----------------------------------------------------

rm -f $INFO_FILE
rm -f $SCRATCH_FILE

if [ "$1" = "override" ]
then
    OVERRIDE=1
else
    OVERRIDE=0
fi

#
# dump current patch info to tmp file
#
/usr/bin/showrev -p > $SCRATCH_FILE

#
#  If we have a GT check for the patch
#
$CHECK_DEV /dev/gt0 -open
if [ $? -eq 1 ]
then
    HAS_GT=1
fi

#
#  If we have a GS (cgtwelve) check for the patch
#
$CHECK_DEV /dev/cgtwelve0 -open
if [ $? -eq 1 ]
then
    HAS_GS=1
fi

#
#  If SunOS 5.3 check for patches for the following:
#
#	GT
#	4m kernel patch (Auxdev is included in this patch)
#
if [ "$OSREVLEVEL" -eq "53" ]
then

#
# Check for the 4M patch.
#
    if [ "$KARCH" = "sun4m" ]
    then
	need_patch 101318 06 "PATCH ID#: 101318-59: Solaris2.3 kernel patch"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101318-59: Solaris2.3 kernel patch" >> $INFO_FILE
	    $ECHO "    Fixes SunPC/sun4m incompatibility." >> $INFO_FILE
            $ECHO "    Patch directory: /cdrom/sunpc_4_1/patches/2.3/101318-59" >> $INFO_FILE
	    $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
            MUST_PATCH=1
	fi
    fi
#
# Check for the Auxdev patch.
#
    need_patch 101362 03 "PATCH ID#: 101362-24: Solaris2.3 Openwindows patch"
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 101362-24: Solaris2.3 Openwindows patch" >> $INFO_FILE
        $ECHO "    Fixes graphics and cursor problems with OpenWindow3.3." >> $INFO_FILE
	$ECHO "    Patch directory: /cdrom/sunpc_4_1/patches/2.3/101362-24" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

#
# check for GT
#
    if [ "$HAS_GT" -eq "1" ]
    then
	need_patch 101311 01 "PATCH ID#: 101311: Solaris2.3 OpenWindows GT fix"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101311: Solaris2.3 OpenWindows GT fix" >> $INFO_FILE
	    $ECHO "    Required for SunPC DGA with GT/GS framebuffer." >> $INFO_FILE
            $ECHO "    Patch not available on SunPC CD." >> $INFO_FILE
	    $ECHO "    See SunPC4.1 Product Notes for more information." >> $INFO_FILE
            $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
	fi
    fi
fi

#  If SunOS 5.4 check for patches for the following:
#
#	TCX patch
#	HWC patches
#
if [ "$OSREVLEVEL" -eq "54" ]
then

# check for 2 Hardware Cursor fixes
    need_patch 101933 01 "PATCH ID#: 101933-01: Solaris2.4 OpenWindows patch" 
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 101933-01: Solaris2.4 OpenWindows patch" >> $INFO_FILE
        $ECHO "    Fixes hardware cursor problem in OW3.4" >> $INFO_FILE
	$ECHO "    Patch directory: /cdrom/sunpc_4_1/patches/2.4/101933-01" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

    need_patch 102057 01 "PATCH ID#: 102057-01: Solaris2.4 OpenWindows patch"
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 102057-01: Solaris2.4 OpenWindows patch" >> $INFO_FILE
        $ECHO "    Fixes another hardware cursor problem in OW3.4" >> $INFO_FILE
	$ECHO "    Patch directory: /cdrom/sunpc_4_1/patches/2.4/102057-01" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

# check for TCX driver and fix

    $SUNPCHOME/bin/ServerVersion -tcx
    SERVERVERSION_RET=$? 
    if [ "$SERVERVERSION_RET" -eq "1" ]
    then
      	$ECHO "PATCH ID#: 101923-01: Solaris2.4 TCX driver patch" >> $INFO_FILE
        $ECHO "    Fixes SunPC DVMA with A24 framebuffer" >> $INFO_FILE
	$ECHO "    Patch directory: /cdrom/sunpc_4_1/patches/2.4/101923-01" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi
fi
#
#
#
if [ -f $INFO_FILE ]
then

    $ECHO ""
    $ECHO "**************************************************************"
    $ECHO ""
    if [ "$NUMPATCHES" -eq "1" ]
    then
    $ECHO "To run SunPC, your system needs 1 Solaris patch."
    else
    $ECHO "To run SunPC, your system needs $NUMPATCHES Solaris patches."
    fi
    $ECHO "Most Solaris patches for SunPC are available on the SunPC CD."
    $ECHO "For each patch listed below, go to the indicated directory,"
    $ECHO "read the README file, and follow the installation instructions."
    $ECHO "See SunPC4.0.1 Product Notes for more information."
    $ECHO ""
    cat $INFO_FILE
    if [ "$MUST_PATCH" -eq "1" ]
    then
    $ECHO ""
    $ECHO "--------------------------------------------------------------"
    $ECHO "INSTALL THESE PATCHES, REBOOT, AND RUN sunpc_install AGAIN."
    $ECHO "--------------------------------------------------------------"
    $ECHO ""
    $ECHO "If you believe that your system has the required patches installed"
    $ECHO "and that these instructions are in error, please report the problem"
    $ECHO "to your vendor or SunService representative.  You can override these"
    $ECHO "instructions by typing './sunpc_install -OVERRIDE_PATCH_CHECK', but"
    $ECHO "this is not recommended."
    $ECHO "**************************************************************"
    $ECHO ""
    fi

    rm $INFO_FILE
    rm $SCRATCH_FILE
    if [ "$MUST_PATCH" -eq "1" ]
    then
        exit 1
    fi
fi
exit 0
