#!/bin/bash

set -e

#workdir=/home/jonas/src
#origsrcdir=/usr/local/src/linux
#origpatchdir=/usr/local/src/linux
#origver="2.4.18"
#nextver="2.4.19"
#patchsets="prepatch mm"
#patchprepatchpre="patch-"
#patchprepatchver="$nextver-pre2"
#patchmmpre=""
#patchmmver="$patch1ver-mm1"

. ./linux.conf

for var in workdir origsrcdir origpatchdir origver; do
	if [ -z "`eval echo '$'$var`" ]; then
		echo "Variable '$var' missing. Exiting...!"
		exit 1
	fi
done

#for var in patchsets; do
#	eval echo '$'$var
#done

echo "Doing sanity checks before unpackacking kernel $origver..."
if [ -d "${workdir}/linux-${origver}" ]; then
	echo "ERROR: A directory already exists for kernel \"$origver\"."
	exit 1
fi
for patchset in $patchsets; do
	eval patchver=\"'$'patch${patchset}ver\"
	eval patchpre=\"'$'patch${patchset}pre\"

	if [ -z "${patchver}" ]; then
		echo "WARNING: Ignoring \"$patchset\" patchset with missing version number."
		continue
	fi
	if [ ! -f "${origpatchdir}/${patchpre}${patchver}.bz2" ]; then
		echo "ERROR: \"$patchset\" patch \"${patchpre}${patchver}.bz2\" not found."
		exit 1
	fi
	if [ -d "${workdir}/linux-${patchver}" ]; then
		echo "ERROR: A directory already exists for \"$patchset\"."
		exit 1
	fi
done

#Remove old symlinks - and error out if it is a directory
rm -f $workdir/linux
rm -f $workdir/linux.orig

bzcat $origsrcdir/linux-$origver.tar.bz2 |tar -C $workdir -xv
[ -d $workdir/linux ] && mv $workdir/linux $workdir/linux-$origver

finalver="$origver"

mv ${workdir}/linux-${origver} ${workdir}/linux-patchtmp

for patchset in $patchsets; do
	eval patchver=\"'$'patch${patchset}ver\"
	eval patchpre=\"'$'patch${patchset}pre\"

	echo "Applying \"$patchver\" patch..."
	bzcat ${origpatchdir}/${patchpre}${patchver}.bz2 | ( cd ${workdir}/linux-patchtmp && patch -p 1 -N )
	finalver="$patchver"
done

mv ${workdir}/linux-patchtmp ${workdir}/linux-${finalver}

ln -sf linux-${finalver} ${workdir}/linux
ln -s linux-${origver} ${workdir}/linux.orig
#ln -s ${newtree} ${workdir}/linux
