#!/bin/sh

set -e

ARCHITECTURE=all
PATCHNAME=speakup
PATCHDIR=/usr/src/kernel-patches/$ARCHITECTURE/$PATCHNAME

if ! test -d kernel -a -d Documentation ; then
    echo "Not in kernel top level directory. Exiting" >&2
    exit 1
fi

if test -f debian/APPLIED_${ARCHITECTURE}_$PATCHNAME ; then
   exit 0               # patch already applied
fi

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

echo "Patching version $VERSION"

cp -R $PATCHDIR/speakup $KERNELDIR/drivers/char/

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

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

# apply patches
echo 'Patching files:'
for i in $PATCHDIR/diff-${VERSION}/*.patch; do
	# skip dirs
	[ -d $i ] && continue
	writeloc=${i##$PATCHDIR\/diff-${VERSION}\/}
	writeloc=${writeloc%.patch}
	writeloc=`echo $writeloc |sed s,\\\^usr\\\^src\\\^linux,$KERNELDIR,;` 
	writeloc=${writeloc//^/\/} 
	patch -f -p0 -o $writeloc $writeloc.speakuporig $i
done
echo 'done applying patches.'

# copy files
echo -n 'Copying files ['
for i in $PATCHDIR/diff-${VERSION}/*.copy; do
	# skip dirs
	[ -d $i ] && continue
	echo -n c
	writeloc=${i##$PATCHDIR\/diff-${VERSION}\/}
	writeloc=${writeloc%.copy}
	writeloc=`echo $writeloc |sed s,\\\^usr\\\^src\\\^linux,$KERNELDIR,;` 
	writeloc=${writeloc//^/\/} 
	cp $i $writeloc
done
echo '] done.'

mkdir -p debian && touch debian/APPLIED_${ARCHITECTURE}_$PATCHNAME
