Browse Source

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.
Raphael Hertzog 18 years ago
parent
commit
96ef60d7f5
3 changed files with 27 additions and 6 deletions
  1. 7 0
      ChangeLog
  2. 2 0
      debian/changelog
  3. 18 6
      scripts/dpkg-shlibdeps.pl

+ 7 - 0
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>
 2008-01-14  Raphael Hertzog  <hertzog@debian.org>
 
 
 	* scripts/dpkg-genchanges.pl, scripts/dpkg-gencontrol.pl,
 	* scripts/dpkg-genchanges.pl, scripts/dpkg-gencontrol.pl,

+ 2 - 0
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
     is used. That way we're consistent with the definition of that variable
     in deb-substvars(5). Closes: #433477
     in deb-substvars(5). Closes: #433477
   * Add support of Dm-Upload-Allowed field. Closes: #453400
   * 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 ]
   [ Updated manpages translations ]
   * Fix typo in French. Closes: #460021
   * Fix typo in French. Closes: #460021

+ 18 - 6
scripts/dpkg-shlibdeps.pl

@@ -309,19 +309,29 @@ sub filter_deps {
     }
     }
     # Don't include dependencies if they are already
     # Don't include dependencies if they are already
     # mentionned in a higher priority field
     # mentionned in a higher priority field
-    if (not defined($depseen{$dep})) {
+    if (not exists($depseen{$dep})) {
 	$depseen{$dep} = $dependencies{$field}{$dep};
 	$depseen{$dep} = $dependencies{$field}{$dep};
 	return 1;
 	return 1;
     } else {
     } else {
 	# Since dependencies can be versionned, we have to
 	# Since dependencies can be versionned, we have to
 	# verify if the dependency is stronger than the
 	# verify if the dependency is stronger than the
 	# previously seen one
 	# 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 {
 	} 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)) {
 	if (defined($dep)) {
 	    print "Found $dep in $file\n" if $debug;
 	    print "Found $dep in $file\n" if $debug;
 	    foreach (split(/,\s*/, $dep)) {
 	    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;
 	    return 1;
 	}
 	}