From: Frank Lichtenheld Date: Wed, 18 Jan 2006 13:59:22 +0000 (+0000) Subject: Add support "package types" to dpkg-shlibdeps. Patch by X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ac4c8e199c89af54acd786f0c1b16a238d5bf44;p=dpkg Add support "package types" to dpkg-shlibdeps. Patch by Joey Hess. Closes: #345475 * scripts/dpkg-shlibdeps: Add possibility to specify a package type in the shlibs file and add a -t switch to dpkg-shlibdeps to specify the wanted type. Entries without package type will have type 'deb' and will serve as fallback if no entry with the correct type is found * man/C/dpkg-source.1: Document new -t switch for dpkg-shlibdeps --- diff --git a/ChangeLog b/ChangeLog index b2317e0f..f3d53d01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2006-01-18 Joey Hess + + * scripts/dpkg-shlibdeps: Add possibility to + specify a package type in the shlibs file + and add a -t switch to dpkg-shlibdeps to + specify the wanted type. Entries without + package type will have type 'deb' and will + serve as fallback if no entry with the + correct type is found + * man/C/dpkg-source.1: Document new -t + switch for dpkg-shlibdeps + 2005-10-07 Frank Lichtenheld * scripts/controllib.pl: diff --git a/debian/changelog b/debian/changelog index af7bd97c..c295f425 100644 --- a/debian/changelog +++ b/debian/changelog @@ -20,6 +20,8 @@ dpkg (1.13.12~) unstable; urgency=low * Check for illegal architecture strings in dpkg-gencontrol and dpkg-source. dpkg-gencontrol will only issue a warning while dpkg-source will error out. Closes: #96920 + * Add support "package types" to dpkg-shlibdeps. Patch by + Joey Hess. Closes: #345475 -- diff --git a/man/C/dpkg-source.1 b/man/C/dpkg-source.1 index a3cefc20..663e2e74 100644 --- a/man/C/dpkg-source.1 +++ b/man/C/dpkg-source.1 @@ -516,7 +516,7 @@ are removed from the the substitution variables file. .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 @@ Causes the substitution variable settings to be printed to standard 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. diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl index 22ef4837..4d11562e 100755 --- a/scripts/dpkg-shlibdeps.pl +++ b/scripts/dpkg-shlibdeps.pl @@ -17,6 +17,7 @@ $shlibsppext= '.shlibs'; $varnameprefix= 'shlibs'; $dependencyfield= 'Depends'; $varlistfile= 'debian/substvars'; +$packagetype= 'deb'; @depfields= qw(Suggests Recommends Depends Pre-Depends); @@ -42,6 +43,7 @@ Overall options (have global effect no matter where placed): -O print variable settings to stdout -L shlibs override file, not debian/shlibs.local -T update variables here, not debian/substvars + -t set package type (default is deb) Dependency fields recognised are ".join("/",@depfields)." "; } @@ -66,6 +68,8 @@ while (@ARGV) { &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 @@ sub scanshlibsfile { while () { 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) {