version 1.6, 2007/05/16 20:55:42 |
version 1.9, 2008/05/05 20:02:57 |
|
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# $RedRiver: find_depends,v 1.5 2005/12/21 19:14:12 andrew Exp $ |
# $RedRiver: find_depends,v 1.8 2008/05/05 18:58:18 andrew Exp $ |
use strict; |
use strict; |
use warnings; |
use warnings; |
|
|
|
|
|
|
my @libs = search_file($file); |
my @libs = search_file($file); |
foreach (@libs) { |
foreach (@libs) { |
my ($name, $maj, $min) = $_ =~ /^([^\.]+)\.so\.(\d+)\.(\d+)$/; |
my ($name, $maj, $min) = $_ =~ /lib([^\/]+)\.so\.(\d+)\.(\d+)$/; |
|
next if ! $name; |
my $spec = 'l' . $name . '.' . $maj . '.' . $min; |
my $spec = 'l' . $name . '.' . $maj . '.' . $min; |
|
|
if (exists $ld->{$spec}) { |
if (exists $ld->{$spec}) { |
|
|
{ |
{ |
my $file = shift; |
my $file = shift; |
my @libs; |
my @libs; |
|
|
open my $libs, '<', $file or die "Couldn't open lib '$file': $!"; |
open my $libs, '-|', '/usr/bin/ldd', $file or die "Couldn't open ldd '$file': $!"; |
local $/ = chr(0); |
|
while (<$libs>) { |
while (<$libs>) { |
if (m|^(/[^\w\/]+/)?lib(\S+)\.(\d+)\.(\d+)|) { |
chomp; |
my ($path, $name, $major, $minor) = ($1, $2, $3, $4); |
my ($spec) = (split(/\s+/, $_))[7]; |
my $spec="$name.$major.$minor"; |
next if ! $spec; |
if (defined $path && $path ne '/usr/local/lib') { |
next if $spec !~ m{^/}xms; |
$spec="$path/$spec"; |
push @libs, $spec; |
} |
|
push @libs, $spec; |
|
} |
|
} |
} |
close $libs; |
close $libs; |
|
|