# Description: Le kernel avec les modules nvidia, ati, broadcom et virtualbox
# URL:  http://www.kernel.org
# Maintainer: git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
# Packager: thierryn1 at hispeed dot ch, tyrry33 at gmail dot com
#
name=kernel
version=3.3.2
_BaseVersion=3.3
release=1
PKGMK_NO_STRIP="yes"
PKGMK_IGNORE_FOOTPRINT="yes"
PKGMK_IGNORE_MD5SUM="yes"
SCRIPT_VERSION="pakxe.4"
INITRDBASE="nutyx-initrd"
_extra=11032012
_tools=24042012
NVIDIA_VERSION=295.40
VB_VERSION=4.1.14
VB_BUILD=77440
ATI_VERSION=12.3

[ "`uname -m`" == "i686"   ] && _ARCH=x86
[ "`uname -m`" == "x86_64"   ] && _ARCH=x86_64
[ "`uname -m`" == "i686"   ] && VB_ARCH=x86
[ "`uname -m`" == "x86_64"   ] && VB_ARCH=amd64
[ "`uname -m`" == "i686"   ] && BC_ARCH=x86_32
[ "`uname -m`" == "x86_64"   ] && BC_ARCH=x86_64

source=(http://www.broadcom.com/docs/linux_sta/hybrid-portsrc_${BC_ARCH}-v5_100_82_112.tar.gz
	http://download.virtualbox.org/virtualbox/${VB_VERSION}/VirtualBox-${VB_VERSION}-${VB_BUILD}-Linux_${VB_ARCH}.run
	http://www2.ati.com/drivers/linux/amd-driver-installer-${ATI_VERSION/./-}-x86.x86_64.run
	http://fr.download.nvidia.com/XFree86/Linux-${_ARCH}/${NVIDIA_VERSION}/NVIDIA-Linux-${_ARCH}-${NVIDIA_VERSION}.run
	http://www.kernel.org/pub/linux/kernel/v3.0/linux-${_BaseVersion}.tar.xz config_64 config
	http://www.kernel.org/pub/linux/kernel/v3.0/patch-$version.xz
	http://nutyx.meticul.eu/install-${SCRIPT_VERSION}.ash
	http://nutyx.meticul.eu/files/nutyx-initrd-`uname -m`-${_extra}.tar.bz2
	http://nutyx.meticul.eu/files/installtools-${_tools}.tar.bz2
	makefile_compat.patch bc_wl_abiupdate.patch ati-kernel-3.2.8.patch)

build(){

sed -i "s/^SCRIPT_VERSION=.\{1,\}/SCRIPT_VERSION=\"$SCRIPT_VERSION\"/" `prt-get printf %p --filter=$name`/$name/post-install
# firmware
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
rm -r linux-firmware/.git

cp -a linux-firmware $INITRDBASE/rootfs/lib/firmware

mkdir -p $PKG/lib
cp -a linux-firmware $PKG/lib/firmware

# initrd
cd $SRC

sed -i "s|#VERSION#|$SCRIPT_VERSION|g" \
$INITRDBASE/rootfs/install/functions

for i in setup-install setup-mirroir
do
        sed -i "s|#INSTALL#|install-$SCRIPT_VERSION.ash|" \
        $INITRDBASE/rootfs/install/$i || exit 1
done
for i in main.txt setup-grub
do
        sed -i "s|#VERSION#|MINI $SCRIPT_VERSION|g" \
        $INITRDBASE/rootfs/install/$i
done

# kernel sources
if ! [ -d /usr/src/linux-${_BaseVersion} ]; then
        mv linux-${_BaseVersion} /usr/src/
        ln -s  /usr/src/linux-${_BaseVersion} linux-${_BaseVersion}
        cd linux-${_BaseVersion}
        if [ -f $SRC/patch-$version.xz ]; then
		bzip2 -d -c  $SRC/patch-$version.xz | patch -Np1
        fi
        cd ..
else
        rm -r linux-${_BaseVersion}
fi
ln -s  /usr/src/linux-${_BaseVersion} linux-${_BaseVersion}
cd linux-${_BaseVersion}

# make mrproper

case `uname -m` in
        x86_64)
        mv $SRC/config_64 ./.config;;
        i?86)
        mv $SRC/config ./.config;;
