#!/usr/local/bin/perl sub count { local($file) = @_; if (open(C,"gcc -E -DHAVE_UNISTD_H $file|")) { my $match = 0; local(%vars); while () { next if (/^\s*$/); $match = /$file/ if (/^#/); if ($match) { study; &match; } } close(C); $match = 0; foreach (keys %vars) { $file{$_} .= "$file($vars{$_}),"; $match += $vars{$_}; } printf(STDERR "%5d $file\n",$match); } else { warn "Cannot open pipe to $file"; } } open(NEED,") { next if (/^ld:/); next if (/^\s+\./); if (/^([A-Za-z][A-Za-z0-9_]*).*\.o\s*$/) { $need{$1}++; } elsif (/^\s+_([_A-Za-z][A-Za-z0-9_]*)\s*$/) { my $sym = $1; $need{$sym}++ unless($sym =~ /^_/); } else { warn "No match:$_"; } } close(NEED); print STDERR "Building proc\n"; $proc = "sub match {\n"; foreach (keys %need) { $proc .= " \$count{\"$_\"}++,\$vars{\"$_\"}++ if (/\\b$_\\b/);\n" } $proc .= "}\n"; print STDERR "eval...\n"; eval ($proc); foreach (@ARGV) { &count($_); } foreach (sort keys %need) { my $file = $file{$_}; chop($file); printf("%6d %-20s %s\n",$count{$_},$_,$file); }