Adam Heath wrote: > I don't see any problems with it. But I haven't thought it thru deeply. I started implementing it and found one problem. Once a library package switches over to including udeb shlibdeps lines, versions of dpkg-shlibdeps that don't know about those lines will skip them with a slightly ugly warning message: shared libs info file `foo.shlibs' line 2: bad line `udeb: foo 1 foo-udeb' Still backwards compatability will be preserved, so this isn't a very large problem. It can also be mostly avoided by putting the tagged lines at the end of a substvars file. Here's a patch adding -t to dpkg-shlibdeps. diff -ur old/dpkg-1.13.9/man/C/dpkg-source.1 dpkg-1.13.9/man/C/dpkg-source.1 --- old/dpkg-1.13.9/man/C/dpkg-source.1 2005-06-11 14:30:46.000000000 -0400 +++ dpkg-1.13.9/man/C/dpkg-source.1 2005-06-25 10:54:42.000000000 -0400 @@ -516,7 +516,7 @@ .TP .BI \-L localshlibsfile Causes -.B dpkg\-shlibs +.B dpkg\-shlibdeps to read overriding shared library dependency information from .I localshlibsfile instead of @@ -527,6 +527,15 @@ output, rather than being added to the substitution variables file .RB ( debian/substvars by default). +.TP +.BI \-t type +Causes +.B dpkg\-shlibdeps +to prefer shared library dependency information tagged for the given +package type. If no tagged information is available, falls back to untagged +information. The default package type is "deb". Shared library dependency +information is tagged for a given type by prefixing it with the name of the +type, a colon, and whitespace. .SH dpkg\-GENCHANGES OPTIONS .B dpkg\-genchanges does not take any non-option arguments. Only in dpkg-1.13.9/scripts: debian diff -ur old/dpkg-1.13.9/scripts/dpkg-shlibdeps.pl dpkg-1.13.9/scripts/dpkg-shlibdeps.pl --- old/dpkg-1.13.9/scripts/dpkg-shlibdeps.pl 2005-06-06 00:07:12.000000000 -0400 +++ dpkg-1.13.9/scripts/dpkg-shlibdeps.pl 2005-06-25 11:36:45.000000000 -0400 @@ -17,6 +17,7 @@ $varnameprefix= 'shlibs'; $dependencyfield= 'Depends'; $varlistfile= 'debian/substvars'; +$packagetype= 'deb'; @depfields= qw(Suggests Recommends Depends Pre-Depends); @@ -42,6 +43,7 @@ -O print variable settings to stdout -L<localshlibsfile> shlibs override file, not debian/shlibs.local -T<varlistfile> update variables here, not debian/substvars + -t<type> set package type (default is deb) Dependency fields recognised are ".join("/",@depfields)." "; } @@ -66,6 +68,8 @@ &warn("unrecognised dependency field \`$dependencyfield'"); } elsif (m/^-e/) { push(@exec,$'); push(@execf,$dependencyfield); + } elsif (m/^-t/) { + $packagetype= $'; } elsif (m/^-/) { usageerr("unknown option \`$_'"); } else { @@ -237,33 +241,37 @@ while (<SLF>) { s/\s*\n$//; next if m/^\#/; - if (!m/^\s*(\S+)\s+(\S+)/) { + if (!m/^\s*(?:(\S+):\s+)?(\S+)\s+(\S+)/) { &warn("shared libs info file \`$fn' line $.: bad line \`$_'"); next; } - next if $1 ne $ln || $2 ne $lsn; + next if defined $1 && $1 ne $packagetype; + next if $2 ne $ln || $3 ne $lsn; return 1 if $fn eq "$curpackdir/DEBIAN/shlibs"; $da= $'; - for $dv (split(/,/,$da)) { - $dv =~ s/^\s+//; $dv =~ s/\s+$//; - if (defined($depstrength{$lf})) { - if (!defined($predefdepfdep{$dv}) || - $depstrength{$predefdepfdep{$dv}} < $depstrength{$lf}) { - $predefdepfdep{$dv}= $lf; - } - } else { - $dk= "$lf: $dv"; - if (!defined($unkdepfdone{$dk})) { - $unkdepfdone{$dk}= 1; - $unkdepf{$lf}.= ', ' if length($unkdepf{$lf}); - $unkdepf{$lf}.= $dv; - } + last if defined $1; # exact match, otherwise keep looking + } + close(SLF); + + return 0 unless defined $da; + + for $dv (split(/,/,$da)) { + $dv =~ s/^\s+//; $dv =~ s/\s+$//; + if (defined($depstrength{$lf})) { + if (!defined($predefdepfdep{$dv}) || + $depstrength{$predefdepfdep{$dv}} < $depstrength{$lf}) { + $predefdepfdep{$dv}= $lf; + } + } else { + $dk= "$lf: $dv"; + if (!defined($unkdepfdone{$dk})) { + $unkdepfdone{$dk}= 1; + $unkdepf{$lf}.= ', ' if length($unkdepf{$lf}); + $unkdepf{$lf}.= $dv; } } - return 1; } - close(SLF); - return 0; + return 1; } if (!$stdout) { -- see shy jo
Attachment:
signature.asc
Description: Digital signature