Update of /cvsroot/fink/experimental/rangerrick/scripts
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6785/scripts

Added Files:
        gcc-symbol-mangle-detector 
Removed Files:
        gcc-symbol-mangle-detector.sh 
Log Message:
work-in-progress

--- gcc-symbol-mangle-detector.sh DELETED ---

--- NEW FILE: gcc-symbol-mangle-detector ---
#!/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



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
Fink-commits mailing list
Fink-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fink-commits

Reply via email to