#!/bin/bash
# Author+=amit.pundir@linaro.org

set -e

EXACT=1
DIR=android
if [ -z "${LINARO_ANDROID_ACCESS_ID}" ] ; then
	LINARO_ANDROID_ACCESS_ID=default-bot
fi
SOURCE_OVERLAY_OPTIONAL=1

usage()
{
	echo 'Usage: $0 -m <manifest.xml> -o <overlay.tar> [ -t -d directory -l login ]'
	echo -e '\n -m <manifest>    If -t is not used, then using a browser with cookies you\n                  must download the pinned manifest from:\n             http://snapshots.linaro.org/android/~linaro-android-member-ti/panda-linaro/298/\n -o               The path to the vendor required overlay.\n                  Can be downloaded from http://snapshots.linaro.org/android/binaries/open/20120716/build-info.tar.bz2\n'
	echo " -t                Reproduce the build from the tip of the branch rather than doing"
	echo "                   an exact replica build"
	echo " -d <directory>    The directory to download code and build from"
	echo "                   Default: ${DIR}"
	echo " -l <login-id>     login-id to clone from linaro-private git repositories"
	echo "                   If in doubt, please contact Linaro Android mailing list for details"
	echo "                   Default: ${LINARO_ANDROID_ACCESS_ID}"
	exit 1
}

while getopts   "m:o:d:l:ht" optn; do
	case    $optn   in
		o   ) SOURCE_OVERLAY=$OPTARG; SOURCE_OVERLAY_OPTIONAL=0;;  m   ) MANIFEST=$OPTARG;;
		d   ) DIR=$OPTARG;;
		l   ) LINARO_ANDROID_ACCESS_ID=$OPTARG;;
		t   ) EXACT=0;;
		h   ) usage; exit 1;;
        esac
done
echo $OPTARG
UBUNTU=`cat /etc/issue.net | cut -d' ' -f2`
HOST_ARCH=`uname -m`
if [ ${HOST_ARCH} == "x86_64" ] ; then
	PKGS='git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc uboot-mkimage openjdk-6-jdk openjdk-6-jre vim-common'
else
	echo "ERROR: Only 64bit Host(Build) machines are supported at the moment."
	exit 1
fi
if [[ ${UBUNTU} =~ "12." ]]; then
	PKGS+=' lib32readline-gplv2-dev'
elif [[ ${UBUNTU} =~ "10.04" ]] ; then
	PKGS+=' ia32-libs lib32readline5-dev'
else
	echo
	echo "ERROR: Only Ubuntu 10.04, 12.04 and 12.10 versions are supported."
	exit 1
fi

echo "Checking and installing missing dependencies if any .. .."
MISSING=`dpkg-query -W -f='${Status}\n' ${PKGS} 2>&1 | grep -i 'No packages found matching' | cut -d' ' -f6`
if [ -n "$MISSING" ] ; then
	echo -n "Missing required packages: "
	for m in $MISSING ; do
		echo -n "${m%?} "
	done
	echo
	sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"
	sudo apt-get update
	echo
	sudo apt-get install ${MISSING}
fi

if [ "a$MANIFEST" == "a" -a $EXACT -eq 1 ]; then
	echo "ERROR: no pinned manifest provided. Please download from http://snapshots.linaro.org/android/~linaro-android-member-ti/panda-linaro/298/. This must be done from a browser that accepts cookies."
	exit 1
fi
if [ $SOURCE_OVERLAY_OPTIONAL -ne 1 ]; then
	if [ "a$SOURCE_OVERLAY" == "a" ]; then
		echo "ERROR: no source overlay provided. Please download from http://snapshots.linaro.org/android/binaries/open/20120716/build-info.tar.bz2. This must be done from a browser that accepts cookies."
		exit 1
	fi
fi
if [ -d ${DIR} ] ; then
	echo "Directory ${DIR} exists. Are you sure you want to use this? (y/n) "
	read CONTINUE
	[ ${CONTINUE} == y ] || exit 1
