#!/usr/bin/perl -w


my $log = shift (@ARGV) || '../map/relocation-log.bz2';
my $bz = ($log =~ /\.bz2$/ && "bz") || '';

my $stream;

my %src_links  = ();
my %dest_links = ();
my %self_links = ();

my $svt_to_svl = 0;
my $svl_to_svt = 0;

open ($stream, $bz."cat $log |") || die "Can't cat $log: $!";

while (<$stream>) {
# 20884:  binding file /usr/lib/libxml2.so.2 to /usr/lib/libxml2.so.2: normal symbol `xmlXPathSubstringFunction'
    if (/\d+:\s+binding file\s+([^\s]+)\s+to\s+([^\s]+):[^\`]+\`(.*)\'/) {
	my $src  = $1;
	my $dest = $2;
	my $sym  = $3;
	
	if ($src =~ /libsvl/ &&
	    $dest =~ /libsvt/) {
	    $svl_to_svt++;
	}

	if ($src =~ /libsvt/ &&
	    $dest =~ /libsvl/) {
	    $svt_to_svl++;
	}

	if ($src eq $dest) {
	    $self_links{$src}++;
	} else {
	    $src_links{$src}++;
	    $dest_links{$dest}++;
	}
#	print "binding $src to $dest: $sym\n";
    }
}

close ($stream);

print "src	dest	self	name\n";
print "-----------------------------\n";
my $total_src = 0;
my $total_dest = 0;
my $total_self = 0;
for $lib (sort (keys %src_links)) {
    my $src  = $src_links{$lib};
    my $dest = exists $dest_links{$lib} && $dest_links{$lib} || '0';
    my $self = exists $self_links{$lib} && $self_links{$lib} || '0';
    print "$src	$dest	$self	$lib\n";
    $total_src  += $src;
    $total_dest += $dest;
    $total_self += $self;
}
print "-----------------------------\n";
print "$total_src	$total_dest	$total_self	: Total\n";

print "\n";
print "svl -> svt: $svl_to_svt\n";
print "svt -> svl: $svt_to_svl\n";
