#!/bin/sh

if [ $# -eq 0 ] ; then
	echo "Usage: $0 path-to-pkg-file [path-to-dmg-output-file]" 1>&2
	exit 1
fi

shtimer=''
for f in /usr/bin/shtimer /usr/local/bin/shtimer
do
	if [ -x "$f" ] ; then shtimer="$f" ; break ; fi
done
if [ "$shtimer" != "" ] ; then
	t0=`"$shtimer" on`
fi

tmpfile="${TMPDIR-/tmp}/pkg_to_dmg.$$"
rm -f "$tmpfile"
cat /dev/null > "$tmpfile"
if [ ! -f "$tmpfile" ] ; then
	echo "Could not create $tmpfile." 1>&2
	exit 1
fi

pkg="$1"
pkgname=`echo "$pkg" | sed 's-^.*/--;'`
volname=`echo "$pkg" | sed 's/\.pkg$//;s-^.*/--;'`
if [ "$#" -gt 1 ] ; then
	dmg="$2"
else
	dmg=`echo "$pkg" | sed 's/\.pkg$/.dmg/;'`
fi

rm -f "$dmg"
if [ -f "$dmg" ] ; then
	echo "Could not remove existing $dmg." 1>&2
	exit 1
fi

pkgsize=`du -sk "$pkg" | cut -f1`
echo "Package size: $pkgsize"
dmgsize=`expr 1024 - '(' $pkgsize '%' 1024 ')' + $pkgsize`
if [ "$dmgsize" -lt 5120 ] ; then
	# Minimum HFS size is 4 MB, but we compress it later anyway.
	dmgsize=5120
fi
echo "Dmg size: $dmgsize"

echo ''
echo "Creating uncompressed disk image..."
echo hdiutil create -size "${dmgsize}k" -fs HFS+ -volname "$volname" "$dmg"
hdiutil create -size "${dmgsize}k" -fs HFS+ -volname "$volname" "$dmg"
if [ ! -f "$dmg" ] ; then
	echo "Could not create $dmg." 1>&2
	exit 1
fi

echo ''
echo "Mounting uncompressed disk image..."
echo hdid "$dmg"
hdid "$dmg" > "$tmpfile" 2>&1

vol=`sed -n '/\/Volumes/{s-\ *$--;s-^.*/Volumes/-/Volumes/-;p;q;};' "$tmpfile"`
disk=`sed -n '/Apple_HFS/{s-\ .*$--;s-/dev/--;p;q;};' "$tmpfile"`
rm -f "$tmpfile"

if [ ! -d "$vol" ] ; then
	echo "Failed to mount volume \"$vol\"."
	exit 1
fi

echo ''
echo "Copying files..."
echo ditto -V -rsrcFork "$pkg" "$vol/$pkgname"
ditto -V -rsrcFork "$pkg" "$vol/$pkgname"
if [ $? -ne 0 ] ; then
	echo "Ditto failed?" 1>&2
	exit 1
fi

echo ''
echo "Unmounting uncompressed disk image..."
echo hdiutil detach "$disk"
hdiutil detach "$disk"

mv "$dmg" "$dmg.0"
if [ $? -ne 0 ] ; then
	echo "Rename $dmg to $dmg.0 failed." 1>&2
	exit 1
fi

echo ''
echo "Compressing disk image..."
hdiutil convert -format UDZO -o "$dmg" "$dmg.0"
if [ -f "$dmg" ] ; then
	/bin/rm "$dmg.0"
fi

echo ''
/bin/ls -l "$dmg"
if [ "$shtimer" != "" ] ; then
	"$shtimer" off "$t0" 'Disk image created.  Elapsed Time = '
else
	echo "Disk image created."
fi
exit 0


syntax highlighted by Code2HTML, v. 0.9.1