1:
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: