The branch, dpkg-shlibdeps-buxy has been updated
via 2e229f0686d243d31dea34e4664200f6c90e3333 (commit)
from b776c00b2570b0083172ea8a91820c9b34752624 (commit)
- Shortlog ------------------------------------------------------------
2e229f0 Make dpkg-shlibdeps fail if it doesn't find dependency information
Summary of changes:
man/dpkg-shlibdeps.1 | 6 ++++++
scripts/dpkg-shlibdeps.pl | 34 ++++++++++++++++++++++------------
2 files changed, 28 insertions(+), 12 deletions(-)
-----------------------------------------------------------------------
Details of changes:
commit 2e229f0686d243d31dea34e4664200f6c90e3333
Author: Raphael Hertzog <[EMAIL PROTECTED]>
Date: Mon Sep 24 16:43:51 2007 +0200
Make dpkg-shlibdeps fail if it doesn't find dependency information
If dpkg-shlibdeps doesn't find any dependency information for a shared
library
that is actively used, then it will fail. This can be disabled with the
option
--ignore-missing-info. Closes: #10807
diff --git a/man/dpkg-shlibdeps.1 b/man/dpkg-shlibdeps.1
index 0f93495..68bf831 100644
--- a/man/dpkg-shlibdeps.1
+++ b/man/dpkg-shlibdeps.1
@@ -173,6 +173,12 @@ avoid self-dependencies for packages which provide ELF
binaries
package. This option can be used multiple times to exclude several
packages.
.TP
+.BI \-\-ignore\-missing\-info
+Do not fail if dependency information can't be found for a shared library.
+Usage of this option is discouraged, all libraries should provide
+dependency information (either with shlibs files, or with symbols files)
+even if they are not yet used by other packages.
+.TP
.BI \-\-admindir= dir
Change the location of the \fBdpkg\fR database. The default location is
\fI/var/lib/dpkg\fP.
diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
index 9fa31e0..f3117e2 100755
--- a/scripts/dpkg-shlibdeps.pl
+++ b/scripts/dpkg-shlibdeps.pl
@@ -30,6 +30,7 @@ my $packagetype= 'deb';
my $dependencyfield= 'Depends';
my $varlistfile= 'debian/substvars';
my $varnameprefix= 'shlibs';
+my $ignore_missing_info= 0;
my $debug= 0;
my @exclude = ();
@@ -64,6 +65,8 @@ foreach (@ARGV) {
warning(sprintf(_g("unrecognised dependency field \`%s'"),
$dependencyfield));
} elsif (m/^-e(.*)$/) {
$exec{$1} = $dependencyfield;
+ } elsif (m/^--ignore-missing-info$/) {
+ $ignore_missing_info = 1;
} elsif (m/^-t(.*)$/) {
$packagetype = $1;
} elsif (m/-v$/) {
@@ -101,27 +104,29 @@ foreach my $file (keys %exec) {
my $symfile = Dpkg::Shlibs::SymbolFile->new();
my $dumplibs_wo_symfile = Dpkg::Shlibs::Objdump->new();
my @soname_wo_symfile;
- foreach my $file (keys %libfiles) {
- my $soname = $libfiles{$file};
- if (not exists $file2pkg->{$file}) {
+ foreach my $lib (keys %libfiles) {
+ my $soname = $libfiles{$lib};
+ if (not exists $file2pkg->{$lib}) {
# If the library is not available in an installed package,
# it's because it's in the process of being built
# Empty package name will lead to consideration of symbols
# file from the package being built only
- $file2pkg->{$file} = [""];
+ $file2pkg->{$lib} = [""];
}
# Load symbols/shlibs files from packages providing libraries
- foreach my $pkg (@{$file2pkg->{$file}}) {
+ foreach my $pkg (@{$file2pkg->{$lib}}) {
my $dpkg_symfile;
if ($packagetype eq "deb") {
# Use fine-grained dependencies only on real deb
$dpkg_symfile = find_symbols_file($pkg, $soname);
+ if (defined $dpkg_symfile) {
+ # Load symbol information
+ print "Using symbols file $dpkg_symfile for $soname\n" if
$debug;
+ $symfile->load($dpkg_symfile);
+ }
}
- if (defined $dpkg_symfile) {
- # Load symbol information
- print "Using symbols file $dpkg_symfile for $soname\n" if
$debug;
- $symfile->load($dpkg_symfile);
+ if (defined($dpkg_symfile) && $symfile->has_object($soname)) {
# Initialize dependencies as an unversioned dependency
my $dep = $symfile->get_dependency($soname);
foreach my $subdep (split /\s*,\s*/, $dep) {
@@ -131,9 +136,13 @@ foreach my $file (keys %exec) {
}
} else {
# No symbol file found, fall back to standard shlibs
- $dumplibs_wo_symfile->parse($file);
+ $dumplibs_wo_symfile->parse($lib);
push @soname_wo_symfile, $soname;
- add_shlibs_dep($soname, $pkg);
+ if (not add_shlibs_dep($soname, $pkg)) {
+ failure(sprintf(
+ _g("No dependency information found for %s (used by
%s)."),
+ $soname, $file)) unless $ignore_missing_info;
+ }
}
}
}
@@ -320,9 +329,10 @@ sub add_shlibs_dep {
foreach (split(/,\s*/, $dep)) {
$dependencies{$cur_field}{$_} = 1;
}
- last;
+ return 1;
}
}
+ return 0;
}
sub extract_from_shlibs {
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]