summaryrefslogtreecommitdiff
path: root/support/dktools/scripts/show-dependencies.pl
blob: f3b522f64ed7c1a76e139d934e588fec2830dae2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#! /usr/bin/perl

# Copyright (c) 2002-2016, Dirk Krause. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause

my $ifh  = undef;
my $args = undef;
my $arg  = undef;
my $line;
my $libname;
my $pkgname;
my $architecture;
my $lastname;
my $namefound;
my %libnames;
my %pkgnames;

while($#ARGV > -1) {
  $arg = shift @ARGV;
  if (defined($args)) {
    $args = "$args $arg";
  } else {
    $args = "$arg";
  }
}

if (open($ifh, "objdump -p $args |")) {
  while(<$ifh>) {
    $line = $_; chomp $line;
    if ($line =~ /^\s+NEEDED\s+(\S+)/o) {
      $libname = $1;
      $libnames{"$libname"} = 1;
    }
  }
  close($ifh);
  foreach $libname (sort (keys %libnames)) {
    $ifh = undef;
    if (open($ifh, "dpkg -S $libname |")) {
      while(<$ifh>) {
        $line = $_; chomp $line;
	if ($line =~ /^\s*(\S+)\s+(\S+)/o) {
	  $pkgname = $1; $namefound = $2;
	  if ($pkgname =~ /^([^:]+):/o) {
	    $pkgname = $1;
	  }
	  $lastname = undef;
	  if ($namefound =~ /\/lib\/[^\/]+\/(lib[^\/]+)/o) {
	    $lastname = $1;
	  }
	  if ($namefound =~ /\/usr\/lib\/[^\/]+\/(lib[^\/]+)/o) {
	    $lastname = $1;
	  }
	  if (defined($lastname)) {
	    if ("$lastname" eq "$libname") {
	      $pkgnames{"$pkgname"} = 1;
	    }
	  }
	}
      }
      close($ifh);
    }
  }
  foreach $pkgname (sort (keys %pkgnames)) {
    print "$pkgname\n";
  }
}