Rework squisher to be more maintainer friendly
diff --git a/tools/squisher b/tools/squisher
index 063b8e0..d06db57 100755
--- a/tools/squisher
+++ b/tools/squisher
@@ -14,108 +14,145 @@
    MD5=md5
 fi
 
-OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-$TARGET_BUILD_VARIANT.$LOGNAME.zip
-if [ ! -f "$OTAPACKAGE" ]; then
-   echo "$OTAPACKAGE doesn't exist!";
-   exit 1
+if [ -z "$OUT" -o ! -d "$OUT" ]; then
+	echo "ERROR: $0 only works with a full build environment. $OUT should exist."
+	exit 1
 fi
 
-XBIN=$OUT/system/xbin
+OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-$TARGET_BUILD_VARIANT.$LOGNAME.zip
+if [ ! -f "$OTAPACKAGE" ]; then
+	echo "$OTAPACKAGE doesn't exist!";
+	exit 1
+fi
+
 OPTICHARGER=$ANDROID_BUILD_TOP/vendor/cyanogen/tools/opticharger
 QUIET=-q
 DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"
-if [ -z "$NO_SQUASHFS" -a `which mksquashfs` = "" ]; then
-	NO_SQUASHFS=true 
-else
-	if mksquashfs -version | grep -q 'version 4'; then :; else
-		echo "mksquashfs must be at least version 4 for this build"
-		exit 1
+
+
+# Some products want a squashfs for xbin for space
+case "$TARGET_PRODUCT" in
+	cyanogen_dream_sapphire) WANT_SQUASHFS=1 ;;
+	*) WANT_SQUASHFS=0 ;;
+esac
+
+if [ "$WANT_SQUASHFS" -eq 1 ]; then
+	fatal=0
+	MKSQUASHFS_VER_REQ=4
+	if type mksquashfs >/dev/null 2>&1; then
+		if mksquashfs -version | grep -q "version $MKSQUASHFS_VER_REQ"; then :; else
+			echo
+			echo "ERROR: mksquashfs must be at least version $MKSQUASHFS_VER_REQ for this build."
+			fatal=1
+		fi
+	else
+		echo
+		echo "ERROR: $TARGET_PRODUCT requires mksquashfs."
+		fatal=1
 	fi
 
+	if [ "$fatal" -ne 0 ]; then
+		echo
+		echo "       Unoptimized package is still available at"
+		echo "         $OTAPACKAGE"
+		exit $fatal
+	fi
 fi
 
-WORK=/tmp/repack
-rm -rf $WORK
-mkdir -p $WORK
+REPACK=$OUT/repack.d
+SYSTEM=$REPACK/ota/system
+printf "Sanitizing environment..."
+rm -rf $REPACK
+mkdir -p $REPACK
+echo
 
