#!/bin/bash

BASE_DIR="xburst"

LOG="${BASE_DIR}/LOG"

BUILD_LOG="${BASE_DIR}/BUILD_LOG"

DATE=$(date "+%Y-%m-%d")
TIME=$(date "+%H-%M-%S")
DATE_TIME="${DATE}_${TIME}"

FEEDS_CONF="data/qi_lb60/conf/feeds.conf"
test -f "feeds.conf" && FEEDS_CONF="feeds.conf"

if [ "${0}" != "data/qi_lb60/scripts/build" ]; then
	echo "Please call me that way: data/qi_lb60/scripts/build"
	echo " - out of the main directory"
	exit 1
fi

if [ ! -f ".config" ]; then
	echo "OpenWrt didn't get configured yet."
	exit 1
fi

if [ -f "config" ]; then
	echo "file <config> exists."
	echo "That means normally, a previous build failed"
	echo "Please examine the situation"
	exit 1
fi

echo "This script will move previous builds to bak/!"
echo "This script will compile base on last commit"
echo "  your  modifications will backup by git stash"
echo "  those modifications will apply again after compile"
echo "This script comes without any kind of warranty!"
echo " "
echo "Are you brave, dude? [NO/yes]"

read brave

echo " "

if [ "${brave}" != "yes" ]; then
	exit 1
fi

echo "cleaning up toolchain..."
mkdir bak 2>/dev/null
BAK="build_dir staging_dir tmp bin .config.old feeds xburst config"
for bak in $BAK; do
	mv "${bak}" "bak/${bak}_${DATE_TIME}" 2> /dev/null && echo "backed up <${bak}>"
done
rm -rf package/feeds/*

mv .config config
mkdir xburst

echo "updating git repo..."
git stash
git pull > /dev/null
if [ "$?" != "0" ]; then
	echo "ERROR: updating openwrt-xburst failed"
	exit 1
fi

echo "updating feeds..."
scripts/feeds update -a > /dev/null 2>&1
if [ "$?" != "0" ]; then
	echo "ERROR: updating feeds failed"
	exit 1
fi
echo "installing feeds..."
scripts/feeds install -a > /dev/null 2>&1
if [ "$?" != "0" ]; then
	echo "ERROR: installing feeds failed"
	exit 1
fi

echo "getting version numbers of used repositories..."
feeds="$(cat "${FEEDS_CONF}" | grep -v -E "^#")"
VERSIONS_FILE="xburst/VERSIONS"
echo "# base :: 'openwrt' [scm-protocol] [source] [branch] [revision]" > ${VERSIONS_FILE}
rev=$(git log | head -n 1 | cut -b8-)
branch=$(git branch | grep "*" | cut -b3-)
echo "openwrt git git://projects.qi-hardware.com/openwrt-xburst.git ${branch} ${rev}" >> ${VERSIONS_FILE}
echo "# feeds :: [feedname] [scm-protocol] [revision]" >> ${VERSIONS_FILE}
IFS=$'\n'
for feed in $feeds; do
        IFS=' ' arr=(${feed:4})
        proto=${arr[0]}
        dir=${arr[1]}
        url=${arr[2]}
        if [ "$proto" = "svn" ]; then
                cd feeds/${arr[1]} && tmp=($(svn info | grep -E "^Revision")) && cd ../../
                rev=${tmp[1]}
        fi
        if [ "$proto" = "git" ]; then
                cd feeds/${arr[1]} && tmp=($(git log | head -n 1)) && cd ../../
                rev=${tmp[1]}
        fi
        echo "${dir} ${proto} ${rev}" >> ${VERSIONS_FILE}
done

mkdir -p files/etc
echo ${DATE} > files/etc/VERSION

mv config .config

yes "" | make oldconfig

echo "starting compiling - this may take several hours..."

time make V=99 > xburst/BUILD_LOG 2>&1

if [ "$?" != "0" ]; then
	echo "ERROR: Build failed!"
	echo "Please refer to the log file"
	exit 1
fi

git stash pop

cp .config xburst/config
cp bin/xburst/* xburst/ 2>/dev/null
mkdir xburst/files
cp -a files/* xburst/files/

echo "DONE :)"