esac
sed -i "s/EXTRAVERSION = .*/EXTRAVERSION =/" Makefile
# When a new patchlevel is release (3.2->3.3 for ex)
# decomment and run make menuconfig
#make menuconfig
case `uname -m` in
        x86_64)
                cp .config `prt-get printf %p --filter=$name`/$name/config_64;;
        i?86)
                cp .config `prt-get printf %p --filter=$name`/$name/config;;
esac
make
case `uname -m` in
        x86_64)
                cp .config `prt-get printf %p --filter=$name`/$name/config_64;;
        i?86)
                cp .config `prt-get printf %p --filter=$name`/$name/config;;
esac
# Module broadcom
cd $SRC
patch -p0 src/wl/sys/wl_linux.c < bc_wl_abiupdate.patch
KBUILD_NOPEDANTIC=1 make -C $SRC/linux-${_BaseVersion} M=`pwd`
install -m 0644 -D wl.ko $PKG/lib/modules/${version}/kernel/drivers/zzzz/wl.ko

# Module nvidia
cd $SRC
sh NVIDIA-Linux-${_ARCH}-${NVIDIA_VERSION}.run --extract-only
cd NVIDIA-Linux-${_ARCH}-${NVIDIA_VERSION}/kernel
ln -s Makefile{.kbuild,}
SYSSRC=$SRC/linux-${_BaseVersion} make module
install -m 0644 -D nvidia.ko $PKG/lib/modules/${version}/kernel/drivers/zzzz/nvidia.ko

# Module ati
cd $SRC
sh amd-driver-installer-${ATI_VERSION/./-}-x86.x86_64.run --extract amd
cd amd
patch -Np1 -i ../makefile_compat.patch
patch -Np1 -i ../ati-kernel-3.2.8.patch
cd common/lib/modules/fglrx/build_mod
cp 2.6.x/Makefile .
cp $SRC/amd/arch/${_ARCH}/lib/modules/fglrx/build_mod/libfglrx_ip.a .
make -C $SRC/linux-${_BaseVersion} SUBDIRS="`pwd`" modules
install -m 0644 -D fglrx.ko $PKG/lib/modules/${version}/kernel/drivers/zzzz/fglrx.ko

# Modules VB
cd $SRC
sh VirtualBox-${VB_VERSION}-${VB_BUILD}-Linux_${VB_ARCH}.run --target vb --keep --noexec
cd vb
tar xfj VirtualBox.tar.bz2
cd src/vboxhost/
KERNELRELEASE=${version} KERN_DIR=$SRC/linux-${_BaseVersion} make
for i in *.ko
do
        install -D -m0644 $i \
        $PKG/lib/modules/${version}/kernel/drivers/zzzz/$i
done
# Install modules
cd $SRC/linux-${_BaseVersion}
sed -i "/rm\ -rf\ \$(MODLIB)\/kernel/d" Makefile
make -j1 INSTALL_MOD_PATH=$PKG modules_install
mkdir -p $PKG/boot
case `uname -m` in
        x86_64)
                cp  System.map \
                $PKG/boot/System_64.map-$version
                cp  .config    \
                $PKG/boot/config_64-$version
                cp  arch/x86_64/boot/bzImage \
                $PKG/boot/kernel-$version ;;
        i?86)
                cp  System.map \
                $PKG/boot/System.map-$version
                cp  .config \
                $PKG/boot/config-$version
                cp  arch/i386/boot/bzImage \
                $PKG/boot/kernel-$version ;;
esac
ln -sf kernel-$version $PKG/boot/kernel
cd $PKG/lib/modules/${version}/
rm {build,source}
ln -sv /usr/src/linux-${_BaseVersion} build
ln -sv /usr/src/linux-${_BaseVersion} source

# initrd
cd $SRC
mkdir -p $PKG/root/bin
install -m755 $SRC/install-${SCRIPT_VERSION}.ash \
        $PKG/root/bin/install-${SCRIPT_VERSION}.ash
bsdtar -c "-J" -f $PKG/boot/nutyx-initrd.tar.xz $INITRDBASE
}