##!/usr/local/bin/perl eval "exec perl -S $0 $*" if $running_under_some_shell; # # Matt Schwab 13Oct94 # $usage = "Usage: $0 [-dyn] dir\n"; $selfdoc = "Lists executable files in a directory subtree. [-dyn] lists dynamically linked executables. See also: Execstat Figstat Wastestat Tour Grepper\n"; if( $#ARGV < 0 ) { print $usage; die $selfdoc; } $dyn = "no"; while($ARGV[0]) { $_ = shift; SWITCH: { # print "argument is $_ \n"; if (/^-dyn(.*)/) { $dyn = "yes"; last SWITCH; } if ( -d $_ ) { $dir = $_ ; last SWITCH; } die "Unrecognized switch: $_\n"; $nothing = 1; } } if ($dir eq "") { print $usage; die $selfdoc; } # print "Message: I detected following executables.\n"; if ($dyn eq "yes") { print " The executables seem to be dynamically linked\n"; } print "\n"; &execfind($dyn,$dir); sub execfind { local($dynflag,$testdir) = @_; chdir $testdir || die "$dir not a directory.\n"; open(FIND, "find . -print |") || die "Can't run find: $!\n"; while ($filename = ) { chop $filename; &is_exec($dynflag,$filename); } chdir '..'; } sub is_exec { local($dyn,$filename) = @_; TEST: { if ( -d $filename) { last TEST;} if (! -x $filename) { last TEST;} if (! -B $filename) { last TEST;} &action($dyn,$filename); $nothing = 1; } } sub action { local($dyn,$filename) = @_; ACTION: { if ($dyn eq "yes") { if (!open(LDD, "ldd $filename | grep -v statically | grep -v lc | grep -v ldl | grep -v 'statically linked' |")) { print STDERR "Can't ldd $filename - continuing ...\n"; } else { while ($ldd = ) { print $filename, "\n"; # print $ldd; # commented in: lists dynamic libs } } } else { print $filename, "\n"; } } }