#!/bin/sh

[ "x${SED}" = "x" ] && SED=sed
[ "x${GREP}" = "x" ] && GREP=grep
[ "x${REALPATH}" = "x" ] && REALPATH=realpath
[ "x${DIRNAME}" = "x" ] && DIRNAME=dirname
[ "x${BASENAME}" = "x" ] && BASENAME=basename
[ "x${GREP}" = "x" ] && GREP=grep
if [ "x${TARGET_NAME}" = "x" ] ; then
	if [ ! -f build.mak ] ; then
		exit 0;
	fi
	TARGET_NAME=$(${SED} -n -r -e "s/export\s+TARGET_NAME\s*:=\s*(.*)/\1/gp" build.mak)
fi

getlibname() {
	dep="$1"
	libdir=$(${DIRNAME} $(${DIRNAME} "${dep}"))/lib
	depname=$(${BASENAME} "${dep}")
	depprefix="${depname%%-${TARGET_NAME}.depend}"
	case ${depprefix} in
		.pjlib)
			libfile=libpj
			;;
		.*)
			libfile=lib${depprefix#.*}
			;;
	esac
	echo "${libdir}/${libfile}-${TARGET_NAME}.a"
}

gendepfile() {
	pjdf="$1"
	astdf="${pjdf%*.depend}.astdep"
	dirname=$(${DIRNAME} "${astdf}")
	lines=$(grep -E -o -- "[.][.]/[^ ]+" "${pjdf}" | sort -u | wc -l)
	libname=$(getlibname "${pjdf}")
	backslash="\\"
	echo "${libname}: ${backslash}" >"${astdf}"
	for dep in $(grep -E -o -- "[.][.]/[^ ]+" "${pjdf}" | sort -u) ; do
		( echo "${dep}" | grep -Eq "(test|/bin/)" ; ) && continue
		newdep=$( cd "${dirname}" ; ${REALPATH} -L --relative-to=../../ "${dep}" ; )
		lines=$(( ${lines} - 1 ))
		if [ ${lines} -eq 0 ] ; then
			echo "source/${newdep}" >>"${astdf}"
		else
			echo "source/${newdep} ${backslash}" >>"${astdf}"
		fi
	done
	echo >>"${astdf}"
}

getpjdepname () {
	lib="$1"
	builddir=$(${DIRNAME} $(${DIRNAME} "${lib}"))/build
	libname=$(${BASENAME} "${lib}")
	libprefix="${libname%%-${TARGET_NAME}.a}"
	nolib=$(echo "${libprefix}" | ${SED} -r -e "s@^lib@@g")
	case ${nolib} in
		pj)
			depfile=.pjlib
			;;
		resample)
			depfile=resample/.libresample
			;;
		*)
			depfile=.${nolib}
			;;
	esac
	echo "${builddir}/${depfile}-${TARGET_NAME}.depend"
}

case $1 in
	getpjdepname)
		shift
		for lib in $@ ; do getpjdepname "${lib}" ; done
		;;
	gendepfile)
		shift
		for dep in $@ ; do gendepfile "${dep}" ; done
		;;
	getlibname)
		shift
		for dep in $@ ; do getlibname "${dep}" ; done
		;;
	*)
		echo Invalid command
		exit 1
		;;
esac
