#!/bin/bash

ROOTDIR=/usr/src/linux
if [ "$1" != "" ]; then
	ROOTDIR="$1"
else
    if [ -d kernel -a -d Documentation ]; then
	ROOTDIR=`pwd`
    fi
fi

VERSION=v`head -2 $ROOTDIR/Makefile | \
	awk '{ printf "%s",$3 }'`

DIR=$ROOTDIR/drivers/char/speakup

echo "Patching version $VERSION"

if [ ! -d ${DIR}/CVS ] && [ "$CVSROOT" == "" ]; then
	echo 'CVSROOT not set.  Enter it below.  Hit enter for anonymous.'
	read -p 'CVSROOT> ' CVSROOT
	[ "$CVSROOT" == "" ] &&
	  CVSROOT=':pserver:anonymous@bumpy.braille.uwo.ca:/usr/src/CVS'
	export CVSROOT
	cvs login || exit
fi

if [ "$1" != "-p" ]; then
	#  get new version
	mkdir -p ${DIR%/speakup}
	cd ${DIR%/speakup}
	if [ -d speakup ] && [ -d ${DIR}/CVS ]; then
		cd speakup
		cvs update -d -P || exit
	else
	rm -fr ${DIR}
		cvs co -P speakup || exit
		cd speakup
	fi
fi

#  make .orig files
echo -n 'Creating .orig files ['
for i in `cat ${DIR}/patchlist-${VERSION}`; do
	patch=`echo $i | cut -f 1 -d ,`
	filebase=`echo $i | cut -f 2 -d ,`

	mkdir -p `dirname $ROOTDIR/$filebase`
	if [ "$patch" == "1" ]; then
		if [ ! -e $ROOTDIR/$filebase.orig ]; then
			echo -n .
			cp $ROOTDIR/$filebase $ROOTDIR/$filebase.orig
		fi
	fi
done
echo '] done.'

#  apply patches
echo -n 'Patching files ['
for i in ${DIR}/diff-${VERSION}/*.patch; do
	# skip dirs
	[ -d $i ] && continue
	echo -n p
	writeloc=${i##$DIR\/diff-${VERSION}\/}
	writeloc=${writeloc%.patch}
	writeloc=${writeloc//^/\/} 
	patch --silent -f -p0 -o $ROOTDIR/$writeloc $ROOTDIR/$writeloc.orig $i
done
echo '] done.'

#  copy files
echo -n 'Copying files ['
for i in ${DIR}/diff-${VERSION}/*.copy; do
	# skip dirs
	[ -d $i ] && continue
	echo -n c
	writeloc=${i##$DIR\/diff-${VERSION}\/}
	writeloc=${writeloc%.copy}
	writeloc=${writeloc//^/\/} 
	cp $i $ROOTDIR/$writeloc
done
echo '] done.'