# Copyright (C)2009-2010 D. R. Commander
# Copyright (C)2009 Sun Microsystems, Inc.
#
# This library is free software and may be redistributed and/or modified under
# the terms of the wxWindows Library License, Version 3.1 or (at your option)
# any later version.  The full license is in the LICENSE.txt file included
# with this distribution.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# wxWindows Library License for more details.

#!/bin/sh

error()
{
	echo $1
	exit -1
}

if [ ! "`id -u`" = "0" ]; then
	error "This command must be run as root"
fi

PKGNAME={__APPNAME}
MACPKGNAME=com.$PKGNAME.$PKGNAME
RCPT=/Library/Receipts/$PKGNAME.pkg

LSBOM=
if [ -d $RCPT ]; then
	LSBOM='lsbom -s -f -l '$RCPT'/Contents/Archive.bom'
else
	LSBOM='pkgutil --files '$MACPKGNAME
fi

echo Removing files ...
$LSBOM >/dev/null || error "Could not list package contents"
RETCODE=0
PWD=`pwd`
cd /
$LSBOM | while read line; do
	if [ ! -d "$line" ]; then rm "$line" 2>&1 || RETCODE=-1; fi
done
cd $PWD

echo Removing directories ...
rmdir /opt/$PKGNAME/bin 2>&1 || RETCODE=-1
if [ -d /opt/$PKGNAME/lib ]; then
	rmdir /opt/$PKGNAME/lib 2>&1 || RETCODE=-1
fi
if [ -d /opt/$PKGNAME/include ]; then
	rmdir /opt/$PKGNAME/include 2>&1 || RETCODE=-1
fi
rmdir /opt/$PKGNAME 2>&1 || RETCODE=-1
rmdir /Library/Documentation/$PKGNAME 2>&1 || RETCODE=-1

if [ -d $RCPT ]; then
	echo Removing package receipt $RCPT ...
	rm -r $RCPT 2>&1 || RETCODE=-1
else
	echo Forgetting package $MACPKGNAME
	pkgutil --forget $MACPKGNAME
fi

exit $RETCODE
