#! /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"; } }