#! /bin/sh

: ${SPLUS_MANIFEST?"
The envar SPLUS_MANIFEST should have been set by the CHECKINSTALL script.
Please run this via the command:
        Splus CHECKINSTALL"}

status=0

tmpdir=${TMPDIR:-/tmp}
if [ -r ${SPLUS_MANIFEST} ]; then

    # Need to verify directory existences.
    echo; echo '########## Checking that distribution directories exist'
    echo "           `date`"
    rm -f $tmpdir/CHECKINSTALL.$$
    sed < $SPLUS_MANIFEST -e '
        1,/ Start.*directories/d
        / End.*directories/,$d' |
    while read fname
    do
        if [ ! -d "$fname" ]
        then
            echo "$fname"
            (echo; echo "Cannot access directory: $fname") >&2
            status=1
        fi
    done > $tmpdir/CHECKINSTALL.$$
    [ -s $tmpdir/CHECKINSTALL.$$ ] && status=1

    if [ "X$SUMALL" = X ]
    then SUM=some
    else SUM=ALL
    fi

    # Need to verify file existences.
    echo; echo '########## Checking that distribution files exist &'
    echo "           checksum $SUM files."
    echo "           `date`"
    nfiles1=`sed < $SPLUS_MANIFEST -e '1,/ Start.*file checksums/d' \
                 -e '/ End.*file checksums/,$d' | wc -l`
    nfiles2=`sed < $SPLUS_MANIFEST -n -e '/Number of file checksums/s/^.*: *//p'`
    if [ $nfiles1 -ne $nfiles2 ]
    then
        (echo
         echo "Corrupted file: $SPLUS_MANIFEST" >&2
         echo "'Number of file checksums:' ($nfiles2) != line count ($nfiles1)"
        ) >&2
        status=1
    else
        echo "There are $nfiles1 files to check. Please wait..."

        rm -f $tmpdir/CHECKINSTALL.$$
        filenum=1
        sed < $SPLUS_MANIFEST -e '
            1,/ Start.*file checksums/d
            / End.*file checksums/,$d
	    s/[ 	][ 	]*/ /g'"
            ${SUMALL+s/\$/ CHECK/}" |
        while read sum size fname check rest
        do
            # Heartbeat message.
            if [ `expr $filenum % 500` -eq 1 ]
            then echo "Checking file #$filenum: $fname" >&2
            fi
            filenum=`expr $filenum + 1`

            if [ -r "$fname" ]
            then
                [ "X$check" = XCHECK ] &&
                sum "$fname" | sed 's/[ 	][ 	]*/ /g' | (
                    read testsum testsize rest dummy
                    if [ $testsum -ne $sum -o $testsize -ne $size ]
                    then
                        echo "$fname"
                        (echo
                         echo "Bad checksum: $fname"
                         echo "EXPECTED: $sum $size	GOT: $testsum $testsize"
                        ) >&2
                        exit 1
                    fi
                )
            else
                echo "$fname"
                (echo; echo "Cannot access file: $fname") >&2
                status=1
            fi
        done > $tmpdir/CHECKINSTALL.$$
        [ -s $tmpdir/CHECKINSTALL.$$ ] && status=1
    fi
else
    (echo
     echo "No such file: $SPLUS_MANIFEST"
     echo "Cannot check that all distributed files are intact!"
    ) >&2
    status=1
fi

echo
if [ $status -eq 0 ]
then echo "---------- Finished checking distribution files: PASSED"
else echo "---------- Finished checking distribution files: FAILED"
fi

exit $status
