# Copyright (C)2009-2011 D. R. Commander.  All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# - Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
# - Neither the name of the libjpeg-turbo Project nor the names of its
#   contributors may be used to endorse or promote products derived from this
#   software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

#!/bin/sh

if [ ! "`id -u`" = "0" ]; then
	echo "ERROR: This script must be executed as root"
	exit -1
fi

PACKAGE=@PACKAGE_NAME@
MACPACKAGE=com.$PACKAGE.$PACKAGE
RECEIPT=/Library/Receipts/$PACKAGE.pkg

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

mylsbom()
{
	$LSBOM || (echo "ERROR: Could not list package contents"; exit -1)
}

echo Removing package files ...
EXITSTATUS=0
pushd /
mylsbom | while read file; do
	if [ ! -d "$file" ]; then rm "$file" 2>&1 || EXITSTATUS=-1; fi
done
popd

echo Removing package directories ...
if [ -d /opt/$PACKAGE/bin ]; then
	rmdir /opt/$PACKAGE/bin 2>&1 || EXITSTATUS=-1
fi
if [ -d /opt/$PACKAGE/lib ]; then
	rmdir /opt/$PACKAGE/lib 2>&1 || EXITSTATUS=-1
fi
if [ -d /opt/$PACKAGE/include ]; then
	rmdir /opt/$PACKAGE/include 2>&1 || EXITSTATUS=-1
fi
rm /opt/$PACKAGE/lib32 2>&1 || EXITSTATUS=-1
rm /opt/$PACKAGE/lib64 2>&1 || EXITSTATUS=-1
if [ -d /opt/$PACKAGE/man/man1 ]; then
	rmdir /opt/$PACKAGE/man/man1 2>&1 || EXITSTATUS=-1
fi
if [ -d /opt/$PACKAGE/man ]; then
	rmdir /opt/$PACKAGE/man 2>&1 || EXITSTATUS=-1
fi
if [ -d /opt/$PACKAGE/classes ]; then
	rmdir /opt/$PACKAGE/classes 2>&1 || EXITSTATUS=-1
fi
rmdir /opt/$PACKAGE 2>&1 || EXITSTATUS=-1
rmdir /Library/Documentation/$PACKAGE 2>&1 || EXITSTATUS=-1

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

exit $EXITSTATUS
