Procházet zdrojové kódy

dpkg-shlibdeps: analyze in priority the shlibs of the current package

When looking for a dependency, consider the shlibs of the current package
before the shlibs of other binary packages of the same source. This is
important when a library is built in multiple flavors and each version comes
with a different dependency for the same library.
Raphael Hertzog před 18 roky
rodič
revize
c64c45ec70
2 změnil soubory, kde provedl 16 přidání a 6 odebrání
  1. 6 0
      ChangeLog
  2. 10 6
      scripts/dpkg-shlibdeps.pl

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2007-12-20  Raphael Hertzog  <hertzog@debian.org>
+
+	* scripts/dpkg-shlibdeps.pl: Always consider the shlibs of the
+	current package before the shlibs of other binary packages when
+	looking for a dependency.
+
 2007-12-13  Raphael Hertzog  <hertzog@debian.org>
 
 	* scripts/t/500_Dpkg_Path.t, scripts/Makefile.am: Add new

+ 10 - 6
scripts/dpkg-shlibdeps.pl

@@ -98,6 +98,7 @@ my %shlibs;
 
 my $cur_field;
 foreach my $file (keys %exec) {
+    my $pkg_root = guess_pkg_root_dir($file);
     $cur_field = $exec{$file};
     print "Scanning $file (for $cur_field field)\n" if $debug;
 
@@ -180,7 +181,8 @@ foreach my $file (keys %exec) {
 		push @soname_wo_symfile, $soname;
 		my $libobj = $dumplibs_wo_symfile->get_object($id);
 		# Only try to generate a dependency for libraries with a SONAME
-		if ($libobj->is_public_library() and not add_shlibs_dep($soname, $pkg)) {
+		if ($libobj->is_public_library() and not
+		    add_shlibs_dep($soname, $pkg, $pkg_root)) {
 		    # This failure is fairly new, try to be kind by
 		    # ignoring as many cases that can be safely ignored
 		    my $ignore = 0;
@@ -442,12 +444,14 @@ sub update_dependency_version {
 }
 
 sub add_shlibs_dep {
-    my ($soname, $pkg) = @_;
+    my ($soname, $pkg, $pkg_root) = @_;
+    my @shlibs = ($shlibslocal, $shlibsoverride);
+    # Make sure the shlibs of the current package is analyzed before the
+    # shlibs of other binary package from the same source
+    push @shlibs, "$pkg_root/DEBIAN/shlibs" if defined($pkg_root);
+    push @shlibs, @pkg_shlibs, "$admindir/info/$pkg.shlibs", $shlibsdefault;
     print "Looking up shlibs dependency of $soname provided by '$pkg'\n" if $debug;
-    foreach my $file ($shlibslocal, $shlibsoverride, @pkg_shlibs,
-			"$admindir/info/$pkg.shlibs",
-			$shlibsdefault)
-    {
+    foreach my $file (@shlibs) {
 	next if not -e $file;
 	my $dep = extract_from_shlibs($soname, $file);
 	if (defined($dep)) {