#!/bin/sh
diff_recursive(){
local a="$1"
local b="$2"
local f1
if [ -d "$a" ]; then
if [ -d "$b" ]; then
ls "$a" | while read f1; do
if ! [ -e "$b/$f1" ]; then
echo "there is $a/$f1 but no $b/$f1"
else
diff_recursive "$a/$f1" "$b/$f1"
fi
done
else
echo "$a is a directory but $b is not"
fi
elif [ -L "$a" ]; then
if ! [ -L "$b" ]; then
echo "$a is a link buf $b is not"
fi
elif [ -f "$a" ]; then
if [ -f "$b" ]; then
if [ "$(file -b "$a"|head -c 3)" = ELF -a \
"$(file -b "$b"|head -c 3)" = ELF -o \
"$(file -b "$a")" = "current ar archive" -a \
"$(file -b "$b")" = "current ar archive" ]
then
if ! objdump -d "$a" | tail -n +3 | ( exec 3<&0; (objdump -d "$b" | tail -n +3) | cmp -s /dev/fd/0 /dev/fd/4 4<&3 ) ; then
echo "objdiff in $a and $b"
fi
else
if ! cmp -s "$a" "$b"; then
echo "diff in $a and $b"
fi
fi
else
echo "$a is a normal file but $b is not"
fi
else
echo "$a is not supported type"
fi
}
diff_recursive $1 $2