#!/bin/bash
GIT_URL="https://github.com/raspberrypi/linux"

source_dir (){
mkdir -p ${SRC}
cp -f board.txt ${SRC}/
cd ${SRC}
}

noinitrd (){ # no longer used
sed -i 's/export INITRD=$want_initrd/export INITRD=No/g' scripts/package/builddeb
sed -i 's/export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No)/export INITRD=No/g' scripts/package/builddeb
}

download (){
echo ""
if [[ `wget -S --spider ${GIT_URL}/blob/rpi-${VERSION}/Makefile 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then
	download_options
	if [[ "$GIT_FAST" == "true" ]]; then verify_commit; fi
	if [[ -d "${KERNEL}-${VERSION}" ]] && [[ -d "${KERNEL}-${VERSION}.backup" ]]; then
		echo -en "${KERNEL}-${VERSION}"
		echo -en " ${PNK}[${FIN}${YLW}restoring${FIN}${PNK}]${FIN}"
		rm -fdr ${KERNEL}-${VERSION}
		echo -en " ${WHT}...${FIN}"
		mv -f ${KERNEL}-${VERSION}.backup ${KERNEL}-${VERSION}
		if [[ "$GIT_FAST" == "false" ]]; then
			cd ${KERNEL}-${VERSION}; git pull -q; make clean; cd ..
		else
			cd ${KERNEL}-${VERSION}; make clean; cd ..
		fi
		cp -r ${KERNEL}-${VERSION} ${KERNEL}-${VERSION}.backup
		echo -e " ${PNK}[${FIN}${GRN}done${FIN}${PNK}]${FIN}"
	else
		echo -e "This may take a while ..."
		echo ""
		git clone ${GIT_OPT} -b rpi-${VERSION} ${GIT_URL}.git ${KERNEL}-${VERSION}
		sleep .50
		if [[ -d "${KERNEL}-${VERSION}" ]] && [[ -f "${KERNEL}-${VERSION}/Makefile" ]]; then
			cd ${KERNEL}-${VERSION}; make clean; cd ..
			echo ""
			echo -en "${KERNEL}-${VERSION}"
			echo -en " ${PNK}[${FIN}${WHT}creating backup${FIN}${PNK}]${FIN}"
			cp -r ${KERNEL}-${VERSION} ${KERNEL}-${VERSION}.backup
			echo -e " ${PNK}[${FIN}${GRN}done${FIN}${PNK}]${FIN}"
		else
			echo ""
			echo -en "${KERNEL}-${VERSION}"
			echo -en " ${PNK}[${FIN}${WHT}download${FIN}${PNK}]${FIN}"
			echo -e " ${PNK}[${FIN}${RED}failed${FIN}${PNK}]${FIN}"
			exit 0
		fi
	fi
else
	echo ""
	echo -e "Git branch ${VERSION} is not available?"
	exit 0
fi
}

download_options (){
GIT_HASH=`git ls-remote --heads ${GIT_URL}.git | grep -w "refs/heads/rpi-${VERSION}" | sed -n '1p' | sed "s/refs\/heads\/rpi-${VERSION}//g" | sed s/'\s'//g`
if [[ -f "../.cache/git_fast.${KERNEL}-${VERSION}" ]] && [[ -d "${KERNEL}-${VERSION}" ]]; then
	:;
else
	rm -f ../.cache/git_fast.${KERNEL}-${VERSION}
	rm -fdr ${KERNEL}-${VERSION}
fi
if [[ -f "../.cache/git_fast.${KERNEL}-${VERSION}" ]]; then
	source ../.cache/git_fast.${KERNEL}-${VERSION}
	if [[ "$GIT_FAST" == "true" ]]; then GIT_OPT="--depth 1"; else GIT_OPT=""; fi
else
	while :
	do
	echo -e "How would you like to handle downloads?"
	echo -e " 1) shallow clone (default)"
	echo -e " 2) full clone"
	echo -e ""
	read -t10 -p "Prompt: "
	if [ $? -gt 128 ]; then
		echo -e "Default selected."
		mkdir -p ../.cache
		echo 'GIT_FAST="true"' > ../.cache/git_fast.${KERNEL}-${VERSION}
		echo GIT_COMMIT='"'${GIT_HASH}'"' >> ../.cache/git_fast.${KERNEL}-${VERSION}
		GIT_OPT="--depth 1"
		echo -e ""
		break
	fi
	case $REPLY in
		[1]*)
			mkdir -p ../.cache
			echo 'GIT_FAST="true"' > ../.cache/git_fast.${KERNEL}-${VERSION}
			echo GIT_COMMIT='"'${GIT_HASH}'"' >> ../.cache/git_fast.${KERNEL}-${VERSION}
			GIT_OPT="--depth 1"
			echo -e ""
			break
			;;
		[2]*)
			mkdir -p ../.cache
			echo 'GIT_FAST="false"' > ../.cache/git_fast.${KERNEL}-${VERSION}
			GIT_OPT=""
			echo -e ""
			break
			;;
		*)
			echo -e "Enter 1 or 2"
			;;
		esac
	done
