]> err.no Git - dpkg/commitdiff
dpkg-shlibdeps: Fix filtering of duplicated deps in fields of lesser priority
authorRaphael Hertzog <hertzog@debian.org>
Tue, 15 Jan 2008 08:02:56 +0000 (09:02 +0100)
committerRaphael Hertzog <hertzog@debian.org>
Tue, 15 Jan 2008 08:03:25 +0000 (09:03 +0100)
* 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
debian/changelog
scripts/dpkg-shlibdeps.pl

index 013594acf6d688f4c71ca15d50a07d524b61a530..78f6ec8f617b64b0b2917e62ba71fc19d7f77b7b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-15  Raphael Hertzog  <hertzog@debian.org>
+
+       * 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  <hertzog@debian.org>
 
        * scripts/dpkg-genchanges.pl, scripts/dpkg-gencontrol.pl,
index 3fb7c9936a28bbdf3da9937f11611bee35847c16..e8452bfa1dbce745c9493e1708708cbbc8db87e7 100644 (file)
@@ -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
index 8462d10da39af83eef963de2b5cc880f575aeb90..4b6a6e9d9da84f945768841fa3cc5303f3fad854 100755 (executable)
@@ -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;
        }