#!/bin/sh

verbose=0
quiet=0
missing=1

while [ $# -gt 0 ] ; do
	case $1 in
		-m)	missing=0
			shift
			;;
		-q)	quiet=1
			shift
			;;
		-v)	verbose=1
			shift
			;;
		*)	break
			;;
	esac
done

[ $# = 2 ] || {
	echo	"usage: ddiff [-q] [-v] dir1 dir2"
	exit	1
}

dir1=$1
dir2=$2

[ -d $dir1 ] || {
	echo	"ddiff: $dir1 is not a directory"
	exit	1
}
[ -d $dir2 ] || {
	echo	"ddiff: $dir2 is not a directory"
	exit	1
}

for file in `((cd $dir1 ; find . \( -name '*.wiz' -o -name '*.[ch]*' -o -name '*.sh' -o -name '*.p[lmy]' -o -name 'rekallui.*' -o -name 'SCon*' \) -type f)  ;
	      (cd $dir2 ; find . \( -name '*.wiz' -o -name '*.[ch]*' -o -name '*.sh' -o -name '*.p[lmy]' -o -name 'rekallui.*' -o -name 'SCon*' \) -type f)) |
	     grep -v -e moc.cpp -e build/ -e RekallWin | sort | uniq`
do
	file=`echo $file | sed 's/^\.\///'`

	if [ ! -f $dir1/$file ]
	then
		if [ $missing -ne 0 ]
		then
			echo "$dir1/$file: does not exist"
		fi
		continue
		
	fi
	if [ ! -f $dir2/$file ]
	then
		if [ $missing -ne 0 ]
		then
			echo "$dir2/$file: does not exist"
		fi
		continue
	fi

	if diff $dir1/$file $dir2/$file > /tmp/ddiff.$$
	then
		[ $verbose -ne 0 ] && {
			echo "$dir1/$file == $dir2/$file"
		}
	else
		echo	"$dir1/$file != $dir2/$file"
		[ $quiet   -eq 0 ] && {
			cat	/tmp/ddiff.$$
			echo	"-------------------------"
		}
	fi
done

rm -f /tmp/ddiff.$$
