#!/bin/bash -e

SRC_VERSION_NAME=linux

## from
## http://stackoverflow.com/questions/9293887/in-bash-how-do-i-convert-a-space-delimited-string-into-an-array

FULL_NAME=linux-$( uname -r | sed -e 's/-default//')
read -a VERSION <<< $FULL_NAME

SRC_VERSION_ID=${VERSION[0]}  ## e.g. : 4.5.6
SRC_VERSION_REL=${VERSION[1]} ## e.g. : 1
LINUX_TYPE=${VERSION[2]}      ## e.g. : ARCH
#remove trailing.0
SRC_VERSION_ID=$(echo $SRC_VERSION_ID | sed -e 's/\.0$//' )

LINUX_BRANCH=opensuse-$SRC_VERSION_ID
KERNEL_NAME=linux-$SRC_VERSION_ID
PATCH_NAME=patch-$SRC_VERSION_ID

# ARCH Linux --  KERNEL_NAME=linux-$SRC_VERSION_ID-$SRC_VERSION_REL-$ARCH.pkg.tar.xz


mkdir kernel
cd kernel

sudo zypper in kernel-source kernel-default-devel

mkdir $FULL_NAME
cp -r /usr/src/$FULL_NAME-obj/x86_64/default/* ./$FULL_NAME/
cp -r /usr/src/$FULL_NAME/* ./$FULL_NAME/


cd $FULL_NAME


## Get the patch

# echo "Patching the kernel..."
### patch  not working ?
# xz -dc ../$PATCH_NAME.xz  | patch -p1


echo "RealSense patch..."

# Apply our RealSense specific patch
patch -p1 < ../../realsense-camera-formats-opensuse.patch

# Prepare to compile modules

## Get the config
# zcat /proc/config.gz > .config  ## Not the good one ?

cp /lib/modules/`uname -r`/build/.config .
cp /lib/modules/`uname -r`/build/Module.symvers .

echo "Prepare the build"

#cat Makefile | sed -e 's/\.\.\/\.\.\/\.\.\/linux-4.12.14-lp150.12.16/\.\.\/linux-4.12.14-lp150.12.16/' > Makefile.temp; mv Makefile.temp Makefile;
make -C . scripts oldconfig modules_prepare

# Compile UVC modules
echo "Beginning compilation of uvc..."
#make modules
KBASE=`pwd`
cd drivers/media/usb/uvc
cp $KBASE/Module.symvers .
make -C $KBASE M=$KBASE/drivers/media/usb/uvc/ modules

# Copy to sane location
#sudo cp $KBASE/drivers/media/usb/uvc/uvcvideo.ko ~/$LINUX_BRANCH-uvcvideo.ko
cd ../../../../../

cp $KBASE/drivers/media/usb/uvc/uvcvideo.ko ../uvcvideo.ko

# Unload existing module if installed
echo "Unloading existing uvcvideo driver..."
sudo modprobe -r uvcvideo

cd ..

## Not sure yet about deleting and copying...

# save the existing module

MODULE_NAME=/lib/modules/`uname -r`/kernel/drivers/media/usb/uvc/uvcvideo.ko

if [ -e $MODULE_NAME ]; then
    sudo cp $MODULE_NAME $MODULE_NAME.backup
    sudo rm $MODULE_NAME

    sudo cp uvcvideo.ko $MODULE_NAME
fi

if [ -e $MODULE_NAME.xz ]; then
    sudo cp $MODULE_NAME.xz $MODULE_NAME.xz.backup
    sudo rm $MODULE_NAME.xz

    # compress
    xz uvcvideo.ko
    sudo cp uvcvideo.ko.xz $MODULE_NAME
fi

if [ -e $MODULE_NAME.gz ]; then
    sudo cp $MODULE_NAME.gz $MODULE_NAME.gz.backup
    sudo rm $MODULE_NAME.gz

    # compress
    gzip uvcvideo.ko
    sudo cp uvcvideo.ko.gz $MODULE_NAME.gz
fi

# Copy out to module directory


sudo modprobe uvcvideo

rm -rf kernel

echo "Script has completed. Please consult the installation guide for further instruction."