]> err.no Git - dpkg/commitdiff
Add support "package types" to dpkg-shlibdeps. Patch by
authorFrank Lichtenheld <djpig@debian.org>
Wed, 18 Jan 2006 13:59:22 +0000 (13:59 +0000)
committerFrank Lichtenheld <djpig@debian.org>
Wed, 18 Jan 2006 13:59:22 +0000 (13:59 +0000)
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

ChangeLog
debian/changelog
man/C/dpkg-source.1
scripts/dpkg-shlibdeps.pl

index b2317e0fc9258c1ae3fc5836b377036905688fc2..f3d53d01ed52496164736dabd84191c818a16eac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-01-18  Joey Hess  <joeyh@debian.org>
+
+       * 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  <djpig@debian.org>
 
        * scripts/controllib.pl:
index af7bd97c7d44556139b50e4d0417969d0590adaf..c295f425b737902e420ae9bbc7b00d7f0fdb7326 100644 (file)
@@ -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
 
  --
 
index a3cefc206d4a4ed09342b9025aa6bba88eadc9d7..663e2e74cd1e1a9debaf1a2accc919d7a88c6079 100644 (file)
@@ -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.
index 22ef48370912bd1f5b5617d6f145e0dbdb1d0721..4d11562e930e9073195a13c584056d0d820a11ec 100755 (executable)
@@ -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<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 @@ 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 (<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) {