ソースを参照

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 年 前
コミット
96ef60d7f5
共有3 個のファイルを変更した27 個の追加6 個の削除を含む
  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>
 
 	* 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
     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

+ 18 - 6
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;
 	}