#!/bin/bash
# Suggested setup to use the script:
#  (on the root of the project)
#  $ NOCONFIGURE=1 ./autogen.sh --with-freetype --with-glib --with-gobject --with-cairo
#  $ mkdir build && cd build && ../configure && make -j5 && cd ..
#  $ src/dev-run.sh [FONT-FILE] [TEXT]
#
# Or, using cmake:
#  $ cmake -DHB_CHECK=ON -Bbuild -H. -GNinja && ninja -Cbuild
#  $ src/dev-run.sh [FONT-FILE] [TEXT]
#
# If you want to open the result rendering using a GUI app,
#  $ src/dev-run.sh open [FONT-FILE] [TEXT]
#
# And if you are using iTerm2, you can use the script like this,
#  $ src/dev-run.sh img [FONT-FILE] [TEXT]
#

[ $# = 0 ] && echo Usage: "src/dev-run.sh [FONT-FILE] [TEXT]" && exit
command -v entr >/dev/null 2>&1 || { echo >&2 "This script needs `entr` be installed"; exit 1; }


GDB=gdb
# if gdb doesn't exist, hopefully lldb exist
command -v $GDB >/dev/null 2>&1 || export GDB="lldb"


[ $1 = "open" ] && openimg=1 && shift
OPEN=xdg-open
[ "$(uname)" == "Darwin" ] && OPEN=open


[ $1 = "img" ] && img=1 && shift
# http://iterm2.com/documentation-images.html
osc="\033]"
if [[ $TERM == screen* ]]; then osc="\033Ptmux;\033\033]"; fi
st="\a"
if [[ $TERM == screen* ]]; then st="\a"; fi


tmp=tmp.png
[ -f 'build/build.ninja' ] && CMAKENINJA=TRUE
# or "fswatch -0 . -e build/ -e .git"
find src/ | entr printf '\0' | while read -d ""; do
	clear
	echo '===================================================='
	if [[ $CMAKENINJA ]]; then
		ninja -Cbuild hb-shape hb-view && {
			build/hb-shape $@
			if [ $openimg ]; then
				build/hb-view $@ -O png -o $tmp
				$OPEN $tmp
			elif [ $img ]; then
				build/hb-view $@ -O png -o $tmp
				printf "\n${osc}1337;File=;inline=1:`cat $tmp | base64`${st}\n"
			else
				build/hb-view $@
			fi
		}
	else
		make -Cbuild/src -j5 -s lib && {
			build/util/hb-shape $@
			if [ $openimg ]; then
				build/util/hb-view $@ -O png -o $tmp
				$OPEN $tmp
			elif [ $img ]; then
				build/util/hb-view $@ -O png -o $tmp
				printf "\n${osc}1337;File=;inline=1:`cat $tmp | base64`${st}\n"
			else
				build/util/hb-view $@
			fi
		}
	fi
done

read -n 1 -p "[C]heck, [D]ebug, [R]estart, [Q]uit? " answer
case "$answer" in
c|C )
	if [[ $CMAKENINJA ]]; then
		CTEST_OUTPUT_ON_FAILURE=1 CTEST_PARALLEL_LEVEL=5 ninja -Cbuild test
	else
		make -Cbuild -j5 check && .ci/fail.sh
	fi
;;
d|D )
	if [[ $CMAKENINJA ]]; then
		echo "Not supported on cmake builds yet"
	else
		build/libtool --mode=execute $GDB -- build/util/hb-shape $@
	fi
;;
r|R )
	src/dev-run.sh $@
;;
* )
	exit
;;
esac
