#!/bin/sh

NAME=$(basename $0)
MONO_API_INFO1=/usr/lib/mono/1.0/mono-api-info.exe
MONO_API_INFO2=/usr/lib/mono/2.0/mono-api-info.exe
MONO_API_DIFF=/usr/lib/mono/1.0/mono-api-diff.exe

API_OLD=`tempfile`
API_NEW=`tempfile`
API_DIFF=`tempfile`

if [ ! -e "$1" -a ! -e "$2" ]
then
	echo "usage: $NAME [-2] old.dll new.dll"
	exit 1
fi

if [ "$1" = "-2" ]; then
	if [ ! -x $MONO_API_INFO2 ]; then
		echo "Error: $MONO_API_INFO2 does not exist, you need to install the mono-gmcs package"
		exit 1
	fi
	MONO_API_INFO=$MONO_API_INFO2
	shift
else
	MONO_API_INFO=$MONO_API_INFO1
fi

${MONO_API_INFO} "$1" > ${API_OLD}
${MONO_API_INFO} "$2" > ${API_NEW}
${MONO_API_DIFF} ${API_OLD} ${API_NEW} > ${API_DIFF}

name=`head -n3 ${API_DIFF} | tail -n1 | sed 's;\ ;\n;g' | grep ^name | cut -d\= -f2 | sed 's;\";;g'`
missing_total=`head -n3 ${API_DIFF} | tail -n1 | sed 's;\ ;\n;g' | grep ^missing_total | cut -d\= -f2 | sed 's;\";;g'`
extra_total=`head -n3 ${API_DIFF} | tail -n1 | sed 's;\ ;\n;g' | grep ^extra_total | cut -d\= -f2 | sed 's;\";;g'`

printf "CLI API Check\n"
printf "Assembly Name:\t\t%s\n" $name
printf "Missing Interfaces:\t%d\n" $missing_total
printf "Additional Interfaces:\t%d\n\n" $extra_total

if [ $missing_total ]
then
	if [ $missing_total -gt 0 ]
	then
		printf "The two assemblies you compared are NOT API compatible!\n"
		printf "You must use a new package name!\n\n"
	fi
fi

if [ $extra_total ]
then
	if [ $extra_total -gt 0 ]
	then
		printf "The new assembly has additional interfaces. You must raise\n"
		printf "the minimal version in clilibs!\n"
	fi
fi

rm -f ${API_OLD} ${API_NEW} ${API_DIFF}
