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