-if [ "$TARGET_PRODUCT" = "cyanogen_dream_sapphire" ]
-then
-   # Create the xbin squashfs
-   cp -a $XBIN $WORK/xbin/
-   chmod -R 755 $WORK/xbin/*
-   rm -f $WORK/xbin/su
-   ln -s $WORK/bin/su $WORK/xbin/su
-   mksquashfs $WORK/xbin/* $WORK/xbin.sqf -force-uid 1000 -force-gid 1000
-fi
 
 # Unpack the otapackage and opticharge all apks
-mkdir $WORK/ota
-cd $WORK/ota
+mkdir $REPACK/ota
+(
+cd $REPACK/ota
+printf "Unpacking $OTAPACKAGE..."
 unzip $QUIET $OTAPACKAGE
-cd system/framework
+echo
+cd $REPACK/ota/system/framework
 $OPTICHARGER framework-res.apk
-cd ../app
-for i in *.apk; do
-   $OPTICHARGER $i;
-done
+cd $REPACK/ota/system/app
+for i in *.apk; do $OPTICHARGER $i; done
+)
 
-cd $WORK/ota/system
 
-if [ "$TARGET_PRODUCT" = "cyanogen_dream_sapphire" ]
-then
-   # Relocate su and put xbin.sqf where it belongs
-   rm -f bin/su
-   mv xbin/su bin/su
-   rm -rf xbin/*
-   mv $WORK/xbin.sqf xbin/
+if [ "$WANT_SQUASHFS" -eq 1 ]; then
+	squash_opts="-force-uid 1000 -force-gid 1000 -no-progress -noappend -no-exports -no-recovery"
+
+	# Create the xbin squashfs
+	cp -a $SYSTEM/xbin $REPACK/xbin/
+	rm -f $REPACK/xbin/su
+	chmod -R 555 $REPACK/xbin/*
+	ln -s ../bin/su $REPACK/xbin/su
+
+	# Relocate su and put xbin.sqf where it belongs
+	rm -f $SYSTEM/bin/su
+	mv $SYSTEM/xbin/su $SYSTEM/bin/su
+	rm -rf $SYSTEM/xbin/*
+	mksquashfs $REPACK/xbin/* $SYSTEM/xbin/xbin.sqf $squash_opts
+	chmod 444 $SYSTEM/xbin/xbin.sqf
+
+	# Remove xbin stuff and fix up updater-script
+	sed -i -e's,system/xbin/su,system/bin/su,g' -e'/xbin/d' $REPACK/ota/META-INF/com/google/android/updater-script
 fi
 
+
 # Fix build.prop
-sed -n -e '/ro\.kernel\.android\.checkjni/d' \
-    -e '/ro\.build\.type/s/eng/user/' \
-    -e 'p' \
-    build.prop > build.prop.new
-mv build.prop.new build.prop
+sed -i \
+	-e '/ro\.kernel\.android\.checkjni/d' \
+	-e '/ro\.build\.type/s/eng/user/' \
+	$SYSTEM/build.prop
+
 
 # Delete unnecessary binaries
-for i in $DELETE_BINS; do
-   rm -f bin/$i
-done
+( cd $SYSTEM/bin; echo $DELETE_BINS | xargs rm -f; )
 
 # Delete leftover wireless driver
-rm -rf lib/modules/*/kernel/drivers/net
-
-# Strip modules
-find lib/modules -name "*.ko" -exec arm-eabi-strip --strip-unneeded {} \;
-
-# Find the CM version
-MODVERSION=`sed -ne '/ro\.modversion/s/^.*CyanogenMod-//p' build.prop`
+rm -rf $SYSTEM/lib/modules/*/kernel/drivers/net
 
 # No need for recovery
-cd $WORK/ota
-rm -rf recovery
+rm -rf $REPACK/ota/recovery
 
-# Remove xbin stuff and fix up updater-script
-if [ "$TARGET_PRODUCT" = "cyanogen_dream_sapphire" ]
-then
-   sed -e "s/system\/xbin\/su/system\/bin\/su/g" META-INF/com/google/android/updater-script | grep -v xbin > updater-script.new
-   mv updater-script.new META-INF/com/google/android/updater-script
+# Strip modules
+find $SYSTEM/lib/modules -name "*.ko" -print0 | xargs -0 arm-eabi-strip --strip-unneeded
+
+# Determine what to name the new signed package
+if [ -z "$CYANOGEN_NIGHTLY" ]; then
+	OUTFILE=$OUT/update-squished.zip
+else
+	MODVERSION=`sed -n -e'/ro\.modversion/s/^.*CyanogenMod-//p' $SYSTEM/build.prop`
+	: ${MODVERSION:=nightly}
+	OUTFILE=$OUT/update-cm-$MODVERSION-signed.zip
 fi
 
 # Pack it up and sign
-zip $QUIET -r update.zip .
-echo "Signing package.."
+printf "Zipping package..."
+( cd $REPACK/ota; zip $QUIET -r $REPACK/update.zip . )
+echo
+printf "Signing package..."
 SECURITYDIR=$ANDROID_BUILD_TOP/build/target/product/security
-java -Xmx2048m -jar $ANDROID_BUILD_TOP/out/host/$OUT_TARGET_HOST/framework/signapk.jar -w $SECURITYDIR/testkey.x509.pem $SECURITYDIR/testkey.pk8 update.zip update_signed.zip
+java -Xmx2048m \
+	-jar $ANDROID_BUILD_TOP/out/host/$OUT_TARGET_HOST/framework/signapk.jar \
+	-w $SECURITYDIR/testkey.x509.pem $SECURITYDIR/testkey.pk8 \
+	$REPACK/update.zip $OUTFILE
+echo
+printf "Cleaning up..."
+rm -rf $REPACK
+echo
 
-if [ "$CYANOGEN_NIGHTLY" != "" ]
-then
-    OUTFILE=$OUT/update-squished.zip
-else
-    OUTFILE=$OUT/update-cm-$MODVERSION-signed.zip
-fi
-mv update_signed.zip $OUTFILE
-$MD5 $OUTFILE > $OUTFILE.md5sum
-echo "Package complete: $OUT/update-cm-$MODVERSION-signed.zip";
-cat $OUTFILE.md5sum
+(
+img=`basename $OUTFILE`
+cd `dirname $OUTFILE`
+$MD5 $img >$img.md5sum
+echo
+echo "Package complete: $OUTFILE"
+cat $img.md5sum
+echo
+)
 
+exit 0