Просмотр исходного кода

Merge branch 'master' of git://git.debian.org/git/dpkg/dpkg into sourcev3

Joey Hess лет назад: 18
Родитель
Сommit
d3c82ade6a
3 измененных файлов с 48 добавлено и 8 удалено
  1. 10 0
      ChangeLog
  2. 4 0
      debian/changelog
  3. 34 8
      scripts/dpkg-shlibdeps.pl

+ 10 - 0
ChangeLog

@@ -1,3 +1,13 @@
+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.
+	* scripts/dpkg-shlibdeps.pl: When the same binary is passed
+	several times as parameters (associated to different fields),
+	associate it to the most important field.
+
 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,

+ 4 - 0
debian/changelog

@@ -31,6 +31,10 @@ 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).
+  * Fix behaviour of dpkg-shlibdeps when the same binary was passed multiple
+    times for use in different dependency fields (-d option).
 
 
   [ Updated manpages translations ]
   [ Updated manpages translations ]
   * Fix typo in French. Closes: #460021
   * Fix typo in French. Closes: #460021

+ 34 - 8
scripts/dpkg-shlibdeps.pl

@@ -72,7 +72,14 @@ foreach (@ARGV) {
 	defined($depstrength{$dependencyfield}) ||
 	defined($depstrength{$dependencyfield}) ||
 	    warning(_g("unrecognised dependency field \`%s'"), $dependencyfield);
 	    warning(_g("unrecognised dependency field \`%s'"), $dependencyfield);
     } elsif (m/^-e(.*)$/) {
     } elsif (m/^-e(.*)$/) {
-	$exec{$1} = $dependencyfield;
+	if (exists $exec{$1}) {
+	    # Affect the binary to the most important field
+	    if ($depstrength{$dependencyfield} > $depstrength{$exec{$1}}) {
+		$exec{$1} = $dependencyfield;
+	    }
+	} else {
+	    $exec{$1} = $dependencyfield;
+	}
     } elsif (m/^--ignore-missing-info$/) {
     } elsif (m/^--ignore-missing-info$/) {
 	$ignore_missing_info = 1;
 	$ignore_missing_info = 1;
     } elsif (m/^-t(.*)$/) {
     } elsif (m/^-t(.*)$/) {
@@ -84,7 +91,14 @@ foreach (@ARGV) {
     } elsif (m/^-/) {
     } elsif (m/^-/) {
 	usageerr(_g("unknown option \`%s'"), $_);
 	usageerr(_g("unknown option \`%s'"), $_);
     } else {
     } else {
-	$exec{$_} = $dependencyfield;
+	if (exists $exec{$_}) {
+	    # Affect the binary to the most important field
+	    if ($depstrength{$dependencyfield} > $depstrength{$exec{$_}}) {
+		$exec{$_} = $dependencyfield;
+	    }
+	} else {
+	    $exec{$_} = $dependencyfield;
+	}
     }
     }
 }
 }
 
 
@@ -309,19 +323,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 +494,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;
 	}
 	}