fi
}

verify_commit (){
echo -en "commit"
if [[ "$GIT_COMMIT" == "$GIT_HASH" ]]; then
	echo -en " ${PNK}[${FIN}${WHT}${GIT_COMMIT}${FIN}${PNK}]${FIN}"
	echo -e " ${PNK}[${FIN}${GRN}ok${FIN}${PNK}]${FIN}"
else
	echo -en " ${PNK}[${FIN}${WHT}${GIT_HASH}${FIN}${PNK}]${FIN}"
	echo -en " ${PNK}[${FIN}${WHT}mismatch${FIN}${PNK}]${FIN}"
	sed -i 's/^GIT_COMMIT=.*/GIT_COMMIT="'"${GIT_HASH}"'"/' ../.cache/git_fast.${KERNEL}-${VERSION}
	echo -en " ${PNK}[${FIN}${YLW}purging${FIN}${PNK}]${FIN}"
	rm -fdr ${KERNEL}-${VERSION} ${KERNEL}-${VERSION}.backup
	echo -e " ${PNK}[${FIN}${GRN}done${FIN}${PNK}]${FIN}"
	echo ""
fi
}

setup (){
if [[ -d "${KERNEL}-${VERSION}" ]]; then
	cd ${KERNEL}-${VERSION}
	export ARCH=${ARCH}
	if [[ "ARCH" == "arm" ]]; then KERNEL=${KERNEL_VAR}; fi
else
	report_dir_error
fi
}

cconfig (){
echo_cconfig
if [[ -f "../../defconfig/${MYCONFIG}" ]]; then
	cp -f ../../defconfig/${MYCONFIG} arch/${ARCH}/configs/
else
	echo ""
	echo -e "${MYCONFIG} was not found."
	echo -e "Check that the name is correct and in the correct location."
	echo -e "If you believe you are receiving this in error, please report it."
	read -p "Press enter to continue."
	exit 1
fi
kbuild "${MYCONFIG}"
echo ""
}

fconfig (){
echo -e "${WHT}Making ${LINUX_DEFCONFIG}${FIN}."
linux_configs
kbuild "${LINUX_DEFCONFIG}"
echo ""
}

save_defconfig (){
if [[ -f "defconfig" ]]; then
	echo ""
	mkdir -p ../../$OUTPUT/
	# minimal
	cp -f defconfig ../../$OUTPUT/${BOARD}_defconfig
	# full
	cp -f .config ../../$OUTPUT/${BOARD}-config_defconfig
	# path to files
	ls -ls ../../$OUTPUT/${BOARD}_defconfig | sed 's/..\/..\///g'
	ls -ls ../../$OUTPUT/${BOARD}-config_defconfig | sed 's/..\/..\///g'
fi
}

menuconfig (){
echo ""
echo_menuconfig
sleep .50
kbuild "menuconfig"
sleep .25
kbuild "savedefconfig"
echo "# ${BOARD} defconfig saved."
options=("Continue" "Quit")
select opt in "${options[@]}"
do
	case $opt in
		"Continue")
			save_defconfig
			break
			;;
		"Quit")
			save_defconfig
			exit 0
			;;
		*) echo "invalid option $REPLY";;
	esac
done
}

builddeb (){
if [ $CROSSCOMPILE -eq 1 ]; then echo -e "${GRN}  CC${FIN}      ${CROSS_COMPILE}${COMPILER}"; else echo -e "${GRN}  NC${FIN}      ${COMPILER}"; fi
echo ${BUILD_VERSION} > .version
echo 'y' | kbuild "LOCALVERSION= KBUILD_BUILD_USER=${KBUSER} KBUILD_BUILD_HOST=${KBHOST} bindeb-pkg"
}
