#!/bin/sh

# Let's expose problems:
set -e

BRISTUFF_CONFIRM=${BRISTUFF_CONFIRM:-yes}

BRISTUFF_ZAP_MODS="${BRISTUFF_ZAP_MODS:-cwain qozap zaphfc ztgsm}"

BRISTUFF_TARGETS="${BRISTUFF_TARGETS:-zaptel libpri libgsmat asterisk addons}"

BRISTUFF_CLEAN="${BRISTUFF_CLEAN:-yes}"

BRISTUFF_ILBC="${BRISTUFF_ILBC:-no}"

usage() {
	echo "$0: Build/install Asterisk&Co. from source"
	echo ""
	echo "Usage: $0 [options]"
	echo ""
	echo "Options:"
	echo "  -c          Don't clean before rebuilding."
	echo "  -d DESTDIR  install under DESTDIR (absolute path)"
	echo "  -i          Don't ask for confirmation (Duh)"
	echo "  -l          Download the iLBC codec"
	echo "  -m MODULES  extra modules to build. (default: all)"
	echo "  -t TARGETS  Change the default build targets (default: all)"
	echo "  -h          Just this screen"
	echo ""
}



while getopts 'cd:hilm:t:' arg; do
	case "$arg" in
		c) BRISTUFF_CLEAN='no';;
		d) BRISTUFF_DESTDIR="$OPTARG";;
		h) usage; exit 0;;
		i) BRISTUFF_CONFIRM='no';;
		l) BRISTUFF_ILBC="yes";;
		m) BRISTUFF_ZAP_MODS="$OPTARG";;
		t) BRISTUFF_TARGETS="$OPTARG";;
		?) usage; exit 1 ;;
	esac
done

# A hook to disable running 'make clean' in case the user asks for that.
run_clean() {
	if [ "$BRISTUFF_CLEAN" = 'yes' ]; then "$@"; fi
}

wait_user() {
	if [ "$BRISTUFF_CONFIRM" != 'yes' ]; then return; fi
	echo "****************************************************"
	echo "$*"
	echo "Press <Enter> to continue, or <CTRL> + <C> to abort."
	echo "****************************************************"
	read ignored_arg
}

if [ "$KVERS" != '' ]; then
	BRISTUFF_ZAP_PARAMS="$BRISTUFF_ZAP_PARAMS KVERS=$KVERS"
fi

if [ "$KSRC" != '' ]; then
	BRISTUFF_ZAP_PARAMS="$BRISTUFF_ZAP_PARAMS KSRC=$KSRC"
fi

if [ "$BRISTUFF_DESTDIR" != '' ]; then
	DESTDIR_PARAM="DESTDIR=$DESTDIR DYNFS=yes"
fi
build_zaptel() {
	if [ ! -d zaptel ]; then return; fi
	cd zaptel
	run_clean make MODULES_EXTRA="$BRISTUFF_ZAP_MODS" $BRISTUFF_ZAP_PARAMS clean
	make MODULES_EXTRA="$BRISTUFF_ZAP_MODS" $BRISTUFF_ZAP_PARAMS all
	make MODULES_EXTRA="$BRISTUFF_ZAP_MODS" $BRISTUFF_ZAP_PARAMS install $DESTDIR_PARAM
	make -C xpp/utils 
	make -C xpp/utils $DESTDIR_PARAM install
	cd ..
	wait_user "ZAPTEL installed"
}

build_libpri() {
	if [ ! -d libpri ]; then return; fi
	cd libpri
	run_clean make clean
	make all
	make install $DESTDIR_PARAM
	cd ..
	wait_user "LIBPRI installed."
}

build_libgsmat() {
	if [ ! -d libgsmat ]; then return; fi
	cd libgsmat
	run_clean make clean
	make all
	make install $DESTDIR_PARAM
	cd ..
	wait_user "LIBGSMat installed"
}

build_asterisk() {
	if [ ! -d asterisk ]; then return; fi
	cd asterisk
	# FIXME: this belongs in download.sh
	if [ "$BRISTUFF_ILBC" = 'yes' ]; then
		./contrib/scripts/get_ilbc_source.sh
	fi
	run_clean make clean 
	make all
	make install
	wait_user "Asterisk installed"
	cd ..
}

build_addons() {
	if [ ! -d asterisk-addons ]; then return; fi
	cd asterisk-addons
	run_clean make clean 
	make all
	make install
	cd ..
}

for target in $BRISTUFF_TARGETS; do
	build_$target
done

echo "****************************************************"
echo " Everything installed."
echo "           BRIstuff Installation finished."
echo "****************************************************"
