#! /bin/bash
# generates script doing what "make uninstall" would do
# first parameter: the name of the uninstallation script, defaulting to uninstall.sh
# second, optional parameter: the command to execute to uninstall, like "rpm -e armagetronad".

#set -x

UNINSTALL=$1
test x$UNINSTALL = x && UNINSTALL=uninstall

EXTERNAL_CMD=$2

test -z "`echo $UNINSTALL | grep '^/'`" && UNINSTALL=`pwd`/$UNINSTALL
echo -n "Generating uninstallation script" $UNINSTALL...

if test "$EXTERNAL_CMD" != "" && test "$EXTERNAL_CMD" != "yes"; then
	{
		echo '#! /bin/sh'
		echo "$EXTERNAL_CMD"
	} > $UNINSTALL
else

# start $UNINSTALL
cat > ${UNINSTALL} <<EOF
#! /bin/sh
#uninstalls ${PROGTITLE}

# set default destdir to where the game was installed to
test -z "\${DESTDIR}" && DESTDIR=${ROOTDIR}
export DESTDIR

# uninstall system files
\${DESTDIR}${SCRIPTDIR}/sysinstall uninstall ${PREFIX} || exit 1

# automaticall generated from "make uninstall"
EOF

# generate wrapper for "rm"
TMPBIN=${DESTDIR}${PREFIX}/armatempbin
test -d ${TMPBIN} || mkdir ${TMPBIN} || exit 1
RM=${TMPBIN}/rm

echo "" > ${UNINSTALL}.files

cat > ${RM} <<EOF
#! /bin/sh
echo rm "\$*" | sed -e s/DESTDIR_UNINSTALL/\\\${DESTDIR}/g >> ${UNINSTALL}.files
EOF

chmod 755 ${RM} || exit 1

# invoke "make uninstall" with path bend to the rm wrapper
OLDPATH=$PATH
PATH=${TMPBIN}:$OLDPATH
export PATH
AA_FAKE_UNINSTALL="YES" DESTDIR=DESTDIR_UNINSTALL ${MAKE} uninstall > /dev/null || exit 1

# remove the wrapper
PATH=$OLDPATH
rm -rf ${TMPBIN} || exit -1
rm -f ${RM}

fi

# generate directories to uninstall from file list
sed -e "s,rm.*\\\$,rmdir --ignore-fail-on-non-empty \$," < ${UNINSTALL}.files > ${UNINSTALL}.dir0

echo "" > ${UNINSTALL}.dir

# add all parent directories of those that are still game-specific
while test -s ${UNINSTALL}.dir0; do
  sed -e "s,/[^/]*\$,," < ${UNINSTALL}.dir0 | grep ${PROGNAME} > ${UNINSTALL}.dir1
  cat ${UNINSTALL}.dir1 >> ${UNINSTALL}.dir
  mv ${UNINSTALL}.dir1 ${UNINSTALL}.dir0
done

# compose uninstall script from file and directory list
cat ${UNINSTALL}.files >> ${UNINSTALL}
sort ${UNINSTALL}.dir --reverse --unique >> ${UNINSTALL}

# clean up
rm -f ${UNINSTALL}.dir ${UNINSTALL}.dir0 ${UNINSTALL}.files

chmod 755 ${UNINSTALL}

echo "done."
