1: #!/usr/bin/perl
   2: die "usage: lddtool ..." if $#ARGV < 0;
   3: 
   4: my @libs;
   5: my $prefix = "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/";
   6: my $lddcommand = "/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-ldd";
   7: my @libdirs = ("$prefix/lib", "$prefix/lib/arm-linux-gnueabihf");
   8: 
   9: for (my $i = 0; $i <= $#ARGV; ++$i) {
  10:   doLDD($ARGV[$i]);
  11: }
  12: print join(":", @libs), "\n";
  13: showOptions();
  14: 
  15: sub showOptions {
  16:   print "LIBS:=";
  17:   for my $lib (@libs) {
  18:     if ($lib =~ /lib([^ \/\t]+)\.so/) {
  19:       print " -l$1";
  20:     }
  21:   }
  22:   print "\n";
  23: }
  24: 
  25: sub doLDD {
  26:   my ($filename) = @_;
  27:   return if $filename eq "";
  28:   my @links = `$lddcommand --root $prefix $filename`;
  29:   my @newfiles;
  30:   for my $link (@links) {
  31:     if ($link =~ /(lib[^ \/\t]+\.so[^ \/\t]*)/) {
  32:       if (!grep { $_ eq $1 } @libs) {
  33:         push(@libs, $1);
  34:         push(@newfiles, $1);
  35:       }
  36:     }
  37:   }
  38: 
  39:   for my $file (@newfiles) {
  40:     my @input = ($file);
  41:     doLDD(deferPath(@input));
  42:   }
  43: }
  44: 
  45: sub deferPath {
  46:   for my $filename (@_) {
  47:     for my $dir (reverse(@libdirs)) {
  48:       my $path = "$dir/$filename";
  49:       return $path if -f $path;
  50:     }
  51:   }
  52:   return "";
  53: }
  54: 
  55: