#!/bin/bash

BRANCH=$1
if [ -z $BRANCH ]; then
	BRANCH="master"
fi

CONFIG_OPTIONS=$2
if [ -z "$CONFIG_OPTIONS" ]; then
	CONFIG_OPTIONS="--enable-optimize"
fi

run ()
{
	COMMAND=$1
	# check for empty commands
	if test -z "$COMMAND" ; then
		echo -e "\033[1;5;31mERROR\033[0m No command specified!"
		return 1
	fi

	shift;
	OPTIONS="$@"
	# print a message
	if test -n "$OPTIONS" ; then
		echo -ne "\033[1m$COMMAND $OPTIONS\033[0m ... "
	else
		echo -ne "\033[1m$COMMAND\033[0m ... "
	fi

	# run or die
	$COMMAND $OPTIONS ; RESULT=$?
	if test $RESULT -ne 0 ; then
		echo -e "\033[1;5;31mERROR\033[0m $COMMAND failed. (exit code = $RESULT)"
		exit 1
	fi

	echo -e "\033[0;32myes\033[0m"
	return 0
}


echo "*** Building SpiderMonkey... "

USERDIR=$PWD            # Save current dir and return to it later

run git submodule update --init --remote deps/gecko-dev
run cd deps/gecko-dev
#run git fetch --depth=1 origin $BRANCH
run git checkout $BRANCH

run cd js/src
run autoconf2.13
mkdir build_OPT.OBJ
ALREADY_EXISTS=$?
run cd build_OPT.OBJ

# If configure is rerun make will rebuild the entire engine every time
# this script is run, which is every time charybdis gets ./configure. This
# may actually be the best behavior in production but right now this test
# prevents rebuilds
if test $ALREADY_EXISTS -eq 0; then
	run ../configure $CONFIG_OPTIONS JS_STANDALONE=1
fi

#run ../configure --enable-debug
# run ../configure --disable-shared-js --enable-debug # --enable-replace-malloc

NJOBS=`nproc`
run make -j$NJOBS

run cd $USERDIR         # Return to user's original directory