#!/bin/sh

# check parameters
if [ "x$2" = x -o ! -d "$1" -o ! -d "$2" ]; then
  echo "Syntax : $0 orig-src-dir modified-src-dir [patch-dir]"
  exit 1
fi

# get parameters
ORIG_DIR=$1
MOD_DIR=$2
if [ ".$3" = "." -o ! -d "$3" ]; then
  PATCH_DIR=`pwd`
else
  PATCH_DIR=$3
fi
PATCH_NAME=`whoami`-`date +%y%m%d`.patch
INIT_DIR=`pwd`

# print startup message
echo "Creating patch :"
echo "  original dir =  $ORIG_DIR"
echo "  modified dir =  $MOD_DIR"
echo "  patch dir =     $PATCH_DIR"
echo "  patch name =    $PATCH_NAME"
echo "The patch will be gzipped and uuencoded."
echo

cd $INIT_DIR

# create diff
echo -n "Creating diff ..."
# the list of excluded files.
rm -f excl.tmp
cat >excl.tmp <<\EOF
*.orig
*.rej
*~
*.bak
*.swp
#*
*.aux
*.dvi
*.log
*.tex
Makefile
*.o
config.h
libintl.h
POTFILES
po2tbl.sed
stamp-cat-id
lyx.pot
reLyX
*.gmo
cat-id-tbl.c
srcdoc
lyx
*.cache
*.status
TAGS
LaTeXConfig.lyx
textclass.lst
packages.lst
lyxrc.defaults
reLyX/reLyX
*CVS*
.gdb_history
core
libintl.a
EOF

# A bit of a hack, but I do not know what to do about that...
rm -f $ORIG_DIR/po/Makefile.in $MOD_DIR/po/Makefile.in

diff -p -N -r -U 4 -X excl.tmp $ORIG_DIR $MOD_DIR \
  > $PATCH_DIR/$PATCH_NAME

echo " done"
rm -f excl.tmp

# compress it
echo -n "Compressing the patch ..."
gzip -9 $PATCH_DIR/$PATCH_NAME
if [ $? -ne 0 ]; then
  echo " an error occured"
  exit 3
fi
echo " done"

# uuencode it
echo -n "Uuencoding compressed version ..."
cat $PATCH_DIR/$PATCH_NAME.gz \
  | uuencode $PATCH_NAME.gz > $PATCH_DIR/$PATCH_NAME.uue
if [ $? -ne 0 ]; then
  echo " an error occured"
  exit 4
fi
echo " done"

# print cleanup message
echo
echo "Patch has been created."
