#!/usr/bin/perl

$|++;

use strict;

PACKAGE: for my $package (@ARGV) {
	print $package, "... ";
	my @symbols;

	if (open(DPKG, "dpkg -L '$package' |")) {
		while (my $file = <DPKG>) {
			chomp($file);
			if (`file "$file" 2>/dev/null` =~ /Mach-O/) {
				system("nm -g '$file' >/tmp/$$.before");
				system("c++filt < /tmp/$$.before > /tmp/$$.after");
				if (open(DIFF, "diff -uNb /tmp/$$.before /tmp/$$.after |")) {
						while (my $diffline = <DIFF>) {
							chomp($diffline);
							if ($diffline =~ /^\+\s*(.*?)\s*$/) {
								push(@symbols, $1);
							} else {
								#print "did not match: $diffline\n";
							}
						}
					close(DIFF);
				} else {
					warn "unable to run diff: $!\n";
				}
			}
		}
		close(DPKG);
		if (@symbols) {
			print int(@symbols), " symbols mangled\n";
		} else {
			print "not mangled\n";
		}
	} else {
		warn "unable to run dpkg -L '$package': $!\n";
	}
}

unlink("/tmp/$$.before");
unlink("/tmp/$$.after");

__END__
for PACKAGE in "$@"; do
	MATCH=0
	echo -e "${PACKAGE}: \c"
	dpkg -L "$PACKAGE" | while read FILE; do
		if [ "$MATCH" -eq 0 ] && [ -f "$FILE" ]; then
			if [ `file "$FILE" 2>/dev/null | grep -c "Mach-O"` -gt 0 ]; then
				nm -g "$FILE" > /tmp/$$.before
				c++filt < /tmp/$$.before > /tmp/$$.after
				COUNT=`diff /tmp/$$.before /tmp/$$.after | wc -l`
				if [ "$COUNT" -gt 0 ]; then
					echo "$PACKAGE: mangled"
					MATCH=1
					break 3
				fi
			fi
		fi
	done
	if [ "$MATCH" -eq 0 ]; then
		echo "$PACKAGE: not mangled"
	fi
done