else
	mkdir ${DIR}
fi
cd ${DIR}

# check for linaro private manifests
PM=`echo git://android.git.linaro.org/platform/manifest.git | grep -i "linaro-private" | wc -l`
if [ ${PM} -gt 0 ] ; then
	if [ "${LINARO_ANDROID_ACCESS_ID}" == "default-bot" ] ; then
		echo "You must specify valid login/access-id to clone from linaro-private manifest repositories."
		echo "Press "y" to continue (which may result in incomplete build or failure), OR"
		echo "Press "n" to enter login details, OR"
		echo "Press "h" for help."
		read NEXT
		if [ ${NEXT} == n ] ; then
			echo "Enter login/access-id:"
			read LINARO_ANDROID_ACCESS_ID
		elif [ ${NEXT} == h ] ; then
			usage
		fi
	fi
fi
export MANIFEST_REPO=`echo git://android.git.linaro.org/platform/manifest.git | sed 's/\/\/.*-bot@/\/\/'"${LINARO_ANDROID_ACCESS_ID}"'@/'`
export MANIFEST_BRANCH=linaro_android_4.2.2
export MANIFEST_FILENAME=default.xml
export REPO_GROUPS="common,pandaboard"
export INCLUDE_PERF=0
export TARGET_PRODUCT=pandaboard
export TARGET_SIMULATOR=false
export BUILD_TINY_ANDROID=
export CPUS=`grep -c processor /proc/cpuinfo`
export SOURCE_OVERLAY="open/20120716/build-info.tar.bz2"
export TOOLCHAIN_TRIPLET=arm-linux-androideabi
export BUILD_FS_IMAGE=1

export TARGET_TOOLS_PREFIX=prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7-linaro/bin/arm-linux-androideabi-

# download the repo tool for android
curl "http://android.git.linaro.org/gitweb?p=tools/repo.git;a=blob_plain;f=repo;hb=refs/heads/stable" > repo
chmod +x repo

# download the android code
echo ./repo init -u ${MANIFEST_REPO} -b ${MANIFEST_BRANCH} -m ${MANIFEST_FILENAME} --repo-url=git://android.git.linaro.org/tools/repo -g common,pandaboard
./repo init -u ${MANIFEST_REPO} -b ${MANIFEST_BRANCH} -m ${MANIFEST_FILENAME} --repo-url=git://android.git.linaro.org/tools/repo -g common,pandaboard
if [ ${EXACT} -eq 1 ] ; then
	rm .repo/manifest.xml
	cp $MANIFEST .repo/manifest.xml
fi
# check for linaro private git repositories
PRI=`grep -i "linaro-private" .repo/manifests/${MANIFEST_FILENAME} | wc -l`
if [ ${PRI} -gt 0 ] ; then
	if [ "${LINARO_ANDROID_ACCESS_ID}" == "default-bot" ] ; then
		echo "You must specify valid login/access-id to clone from linaro-private git repositories."
		echo "Press "y" to continue (which may result in incomplete build), OR"
		echo "Press "n" to enter login details, OR"
		echo "Press "h" for help."
		read NEXT
		if [ ${NEXT} == n ] ; then
			echo "Enter login/access-id:"
			read LINARO_ANDROID_ACCESS_ID
		elif [ ${NEXT} == h ] ; then
			usage
		fi
	fi
	sed -i 's/\/\/.*-bot@/\/\/'"${LINARO_ANDROID_ACCESS_ID}"'@/' .repo/manifests/${MANIFEST_FILENAME}
fi
./repo sync


if [ $SOURCE_OVERLAY_OPTIONAL -ne 1 ]; then
	# extract the vendor's source overlay
	tar -x -a -f "$SOURCE_OVERLAY" -C .
fi

# build the code
. build/envsetup.sh
make -j${CPUS} boottarball systemtarball userdatatarball
