#!/bin/sh

# strippkg: strips a binary package

# the usage message
USAGE="Usage: strippkg [DIRECTORY|FILE]"

# check the number of command-line arguments
case $# in
	1)
		;;
	*)
		echo $USAGE
		exit 1
		;;
esac

# make sure the package directory exists
if [ ! -d "$1" ] && [ ! -f "$1" ]
then
	echo $USAGE
	exit 1
fi

# strip the package
for file in $(find "$1" -type f)
do
	case "$(file -bi $file)" in
		"application/x-tar"*)
			basename "$file"
			tar_dir="$(mktemp -d)"			
			tar -xvf "$file" -C $tar_dir
			"$0" $tar_dir
			base_dir="$(pwd)"
			cd $tar_dir
			tar -c * > $file
			cd "$base_dir"
			;;						
		"application/xml"*)
			# we don't touch XUL stuff - they're all signed
			case "$i" in
				*.xul)
					continue
					;;
			esac
			basename "$file"
			xml_file="$(mktemp -u)"			
			xmllint --noblanks "$file" > $xml_file
			if [ 0 -eq $? ]
			then
				mv -f $xml_file "$file"
			else
				rm -f $xml_file
			fi
			;;
		*"application/x-gzip"*)
			basename "$file"
			gzip_file="$(mktemp -u)"
			zcat "$file" > $gzip_file
			"$0" $gzip_file
			cat $gzip_file | gzip --best > "$file"
			[ "`which advdef`" != "" ] && advdef -z4 "$file"
			rm -f $gzip_file
			;;		
		*"application/x-bzip2"*)
			basename "$file"
			bzip2_file="$(mktemp -u)"
			bzcat "$file" > $bzip2_file
			"$0" $bzip2_file
			cat $bzip2_file | bzip2 --best > "$file"
			rm -f $bzip2_file
			;;		
		*"application/x-xz"*)
			basename "$file"
			xz_file="$(mktemp -u)"			
			xzcat "$file" > $xz_file
			"$0" $xz_file
			cat $xz_file | xz --best > "$file"
			rm -f $xz_file
			;;		
		"application/x-sharedlib"*|"application/x-executable"*)
			basename "$file"
			strip --strip-all "$file"
			;;
		"application/x-object"*)
			case  "$file" in
				*.o)	
					continue
					;;
			esac
			basename "$file"
			strip --strip-unneeded "$file"
			;;
		"application/x-zip"*|"application/zip"*)
			# signed, just like XUL
			case "$file" in
				*.xpi)
					continue
					;;
			esac
			file_path=$(realpath "$file")
			file_name=$(basename "$file")
			echo $file_name
			zip_dir="$(mktemp -d)"
			base_dir="$(pwd)"
			
			cd $zip_dir
			unzip "$file_path"
			"$0" $zip_dir
			zip -9 -r "$file_name" *
			advzip -z4 "$file_name"
			
			mv -f "$file_name" "$file_path"
			cd "$base_dir"
			rm -rf $zip_dir					
			;;
		"video/x-mng"/*)
			basename "$file"
			advmng -z4 "$file"
			;;
		"image/png"*|"image/gif"*|"image/bmp"*|"image/x-portable-pixmap"*|"image/tiff"*)
			[ "`which optipng`" = "" -o "`which advpng`" = "" ] && continue
			basename "$file"
			optipng -o7 "$file"
			advpng -z4 "$file"
			;;		
	esac	
done
