From 96ef60d7f55be3ed60d4ac43f346555aa228594f Mon Sep 17 00:00:00 2001 From: Raphael Hertzog Date: Tue, 15 Jan 2008 09:02:56 +0100 Subject: [PATCH] dpkg-shlibdeps: Fix filtering of duplicated deps in fields of lesser priority * scripts/dpkg-shlibdeps.pl (filter_deps): Fix filtering of duplicated dependencies in fields of lesser priority. Dependencies coming from shlibs files have no associated version and this case wasn't handled properly. --- ChangeLog | 7 +++++++ debian/changelog | 2 ++ scripts/dpkg-shlibdeps.pl | 24 ++++++++++++++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 013594ac..78f6ec8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-15 Raphael Hertzog + + * scripts/dpkg-shlibdeps.pl (filter_deps): Fix filtering of + duplicated dependencies in fields of lesser priority. Dependencies + coming from shlibs files have no associated version and this case + wasn't handled properly. + 2008-01-14 Raphael Hertzog * scripts/dpkg-genchanges.pl, scripts/dpkg-gencontrol.pl, diff --git a/debian/changelog b/debian/changelog index 3fb7c993..e8452bfa 100644 --- a/debian/changelog +++ b/debian/changelog @@ -31,6 +31,8 @@ dpkg (1.14.16) UNRELEASED; urgency=low is used. That way we're consistent with the definition of that variable in deb-substvars(5). Closes: #433477 * Add support of Dm-Upload-Allowed field. Closes: #453400 + * Fix dpkg-shlibdeps's filtering of duplicated dependencies in fields of + lesser priority (when -d is used). [ Updated manpages translations ] * Fix typo in French. Closes: #460021 diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl index 8462d10d..4b6a6e9d 100755 --- a/scripts/dpkg-shlibdeps.pl +++ b/scripts/dpkg-shlibdeps.pl @@ -309,19 +309,29 @@ sub filter_deps { } # Don't include dependencies if they are already # mentionned in a higher priority field - if (not defined($depseen{$dep})) { + if (not exists($depseen{$dep})) { $depseen{$dep} = $dependencies{$field}{$dep}; return 1; } else { # Since dependencies can be versionned, we have to # verify if the dependency is stronger than the # previously seen one - if (compare_versions($depseen{$dep}, '>>', $dependencies{$field}{$dep})) { - return 0; + my $stronger; + if ($depseen{$dep} eq $dependencies{$field}{$dep}) { + # If both versions are the same (possibly unversionned) + $stronger = 0; + } elsif ($dependencies{$field}{$dep} eq '') { + $stronger = 0; # If the dep is unversionned + } elsif ($depseen{$dep} eq '') { + $stronger = 1; # If the dep seen is unversionned + } elsif (compare_versions($depseen{$dep}, '>>', $dependencies{$field}{$dep})) { + # The version of the dep seen is stronger... + $stronger = 0; } else { - $depseen{$dep} = $dependencies{$field}{$dep}; - return 1; + $stronger = 1; } + $depseen{$dep} = $dependencies{$field}{$dep} if $stronger; + return $stronger; } } @@ -470,7 +480,9 @@ sub add_shlibs_dep { if (defined($dep)) { print "Found $dep in $file\n" if $debug; foreach (split(/,\s*/, $dep)) { - $dependencies{$cur_field}{$_} = 1; + # Note: the value is empty for shlibs based dependency + # symbol based dependency will put a version as value + $dependencies{$cur_field}{$_} = ''; } return 1; } -- 2.39.5