#!/bin/bash
#
#  kernel-ratten.SlackBuild is free software; you can redistribute it and/or modify it under the
#  terms of the GNU General Public License as published by the Free Software
#  Foundation; either version 2 of the License, or any later version.
#
#  kernel-ratten.SlackBuild is distributed in the hope that it will be useful, but WITHOUT ANY
#  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
#  A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License along with
#  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
#  Place - Suite 330, Boston, MA 02111-1307, USA
#
# slackbuild for kernel-ratten
# by rhatto at riseup.net
#

if [ -s "slack-required" ]; then
  echo Recomended and required packages for building kernel-ratten are:
  cat slack-required | sed -e 's/^/\t/'
  if [ "$INTERACT" != "no" ]; then
    echo If you dont have those installed, press Ctrl-C. Otherwise, hit ENTER.
    read crap
#  else
#    echo Sleeping 3 seconds...
#    sleep 3
  fi
fi

if [ -f ~/.slackbuildrc ]; then
  source ~/.slackbuildrc
elif [ -f /etc/slackbuildrc ]; then
  source /etc/slackbuildrc
fi

CWD="`pwd`"

PACKAGE="kernel-ratten"
PATCHSET="bs-rt"
ARCH="x86_64"
SPLASH="/etc/bootsplash/themes/Slack-Black-Tux/config/bootsplash-1024x768.cfg"
BUILD=${BUILD:=1rha}
KERNEL_VERSION=${KERNEL_VERSION:=2.6.18}
EXTRAVERSION=${EXTRAVERSION:=1}
PATCH_VERSION=${PATCH_VERSION:=3.1.6-2.6.15}
REALTIME_PATCH=${REALTIME_PATCH:=rt-lsm-0.8.7-kernel.patch}
TMP=${TMP:=/tmp}
SRC_DIR=${SRC:=$CWD}
REPOS=${REPOS:=$TMP}

# -------  error codes for createpkg  --------------
ERROR_WGET=31;      ERROR_MAKE=32;      ERROR_INSTALL=33
ERROR_MD5=34;       ERROR_CONF=35;      ERROR_HELP=36
ERROR_TAR=37;       ERROR_MKPKG=38;     ERROR_GPG=39
ERROR_PATCH=40

if [ ! -f "$SPLASH" ]; then
  echo error: file not found: $SPLASH
  exit 1
fi

if [ ! -z "$EXTRAVERSION" ]; then
  KERNEL_VERSION="$KERNEL_VERSION.$EXTRAVERSION"
fi

RTOOL="wget"
KERNEL="linux-$KERNEL_VERSION.tar.bz2"
PATCH="bootsplash-$PATCH_VERSION.diff"
KERNEL_URL="http://www.kernel.org/pub/linux/kernel/v2.6/$KERNEL"
PATCH_URL="ftp://ftp.openbios.org/pub/bootsplash/kernel/$PATCH"

SRC_DIR="$SRC_DIR/kernel"
mkdir -p $SRC_DIR

if [ "$RTOOL" == "wget" ]; then

  if [ ! -f "$SRC_DIR/$KERNEL" ]; then
    rm -f $SRC_DIR/$KERNEL.sign
    wget "$KERNEL_URL" -O "$SRC_DIR/$KERNEL" || exit $ERROR_WGET
    wget "$KERNEL_URL.sign" -O "$SRC_DIR/$KERNEL.sign" || exit $ERROR_WGET
  fi

  if [ ! -f "$SRC_DIR/$PATCH" ]; then
    wget "$PATCH_URL" -O "$SRC_DIR/$PATCH" || exit $ERROR_WGET
  fi

fi

TMP="$TMP/$PACKAGE"
rm -rf $TMP
mkdir -p $TMP
cd $TMP

rm -rf linux-$KERNEL_VERSION*
tar jxvf $SRC_DIR/$KERNEL || exit $ERROR_TAR

if [ ! -z "$PATCHSET" ]; then
  mv linux-$KERNEL_VERSION linux-$KERNEL_VERSION-$PATCHSET
  KERNEL_VERSION="$KERNEL_VERSION-$PATCHSET"
fi

cp $CWD/config-$KERNEL_VERSION linux-$KERNEL_VERSION/.config
cd linux-$KERNEL_VERSION

if [ ! -z "$EXTRAVERSION" ] && [ ! -z "$PATCHSET" ]; then
  sed -e "s/^EXTRAVERSION =.*$/EXTRAVERSION = \.$EXTRAVERSION-$PATCHSET/" Makefile > Makefile.tmp
elif [ ! -z "$PATCHSET" ]; then
  sed -e "s/^EXTRAVERSION =*$/EXTRAVERSION = -$PATCHSET/" Makefile > Makefile.tmp
fi

mv Makefile.tmp Makefile
patch -p1 < $CWD/$REALTIME_PATCH || exit $ERROR_PATCH
patch -p1 < $SRC_DIR/$PATCH || exit $ERROR_TAR

make oldconfig || exit $ERROR_MAKE
time make || exit $ERROR_MAKE

if [ -d "/lib/modules/$KERNEL_VERSION" ]; then
  ( cd /lib/modules && mv $KERNEL_VERSION $KERNEL_VERSION.old )
fi

make modules_install || exit $ERROR_INSTALL

# make the package

CWD="`pwd`"

PKG="$TMP/package-$PACKAGE"

mkdir -p $PKG/{install,boot,lib/modules,usr/doc}

cp -Rp /lib/modules/$KERNEL_VERSION $PKG/lib/modules

if [ -d "/lib/modules/$KERNEL_VERSION.old" ]; then
  ( cd /lib/modules && mv $KERNEL_VERSION $KERNEL_VERSION.delete && mv $KERNEL_VERSION.old $KERNEL_VERSION && rm -rf $KERNEL_VERSION.delete  )
fi

cp System.map $PKG/boot/System.map-$KERNEL_VERSION
cp .config $PKG/boot/config-$KERNEL_VERSION
cp arch/$ARCH/boot/bzImage $PKG/boot/vmlinuz-$KERNEL_VERSION

cat << EOF > $PKG/install/slack-desc
kernel-ratten: kernel-ratten (linux kernel $KERNEL_VERSION for ratten AMD64 workstation)
kernel-ratten: 
kernel-ratten: This is the kernel for the RATTEN workstation.
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
kernel-ratten: 
EOF

VERSION="`echo $KERNEL_VERSION | sed -e 's/-/_/g'`"

# docs
mkdir -p $PKG/usr/doc/$PACKAGE-$VERSION
# cp -r Documentation $PKG/usr/doc/$PACKAGE-$VERSION/
for file in COPYING CREDITS MAINTAINERS README REPORTING-BUGS; do
  cp $CWD/$file* $PKG/usr/doc/$PACKAGE-$VERSION/
done

mkinitrd -c -k $KERNEL_VERSION -o $PKG/boot/initrd.gz
splash -s -f $SPLASH > $PKG/boot/initrd.gz 

cd $PKG

( cd boot && ln -s vmlinuz-$KERNEL_VERSION vmlinuz )
( cd boot && ln -s config-$KERNEL_VERSION config )
( cd boot && ln -s System.map-$KERNEL_VERSION System.map )

makepkg -c y -l y $REPOS/$PACKAGE-$VERSION-$ARCH-$BUILD.tgz || exit $ERROR_MKPKG

if [ "$CLEANUP" == "yes" ]; then
  rm -rf $TMP
fi