#!/data/data/com.termux/files/usr/bin/sh
#
# valac wrapper to avoid glib dependency
#
# author: pancake <pancake@nopcode.org>
#
VERSION=0.2
MWD=`dirname ${0}`
if [ ! -d "${MWD}/include" ]; then
	MWD="${MWD}/../"
fi
POSIXVALADIR=${MWD}/include/posixvala
MAIN=a.out
HAS_C=0
HAS_LC=0
DO_EMCC=0
SAVETEMPS=0
[ -z "${VALAC}" ] && VALAC=valac
[ -z "${CC}" ] && CC=gcc
if [ ! -d "${POSIXVALADIR}" ]; then
	POSIXVALADIR=`pkg-config --variable=includedir posixvala`/posixvala
fi
CFILES=""
VALA_ARGS="" #--save-temps"
CFLAGS="${CFLAGS} -Wno-warn-absolute-paths"
help() {
	echo "Usage: posixvalac [-cChkv] [valaflags] [(vala|genie)files ...]"
	exit 0
}
warn() {
	printf "\033[33mWarning: $@\033[0m\n"
}
HASPKG=0
for a in $@ ; do
	if [ 0 = "${DO_EMCC}" ]; then
		if [ "${HASPKG}" = 1 ]; then
			shift
			pkg-config --exists "$a"
			if [ $? = 0 ]; then
				CFLAGS="$CFLAGS `pkg-config --cflags $a`"
				LDFLAGS="$CFLAGS `pkg-config --libs $a`"
			else
				warn "Cannot find pkg-config file for $a"
			fi
			HASPKG=0
		fi
	fi
	case "$a" in
	-h|--help) help ; ;;
	-v|--version) echo $VERSION ; exit 0 ; ;;
	-k|--save-temps) SAVETEMPS=1 ; ;;
	--emcc) DO_EMCC=1 ; shift ; continue ; ;;
	--pkg) HASPKG=1 ; ;;
	esac
	if [ 1 = "${DO_EMCC}" ]; then
		#VALA_ARGS="--pkg emscripten"
		CC=emcc
		export CC
	fi
	[ "$a" = "-c" ] && HAS_LC=1 && continue
	VALA_ARGS="${VALA_ARGS} $a"
	[ "$a" = "-C" ] && HAS_C=1
	EXT=`echo $a | cut -d . -f 2`
	case "${EXT}" in
	vala|gs)
		FILE=`echo $a|sed -e s,.${EXT},.c,`
		CFILES="${CFILES} ${FILE}"
		if [ -n "`grep -e main -e ^init $a`" ]; then
			MAIN=`echo $a | sed -e s,.${EXT},,`
			if [ "${DO_EMCC}" = 1 ]; then
				MAIN="${MAIN}.js"
			fi
		fi
	esac
done
if [ -n "${CFILES}" -a "${MAIN}" = a.out ]; then
	warn "unable to find main, output is a.out"
fi
${VALAC} -C ${VALA_ARGS}
R=$?; 
if [ $R = 0 ]; then
	if [ "${HAS_C}" = 0 ]; then
		CFLAGS="${CFLAGS} -Wall -I${POSIXVALADIR} -O3"
		if [ "${HAS_LC}" = 0 ]; then
			${CC} -o ${MAIN} ${CFLAGS} ${CFILES}
		else
			${CC} -c ${CFLAGS} ${CFILES}
		fi
		R=$?;
		if [ $R = 0 ]; then
			[ "${SAVETEMPS}" = 0 ] && rm -f ${CFILES}
			if [ 1 = "${DO_EMCC}" ]; then
				# Fix EM_ASM macro
				mv ${MAIN} ${MAIN}.tmp
				sed -e 's_gify(code);_gify(code).replace(/" "/g,"").replace(/\\\\n/g,"").replace(/\\\\t/g,"").replace(/\\\\"/g,"'"'"'");_g' < ${MAIN}.tmp > ${MAIN}
				rm -f ${MAIN}.tmp
			
			fi
		fi
	fi
fi
exit $R
