Robert Bihlmeyer <robbe@orcus.priv.at> writes: > So there are a couple of missing dependencies. Jeff, is the > dpkg-shlibdeps problem rearing its head again on your end? Since this also bit me today, I've hacked dpkg-shlibdeps 1.9.12 here (Marcus's patch does no longer apply). My version does not spew warnings, but may generate a spurious dependency in obscure cases[1] The diff against the version in dpkg-dev 1.9.12 is below. I recommend that people building packages install it, perhaps utilizing "dpkg-divert" so upgrades will not overwrite it. Footnotes: [1] When searching for libfoo.so.4's package, it will not only find the package containing /lib/libfoo.so.4, but also the package containing /bar/bazlib/libfoo.so.4. From a quick skim of the archive only acroread, gnat, and petsc2.1.0-dev may be affected by this. -- Robbe --- /bin/dpkg-shlibdeps.distrib Thu Jun 21 01:42:16 2001 +++ /bin/dpkg-shlibdeps Fri Jun 22 18:09:18 2001 @@ -94,18 +94,6 @@ for ($i=0;$i<=$#exec;$i++) { if (!isbin ($exec[$i])) { next; } - # First we get an ldd output to see what libs + paths we have at out - # disposal. - my %so2path = (); - defined($c= open(P,"-|")) || syserr("cannot fork for ldd"); - if (!$c) { exec("ldd","--",$exec[$i]); syserr("cannot exec ldd"); } - while (<P>) { - if (m,^\s+(\S+)\s+=>\s+(\S+)\s+\(0x.+\)?$,) { - $so2path{$1} = $2; - } - } - close(P); $? && subprocerr("ldd on \`$exec[$i]'"); - # Now we get the direct deps of the program. We then check back with # the ldd output from above to see what our path is. defined($c= open(P,"-|")) || syserr("cannot fork for objdump"); @@ -116,13 +104,11 @@ if (m,^\s*NEEDED\s+((\S+)\.so\.(\S+))$,) { push(@libname,$2); push(@libsoname,$3); push(@libf,$execf[$i]); - &warn("could not find path for $1") unless defined($so2path{$1}); - push(@libfiles,$so2path{$1}); + push(@libfiles, "lib/$1"); } elsif (m,^\s*NEEDED\s+((\S+)-(\S+)\.so)$,) { push(@libname,$2); push(@libsoname,$3); push(@libf,$execf[$i]); - &warn("could not find path for $1") unless defined($so2path{$1}); - push(@libfiles,$so2path{$1}); + push(@libfiles, "lib/$1"); } else { m,^\s*NEEDED\s+(\S+)$,; &warn("format of $1 not recognized"); @@ -196,7 +182,9 @@ &warn("diversions involved - output may be incorrect"); print(STDERR " $_\n") || syserr("write diversion info to stderr"); } elsif (m=^(\S+(, \S+)*): (\S+)$=) { - push @{$pathpackages{$+}}, split(/, /, $1); + my ($pkgs, $lib) = ($1, $+); + $lib =~ s|.*/lib/|lib/|; + push @{$pathpackages{$lib}}, split(/, /, $pkgs); } else { &warn("unknown output from dpkg --search: \`$_'"); }
Attachment:
signature.ng
Description: PGP signature