#!/bin/sh

# checks 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

# gets 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`

# prints 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

# cleaning directories
#echo -d "Cleaning directories... "
#cd $ORIG_DIR
#make real-clean > /dev/null
#if [ $? -ne 0 ]; then
#  echo " an error occured"
#  exit 2
#fi
#cd $INIT_DIR; cd $MOD_DIR
#make real-clean > /dev/null
#if [ $? -ne 0 ]; then
#  echo " an error occured"
#  exit 2
#fi
cd $INIT_DIR

# creates diff
echo -n "Creating diff ..."
diff -x "lyx" -x "*.orig" -x "*.rej" -x \
"*.aux" -x "*.dvi" -x "*.log" -x "*.tex" -x "*~" -x \
"*.bak" -x "Makefile" -x "Makefile.bak" -x "*.o" -x \
"*.cache" -x "*.status" -x "#*" -x "TAGS" -x "config.h" \
-p -N -r -U 4 $ORIG_DIR $MOD_DIR > $PATCH_DIR/$PATCH_NAME
echo " done"

# 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"

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