The following commit has been merged in the master branch:
commit cee53c8f75be1fea506f4db22d4033b61bf911af
Author: Raphael Hertzog <[EMAIL PROTECTED]>
Date: Sun Mar 16 23:27:59 2008 +0100
dpkg-shlibdeps: accounts usage of symbols of libraries without SONAME
* scripts/Dpkg/Shlibs/Objdump.pm: Add "objid" property to
symbols and fake "soname" property with the basename of the
object's filename if the object has no official SONAME.
* scripts/dpkg-shlibdeps.pl: Add some more debugging messages.
* scripts/dpkg-shlibdeps.pl: Also count usage of alternate sonames
for symbols found in symbols files.
diff --git a/ChangeLog b/ChangeLog
index 66103e2..fd42230 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-03-16 Raphael Hertzog <[EMAIL PROTECTED]>
+
+ * scripts/Dpkg/Shlibs/Objdump.pm: Add "objid" property to
+ symbols and fake "soname" property with the basename of the
+ object's filename if the object has no official SONAME.
+ * scripts/dpkg-shlibdeps.pl: Add some more debugging messages.
+ * scripts/dpkg-shlibdeps.pl: Also count usage of alternate sonames
+ for symbols found in symbols files.
+
2008-03-16 Guillem Jover <[EMAIL PROTECTED]>
* configure.ac (AC_CHECK_HEADERS): Add 'libintl.h'.
diff --git a/debian/changelog b/debian/changelog
index 442d2a8..ae76f84 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -67,6 +67,8 @@ dpkg (1.14.17) UNRELEASED; urgency=low
must be discarded due to another dependency appearing further
in the field, the superseding dependency will take the place of the
discarded one. Added a test case for this.
+ * dpkg-shlibdeps properly accounts usage of symbols provided by private
+ libraries without SONAME. Closes: #469838
[ Frank Lichtenheld ]
* Add a warning in dpkg-buildpackage if the build-dependencies are not
diff --git a/scripts/Dpkg/Shlibs/Objdump.pm b/scripts/Dpkg/Shlibs/Objdump.pm
index 35a05ac..9bb9802 100644
--- a/scripts/Dpkg/Shlibs/Objdump.pm
+++ b/scripts/Dpkg/Shlibs/Objdump.pm
@@ -315,7 +315,8 @@ sub apply_relocations {
sub add_dynamic_symbol {
my ($self, $symbol) = @_;
- $symbol->{soname} = $self->{SONAME};
+ $symbol->{objid} = $symbol->{soname} = $self->get_id();
+ $symbol->{soname} =~ s{^.*/}{} unless $self->{SONAME};
if ($symbol->{version}) {
$self->{dynsyms}{$symbol->{name} . '@' . $symbol->{version}} = $symbol;
} else {
diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
index 92655f9..8cb9890 100755
--- a/scripts/dpkg-shlibdeps.pl
+++ b/scripts/dpkg-shlibdeps.pl
@@ -85,7 +85,7 @@ foreach (@ARGV) {
} elsif (m/^-t(.*)$/) {
$packagetype = $1;
} elsif (m/^-v$/) {
- $debug = 1;
+ $debug++;
} elsif (m/^-x(.*)$/) {
push @exclude, $1;
} elsif (m/^-/) {
@@ -116,7 +116,7 @@ my %shlibs;
my $cur_field;
foreach my $file (keys %exec) {
$cur_field = $exec{$file};
- print "Scanning $file (for $cur_field field)\n" if $debug;
+ print ">> Scanning $file (for $cur_field field)\n" if $debug;
my $obj = Dpkg::Shlibs::Objdump::Object->new($file);
my @sonames = $obj->get_needed_libraries;
@@ -195,7 +195,7 @@ foreach my $file (keys %exec) {
} else {
# No symbol file found, fall back to standard shlibs
my $id = $dumplibs_wo_symfile->parse($lib);
- if ($id ne $soname) {
+ if (($id ne $soname) and ($id ne $lib)) {
warning(_g("%s has an unexpected SONAME (%s)"), $lib, $id);
$alt_soname{$id} = $soname;
}
@@ -241,14 +241,21 @@ foreach my $file (keys %exec) {
} else {
$name .= "[EMAIL PROTECTED]";
}
+ print " Looking up symbol $name\n" if $debug > 1;
my $symdep = $symfile->lookup_symbol($name, [EMAIL PROTECTED]);
if (defined($symdep)) {
+ print " Found in symbols file of $symdep->{soname}\n" if $debug >
1;
$used_sonames{$symdep->{soname}}++;
+ if (exists $alt_soname{$symdep->{soname}}) {
+ # Also count usage on alternate soname
+ $used_sonames{$alt_soname{$symdep->{soname}}}++;
+ }
update_dependency_version($symdep->{depends},
$symdep->{minver});
} else {
my $syminfo = $dumplibs_wo_symfile->locate_symbol($name);
if (not defined($syminfo)) {
+ print " Not found\n" if $debug > 1;
next if $disable_warnings;
# Complain about missing symbols only for executables
# and public libraries
@@ -267,6 +274,7 @@ foreach my $file (keys %exec) {
}
}
} else {
+ print " Found in $syminfo->{soname} ($syminfo->{objid})\n" if
$debug > 1;
if (exists $alt_soname{$syminfo->{soname}}) {
# Also count usage on alternate soname
$used_sonames{$alt_soname{$syminfo->{soname}}}++;
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]